软件过程
瀑布模型:将软件生命周期的各项活动规定为依照固定顺序连接的若干阶段工作,最终得到软件产品
特点
①阶段间具有顺序性和依懒性
必须等前一阶段的工作完成之后,才能开始后一阶段的工作;
前一阶段的输出文档是后一阶段的输入文档
只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果
②推迟实现的观点
瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现。
清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一-条重要的指导思想。
③质量保证的观点
为了保证所开发的软件的质量,在瀑布模型的每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。
完整、准确的合格文档不仅是软件开发时期各类人员之间相互通信的媒介,也是运行时期对软件进行维护的重要依据。
越是早期阶段犯下的错误,暴露出来的时间就越晚,排除故障改正错误所需付出的代价也越高。
因此,及时审查,是保证软件质量、降低软件成本的重要措施。每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。
优点:
强迫开发人员使用规范的方法
严格规定了每个阶段提交的文档
要求每个阶段交出的产品都必须经过质量保证小组的验证
对文档的约束,使得软件维护变得容易一些,且能降低软件预算缺点
在软件开发初期就要求做出正确的,全面的,完整的需求分析对多数应用软件来说是很困难的
在需求分析阶段,在需求确定后,无法及时验证需求是否正确,完整
作为整体开发的瀑布模型,由于不支持产品演化,缺乏灵活性,对开发过程中很难发现的错误,只有在产品最终运行时才能发现
适用范围
用户的需求非常清晰全面,且在开发过程中没有或很少有变化
开发人员对软件的应用领域很熟悉
用户的使用环境非常稳定
开发工作对用户的参与要求很低
快速原型模型:快速建立可运行的程序,它完成的功能往往是最终产品功能的一个子集
原理:快速原型模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户通过实践来了解目标系统的概貌。通常,用户试用原型系统之后会提出许多修改意见,开发人员按照用户的意见快速地修改原型系统,然后再次请用户试用,一旦用户认为这个原型系统确实能做他们所需要的工作,开发人员便可据此书写规格说明文档,根据这份文档开发出的软件便可以满足用户的真实需求。
优点:
开发的软件通常满足用户需求
软件开发基本是线性过程
缺点
准确原型设计困难
原型理解可能不同
不利于开发人员创新
适用范围
对所开发的领域比较熟悉且与快速的原型开发工具
项目招投标时,可以以原型模型作为软件的开发模型
进行产品移植或升级时,或对已有产品原型进行客户化工作时
增量模型:先完成一个系统子集的开发,再按同样的开发步骤增加功能,如此递增下去直至满足全部系统需求
优点
短时间内可提交部分功能
逐渐增加产品功能,用户适应产品快以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统
缺点
增量构件划分及集成困难
容易退化成边做边改模型
适用范围
增量模型适用于那些需求变化频繁、开发周期较长、需要快速交付、项目规模大,需要不断迭代和更新的项目。在这种情况下,增量模型能够帮助开发团队更好地控制项目进度,降低开发风险,提高项目的成功率和用户满意度。
螺旋模型:在每个阶段之前都增加了风险分析过程的快速原型模型
适用范围
螺旋模型强调风险分析,但要求许多客户接受和相信这种分析,并做出相关反应是不容易的,因此,这种模型往往适应于内部的大规模软件开发
喷泉模型:典型的面向对象软件过程模型。体现了迭代和无缝的特性
优点
利于把软件质量作为软件的开发目标
减少测试
维护和开发不分开
缺点
风险估计困难
适用范围
适应于面向对象的软件开发过程。
敏捷开发是一种以人为核心,以迭代方式循序渐进开发的方法,其软件开发的过程称为“敏捷过程”
以代码为核心
以人为本、循环迭代、响应变化
适用范围
总的来说,敏捷过程适用于那些需要快速响应变化、强调迭代开发和持续反馈、需要灵活性和自组织团队等情况。