1.软件开发模型
软件开发模型规定了软件开发应遵循的步骤,是软件开发的导航图,它能够清晰、直观地表达软件开发的全过程,以及每个阶段要进行的活动和要完成的任务。开发人员在选择开发模型时,要根据软件的特点、开发人员的参与方式选择稳定可靠的开发模型。
2.瀑布模型
1970年Winston Royce提出,遵循从上至下一次性完成整个软件产品的开发方式。
计划-->需求分析-->设计-->编码-->测试-->运行维护
定义阶段:计划、需求分析
开发阶段:设计、编码、测试
维护阶段:运行维护
特点:
- 只有当一个阶段任务完成之后才能开始下一个阶段。
- 软件开发的每一个阶段都要有结果产出,结果经过审核验证之后作为下一个阶段的输入,下一个阶段才可以顺利进行。如果结果审核验证不通过,则需要返回修改。
- 有利于大型软件开发人员的组织管理及工具的使用与研究,可以提高开发的效率。
缺陷:
- 严格按照线性方式进行的,无法适应用户需求变更,增加了开发风险。
- 如果早期犯的错误在项目完成后才发现,此时再修改原来的错误需要付出巨大的代价。
- 要求每一个阶段必须有结果产出,增加了文档的数量,使软件开发的工作量变大。
注:对于现代软件来说,软件开发各阶段之间的关系大部分不会是线性的,很难使用瀑布模型开发软件,因此瀑布模型不再适合现代软件开发,已经被逐渐废弃。
3.快速原型模型
快速原型模型相对瀑布模型而言,更关注用户需求的正确性,也符合人们开发软件的习惯。它在最初确定用户需求时快速构造出一个可以运行的软件原型,这个软件原型向用户展示待开发软件的全部或部分功能和性能,客户对该原型进行审核评价,然后给出更具体的需求意见,这样逐步丰富细化需求,最后开发人员与客户达成最终共识,确定客户的真正需求。确定客户的真正需求之后,开始真正的软件开发。
需求分析-->构建原型-->原型评价-->确定最终需求-->软件开发
特点:
- 克服了需求不明确带来的风险,适用于不能预先确定需求的软件项目。
缺陷:
- 准确地设计出软件原型存在一定的难度;
- 这种开发模型也不利于开发人员对产品进行扩展。
4.迭代模型
迭代模型又称为增量模型或演化模型,它将一个完整的软件拆分成不同的组件,然后逐个组件地开发测试,每完成一个组件就展现给客户,让客户确认这一部件功能和性能是否达到客户需求,最终确定无误,将组件集成到软件体系结构中。整个开发工作被组织为一系列短期、简单的小项目,称为一系列迭代,每一个迭代都需要经过需求分析→软件设计→编码→测试的过程。
特点:
- 第一个迭代(即第一个组件)往往是软件基本需求的核心部分;
- 迭代模型可以很好地适应客户需求变更,降低了软件开发的成本与风险;
缺陷:
- 可能会有集成失败的风险,因此要求软件必须有开放式的体系结构;
- 迭代模型逐个组件地开发修改,很容易退化为“边做边改”的开发形式,从而失去对软件开发过程的整体控制。