6.4 需求分析
本篇定位:需求分析是软件工程的起点与质量源头——9 年真题直接命中 6 题(2018 单38、2019 单32/68、2020 单27、2022 单33、2023 多85、2024 多88),2027 预测点名(需求分析、数据流/控制流)。考点:需求分析四环节、需求分析四方面(功能/性能/数据/运行平台)、用例视图、OOA*。核心能力:需求分析管"做什么"(与设计管"怎么做"严格区分)。 数据依据:
01-真题/真题文本/+01-真题/考点汇总/+05-笔记/软件工程-模块总纲.md;答案以专业判断为准。 阅读提示:需求分析是 6.1 生命周期的第 2 阶段;用例视图与 6.5 UML 衔接;数据字典/DFD 与 4.4 数据库设计呼应。
一、考点定位(本章真题统计)
| 考点 | 真题锚点 | 频次 | 考法 |
|---|---|---|---|
| 需求分析任务 | 2022 单33、2023 多85 | 2 年 | 运行平台不属于需求分析;获取方法 |
| 用例视图 | 2020 单27 | 1 年 | 需求分析最重要模型=用例视图 |
| OOA | 2018 单38 | 1 年 | 抽取整理需求建立问题域模型 |
| 需求规格说明书 | 2019 单68、2024 多88 | 2 年 | 需求规格说明包含内容 |
| 原型捕获需求 | 2019 单32 | 1 年 | 原型用于捕获模糊需求 |
命题规律:需求分析考"需求分析该做什么 / 不该做什么"——2022 单33 考"运行平台不属于需求分析"是最经典的边界题。2027 预测 1–2 题:需求分析任务边界、需求获取方法。核心能力:需求分析四方面 + 与设计/编码的边界。
二、知识框架(先搭骨架)
需求分析(回答"系统要做什么")
├── 需求工程四环节(2023 多85)
│ ├── 需求获取(访谈/问卷/观察/原型——2023 多85)
│ ├── 需求分析(建模:用例图/数据流图)
│ ├── 需求规格说明(编写 SRS 文档)
│ └── 需求验证/评审(与用户确认)
├── 需求分析四方面
│ ├── 功能需求:系统要做什么(核心)
│ ├── 性能需求:响应时间/吞吐量
│ ├── 数据需求:数据结构与关系
│ └── ❌ 运行平台不属于需求分析(2022 单33——是设计/约束)
├── 需求规格说明书(SRS,2019 单68、2024 多88)
│ ├── 内容:功能/性能/用户界面/运行环境
│ └── ❌ 算法详细过程不属于 SRS(2020 多88)
├── OOA(面向对象分析,2018 单38)
│ ├── 抽取整理用户需求、建立问题域精确模型
│ └── 产物:用例模型/对象模型(OOA 是 OOD 的前置)
└── 用例视图(2020 单27)
└── 需求分析最重要/最基本的模型
一句话记忆:需求四环节(获取/分析/规格/评审)→ 四方面(功能/性能/数据,无平台)→ SRS 是产物(无算法细节)→ OOA 建问题域模型 → 用例视图最核心。
三、考点详解
3.1 需求工程四环节(2023 多85)
精确定义:需求工程 = 系统地获取、分析、规格化、验证需求的工程过程,四环节:
- 需求获取:访谈、问卷调查、观察、原型(用户说不清时用原型捕获需求——2019 单32);
- 需求分析:对获取的需求建模(用例图、数据流图、E-R 图);
- 需求规格说明:编写需求规格说明书(SRS);
- 需求验证(评审):与用户确认需求正确、完整、一致。
3.2 需求分析的内容边界(2022 单33,必考)
需求分析要确定:
- 功能需求:系统必须提供的功能;
- 性能需求:响应时间、吞吐量、资源利用率(2021 多84:响应时间/吞吐量/资源利用率=性能需求,日志保存期限不是);
- 数据需求:需要处理的数据及其关系。
2022 单33(选 D):确定软件运行平台不属于需求分析——那是设计/约束层面的(在概要设计中确定);需求分析管"做什么",平台是"用什么环境做"。
口诀:需求管做什么(功能/性能/数据),平台是设计的事。
3.3 需求规格说明书(SRS)(2019 单68、2024 多88、2020 多88)
精确定义:SRS = 需求分析阶段的正式产物,是后续设计、编码、测试的依据。
SRS 包含(2024 多88,选 ABC):主要功能、软件性能、用户界面及运行环境(A/B/C 对);"算法详细过程"不属于需求规格说明(D 错)——算法是设计阶段的内容(2020 多88 同款)。
口诀:SRS 写"要什么",不写"怎么实现"(算法是设计的事)。
3.4 OOA 面向对象分析(2018 单38)
2018 单38(选 D):软件开发过程中,抽取和整理用户需求并建立问题域精确模型的过程叫面向对象分析(OOA)。
- 辨析:面向对象设计(OOD)=把分析模型转成设计模型;面向对象程序设计(OOP)=用 OO 语言编码;生存期=生命周期。
OOA 任务:识别对象/类、属性、方法、关系(继承/关联/聚合),建立用例模型 + 对象模型。
3.5 用例视图(2020 单27)
2020 单27(选 D):UML 中最重要/最基本的需求分析模型是用例视图(用例图)——从用户角度描述系统功能(用户能做什么)。
口诀:需求分析看用例图(从用户角度)。(用例图细节见 6.5 UML。)
3.9 系统分析与数据流图(补强;2016/2018 真题段、证监会真题)
系统分析在开发链中的位置:需求分析阶段产生 DFD(不是总体设计、不是详细设计、更不是编码)。
- 结构化分析(SA)=面向数据流的需求分析方法,核心工具是 DFD;
- DFD 是"功能模型"——只反映系统必须完成的逻辑功能,不反映控制流、不反映时序(那是状态图/时序图的事)。
DFD 四要素(穷举题):外部实体(数据来源/去向)、加工(处理)、数据流(箭头)、数据存储(文件/数据库)。坑:"数据流"不是控制流;DFD 不画判断/循环。
分层 DFD:顶层(一张图=一个加工)→ 0 层(分解为若干加工)→ 逐层细化;父子图必须平衡(父图某加工的输入输出=子图的输入输出)。
数据字典(DD):对 DFD 中数据流/数据项/数据存储/加工的精确定义(自底向上汇总),是需求规格说明书的一部分。
结构化分析 vs 面向对象分析(OOA):
- SA 以功能/数据流为中心(DFD+数据字典);
- OOA 以对象/问题域模型为中心(用例+类图),"抽取并整理用户需求、建立问题域精确模型"⇒ OOA(2018 单38 的落点)。
- 程序设计风格(同节真题):清晰第一、效率第二;"效率第一、清晰第二"是错项;注释、输入提示都是良好风格。
四、易错坑汇总(命题人惯用陷阱)
- 运行平台不属于需求分析(2022 单33)——"确定运行平台是需求分析任务"是错误说法(属设计/约束)。
- 算法不属于 SRS(2020 多88、2024 多88)——"SRS 包含算法详细过程"错误(算法是详细设计内容)。
- 需求获取方法含原型(2019 单32、2023 多85)——"原型只能用于测试"错误(原型也用于捕获模糊需求)。
- 用例视图=需求分析最重要模型(2020 单27)——"类图是需求分析最重要模型"错误(类图是设计阶段的核心)。
- OOA 建问题域模型(2018 单38)——"OOA 是写代码"错误(OOA 是分析建模、OOP 才是编码)。
- 性能需求含资源利用率(2021 多84)——"日志保存期限是性能需求"错误(那是合规/运维需求)。
- 需求验证=评审——"需求分析完不用确认"错误(必须与用户评审确认)。
- 需求分析 ≠ 设计——"需求分析阶段确定模块划分"错误(模块划分是概要设计)。
五、横向扩展(防漏网:本章边界内、真题尚未考但可能补考的点)
说明:横向扩展覆盖"大纲范围内但 9 年真题未考过"的知识,标注【新增概率】供取舍。
- 需求获取方法清单【高】:访谈/问卷调查/观察/原型/联合应用开发(JAD)——多选高概率(2023 多85 同族)。
- 数据流图(DFD)【中】:数据流/加工/数据存储/外部实体四要素——与 4.4 数据库设计衔接。3. 数据字典【中】:数据项/数据结构/数据流/数据存储的定义——需求分析文档。
- 非功能需求分类【中】:性能/可用性/安全性/可维护性——多选素材。
- 需求冲突处理【低】:需求优先级、权衡——名词题。
- 结构化分析(SA)【低】:自顶向下分解——传统需求分析方法。
- 需求跟踪矩阵【低】:需求→设计→测试的追溯——配置管理衔接。
- 质量功能展开(QFD)【低】:把用户需求映射到质量特性——名词题。
六、真题演练(代表性真题 + 解析)
例 1(2022 单33) 下列(口径已核)不属于需求分析阶段的任务。 A. 确定软件功能需求 B. 确定软件性能需求 C. 确定软件数据要求 D. 确定软件运行平台
答案:D。运行平台=设计/约束层面,不属于需求分析;功能/性能/数据需求都是需求分析任务。口诀:需求管做什么,平台是设计的事。
例 2(2020 多88) 软件需求规格说明书(SRS)应包括(口径已核)。 A. 软件主要功能 B. 软件性能 C. 用户界面及运行环境 D. 算法详细过程
答案:ABC。SRS 写功能/性能/界面/环境;算法详细过程(D)是详细设计内容,不属于 SRS。口诀:SRS 写"要什么"、不写"怎么实现"。
例 3(2020 单27) 在需求分析中,UML 最重要/最基本的需求分析模型是(口径已核)。 A. 类图 B. 序列图 C. 状态图 D. 用例视图
答案:D。用例视图(用例图)=需求分析最重要模型(从用户角度描述功能)。口诀:需求分析看用例。
例 4(2018 单38) 抽取和整理用户需求并建立问题域精确模型的过程叫(口径已核)。 A. 生存期 B. 面向对象设计 C. 面向对象程序设计 D. 面向对象分析
答案:D。OOA(面向对象分析)=抽取需求+建问题域模型;OOD 是设计、OOP 是编码。口诀:分析建模 OOA、设计转模 OOD、编码实现 OOP。
例 5(2019 单32) 用户需求模糊不清时,通过(口径已核)可以快速捕获需求。 A. 开发原型 B. 直接编码 C. 编写测试用例 D. 交付系统
答案:A。原型用于捕获模糊需求(试用原型→明确需求)。口诀:需求不清、原型先行。
七、本章小结
- 一条主线:需求工程四环节(获取/分析/规格/评审)→ 四方面(功能/性能/数据)→ SRS(无算法细节)→ OOA(问题域模型)→ 用例视图(最重要)。
- 必背判定:运行平台不属于需求分析(2022 单33);算法不属于 SRS(2020 多88、2024 多88);原型捕获模糊需求(2019 单32);用例视图最重要(2020 单27)。
- 衔接预告:用例图细节→6.5 UML;数据流图/数据字典→4.4 数据库设计;需求跟踪→6.8 配置管理。