软件开发策略之软件开发过程及模型

什么是软件过程模型?

软件过程是软件开发与维护的工作流程和工艺流程,是软件工程的重要组成部分。软件过程指软件生存周期中所涉及的一系列相关过程。过程是活动的集合,活动是任务的集合,任务是把输入转换为输出的操作。软件过程是动态的,它动态地产生、推进(执行),动态地消亡。软件过程模型是对软件过程静态的、抽象的描述,是软件过程执行的依据。

软件开发过程指软件生存周期中所涉及的一系列相关过程。过程是活动的集合,活动是任务的集合,任务是那输入转换为输出的操作。


软件开发模型

软件开发模型:描述阶段如何组合到一起,是软件开发活动以及它们之间关系的结构框架。

软件开发模型种类:

  • 瀑布模型
  • 原型模型与快速开发模型
  • 螺旋模型
  • 增量模型
  • V字模型
  • W模型
  • X模型
  • H模型
  • 喷泉模型
  • XP开发模型等等

瀑布模型

瀑布模型三个特征:

  • 项目分解为独立的不同阶段;
  • 阶段之间具有顺序性和依赖性,每个阶段通过预先定义的输出与下一个阶段发生联系;
  • 如果发现问题,则返回到上一阶段,一次跳一个阶段,直到在某个较小阶段改正该错误。

瀑布模型优点:

  • 简单
  • 易于组织,易于管理
  • 质量保证

瀑布模型不足:

  • 缺乏灵活性,不能适应用户需求的改变
  • 开发阶段的小错误被逐级放大,可能导致软件产品报废
  • 返回上一级的开发需要十分昂贵的代价
  • 随着软件规模和复杂性的增加,对于需求不能完全确定的软件开发项目将产生很大的风险。

瀑布模型通常使用的场合:

  • 需求分析做的比较好的系统
  • 二次开发的系统

原型开发模型

原型模型包括以下活动:

  • 软件开发组织与客户交互,理解客户的需求;
  • 软件开发组织生成原型,展示最终软件系统的外观。这个原型拥有可以说明输入屏幕和输出报告外观的模型,此外还有一些能够说明功能的机制,以演示工作流和处理逻辑。
  • 客户和软件开发组织不断评审该原型,以便在项目一开始就不断获取客户的反馈。
  • 软件开发组织以客户反馈和所生成的原型为基础,生成系统需求规格说明文档。
  • 生成SRS文档(软件需求说明书)后可以丢弃所有生成的原型;
  • 将SRS文档用作进一步设计和开发的基础。

原型模型特点:

  • 原型模型在需求获取阶段就通过不断地用户交互产生原型;
  • 使用原型导出系统需求规格说明,并可能在完成SRS后丢弃原型;
  • 在用户接受SRS后,选择合适的生存周期模型构建实际产品。

原型模型与快速原型模型认识到并解决以下问题:

  • 尽早和频繁的用户反馈更有可能使软件产品满足客户需求;
  • 变更时不可避免的,软件开发过程必须能够对自身进行改变以应对快速变化。

快速原型模型优点:

  • 有助于获取用户需求,加强对需求的理解
  • 尽早发现软件中的错误
  • 支持软件的动态变化

快速原型模型不足:

  • 不能支持风险分析
  • 开发者为了使一个原型快速运行起开,往往在实现过程中采用折中的手段。软件系统的组成部分可能会打折扣。

快速模型一般使用场合:

  • 开发者在不了解的应用领域开发
  • 客户不清楚其所开发软件项目的最终目标

螺旋模型

螺旋模型基本思想:

  • 迭代地进行
  • 需求获取、设计、编码和测试活动之间会有大量重叠
  • 如果给定需求的任何阶段出现缺陷,会使该需求返回到前面的阶段
  • 开发人员能够在任何时候演示当时产品所具有的功能,还可以向客户提供增量版本以得到认可
  • 可以降低在项目后期发现量大缺陷的风险

螺旋模型优点:

  • 有助于获取用户需求,加强对需求的理解
  • 尽早发现软件中的错误
  • 支持需求的动态变化
  • 支持风险分析,可降低或消除软件开发的风险
  • 适合于需求动态变化,实现难以确定并且开发风险较大的系统

螺旋模型一般使用场合:

  • 需求不能完全确定,同时又存在技术、资金或开发时间等风险因素的大型开发项目

V字模型

V字模型三个重要结论:

  • 活动更加并行化,可减少生存周期结束进行测试所需的时间
  • 通过事先为每种活动设计测试,实际上是在进行更好的事先确认同样可以降低最后一刻暴露严重问题的风险。
  • 测试由具有合适技能的人员进行设计

V字模型优点:

  • 在验证和确认上具有很大优势

W模型

W模型强调:测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、功能和设计同样要测试。

W模型优点:

  • 在V字模型的基础上,增加了开发阶段的同步测试,形成W模型;
  • 测试与开发同步进行,有利于尽早的发现问题。

W模型局限性:

扔把开发活动看成是从需求开始到编码结束的串行活动,只有上一阶段完成后,才可以开始下一阶段的活动,不能支持迭代,自发性以及变更调整。

猜你喜欢

转载自blog.csdn.net/python_jeff/article/details/87370844