版权声明:本博客提供的内容均为作者原创文章,访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定。任何转载应保持来源完整性。(http://www.cnblogs.com/janas/ 与 http://blog.csdn.net/nofc2006 博客属同一作者)
软件开发模型(Software Development Model)是指软件开发中所有过程,活动,任务的结构框架,它能清晰,明确地表达软件开发全过程.对于不同的软件系统,可以采用不同的软件开发过程,方法,用不同的软件工具和软件工程环境,用不同的管理方法和手段来实现软件项目的跟踪和把控.通常来说,项目当中的常见活动有计划,需求,设计,编码,测试,维护等.
软件项目中应用生命周期主要是为了建立项目项目中各种活动的顺序,将项目各种活动划分成阶段,使项目流程化,便于项目更好地进行管理.比如说提高软件开发的速度,搞升软件的质量,把握项目的进度,减少成本,降低风险,改善与客户的关系,加强对项目的监控与管理等.
常见的开发模式有瀑布模型,快速原型模型,迭代模型,增量模型,喷泉模型,螺旋模型,V模型,智能模型等.各种开发模型各种有其特点,优点,缺点,实际应用场景.每种开发过程(模型)对生命周期的划分各不相同.
各种模型比较
模型 | 描述 | 优点 | 缺点 | 应用场景 |
瀑布模型 Waterfall Model | .过程划为计划,需求,设计,编码,测试,维护阶段 .各阶段自上而下,相互衔接固定次序,如同瀑布流水 .各阶段评审确认通过,前阶段输出是后阶段输入 .文档驱动(Document Driven) | .利于大型软件项目中人员的组织与管理 .利于开发方法工具的研究和使用 .提高大型项目中的高发效率与质量 | .呈线性,成果未经测试时,用户看不到结果,增加风险 .前阶段未发现的错误传到后阶段甚至扩散,可导致项目失败. .需求阶段,完全确定需求比较困难 | .大型软件项目 .需求明确 .需求很少变更 |
快速原型模型 Rapid Prototype Model | .快速建造初步非完整软件原型,实现客户与系统交互 .客户对原型评价,细化需求 .逐步调整原型满足要求,原型内部结构不重要 .原型驱动(Prototype Driven) | .确定客户真正需求,减少需求不明确 .更好和客户沟通,提高客户对软件满意度 .减少技术,应用风险,缩小成本,提高产品质量 | .需要尽可能尽快建造软件原型,可能会限制开发人员创新 .所选技术工具不一定符合主流 .原型快速建立的内部结构及连续修改可能致产品设计差 .客户确定真正需求,原型可能被弃 | .客户或领域专家不熟悉电脑/软件,软件人员不熟悉领域,沟通理解困难 |
迭代模型 Iterative Model | .包括产品发布中全部活动 .整个项目包括很多次迭代 .迭代一次都经过需求,设计,编码,测试,维护等阶段,并产生可发布产品版本,该版本是最终产品的子集 .需求驱动(Requirement Driven) | .降低增量上开支风险 .降低产品无法按既定进度进入市场风险 .加快整个开发进度 .适应了需求变更 | .较灵活,对管理要求较高,项目经理要有丰富的项目管理经验 .迭代次数,任务规划难把握,对项目策划要求较高 | .需求不明或变更频繁,用户不同程序参与 .高风险高难度项目 .OO语言,UML,Case工具 .高素质项目管理者和研发团队 |
增量模型 Incremental Model | .分阶段实现,软件增量设计,实现,集成,测试 .整个产品拆成多个构件,分次逐个构件交付可运行产品 .功能驱动(Function Driven) | .较好适应变化 .客户看到不断变化软件,降低开发风险 .鼓舞团队的士气 | .容易退化成边做边改,失去对软件过程的整体控制 .不破坏现有架构 .产品,架构不是开放的,维护难度加大 | .需求比较明确 .架构比较稳定,每次增量不影响架构 |
喷泉模型 Fountain Model | .以需求为动力,以对象为驱动,支持面向对象开发 .开发过程自下而上各阶段是相互迭代和无间隙 .对象驱动(Object Driven) | .各阶段无明显界限,开发人员可同步开发 .提高开发效率,节省开发时间 | .各阶段重叠,需大量开发人员 .不利于项目管理 .需严格管理文档及文档变更 | .适合面向对象开发 |
螺旋模型 Spiral Model | .分成计划,评估,设计实施,用户反馈四个象限 .沿着螺线进行若干次迭代 .关注风险,风险分析后决策项目是否继续 .风险驱动(Risk Driven) | .强调可选方案及约束条件支持软件重用 .助于提升软件质量 | .要求客户接受相信其风险分析,并作出反应不容易 .风险分析成本>项目利润,项目风险分析无意义 .要善于识别风险,且准确,否则将带来更大风险 | .大规模软件开发 .高风险项目 |
V模型,智能模型是上述模型的演化或者组合.