1 何为软件过程模型
软件开发的特点:
- 基于智力的协作过程
- 软件项目内在复杂性
- 循序渐进的开发过程
软件过程:按照项目进度、各种需要、基于各种方法来开发、维护管理软件的一系列软件开发活动。分为技术活动和管理活动。
软件过程模型:对于软件开发的具体活动以及活动间的逻辑关系的定义。
2 有哪些软件过程模型
软件过程需要系统、规范性的软件过程模型来指导。
每个软件过程具有各自的特点和使用的场所。
瀑布模型
需求分析→概要设计→详细设计→编码实现→集成测试→确认测试
优点:
- 简单、一目了然、易理解、掌握、应用、管理。
- 适用于需求易于定义、不易变动
带回溯的瀑布模型:
- 优点:提高过程模型的灵活性,后期的问题可以灵活处理。
- 缺点:软件开发处于动荡之中,只有实现所有功能才能生成 exe 文件。
增量模型
需求分析→概要设计→多个(详细设计→编码实现→集成测试)
优点:可增量式地实现软件功能,做到快速交付、减少并行开发,提高工作效率。
迭代模型
n 轮迭代,每次迭代都是一次完整的「需求分析→概要设计→详细设计→编码实现→软件测试」的过程。每次迭代完成部分可确定的软件需求。
每次迭代是一个完整是完整过程,适合需求难导出、不易确定且持续变动的软件。
迭代多少次不确定,管理较为复杂。
原型模型
采集和细化需求→快速设计→建造原型→客户使用评价原型→获得反馈→反复迭代
软件原型:包括用户界面和执行流程。
特点:软件原型是交流载体和媒介、用户可参与到软件开发
适合需求难导出、不易确定且持续变动的软件。
螺旋模型

集成迭代模型和原型模型
引入风险分析,风险驱动的过程模型
每个迭代四个阶段,若干活动
适合于需求不明确、开发风险高、开发过程中需求变更大的软件项目
不足:管理复杂
| 模型名称 | 指导思想 | 关注点 | 适合软件 | 管理难度 |
|---|---|---|---|---|
| 瀑布模型 | 提供系统性指导 | 与软件生命周期相一致 | 需求变动不大、较为明确、可预先定义的应用 | 易 |
| 原型模型 | 以原型为媒介指导用户的需求导出和评价 | 需求获取、导出和确认 | 理解需求难以表述清楚、不易导出和获取的应用 | 易 |
| 增量模型 | 快速交付和并行开发 | 软件详细设计、编码和测试的增量式完成 | 需求变动不大、较为明确、可预先定义的应用 | 易 |
| 迭代模型 | 多次迭代,每次仅针对部分明确软件需求 | 分多次迭代来开发软件,每次仅关注部分需求 | 需求变动大、难以一次性说清楚的应用 | 中等 |
| 螺旋模型 | 集成迭代模型和原型模型,引入风险分析 | 软件计划制定和实施,软件风险管理,基于原型的迭代式开发 | 开发风险大,需求难以确定的应用 | 难 |
3 如何选择软件过程模型
考虑因素:
- 软件项目的特点:如业务是否明确、软件需求是否确定、是否经常变化
- 软件开发团队的水平:避免无法掌控和驾驭过程模型
- 各种模型的优缺点
4 敏捷开发方法
传统重型软件的特点:
- 遵循严格的过程和计划,以预测性为主
- 以文档为中心,需要对文档进行持续改进和评审,难以应对软件需求的变化
- 等到开发后期才能得到可运行的软件,编码是开发的后期工作
敏捷开发方法:以代码为中心,快速轻巧主动应对需求变化,持续及时交付可运行的软件系统
- 强化可运行的软件,弱化文档
- 以适应变化为目的来推进开发
- 以人为本,让方法、技术来使用人而不是反过来
敏捷开发的准则:
- 尽早和持续地交付有价值的软件,首要标准
- 欢迎用户需求的变化
- 交付周期较短,从几周到几个月
- 用户和开发人员一起工作
- 面对面交谈、由积极主动的人来承担项目开发
具体敏捷开发的方法:
- 极限编程:基于口头交流,持续快速反馈,用简单技术,具有重新开发的信心
- 测试驱动开发:先确定和编写测试,再开发程序代码并测试
- Scrum方法:通过增量或迭代的方式加强软件项目的管理,每个周期从软件产品功能需求订单库 Backblog,筛选优先软件需求,冲刺 Sprint 周期,共同开展 Scrum 评审