生命周期模型
软件生命周期是软件定义、软件开发、运行维护三个时期。 每个时期又分为若干阶段:
- 软件定义
- 问题定义
- 可行性研究
- 需求分析:问题识别、分析和综合、导出软件的逻辑模型、编写文档
- 软件开发
- 概要设计
- 详细设计
- 编码
- 测试
- 运行维护
- 软件维护: 矫正性维护、适应性维护、完善性维护、预防性维护
既然所有的开发模型都具有相同的开发周期,那不同的开发模型的差别从哪里体现呢?或者说不同的开发模型在指导开发过程中的差异点在哪里?
我理解的差别点主要体现在:
每个周期活动的工作上限 每个周期被重复的次数 周期活动被重复的时机 对软件开发活动的指导范围
瀑布模型
六大步:收集需求、分析、设计、编码、测试、维护
理想化模型,现实中不存在
V模型
rap application development 快速软件开发
需求分析
概要设计:主要是架构实现,搭建架构,表述各模块功能,模块接口连接,数据传递和实现
详细设计:对各模块进行深入分析,达到伪代码级别,已经把程序中的具体实现的功能现象描述出来,包含数据库设计说明。
软件编码
单元测试
集成测试
系统测试
验收测试
增量模型
增量模型将整个系统结构化的拆成几个增量(功能模块)-- 比如3个,每一个完整的周期完成一个增量,有几个增量就重复几个周期。
思想是先开发出一个初始的实现,给用户使用并听取用户的使用意见和建议,通过对多个版本的不断修改直到产生一个充分的系统。描述、开发和有效性验证等活动不是分离的而是交织在一起。同时让这些活动之间都能得到快速的反馈信息传递。
增量式开发反映了我们解决问题的方法,系统的每一个增量或版本包括用户需要的一部分功能。通常,系统的早期增量包括最重要或最紧急的功能需求。这就意味着在早期开发阶段,用户可以相对早地评估系统,看它是否满足需要。若不满足需要,就只需要改变当前的增量即可,又或许有新的功能被发现并为下个增量做准备,因此可以大幅度地减少成本。
增量式开发相比于瀑布模型的一些重要优点: 降低了适应用户需求变更的成本。重新分析和修改文档的工作量较之瀑布模型要少很多。
在开发过程中更容易得到用户对于已做的开发工作的反馈意见。用户可以评价软件的现实版本,并可以看到已经实现了多少。这比让用户从软件设计文档中判断工程进度要好很多。 使更快地交付和部署有用的软件到客户方变成了可能,虽然不是所有的功能都已经包含在内。相比于瀑布模型,用户可以更早地使用软件并创造商业价值。 从管理的角度看,增量式方法存在的问题: 过程不可见。管理者需要通过经常性的可交付文档来把握进度,若系统开发速度太快,要产生反映系统每个版本的文档就很不划算。
伴随着新的增量的添加,系统结构在逐渐退化。除非投入时间和金钱用在重构系统结构上以改善软件,否则定期的变更会损坏系统的结构。随着时间的推移,越往后变更系统越困难,而且成本也将逐渐上升。
螺旋模型
螺旋模型属于演化开发(也属于迭代开发)。螺旋模型结合了演化开发的迭代和瀑布模型的系统性和监控。最大的特点就是引入了其它模型不具备的风险分析。在每一个迭代里,当确定了目标、方案和限制条件以后,进入风险评估阶段(识别并消除风险)。如果有不确定的风险,则需要进一步工作以将所有风险都确定。风险过大甚至会终止项目。当风险识别完成并有确定的风险消除方案以后,就继续采用瀑布模型完成一次迭代开发。在多次迭代以后,达成所期望的戏疼。
喷泉模型
喷泉模型体现了软件开发的无边界性(每个阶段之间没有清晰的边界)和反复性。就像喷泉水喷出又落下。开发的阶段也是这样,可能从某个阶段回落到之前的任何一个阶段(比如,从测试回到需求获取)。PS:感觉像边改边做模型。
迭代开发: 第一个阶段就覆盖了项目整体范围,以后每个阶段都是在前一阶段的基础上改进、完善,没有业务范围的扩展。 迭代开发每一次都是在原有的基础上进行改进和完善。 迭代开发只是要求将开发分成多个迭代,并没有回答一个重要的问题:怎么划分迭代,哪个任务在这个迭代,哪个任务在下个迭代?这时,一般采用"增量开发"(incremental development)划分迭代。
所谓"增量开发",指的是软件的每个版本,都会新增一个用户可以感知的完整功能。也就是说,按照新增功能来划分迭代。