01软件的生命周期
软件的生命周期是指从软件产品的设想开始到软件不在使用而结束的时间。
软件的生命周期分为6个阶段,即需求分析、计划、设计、编码、测试、运行维护。
02瀑布模型
瀑布模型是最早出现的软件开发模型,是所有其他软件开发模型的基础框架。与软件的生命周期不同的是,它缺少了软件运行维护阶段。
描述:每个阶段都只执行一次,因此是线性顺序的软件开发模型。
正是由于每个阶段只执行一次,所以前面的需求分析和设计尤为重要。
优点:
-
为项目提供了按阶段划分的检查点,强调开发的阶段性。
-
强调早期的计划及需求调查。
-
强调产品测试。
缺点:
-
在各个阶段之间极少有反馈。
-
只有在项目周期的后期才能看到结果,所以风险往往至后期的测试阶段才显露,因此失去了及早的纠正过程。
-
单一流程,开发中的经验教训不能反馈应用于本产品的过程。
适用项目:需求比较明确且变更很少的项目。
03螺旋模型
一般在软件开发初期阶段需求不是很明确时,采用渐进式的开发模型。螺旋模型是渐进式开发模型的代表之一。
描述:以原型为基础沿螺线旋转、每转一圈都经过计划/风险分析/实施/评估等过程且得到相应新版本、经过若干次螺旋上升得到最终版本。
螺旋模型沿着螺旋线进行若干次迭代,图中的四个象限代表了一下活动:
(1)制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;
(2)风险分析:分析评估所选方案,考虑如何识别和清楚风险;
(3)实施工程:实施软件开发和验证;
(4)客户评估:评价开发工作,提出修正建议,制定下一步计划。
迭代开发的模式给软件测试带来了新的要求,它不允许有一段独立的测试时间和阶段,测试必须跟着开发的迭代而迭代,所以回归测试的很重要。
优点:
-
强调严格的风险分析,但要求许多客户接受和相信这种分析,并做出相关反应是不容易的,因此,这种模型往往适用于规模庞大,风险大的项目。
-
强调各个开发阶段的质量。
-
这种的开发模式会提供机会探讨项目是否有价值继续下去。
缺点:
-
由于引入了非常严格的风险识别、风险分析和风险控制,将会大大消耗人力、资源,如果严重的影响了项目的利润,风险分析将毫无意义。
-
软件开发人员应该擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险。
-
软件建设周期长,但软件技术发展比较快,所以可能会和当前的技术水平有较大的的差距,无法满足当前用户需求。
适用项目:对新近开发,需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更。
04迭代模型
开发迭代是一次完整地经过所有工作流程的过程:(至少包括)需求工作流程、分析设计工作流程、实施工作流程和测试工作流程。实质上,迭代模型是类似小型的瀑布式项目。
每一个迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集。
描述:
-
一次迭代过程包括了所有软件开发流程。
-
每一次迭代均产生一个可发布的产品。
-
该产品为最终产品的一个子集。
适用项目: 适合于事先不能完整定义产品的所有需求,计划多期开发的项目。
05增量模型
描述:
-
采用随时间进展而交错的线性序列。
-
每个序列产生一个可发布的增量。
-
每一个增量产生一个可操作的产品。
-
第一个增量是核心产品。
优点: 开始时不用投入大量人力资源,可以事先推出核心产品以稳定用户,可以有计划的管理技术风险。
缺点: 需要开放式体系结构,可能会产生设计效果差、开发效率低的情况。
适合项目: 需求经常发生改变的软件开发过程。
增量和迭代模型的区别:
增量是逐块建造的概念,例如:画一幅人物画,我们可以先画人的头部,再画身体,再画手脚……。
迭代是反复求精的概念,例如:同样是画人物画,我们可以先画整体轮廓,在勾勒出基本雏形,再细化、着色……。
06敏捷模型
描述: 敏捷模型是一种轻量、高效、低风险、更强调团队协作和沟通的开发方式,适合于中小型开发团队,客户需求模糊或多变。
特点:
-
强调人与人之间的沟通。
-
轻文档(弱化文档,但不是不需要文档)
-
客户需要全程参与
-
需求可以的变化