软件过程模型
软件过程的基本概念
核心概念
- 软件过程 ≠ 软件工程(过程是框架,工程包含技术方法与工具)
- 软件过程:创建高质量软件所需的活动、动作和任务的框架
- 过程的重要性:提高可控性、组织性、稳定性
- 软件过程是可迭代的、社会化的学习过程
通用过程模型
通用模型的构成
五大框架活动
框架活动
框架活动:是通用过程模型的核心,共包含 5 种,分别为沟通、策划、建模、构建、部署。每个框架活动由一系列软件工程动作构成,而软件工程动作又由任务集定义。
任务集的定义
任务集
任务集的内容:明确规定了将要完成的工作任务、将要产生的工作产品、所需要的质量保证点以及表明过程状态的里程碑。
任务集的适配
普适性活动
普适性活动:贯穿于软件过程始终,包括项目跟踪控制、风险管理、质量保证、配置管理、技术评审等活动,保障软件过程有序推进。
过程流的种类
过程流描述了框架中活动、动作和任务在执行顺序和时间上的组织方式,主要有 4 种类型:
- 线性过程流:活动按沟通→策划→建模→构建→部署的顺序线性推进。
- 迭代过程流:活动会重复执行,在迭代中不断完善内容。
- 演化过程流:随时间和需求变化,活动逐步演化,常伴随增量交付。
- 并行过程流:部分活动可同时进行,提高开发效率。
经典过程模型
瀑布模型
核心思想
将软件开发划分为分析、设计、编码、测试等阶段,按顺序线性进行,上一阶段输出为下一阶段输入,每个阶段均有里程碑和提交物。
变体
V 模型,各开发阶段与测试阶段对应(需求建模 - 验收测试、体系结构设计 - 系统测试、构件设计 - 集成测试、代码生成 - 单元测试)。
优缺点对比
| 优点 | 缺点 |
|---|---|
| 1. 简单、易懂、易用 2. 提供阶段检查点,项目管理规范 3. 各阶段需提供文档,且产品需正式严格技术审查 |
1. 实际项目难遵循顺序 2. 客户难清晰描述所有需求 3. 项目尾声才得可执行程序 4. 评审可运行程序前难检测重大错误 |
适用场合
需求相当稳定、客户需求被全面了解、开发团队熟悉应用领域、外部环境不可控因素少的小型清晰项目或长周期项目。
原型开发过程模型
模型流程
沟通(定义整体目标、明确一致需求)→快速策划→快速建模设计(集中于用户可见方面)→构建部署原型→评估反馈→精炼需求(迭代进行)。
使用方法
方法一
原型系统不断调整,逐步明确用户需求。
方法二
作为需求分析工具,明确需求后抛弃原型系统。
优缺点对比
| 优点 | 缺点 |
|---|---|
| 1. 快速开发可演示系统,便于沟通 2. 采用迭代技术,逐步弄清客户需求 |
1. 为快速完成原型,忽略整体软件质量和长期可维护性 2. 系统结构通常较差 3. 用户可能混淆原型系统和最终系统,原型可能被直接交付 |
螺旋模型
特点
是演进式过程模型,结合原型系统迭代性质和瀑布模型可控性、系统性,风险驱动,将软件开发为一系列演进版本(早期为理论模型或原型,后继为逐渐完整的软件版本)。
流程
将软件开发分割为一系列框架活动(每个活动为螺旋上一个片段),从圆心开始顺时针执行,每圈活动包括沟通、策划(项目估算、进度计划、项目跟踪)、风险分析、建模(分析、设计)、构建(编码、测试)、部署(交付、支持),并标记里程碑确保利益相关者认可。
优缺点对比
| 优点 | 缺点 |
|---|---|
| 1.结合原型迭代与瀑布系统可控性 2.循环加深系统定义和实现深度,降低风险 3.有里程碑保障方案可行 4.始终可操作至软件生命周期结束 5.支持现有软件复用 |
1.原型开发等演化过程因周期数目不确定,给项目策划带来困难 2.未确定演进最快速度,过快致混乱,过慢影响生产率 3.侧重灵活性和可扩展性,非高质量,追求高质量可能推迟 |
优势与挑战
优势:解决软件持续改变、短期限实现变更、及时投入市场的需求(市场时间错过可能使项目无意义)。
挑战:软件开发团队及经理需在严格项目产品参数与客户满意度间找到合理平衡点。
统一过程(UP)
核心特征
建立迭代、增量的过程流,具备演进特征,包括迭代开发、需求管理(需求变化持续)、应用基于构件的架构(提高重用、独立、适应变化)、可视化软件建模(UML 消除歧义)、持续质量验证(迭代测试早发现问题)、控制软件变更。
阶段划分
共 4 个阶段,分别为起始(inception)、细化(elaboration)、构建(construction)、转换(transition),各阶段衔接推进,构建阶段会产生软件增量,转换阶段涉及软件交付与反馈。
各阶段主要工作产品
| 阶段 | 主要工作产品 |
|---|---|
| 起始阶段 | 愿景文档、初始用例模型、初始项目术语表、初始业务用例、初始风险评估、项目计划(阶段及迭代)、业务模型(如需)、一个或多个原型 |
| 细化阶段 | 用例模型、补充需求(含非功能需求)、分析模型、软件体系结构描述、可执行的体系结构原型、初步的设计模型、修订的风险列表、项目计划(含迭代计划、调整的工作流)、里程碑、技术工作产品、初始用户手册 |
| 构建阶段 | 设计模型、软件构件、集成的软件增量、测试计划及步骤、测试用例、支持文档、用户手册、安装手册、并发增量描述 |
| 转换阶段 | 提交的软件增量、Beta 测试报告、综合用户反馈 |
小结
| 模型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 瀑布 | 简单、易管理 | 不支持变更 | 需求明确、小型项目 |
| 原型 | 快速明确需求 | 结构差、易误用 | 需求不明确、用户参与强 |
| 螺旋 | 风险控制好 | 成本高、管理难 | 大型、复杂、高风险项目 |
| 统一过程 | 文档规范、适应变化 | 复杂、对团队要求高 | 中大型项目、需求变化频繁 |