1 何为软件过程模型

软件开发的特点

  • 基于智力的协作过程
  • 软件项目内在复杂性
  • 循序渐进的开发过程

软件过程:按照项目进度、各种需要、基于各种方法来开发、维护管理软件的一系列软件开发活动。分为技术活动和管理活动。

软件过程模型:对于软件开发的具体活动以及活动间的逻辑关系的定义。

2 有哪些软件过程模型

软件过程需要系统、规范性的软件过程模型来指导。

每个软件过程具有各自的特点和使用的场所。

瀑布模型

需求分析→概要设计→详细设计→编码实现→集成测试→确认测试

优点:

  • 简单、一目了然、易理解、掌握、应用、管理。
  • 适用于需求易于定义、不易变动

带回溯的瀑布模型

  • 优点:提高过程模型的灵活性,后期的问题可以灵活处理。
  • 缺点:软件开发处于动荡之中,只有实现所有功能才能生成 exe 文件。

增量模型

需求分析→概要设计→多个(详细设计→编码实现→集成测试)

优点:可增量式地实现软件功能,做到快速交付、减少并行开发,提高工作效率。

迭代模型

n 轮迭代,每次迭代都是一次完整的「需求分析→概要设计→详细设计→编码实现→软件测试」的过程。每次迭代完成部分可确定的软件需求。

每次迭代是一个完整是完整过程,适合需求难导出、不易确定且持续变动的软件。

迭代多少次不确定,管理较为复杂。

原型模型

采集和细化需求→快速设计→建造原型→客户使用评价原型→获得反馈→反复迭代

软件原型:包括用户界面和执行流程。

特点:软件原型是交流载体和媒介、用户可参与到软件开发

适合需求难导出、不易确定且持续变动的软件。

螺旋模型

集成迭代模型和原型模型

引入风险分析,风险驱动的过程模型

每个迭代四个阶段,若干活动

适合于需求不明确、开发风险高、开发过程中需求变更大的软件项目

不足:管理复杂

模型名称指导思想关注点适合软件管理难度
瀑布模型提供系统性指导与软件生命周期相一致需求变动不大、较为明确、可预先定义的应用
原型模型以原型为媒介指导用户的需求导出和评价需求获取、导出和确认理解需求难以表述清楚、不易导出和获取的应用
增量模型快速交付和并行开发软件详细设计、编码和测试的增量式完成需求变动不大、较为明确、可预先定义的应用
迭代模型多次迭代,每次仅针对部分明确软件需求分多次迭代来开发软件,每次仅关注部分需求需求变动大、难以一次性说清楚的应用中等
螺旋模型集成迭代模型和原型模型,引入风险分析软件计划制定和实施,软件风险管理,基于原型的迭代式开发开发风险大,需求难以确定的应用

3 如何选择软件过程模型

考虑因素:

  • 软件项目的特点:如业务是否明确、软件需求是否确定、是否经常变化
  • 软件开发团队的水平:避免无法掌控和驾驭过程模型
  • 各种模型的优缺点

4 敏捷开发方法

传统重型软件的特点:

  • 遵循严格的过程和计划,以预测性为主
  • 以文档为中心,需要对文档进行持续改进和评审,难以应对软件需求的变化
  • 等到开发后期才能得到可运行的软件,编码是开发的后期工作

敏捷开发方法:以代码为中心,快速轻巧主动应对需求变化,持续及时交付可运行的软件系统

  • 强化可运行的软件,弱化文档
  • 以适应变化为目的来推进开发
  • 以人为本,让方法、技术来使用人而不是反过来

敏捷开发的准则:

  • 尽早和持续地交付有价值的软件,首要标准
  • 欢迎用户需求的变化
  • 交付周期较短,从几周到几个月
  • 用户和开发人员一起工作
  • 面对面交谈、由积极主动的人来承担项目开发

具体敏捷开发的方法:

  • 极限编程:基于口头交流,持续快速反馈,用简单技术,具有重新开发的信心
  • 测试驱动开发:先确定和编写测试,再开发程序代码并测试
  • Scrum方法:通过增量或迭代的方式加强软件项目的管理,每个周期从软件产品功能需求订单库 Backblog,筛选优先软件需求,冲刺 Sprint 周期,共同开展 Scrum 评审