基本的软件工程活动有哪些?
软件规格说明、软件开发、软件确认和软件演化
“软件规格说明、软件开发、软件确认和软件演化”——实际上是软件工程生命周期的核心阶段,构成了一个从概念到维护的完整闭环。
这四个活动通常与经典的瀑布模型紧密相关,但思想也贯穿于其他现代开发模型中。下面我将对每个阶段进行详细解释,并说明它们之间的关系。
1. 软件规格说明
这个阶段也称为需求工程或系统分析。其核心目标是弄清楚“做什么”。
- 主要活动:
- 需求获取:与客户、用户、利益相关者沟通,收集原始需求、期望和约束。
- 需求分析与协商:澄清模糊需求,解决需求之间的冲突,排定优先级。
- 需求规格化:将分析后的需求以清晰、无歧义、结构化的方式文档化。产出通常是软件需求规格说明书。
- 需求验证:检查SRS是否完整、一致、可测试且符合实际。
- 关键产出:软件需求规格说明书,它是后续所有活动的基石和合同依据。
- 核心问题:系统应该提供哪些功能和性能?必须满足哪些约束?
2. 软件开发
这个阶段也称为设计与实现。其核心目标是回答“怎么做”,并产出可运行的代码。
- 主要活动:
- 系统设计:定义系统的总体架构,包括子系统划分、硬件/软件组件、数据存储策略、全局控制流等。
- 详细设计:细化每个模块或组件的内部结构,定义具体的数据结构、算法、接口细节等。
- 编码/实现:根据详细设计,使用选定的编程语言编写源代码。这是将设计转化为实际可执行程序的过程。
- 关键产出:设计文档(架构设计、详细设计)、源代码、可执行的程序单元。
- 核心问题:系统的结构如何组织?各个部分如何具体实现?
3. 软件确认
这个阶段通常称为软件测试或质量保证。其核心目标是验证“做得对不对”,即产品是否符合规格说明和用户期望。
- 主要活动:
- 验证与确认:
- 验证: “我们是否在正确地构建产品?”(符合规格说明)
- 确认: “我们是否构建了正确的产品?”(满足用户真实需求)
- 测试活动:
- 单元测试:测试单个函数或模块。
- 集成测试:测试模块之间的接口和交互。
- 系统测试:测试整个系统是否符合需求规格。
- 验收测试:由用户/客户执行,确认系统是否满足其业务需求。
- 验证与确认:
- 关键产出:测试计划、测试用例、测试报告、缺陷跟踪记录、经过验证的可交付软件。
- 核心问题:软件是否没有错误?是否满足所有要求?是否适合使用?
4. 软件演化
这个阶段也称为软件维护。其核心目标是在软件交付后“持续改进和适应变化”。
- 主要活动:
- 更正性维护:修复在运行过程中发现的缺陷(Bug)。
- 适应性维护:使软件适应变化的外部环境(如新的操作系统、硬件、法律法规)。
- 完善性维护:根据用户反馈,增加新功能或改进现有性能。
- 预防性维护:修改软件以提高其未来的可维护性和可靠性。
- 关键特点:软件演化是一个周期性的过程。对一个系统的修改本身就是一个小的“规格-开发-确认”周期。
- 核心问题:如何应对变化的需求和环境?如何延长软件的生命周期和价值?
四者之间的关系与模型
- 线性顺序(瀑布模型):
这是最经典的关联方式:规格说明 -> 开发 -> 确认 -> 演化。前一阶段完成后,才能进入下一阶段。适用于需求明确、变化少的项目。 - 迭代与增量模型:
在现代敏捷开发中,这四个活动被压缩在一个个短的迭代周期(如2-4周的冲刺)中。每个迭代都包含一小部分需求的规格、开发、确认,并可能产生一个可增量的版本。演化则是通过持续不断的迭代来实现的。 - 反馈循环:
- 在确认阶段发现的问题,可能会反馈到开发甚至规格说明阶段进行修改。
- 演化本质上是对已发布系统启动一个新的、更小的“规格-开发-确认”周期。
总结表格
| 阶段 | 核心问题 | 主要活动 | 关键产出 |
|---|---|---|---|
| 软件规格说明 | 做什么? | 需求获取、分析、规格化、验证 | 软件需求规格说明书 |
| 软件开发 | 怎么做? | 系统设计、详细设计、编码 | 设计文档、源代码 |
| 软件确认 | 做得对吗? | 验证与确认、各级测试(单元、集成、系统、验收) | 测试工件、已验证的软件 |
| 软件演化 | 如何适应变化? | 更正性、适应性、完善性、预防性维护 | 新版本软件、持续的服务 |
这四个阶段共同构成了软件从诞生到成长、再到持续适应变化的完整生命历程,是软件工程学科的基础框架。