迭代在于我们明确的承认信息和知识的不完备性, 不可完备性. 而项目的成功, 需要某种程度的完备性.
这种认知的局限与成功的条件之间的矛盾, 促成了人们解决这类问题的通用方法: 渐进的试错法
试错法参考一: 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: 证伪主义应采用试错法。这是指人们应该大胆地提出假说和猜测,然后去寻找和这一假说不符合的事例。根据事例对假说进行修正,不断重复这一过程,乃至将最初的假说全盘否定。试错法对理论的修改和完善是没有止境的,试错法的结果只能是一个较好的假说,但不是最好的假说。最好的假说是终极真理的代名词,和科学精神相悖
试错法广泛的应用于自然科学领域. 迭代开发就是试错法在软件开发过程方面的应用
不完备的信息和知识, 至少包括以下几个方面:
-
客户真正的意图
-
客户业务真正的规则
-
客户项目所面临的约束
-
所采用解决方案的合理性
-
所采用技术架构的合理性
-
所采用技术的缺陷
-
不可预知的变化, 包括业务规则的变化, 以及外界环境的变化, 等等
我们只能针对当前对以上问题的理解, 给出一个初步的解决方案, 然后所有人, 包括客户和开发者, 根据这个方案的运行情况, 对方案进行批评, 提出其无法满足的约束或需求, 而回头重新修正这个方案. 如此循环往复, 直到某个可接受的错误水平. (对于上面最后一条, 迭代采用的是短周期来减少变化带来的浪费.)
迭代的核心就暂且止于此.
其它的一些问题, 都是目前的迭代实践所规定的一些额外性质造成的, 比如"固定的迭代周期", 引起的问题是: 时间盒迭代删减任务会不会导致完不成原定开发计划?
这个问题是从太极敏捷派的FAQ中摘录的. 对于这个问题, 太极敏捷的解释并没有触及如下迭代的本质:
-
迭代的开发方式中, "原定的开发计划"并不是不变的. 随着信息和知识的逐渐完备, 我们会相应的调整"原定的开发计划". (太极的解释提及了计划的不确定性: "计划,与计划的实际执行情况,是两个不同的概念。决心不同于现实。所以,我们说,跟踪、确保计划的执行比制定完美的计划更重要", 其后续的思路还在确保原定计划的实现, 而丝毫没有考率调整原定计划)
-
一如试错法的结果, 迭代的最终结果不必满足"原定的开发计划", 只要经的起客户的批判即可, 而敏捷开发有其它的手段来尽可能的保证这一点, 比如按照客户认可的规则安排开发的优先级, 这样即使最后没有完成全部特性, 但对客户来说优先级高的那些特性早就开始运行, 留下一些优先级低的特性甚至可以抛弃了. 太极敏捷居然连这一点都没有提及, 反映出其对敏捷/迭代开发的孤立理解.
另外的一些说法:
-
试错, 是为了获得反馈. 迭代过程中, 要不要做某事, 其中一个依据是需不需要那方面的反馈
-
迭代也为"回顾"提供了自然而然的机会. 试错过程中获得的信息需要总结整理归纳抽象, 学而时习之, 温故而知新
当然, 以上的论述建立在试错法之上. 如果这一理论并不适合软件开发, 那么上面的论述都是没有意义的. 那么我们就用试错法本身来检验一下其是否适合软件开发:
假定其适合, 理由是可以帮助解决以上提到的问题, 如渐进的搞清楚"客户真正的意图, 客户业务真正的规则, 客户项目所面临的约束, 所采用解决方案的合理性, 所采用技术架构的合理性, 所采用技术的缺陷"等, 那么请帮忙指出其不适用的地方, 或其本身带来的问题, 如果可能的话提出更好的解决方案.
分享到:
相关推荐
- Scrum是一种灵活的迭代开发框架,旨在通过短期的Sprint周期来快速响应变化,提高产品开发的透明度和适应性。 - 敏捷宣言强调个体和互动、可工作的软件、客户合作和响应变化的重要性,ScrumMaster应始终坚守这些...
- **RUP**:统一软件开发过程,强调迭代开发和适应性,适用于大型项目。 - **XP**:极限编程,注重快速反馈、简化过程和持续集成,适合小团队敏捷开发。 - **PSP**和**TSP**:个人软件过程和团队软件过程,帮助...
- **失败与成功**:微软的成功建立在多次尝试和失败之上,这与软件开发过程中的**迭代开发**和**敏捷方法**相似,通过试错找到最佳解决方案。 5. **科学发现的历史**: - **错误与进步**:历史上的科学家如哥白尼...
- **RUP**:统一软件开发过程,强调迭代和增量开发。 - **XP**:极限编程,提倡敏捷开发,强调快速反馈和团队合作。 - **PSP**:个人软件过程,帮助个体开发者提高生产力和质量。 - **TSP**:团队软件过程,关注...
7. **替代方案**:除了极限编程之外,还介绍了其他几种较为成熟的软件开发方法,如RUP(统一过程)、Scrum等,这些方法同样强调迭代开发和持续改进,但在风险管理、流程控制等方面提供了更为详尽的指导。 8. **结论...
在IT中,这代表了通过实验测试和原型开发来验证理论和假设,比如软件开发中的敏捷方法,强调快速迭代和实验验证。 3. **坚韧不拔的毅力:**伽利略晚年遭受迫害,但仍坚持科研,这反映了面对困难时的坚持和决心。在...
3. **快速迭代**:采用敏捷开发模式,根据市场反馈快速调整产品功能。 4. **跨部门协作**:加强研发、营销、销售等部门之间的沟通协作,确保信息流畅。 通过上述措施,华为有效地解决了营销过程中的多个关键问题,...
这些寓言故事不仅富含人生智慧,也与计算机科学中的敏捷开发、持续学习和适应性思维不谋而合。在计算机科学领域,我们应当借鉴这些故事,培养灵活解决问题的能力,以应对日新月异的技术挑战。 总结: 这三个寓言...
例如,软件开发中的敏捷方法就是基于这一理念,通过短周期的迭代,逐步完善产品,最终达到高质量的完成。 通过理解和运用这些哲学原理,IT行业能够更好地应对日新月异的技术变革,持续推动科技进步,为社会创造更大...
比如,采用敏捷开发方法论可以帮助团队更高效地管理项目周期,确保每个迭代都能按时交付。 5. **团队合作精神**:文章中提到的群演经历表明,成功往往需要团队的合作和支持。 - 在IT项目中,团队合作同样不可或缺...
在IT项目管理中,敏捷开发方法论强调的是快速迭代、及时调整方向,从而有效应对不确定性带来的挑战。 ### 3. 社会认知与技术伦理 #### 技术背景 随着技术的发展,社会对于新技术的认知也在不断变化。在某些情况下...
例如,软件开发中的“敏捷开发”理念就强调迭代和反馈,不断验证和调整开发方向,以适应变化的需求和环境。开发者提出的解决方案或设计,必须经过实践检验,才能确定其有效性。如果实际应用中发现问题,就需要进行...
3. **迭代优化流程**:采用敏捷开发方法,通过多次迭代不断完善产品功能,确保最终产出符合市场需求。 #### 三、缺乏系统化思考能力 碎片化思维是产品经理面临的另一个挑战。这意味着产品经理可能缺乏将各种要素...
同时,对于敏捷开发环境,测试人员还需要适应快速迭代和反馈循环,进行有效的测试计划和优先级排序。 此外,测试人员的沟通技巧不容忽视。他们需要与开发团队、项目经理和其他利益相关者有效交流,解释测试结果,...
微服务的优势在于,它能够促进敏捷开发和复杂企业应用的快速交付。每个服务都聚焦于特定业务能力,允许团队独立开发、测试和部署,降低了整体系统的耦合度。这样,团队可以更高效地工作,提高迭代速度,并降低故障...