相对于顺序或“瀑布”软件开发模型,迭代和进化式开发(iterative and evolutionary development )对部分系统及早地引入了编程和测试,并重复这一循环。这种方式通常会还没有详细定义所有需求的情况下假设开发开始,同时使用反馈来明确和改进演化中的规格说明。
在迭代开发中,我们依赖于短时快速的开发步骤、反馈和改写来不断明确需求和设计。相比之下,瀑布模型提倡在编程之前就预先完成需求和设计步骤。一直以来,成功/失败的研究表明,瀑布模型和软件项目高失败率具有极大关系,对它的推广源于信念和风闻,而不是具有统计意义的证据。研究证实,迭代方法与较高的成功率、生产率和低缺陷率具有关系。
软件开发过程描述了构造、部署以及维护软件的方式。而统一过程(Unified Process, UP)是一种构造面向对象系统的迭代软件开发过程。
统一过程十分灵活和开放,鼓励引进其他迭代方法中的有用的实践,诸如极限编程(Extreme Programming, XP)、Scrum等。例如,可以在统一过程项目中引入极限编程的测试驱动开发(test-driven development)、重构(refactoring)和持续集成(continuous integration)等实践。同样,也可以引入Scrum的公共项目室(“作战室”)和Scrum日常会议等实践。
统一过程把普遍认可的最佳实践(如迭代生命周期和风险驱动开发)结合起来,成为联系紧密并具有良好同步文档的过程描述。
总体而言,统一过程是OOA/D时的一系列迭代过程,在软件开发过程中即拥抱变更又尊重未知(与传统瀑布模型相比),是一种“波浪式前进、螺旋式上升” “小步快跑”逐步向目标价值逼进的开发过程。经由行业证明是通用且公认的软件开发最佳实践。
迭代开发(iterative development)是统一过程和大多数其他现代方法中的关键实践。在这种生命周期方法中,开发被组织成一系统固定的短期小项目,称为迭代;每次迭代都产生经过测试、集成并可执行的局部系统;每次迭代都具有各自的需求分析、设计、实现和测试活动。
迭代生命周期基于对经过多次迭代的系统进行持续扩展和精化,并以循环反馈和调整为核心驱动力,使之最终成为适当的系统。随着时间和一次又一次迭代的递进,系统增量式地发展完善,因此这一方法也被称为迭代和增量式开发。
迭代的输出不是实验性的或将丢弃的原型,迭代开发也不是构造原型。与之相反,其输出是最终系统的产品子集。而每一次迭代又是上一次迭代基础之上的进化。
敏捷开发(agile development)方法通常应用时间定量的迭代和进化式开发、使用自适应计划、提倡增量交付并包含其他提倡其他敏捷性(快速和灵活的响应变更)的价值和实践。由于特定实践多种多样,因此不可能精确地定义敏捷方法。除进化式精化的计划、需求和设计的短时间定量迭代外,还倡导反映简易、轻量、沟通、自组织团队等更多敏捷性的实践和原则。
统一过程可以采纳和应用可适应性和轻量级的精神,从而变身敏捷统一过程。
1、推荐使用统一过程活动和制品的简集。
2、统一过程是迭代和不断进化的,所以在实现前的需求和设计是不完整的。它们是在一系列迭代中,基于反馈而产生的。
3、以敏捷建模实践应用UML
4、对于整个项目不应有详细的计划。仅估计结束日期和主要里程碑的高阶计划,但不对这些里程碑定义细粒度的步骤。详细计划由一次次迭代的调整而完成。
统一过程所倡导的核心思想是:短时间定量迭代、进化和可适应性开发。其他实践和概念包括:
UML和模式应用
Applying UML and Patterns
An Introduction to Object-Oriented Analysis and Design and Iterative Development
(美) Craig Larman 著 李洋 郑䶮 等译