需求工程
理解需求的层次与分类,掌握需求工程过程(获取/分析/规格说明/验证/管理)、获取技术、SRS 文档与需求变更管理。
🎯学习目标
- 理解需求的概念与层次(业务/用户/系统);
- 掌握功能需求与非功能需求的区分;
- 掌握需求工程过程的五个活动;
- 熟悉常用需求获取技术与 SRS 文档结构;
- 理解需求验证确认与需求变更管理。
1什么是需求
需求(Requirement)是用户解决问题或达到目标所需的条件或能力,是系统为满足合同、标准、规约或其他正式文档所规定需求而必须具备的条件或能力。简单说:需求描述系统应该做什么(What),而非怎么做(How)。
💡 需求 ≠ 设计需求关注"做什么"(问题域);设计关注"怎么做"(解域)。需求阶段应避免过早陷入实现细节。
需求是后续设计、编码、测试与验收的基准。研究表明:需求阶段引入的缺陷若到后期才发现,修复成本会成倍甚至成百倍增长。
2需求的层次 ⭐(核心考点)
需求按抽象程度自顶向下可分为三个层次,常用需求金字塔表示:
图1 · 需求金字塔:业务需求 → 用户需求 → 系统需求(含功能与非功能)
| 层次 | 含义 | 视角/产物 |
|---|---|---|
| 业务需求 | 组织或客户对系统高层次的目标,说明"为什么要这个系统" | 项目愿景与范围文档 |
| 用户需求 | 从用户角度描述系统必须完成的任务,"用户能用它做什么" | 用户故事、用例、场景 |
| 系统需求 | 对系统功能、服务和约束的详尽描述,开发者据此实现 | 功能需求 + 非功能需求(写入 SRS) |
⭐ 用户需求 vs 系统需求用户需求是从客户和最终用户角度对系统的抽象描述(自然语言、图表,面向客户);系统需求是对系统功能的详尽描述(结构化、精确,面向开发者)。
3功能需求 vs 非功能需求 ⭐(核心考点)
⚙️
功能需求
Functional系统应提供的服务、对输入的响应、特定行为。"系统能做什么"。如:登录、下单、生成报表。
📐
非功能需求
Non-Functional对系统服务或功能的约束(质量属性)。"系统做得怎么样"。如:性能、安全、可靠、易用。
非功能需求的常见类别
| 类别 | 举例 |
|---|---|
| 性能需求 | 响应时间 ≤ 2s、并发用户数 ≥ 1000、吞吐量 |
| 可靠性需求 | 平均无故障时间 MTBF、可用性 99.9% |
| 安全性需求 | 身份认证、访问控制、数据加密 |
| 易用性需求 | 新用户 10 分钟内能完成下单 |
| 可维护性 / 可移植性 | 支持跨平台部署、模块可独立替换 |
| 法律法规需求 | 符合个人信息保护法、行业合规 |
⭐ 一句话区分功能需求回答"系统要做什么"(行为);非功能需求回答"系统做得有多好"(质量约束)。非功能需求往往是系统级的、影响整体架构,比单个功能需求更关键。
4需求工程过程
需求工程(Requirements Engineering, RE)是理解和定义系统需要提供哪些服务、找出开发和运行约束的过程,目标是生产一份达成一致的需求文档。一般包含五个活动,且常常迭代进行:
图2 · 需求工程过程:获取→分析→规格说明→验证,贯穿全程的需求管理
| 活动 | 主要任务 |
|---|---|
| ① 需求获取(导出) | 与利益相关者沟通,收集系统应提供的服务和约束 |
| ② 需求分析 | 对需求分类、协商冲突、排定优先级,建立系统模型 |
| ③ 需求规格说明 | 把需求文档化,形成 SRS(区分用户需求和系统需求) |
| ④ 需求验证 | 检查需求的现实性、一致性、完备性,发现并改正错误 |
| ⑤ 需求管理 | 贯穿全程,管理需求变更、追踪、版本控制 |
5需求获取技术
需求获取是与利益相关者(Stakeholders)交互、收集需求的过程。常用技术:
🗣️
访谈
Interview与用户面对面交谈。分封闭式(预设问题)和开放式(自由讨论)。最常用,但依赖访谈者水平。
📋
问卷调查
Questionnaire用于大量用户、分散场景,成本低、覆盖广;但缺乏深度、回收率不确定。
🧪
原型
Prototyping快速做出可视原型让用户试用,启发并验证需求,尤其适合需求模糊时。
👁️
观察
Observation实地观察用户工作过程,发现用户说不清的隐性需求与工作场景。
其他技术还包括:头脑风暴、工作坊(联合应用开发 JAD)、文档/现有系统分析、用例与场景分析等。
💡 选择原则用户多而分散 → 问卷;需求模糊 → 原型;隐性/习惯性需求 → 观察;深入了解关键用户 → 访谈。实践中常组合使用。
6需求规格说明书 SRS
软件需求规格说明书(SRS, Software Requirements Specification)是需求工程的核心交付物,是开发、测试、验收和合同的依据。
优秀 SRS 的质量特性
| 特性 | 含义 |
|---|---|
| 正确性 | 每条需求都是系统真正应满足的 |
| 无二义性 | 每条需求只有唯一解释 |
| 完备性 | 覆盖所有功能、非功能及边界情况 |
| 一致性 | 需求之间无冲突 |
| 可验证性 | 每条需求都能通过测试或检查验证 |
| 可追踪性 | 需求可向上追溯来源、向下追踪到设计与测试 |
| 可修改性 | 结构良好,便于修改 |
| 排定优先级 | 对需求标注重要性/稳定性 |
SRS 典型内容(IEEE 830 参考)
- 引言:目的、范围、定义、参考资料;
- 总体描述:产品前景、产品功能、用户特征、约束与假设;
- 具体需求:功能需求、非功能需求、外部接口需求;
- 附录:数据字典、索引等。
7需求验证与确认
需求验证(Validation)检查需求文档是否定义了客户真正想要的系统,主要检查:
| 检查项 | 含义 |
|---|---|
| 有效性/现实性 | 需求确实是用户所需、且技术上可实现 |
| 一致性 | 需求之间不矛盾 |
| 完备性 | 包含用户所需的全部功能和约束 |
| 可验证性 | 每条需求可被客观地测试验证 |
常用验证技术
- 需求评审(Review):组织专家和利益相关者系统检查需求文档;
- 原型法:用可执行原型让用户确认需求;
- 编写测试用例:为每条需求设计验收测试,无法设计测试说明需求不可验证;
- 需求追踪:建立追踪矩阵确保需求被设计和测试覆盖。
💡 V&V 辨析验证 Verification:"是否正确地构建系统"(符合规格);确认 Validation:"是否构建了正确的系统"(符合用户真实需要)。
8需求变更管理
系统需求总是在变化的(外部压力、管理更替、新技术)。需求变更管理用受控流程处理变更,避免需求蔓延(Scope Creep)。
图3 · 需求变更管理流程:申请→影响分析→评审决策→实施→更新文档
- 变更控制委员会(CCB)负责评审是否批准变更;
- 对每个变更进行影响分析(成本、进度、关联需求);
- 采用需求基线(Baseline)+ 版本控制,所有变更可追踪;
- 增量/螺旋等过程模型本身就便于以较低成本容纳变更。
9需求建模概览
需求建模用图形化模型刻画系统,比纯自然语言更精确、易沟通。常见模型:
| 视角 | 模型 | 用途 |
|---|---|---|
| 功能/行为 | 用例图、数据流图 DFD | 描述系统功能与数据流动 |
| 结构/数据 | 类图、E-R 图、数据字典 | 描述数据结构与关系 |
| 交互 | 顺序图、活动图 | 描述对象交互与业务流程 |
| 状态 | 状态图 | 描述对象状态变迁 |
💡 与后续章节衔接需求建模(用例、DFD、E-R)为第 4 章"系统建模"打基础;准确的需求是后续概要设计与架构的前提。
⭐重点例题
例题1:区分功能需求与非功能需求
题:对一个在线考试系统,判断下列需求类型:
(1) 学生可在线提交答卷 → 功能需求(系统行为)
(2) 系统须在 3 秒内返回成绩 → 非功能需求(性能)
(3) 教师可创建试卷 → 功能需求
(4) 系统须支持 5000 人同时考试 → 非功能需求(性能/容量)
(5) 答卷数据须加密存储 → 非功能需求(安全)
口诀:"做什么"是功能,"做得多好/多快/多安全"是非功能。
例题2:为某图书馆系统选择需求获取技术并设计流程
答:
① 访谈 —— 深入了解图书管理员、读者的核心业务(借还、检索)
② 观察 —— 现场观察借还书流程,发现隐性需求(如逾期处理习惯)
③ 问卷 —— 面向大量读者收集对检索、预约功能的偏好
④ 原型 —— 做出检索界面原型让用户试用,验证并修正需求
⑤ 文档分析 —— 分析现有手工/旧系统的登记表与规章制度
组合使用,先访谈+观察把握核心,再问卷扩面,最后原型验证,输出 SRS。
例题3:辨析 Verification 与 Validation
答:Verification(验证)——"是否正确地构建了系统",检查产品是否符合规格说明;Validation(确认)——"是否构建了正确的系统",检查产品是否满足用户的真实需要。需求阶段强调确认(Validation),保证需求文档真正反映用户意图。
🎯自测(点击展开)
需求的三个层次是什么?
业务需求、用户需求、系统需求。
功能需求和非功能需求如何区分?
功能需求描述系统"做什么"(行为/服务);非功能需求描述系统"做得怎么样"(性能、安全、可靠等质量约束)。
需求工程过程包含哪五个活动?
需求获取、需求分析、需求规格说明、需求验证、需求管理。
常用的需求获取技术有哪些?
访谈、问卷调查、原型、观察,还有头脑风暴、工作坊、文档分析、用例/场景等。
优秀 SRS 应具备哪些质量特性?
正确性、无二义性、完备性、一致性、可验证性、可追踪性、可修改性、排定优先级。
Verification 与 Validation 的区别?
验证=是否正确地构建系统(符合规格);确认=是否构建了正确的系统(符合用户需要)。
📝强化题库
选择题点选即时判分;填空题输入后"检查"或"显示答案"。
已答 0/0答对 0正确率 —
已答 0/0答对 0