“迭代”的概念,迭代:是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法(Iterative Method)。
跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。
迭代式开发:迭代式开发也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。
“迭代过程”:是这样一个过程,涉及到对一连串可执行的发布的管理。
“增量过程”:是这样的过程,涉及到对体系结构的持续集成,以产生各种发布,每次新的发布都比上一次的发布有所改进和提高。可以说这种过程其实是以“风险驱动”的,这意味着每一次新的发布都致力于降低和处理对软件开发的最有影响的显著的风险。(风险管理:风险管理指对项目风险进行识别、分析、并采取应对措施的系统过程。它包括尽量扩大有利于项目目标事项发生的概率与后果,而尽量减小不利于项目目标事项发生的概率与后果。)
在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度的小项目,被称为一系列的迭代。每一次迭代都包括了需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。
软件开发生命周期:软件开发开发过程包括起始阶段、细化阶段、构造阶段和移交阶段,在每一个阶段中有需求、设计、编码和测试这四项活动。“阶段”是两个主要里程碑之间的时间跨度,在阶段中将达到一组明确的目标,产生一定的制品。并做出是否进入下一阶段的决策,如下图,在软件开发生命周期内 包括四个阶段:初始、细化、构造、移交。在图中按照这些阶段中工作流进行了划分,并显示了他们的焦点随时间的推移而变化的程度。
clip_p_w_picpath002
图:软件开发生命周期
初始:初始阶段的目标是在所有涉众之间达成关于项目的生命周期目标的协议。具有代表性的是,在项目进行之前必须确定重要的业务和需求风险。在此阶段萌发的开发想法经过培育至少要达到这样一个目标:至少在内部奠定一定的基础,以保证能够进入到细化阶段。
细化:是这个过程的第二个阶段。在此阶段定义产品需求和体系结构。明确系统需求,按其重要性排序并划定基线。每个需求都说明了特定的功能或非功能的行为,并为测试提供了基础。细化阶段的目标是为系统体系架构设定基础,用来为构建阶段的大多数设计和实现工作提供稳定的基础。细化阶段会描绘出一个将必要的业务需求结合了技术体系架构的可执行的系统,并论证所选技术方法的能力。该体系架构进化了对最重要的需求(哪些需求对系统的体系架构有很大的影响)的考虑和对风险的评估。生命周期体系架构里程碑为系统的体系架构建立了一个受控的基线。
构建:在这个阶段的要不断的对系统的的需求,特别是对系统的评价准则进行检查,并适当的分配资源,以主动的降低项目的风险;完成基于基本体系架构的系统的开发。构建阶段在某种意义上说是一个制造过程,在此阶段要强调对资源的管理控制,用来优化成本、进度和质量。在这个意义上说,管理团队经历着一个从初始和细化阶段的知识产权的开发到构建和产品化阶段的可部署产品的开发的变迁。
移交:在此阶段将软件移交给用户,在这个阶段开发过程很少能够结束,软件需要持续的改善,以实现在早期版本未实现的特性。移交阶段的重点是确保软件对最终用户是可用的。实际上是一个软件产品化的阶段,该阶段可以跨越若干次迭代,包括为发布而进行的产品测试,以及根据用户反馈做出的较小调整。在生命周期的这个阶段,产品版本里程碑是一个需要在此决定项目是否达到目标,及是否应该开始另一个开发循环的位置。从软件工程和项目管理的观点出发,随着迭代的进行,事情会逐日的发生。阶段由若干迭代组成 —— 照基本计划和评价标准的不同序列的活动会致使工件的发布(内部或外部的)。生命周期的每个阶段都由一系列迭代组成。
为什么需要“迭代”
一方面:给定的时间内,开发一个大型的复杂的软件系统,定义问题并构建解决方案是不可能一蹴而就的。在项目的开发过程中,由于体系结构方面的约束,客户的需要或对原始问题更精确的理解需要有一个过程,需求会经常地变更,因为客户对自己想要什么可能并没有一个明确的想法。
另一方面:没有人人够保证自己所做的软件是完美无缺的,因此很多时候我们必须对已经开发的部分进行修正,而修正就需要时间。传统的开发方式下,很多软件项目都是在匆忙交付后发现用户不满意,于是继续修正,再次引发用户的不满意,再次修正,在这样反复地拖延中,客户和软件开发商都筋疲力尽。
迭代式开发允许通过后续的细化产生对项目更好的理解,并在每个迭代的阶段,把项目的最高风险的事项作为最高优先级的任务集中精力解决。理想的,每一次迭代都以一个可执行的发布为结束,这样可以减少一个项目风险,更多地允许客户的交互并帮助开发人员集中精力。
我们需要迭×××发,是因为我们深知对事物的认知就是一个探索的过程,软件开发也是一样。