一、演化模型
软件类似于其他复杂的系统,会随着时间的推移而演化。在开发过程中,常常会面临以下情形:商业和产品需求经常发生变化,直接导致最终产品难以实现;严格的交付时间使得开发团队不可能圆满地完成软件产品,但是必须交付功能有限的版本以应对竞争或商业压力;很好地理解了核心产品和系统需求,但是产品或系统扩展的细节问题却没有定义。在上述情况和类似情况下,软件开发人员需要一种专门应对不断演变的软件产品的过程模型。
演化模型是迭代的过程模型,使得软件开发人员能够逐步开发出更完整的软件版本。演化模型特别适用于对软件需求缺乏准确认识的情况。典型的演化模型有:原型模型和螺旋模型等。
1-1、原型模型
1、定义
并非所有的需求都能够预先定义,大量的实践表明,在开发初期很难得到一个完整的、准确的需求规格说明。这主要是由于客户往往不能准确地表达对未来系统的全面要求,开发者对要解决的应用问题模糊不清,以至于形成的需求规格说明常常是不完整的、不准确的,有时甚至是有歧义的。
此外,在整个开发过程中,用户可能会产生新的要求,导致需求的变更。
而瀑布模型难以适应这种需求的不确定性和变化,于是出现了快速原型(Rapid Prototype)这种新的开发方法。
原型方法比较适合于用户需求不清、需求经常变化的情况。当系统规模不是很大也不太复杂时,采用该方法比较好。
原型是预期系统的一个可执行版本,反映了系统性质的一个选定的子集。一个原型不必满足目标软件的所有约束,其目的是能快速、低成本地构建原型。当然,能够采用原型方法是因为开发工具的快速发展,使得能够迅速地开发出一个让用户看得见、摸得着的系统框架。这样,对于计算机不是很悉的用户就可以根据这个框架提出自己的需求。开发原型系统首先确定用户需求,开发初始原型,然后求用户对初始原型的改进意见,并根据意见修改原型。原型模型如图所示。
原型模型开始于沟通,其目的是定义软件的总体目标,标识需求,然后快速制订原型开发的计划,确定原型的目标和范围,采用快速射击的方式对其进行建模,并构建原型。被开发的原型应交付给客户使用,并收集客户的反馈意见,这些反馈意见可在下一轮中对原型进行改进。在前一个原型需要改进,或者需要扩展其范围的时候,进入下一轮原型的迭代开发。
2、真题
真题1:
瀑布模型:需求明确;
真题2:
真题3:
螺旋模型:大规模的项目,风险分析。
1-2、螺旋模型
1、定义
对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型和演化模型结合起来,加入了两种模型均忽略的风险分析,弥补了这两种模型的不足。
螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符合,如图所示。
每个螺旋周期分为如下 4 个工作步骤:
(1) 制订计划。确定软件的目标,选定实施方案,明确项目开发的限制条件。
(2) 风险分析。分析所选的方案,识别风险,消除风险。
(3) 实施工程。实施软件开发,验证阶段性产品。
(4) 用户评估。评价开发工作,提出修正建议,建立下一个周期的开发计划。
螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,从而做出应有的反应。因此,该模型特别适用于庞大、复杂并且具有高风险的系统。
与瀑布模型相比,螺旋模型支持用户需求的动态变化,为用户参与软件开发的所有关键决策提供了方便,有助于提高软件的适应能力,并且为项目管理人员及时调整管理决策提供了便利,从而降低了软件开发的风险。在使用螺旋模型进行软件开发时,需要开发人员具有相当丰富的风险评估经验和专门知识。
另外,过多的迭代次数会增加开发成本,延迟提本时间。
2、真题
真题1:
瀑布:需求明确,变更少;
原型:用户需求不是很明确,变更多;
增量:短时间内快速的开发一个可以直接运行的产品。
螺旋模型:风险分析。
真题2:
真题3:
1-3、喷泉模型
1、定义
喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。
它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。
支持软件重用、多项开发活动集成
喷泉模型使开发过程具有迭代性和无间隙性,如图所示。
选代意味着模型中的开发活动常常需要重复多次,在迭代过程中不断地完善软件系统。
无间隙是指在开发活动(如分析、设计、编码) 之间不存在明显的边界,也就是说,它不像瀑布模型那样,在需求分析活动结束后才开始设计活动,在设计活动结束后才开始编码活动,而是允许各开发活动交叉、迭代地进行。
喷泉模型的各个阶段没有明显的界线,开发人员可以同步进行。其优点是可以提高软件项目的开发效率,节省开发时间。由于喷泉模型在各个开发阶段是重叠的,在开发过程中需要大量的开发人员,不利于项目的管理。此外,这种模型要求严格管理文档,使得审核的难度加大。
2、真题
真题1:
真题2:
真题3:
1-4、统一过程模型
1、定义
统一过程模型是一种“用例和风险驱动,以架构为中心,迭代并且增量”的开发过程,由UML 方法和工具支持。
迭代的意思是将整个软件开发项目划分为许多个小的“袖珍项目”,每个“袖珍项目”都包含正常软件项目的所有元素:计划、分析和设计、构造、集成和测试,以及内部和外部发布。
统一过程定义了 4 个技术阶段及其制品:
1)起始阶段
起始阶段专注于项目的初创活动。
2)精化阶段
精华阶段在理解了最初的领域范围之后进行需求分析和架构演进。
3)构建阶段
构建阶段关注系统的构建,产生实现模型。
4)移交阶段
移交阶段关注于软件提交方面的工作,产生软件增量。
在每个迭代中有 5 个核心工作流:捕获系统应该做什么的需求工作流,精化和结构化需求的分析工作流,在系统构架内实现需求的设计工作流,构造软件的实现工作流,验证实现是否如期望那样工作的测试工作流。
随着 UP 的阶段进展,每个核心工作流的工作量发生了变化。4 个技术阶段由主要里程碑所终止。
- 初始阶段:生命周期目标
- 精化阶段:生命周期架构
- 构建阶段:初始运作功能
- 移交阶段:产品发布。
统一过程的典型代表是 RUP。RUP 是 UP 的商业扩展,完全兼容 UP,但比 UP 更完整、更详细。
2、真题
真题1:
真题2:
真题3:
真题4:
真题5: