`
qepwqnp
  • 浏览: 114833 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

敏捷质疑: 迭代开发

阅读更多

 

迭代在于我们明确的承认信息和知识的不完备性, 不可完备性. 而项目的成功, 需要某种程度的完备性.

这种认知的局限与成功的条件之间的矛盾, 促成了人们解决这类问题的通用方法: 渐进的试错法

 

试错法参考一: http://en.wikipedia.org/wiki/Trial_and_error.

试错法参考二: http://zh.wikipedia.org/wiki/%E8%AF%95%E9%94%99%E6%B3%95: 是解决问题、获得知识常用的方法,即根据已有经验,采取系统或随机的方式,去尝试各种可能的答案。当问题相对来说比较简单或范围比较有限时,试错的方法有一定效果。在试错的时候,可以选择一个可能的答案应用在待解问题上,如果没有效就选择另外一个可能的答案接着尝试。整个过程在出现一个合适的可能性时结束

试错法参考三: http://zh.wikipedia.org/wiki/%E5%8D%A1%E5%B0%94%C2%B7%E6%B3%A2%E6%99%AE%E5%B0%94#.E8.AF.81.E4.BC.AA.E5.8E.9F.E5.88.99: 证伪主义应采用试错法。这是指人们应该大胆地提出假说和猜测,然后去寻找和这一假说不符合的事例。根据事例对假说进行修正,不断重复这一过程,乃至将最初的假说全盘否定。试错法对理论的修改和完善是没有止境的,试错法的结果只能是一个较好的假说,但不是最好的假说。最好的假说是终极真理的代名词,和科学精神相悖

 

试错法广泛的应用于自然科学领域. 迭代开发就是试错法在软件开发过程方面的应用

 

不完备的信息和知识, 至少包括以下几个方面:

  1. 客户真正的意图

  2. 客户业务真正的规则

  3. 客户项目所面临的约束

  4. 所采用解决方案的合理性

  5. 所采用技术架构的合理性

  6. 所采用技术的缺陷

  7. 不可预知的变化, 包括业务规则的变化, 以及外界环境的变化, 等等

我们只能针对当前对以上问题的理解, 给出一个初步的解决方案, 然后所有人, 包括客户和开发者, 根据这个方案的运行情况, 对方案进行批评, 提出其无法满足的约束或需求, 而回头重新修正这个方案. 如此循环往复, 直到某个可接受的错误水平. (对于上面最后一条, 迭代采用的是短周期来减少变化带来的浪费.)

 

迭代的核心就暂且止于此.

 

其它的一些问题, 都是目前的迭代实践所规定的一些额外性质造成的, 比如"固定的迭代周期", 引起的问题是: 时间盒迭代删减任务会不会导致完不成原定开发计划?

这个问题是从太极敏捷派的FAQ中摘录的. 对于这个问题, 太极敏捷的解释并没有触及如下迭代的本质:

  1. 迭代的开发方式中, "原定的开发计划"并不是不变的. 随着信息和知识的逐渐完备, 我们会相应的调整"原定的开发计划". (太极的解释提及了计划的不确定性: "计划,与计划的实际执行情况,是两个不同的概念。决心不同于现实。所以,我们说,跟踪、确保计划的执行比制定完美的计划更重要", 其后续的思路还在确保原定计划的实现, 而丝毫没有考率调整原定计划)

  2. 一如试错法的结果, 迭代的最终结果不必满足"原定的开发计划", 只要经的起客户的批判即可, 而敏捷开发有其它的手段来尽可能的保证这一点, 比如按照客户认可的规则安排开发的优先级, 这样即使最后没有完成全部特性, 但对客户来说优先级高的那些特性早就开始运行, 留下一些优先级低的特性甚至可以抛弃了. 太极敏捷居然连这一点都没有提及, 反映出其对敏捷/迭代开发的孤立理解.

 

另外的一些说法:

  1. 试错, 是为了获得反馈. 迭代过程中, 要不要做某事, 其中一个依据是需不需要那方面的反馈

  2. 迭代也为"回顾"提供了自然而然的机会. 试错过程中获得的信息需要总结整理归纳抽象, 学而时习之, 温故而知新

 

当然, 以上的论述建立在试错法之上. 如果这一理论并不适合软件开发, 那么上面的论述都是没有意义的. 那么我们就用试错法本身来检验一下其是否适合软件开发:

假定其适合, 理由是可以帮助解决以上提到的问题, 如渐进的搞清楚"客户真正的意图, 客户业务真正的规则, 客户项目所面临的约束, 所采用解决方案的合理性, 所采用技术架构的合理性, 所采用技术的缺陷"等, 那么请帮忙指出其不适用的地方, 或其本身带来的问题, 如果可能的话提出更好的解决方案.

 

 

分享到:
评论

相关推荐

    2021年怎样做一名高效的SCRUMMASTER 管理资料.pdf

    - Scrum是一种灵活的迭代开发框架,旨在通过短期的Sprint周期来快速响应变化,提高产品开发的透明度和适应性。 - 敏捷宣言强调个体和互动、可工作的软件、客户合作和响应变化的重要性,ScrumMaster应始终坚守这些...

    软件测试面试问题-个人.docx

    - **RUP**:统一软件开发过程,强调迭代开发和适应性,适用于大型项目。 - **XP**:极限编程,注重快速反馈、简化过程和持续集成,适合小团队敏捷开发。 - **PSP**和**TSP**:个人软件过程和团队软件过程,帮助...

    GRE经典例子集-按领域分类[收集].pdf

    - **失败与成功**:微软的成功建立在多次尝试和失败之上,这与软件开发过程中的**迭代开发**和**敏捷方法**相似,通过试错找到最佳解决方案。 5. **科学发现的历史**: - **错误与进步**:历史上的科学家如哥白尼...

    应聘软件测试工程师常见的面试题.pdf

    - **RUP**:统一软件开发过程,强调迭代和增量开发。 - **XP**:极限编程,提倡敏捷开发,强调快速反馈和团队合作。 - **PSP**:个人软件过程,帮助个体开发者提高生产力和质量。 - **TSP**:团队软件过程,关注...

    ExtremeProgramming

    7. **替代方案**:除了极限编程之外,还介绍了其他几种较为成熟的软件开发方法,如RUP(统一过程)、Scrum等,这些方法同样强调迭代开发和持续改进,但在风险管理、流程控制等方面提供了更为详尽的指导。 8. **结论...

    全面发展立志成才.doc

    在IT中,这代表了通过实验测试和原型开发来验证理论和假设,比如软件开发中的敏捷方法,强调快速迭代和实验验证。 3. **坚韧不拔的毅力:**伽利略晚年遭受迫害,但仍坚持科研,这反映了面对困难时的坚持和决心。在...

    华为手机营销方法论IPMS和GTM高级培训课件(第一部分)glz.pptx

    3. **快速迭代**:采用敏捷开发模式,根据市场反馈快速调整产品功能。 4. **跨部门协作**:加强研发、营销、销售等部门之间的沟通协作,确保信息流畅。 通过上述措施,华为有效地解决了营销过程中的多个关键问题,...

    国学经典(六上)K11.pptx

    这些寓言故事不仅富含人生智慧,也与计算机科学中的敏捷开发、持续学习和适应性思维不谋而合。在计算机科学领域,我们应当借鉴这些故事,培养灵活解决问题的能力,以应对日新月异的技术挑战。 总结: 这三个寓言...

    哲学之四-----发展观.ppt

    例如,软件开发中的敏捷方法就是基于这一理念,通过短周期的迭代,逐步完善产品,最终达到高质量的完成。 通过理解和运用这些哲学原理,IT行业能够更好地应对日新月异的技术变革,持续推动科技进步,为社会创造更大...

    感悟青春国旗下的讲话演讲稿精选5篇.docx

    比如,采用敏捷开发方法论可以帮助团队更高效地管理项目周期,确保每个迭代都能按时交付。 5. **团队合作精神**:文章中提到的群演经历表明,成功往往需要团队的合作和支持。 - 在IT项目中,团队合作同样不可或缺...

    初一作文“傻子”的“妄想”.docx

    在IT项目管理中,敏捷开发方法论强调的是快速迭代、及时调整方向,从而有效应对不确定性带来的挑战。 ### 3. 社会认知与技术伦理 #### 技术背景 随着技术的发展,社会对于新技术的认知也在不断变化。在某些情况下...

    (同步精品课堂)2015-2016学年高中语文 专题13《阿房宫赋》(测)(提升版)新人教版选修《中国古代诗歌散文欣赏》

    例如,软件开发中的“敏捷开发”理念就强调迭代和反馈,不断验证和调整开发方向,以适应变化的需求和环境。开发者提出的解决方案或设计,必须经过实践检验,才能确定其有效性。如果实际应用中发现问题,就需要进行...

    产品经理,很容易走进的的几个误区

    3. **迭代优化流程**:采用敏捷开发方法,通过多次迭代不断完善产品功能,确保最终产出符合市场需求。 #### 三、缺乏系统化思考能力 碎片化思维是产品经理面临的另一个挑战。这意味着产品经理可能缺乏将各种要素...

    测试人员如何思考

    同时,对于敏捷开发环境,测试人员还需要适应快速迭代和反馈循环,进行有效的测试计划和优先级排序。 此外,测试人员的沟通技巧不容忽视。他们需要与开发团队、项目经理和其他利益相关者有效交流,解释测试结果,...

    微服务:从设计到部署(一)

    微服务的优势在于,它能够促进敏捷开发和复杂企业应用的快速交付。每个服务都聚焦于特定业务能力,允许团队独立开发、测试和部署,降低了整体系统的耦合度。这样,团队可以更高效地工作,提高迭代速度,并降低故障...

Global site tag (gtag.js) - Google Analytics