本页目录 · 5 节
第 5 章 软件工程基础知识
对应大纲:科目 1-4 软件工程基础知识|教材 P175–P217|优先级 ★★★★★|综合知识估分 8~11 分
读法:本章三科通吃。抓两条主线——时间线(模型→阶段→里程碑)、产物线(需求→设计→代码→测试)。模型一律按「适用 + 缺点」两列背,案例题直接调用。
一、知识框架
软件工程基础知识
├─ 5.1 软件工程
│ ├─ 定义与三要素(方法、工具、过程)
│ ├─ 过程模型:瀑布|原型|螺旋|增量|迭代|V|喷泉
│ ├─ 敏捷:XP|Scrum|FDD|ASD|DSDM|Crystal
│ ├─ RUP:4 阶段 × 9 核心工作流
│ └─ 能力成熟度模型:CMM/CMMI 5 级
├─ 5.2 需求工程:获取|分析|定义(SRS)|验证|管理(变更/追踪/基线)
├─ 5.3 系统分析与设计:结构化(DFD/DD/ERD/判定表)|面向对象(UML)
├─ 5.4 软件测试:黑盒/白盒/灰盒|单元→集成→确认→系统→验收
├─ 5.5 净室软件工程:正确性验证|统计质量控制|增量开发
├─ 5.6 CBSE:构件与构件模型|CBSE 过程|构件组装
└─ 5.7 软件项目管理:进度|配置|质量|风险
二、必背要点
2.1 软件工程与过程模型
定义:将系统化、规范化、可度量的方法用于软件开发、运行与维护。三要素:方法、工具、过程(按什么顺序做)。
七种过程模型
| 模型 | 核心思想 | 优点 | 缺点/适用 |
|---|---|---|---|
| 瀑布 | 阶段线性、文档驱动 | 里程碑清晰、易管理 | 需求须稳定,返工代价大 |
| 原型 | 快速原型澄清需求 | 用户早参与、偏差早暴露 | 易当成品、文档弱 |
| 螺旋 | 风险驱动,四象限循环 | 风险早识别、可演进 | 成本高,需风险评估能力 |
| 增量 | 分批交付功能增量 | 早交付、可并行 | 需良好架构,集成复杂 |
| 迭代 | 多轮细化,逐步完善 | 适应变更、反馈快 | 迭代边界与文档管理难 |
| V 模型 | 开发与测试一一对应 | 质量内建、缺陷早发现 | 需求变更不灵活 |
| 喷泉 | 面向对象,阶段重叠迭代 | 适合 OO | 管理难,里程碑不清 |
V 模型对应:需求 ↔ 验收测试|概要设计 ↔ 系统测试|详细设计 ↔ 集成测试|编码 ↔ 单元测试。
敏捷方法
| 方法 | 核心特征 |
|---|---|
| XP | 四价值观(沟通、简单、反馈、勇气),结对编程、测试先行、重构、持续集成 |
| Scrum | 三角色 PO/SM/团队、三工件、五会议,冲刺 2~4 周 |
| FDD | 以「特征」为单位,5 步流程,适合大团队 |
| ASD / DSDM | 猜测—合作—学习;时间盒 + MoSCoW 优先级 |
RUP 四阶段
| 阶段 | 目标 | 里程碑 |
|---|---|---|
| 初始 | 确定范围与可行性 | 生命周期目标 |
| 细化 | 建立可执行架构基线 | 生命周期架构 |
| 构建 | 完成主体功能 | 初始运行能力 |
| 交付 | 交付、试用、修正 | 产品发布 |
九个核心工作流:过程类六个——业务建模、需求、分析与设计、实现、测试、部署;支持类三个——配置与变更管理、项目管理、环境。RUP 三特点:用例驱动、以架构为中心、迭代增量。
CMMI 五级
| 级别 | 名称 | 特征 |
|---|---|---|
| 1 | 初始级 | 过程无序,靠个人,结果不可预测 |
| 2 | 已管理级 | 项目级计划、跟踪、配置管理 |
| 3 | 已定义级 | 组织级标准过程,项目裁剪使用 |
| 4 | 量化管理级 | 用统计度量定量控制过程 |
| 5 | 优化级 | 持续改进、缺陷预防、技术创新 |
CMMI 有阶段式(成熟度级别)与连续式(过程域能力级别 0~5)两种表示;CMM 只有阶段式且仅针对软件。
2.2 需求工程
层次:业务需求(为什么做)→ 用户需求(要什么)→ 系统需求(功能、非功能、约束)。
| 环节 | 方法与产物 |
|---|---|
| 获取 | 访谈、问卷、观察、文档分析、原型、JAD、头脑风暴 |
| 分析 | 结构化 SA(DFD + 数据字典)、面向对象(用例 + 类图) |
| 定义 | 输出 SRS:正确、无歧义、完整、一致、可验证、可追踪 |
| 验证 | 评审、原型确认、用例反推 |
| 管理 | 基线、变更控制、版本控制、追踪 |
变更流程:申请 → 影响分析(成本/进度/风险)→ CCB 审批 → 实施 → 验证 → 更新基线。
需求追踪:前向(需求→设计→代码→用例)、后向(反向)、双向;工具为追踪矩阵,用于覆盖检查与影响分析。
2.3 系统分析与设计
结构化方法(自顶向下、逐步求精、功能分解)
| 工具 | 作用 |
|---|---|
| DFD | 四要素:外部实体、加工、数据流、数据存储;分层为上下文图→0 层→1 层 |
| 数据字典 | 定义数据流、数据元素、数据存储、加工,与 DFD 配套 |
| E-R 图 | 概念建模:实体、属性、联系(1:1、1:N、M:N) |
| 判定表/树 | 表达复杂条件组合逻辑 |
设计转换:变换分析(输入—处理—输出)与事务分析(按事务类型分派)。
模块准则:高内聚低耦合;扇入大、扇出小(3~7 为宜);深度宽度适中。
| 内聚(高→低) | 耦合(低→高) |
|---|---|
| 功能 > 顺序 > 通信 > 过程 | 非直接 > 数据 > 标记 > 控制 |
| > 时间 > 逻辑 > 偶然 | > 外部 > 公共 > 内容 |
面向对象:三要素封装、继承、多态;OOA 产出用例模型与领域类图,OOD 产出架构与类设计。
UML 分结构图(类、对象、包、构件、部署、组合结构)与行为图(用例、活动、状态机、交互)。
速记:用例看功能、类图看结构、顺序看交互、活动看流程、部署看节点。
2.4 软件测试
| 方法 | 依据 | 看内部结构 | 典型方法 |
|---|---|---|---|
| 黑盒 | 需求/规格 | 否 | 等价类、边界值、判定表、因果图、正交、场景法、错误推测 |
| 白盒 | 源代码/结构 | 是 | 逻辑覆盖、基本路径、循环测试、McCabe |
| 灰盒 | 接口 + 部分内部 | 部分 | 接口测试、数据库测试、日志分析 |
覆盖强度:语句 < 判定 < 条件 < 判定/条件 < 条件组合 < 路径。判定/条件覆盖不强于条件组合覆盖;路径覆盖最强但不可穷尽。
McCabe 环形复杂度 V(G) = E − N + 2 = 判定节点数 + 1 = 封闭区域数
| 阶段 | 对象 | 依据文档 | 要点 |
|---|---|---|---|
| 单元 | 函数/模块 | 详细设计 | 白盒为主,需驱动与桩模块 |
| 集成 | 模块接口 | 概要设计 | 自顶向下(桩)、自底向上(驱动)、三明治、大爆炸 |
| 确认 | 整个软件 | SRS | α(开发方场地、内部用户)、β(用户场地、真实用户) |
| 系统 | 完整系统 | 需求 + 设计 | 功能、性能、安全、兼容、恢复、可靠性 |
| 验收 | 交付验收 | 合同/用户需求 | 用户验收 UAT、合同验收、法规验收 |
方法与阶段对应:单元(白盒)→ 集成(白盒 + 灰盒)→ 确认(黑盒)→ 系统(黑盒)→ 验收(黑盒)。
回归测试:变更后重跑既有用例,防止引入新缺陷,是持续集成的前提。
2.5 净室软件工程
- 正确性验证:用形式化方法(盒结构:黑盒—状态盒—清盒)在开发中证明正确,而非靠测试找错。
- 统计质量控制:基于使用模型做统计抽样,用可靠性认证代替穷尽测试。
- 增量开发:小增量推进,每个增量都做正确性验证。
差异:传统「靠测试发现缺陷」,净室「不引入缺陷」;形式化成本高,适合高可靠嵌入式与航天软件。
2.6 基于构件的软件工程
构件:可独立部署、可复用、有明确接口契约、可组装的软件单元。构件模型三要素:构件、容器、支撑服务(命名、事务、安全、持久化)。
| 构件模型 | 代表 |
|---|---|
| EJB | Java 企业级构件 |
| COM/DCOM/COM+ | Windows 平台 |
| CCM | CORBA 构件模型 |
| .NET 程序集 / Web Services | 托管构件 / 跨平台服务 |
CBSE 过程:需求分析 → 构件识别 → 构件评估 → 构件选择与适配 → 组装 → 测试部署。
组装四方式:顺序、层次、叠加(覆盖扩展)、正交。
复用成本:理解、适配、组装、验证——复用不是零成本。
2.7 软件项目管理
| 工具 | 特点 |
|---|---|
| WBS | 自顶向下分解到可估算的工作包 |
| 甘特图 | 直观显示工期与并行,看不出依赖 |
| PERT 网络图 | 显示依赖,三点估算,可算概率 |
| CPM 关键路径 | 最长路径,总时差为 0,决定工期 |
PERT:TE = (O + 4M + P) / 6 标准差 σ = (P − O) / 6
配置管理五活动:配置标识 → 版本控制 → 变更控制(CCB) → 配置审计 → 状态报告。
三类基线:功能基线(需求冻结)、分配基线(设计分配)、产品基线(交付产品)。
质量:QA 面向过程、预防为主;QC 面向产品、检测为主;手段有评审、走查、审查、度量。
风险:识别(技术/管理/商业/外部)→ 分析(概率、影响、风险暴露 = 概率 × 损失)→ 规划(规避、转移、减轻、接受)→ 监控。
三、易混淆概念对比
| A | B | 关键区别 |
|---|---|---|
| 瀑布 | 增量 | 瀑布一次交付、阶段线性;增量分批交付、每批可用 |
| 螺旋 | 迭代 | 螺旋以风险驱动、含风险分析象限;迭代以完善驱动 |
| 原型法 | 敏捷 | 原型用于澄清需求、可丢弃;敏捷是完整迭代交付方法论 |
| RUP 阶段 | RUP 工作流 | 阶段是时间维(4 个);工作流是活动维(9 个),每阶段都跑 9 个 |
| CMMI 3 级 | CMMI 4 级 | 3 级组织级标准过程;4 级引入统计度量与定量控制 |
| 验证 | 确认 | 验证「做得对不对」;确认「做的是不是用户要的」 |
| 黑盒 | 白盒 | 黑盒看需求找功能缺陷;白盒看代码找逻辑缺陷 |
| 单元测试 | 集成测试 | 单元依据详细设计、需驱动/桩;集成依据概要设计、测接口 |
| 桩模块 | 驱动模块 | 桩模拟被调的下层;驱动模拟调用的上层 |
| α 测试 | β 测试 | α 在开发方场地、内部人员;β 在用户场地、真实用户 |
| 结构化方法 | 面向对象方法 | 以功能/数据流为中心(DFD);以对象/职责为中心(UML) |
| 净室工程 | 传统测试 | 净室靠形式化验证不引入缺陷;传统靠测试发现缺陷 |
| 内聚 | 耦合 | 模块内元素关联(越高越好);模块间依赖(越低越好) |
| QA | QC | QA 过程导向、预防;QC 产品导向、检测 |
四、常见考法与出题角度
| 出题角度 | 典型问法 | 应对 | 陷阱 |
|---|---|---|---|
| 模型选择 | 「需求不明确、需快速反馈」 | 原型 / 敏捷 | 误选瀑布 |
| 模型特征 | 「以风险驱动的模型是」 | 螺旋 | 误选迭代 |
| 阶段里程碑 | 「RUP 细化阶段结束达到」 | 生命周期架构 | 误选初始运行能力 |
| 工作流数量 | 「RUP 核心工作流几个」 | 9 个(6 + 3) | 误答 6 |
| 成熟度级别 | 「组织建立标准过程并裁剪」 | CMMI 3 级 | 误选 2 级 |
| 需求变更 | 「需求变更由谁审批」 | CCB | 误选项目经理单独决定 |
| DFD 要素 | 「不属于 DFD 四要素的是」 | 判定表/控制流 | DFD 不画控制流 |
| 内聚耦合 | 「通过公共数据区交互属于」 | 公共耦合 | 与外部耦合混淆 |
| 测试方法 | 「不看内部结构、按需求设计用例」 | 黑盒 | 误选白盒 |
| 复杂度 | 「McCabe 复杂度计算」 | V=E−N+2 | 漏 +2 |
| 集成策略 | 「需要桩模块的是」 | 自顶向下 | 与自底向上混淆 |
| 项目管理 | 「看不出任务依赖的图是」 | 甘特图 | 误选 PERT |
案例题角度:按项目特征选过程模型并说明理由;补 DFD 与用例图;设计等价类与边界值用例;算关键路径与工期;配置管理与风险应对表。
五、速记与自测
速记
- 三要素:方、工、过
- 模型七将:瀑、原、螺、增、迭、V、喷
- V 模型:需—验、概—系、详—集、码—单
- RUP:四阶段(初、细、构、交)+ 九流(业、需、析、实、测、部 + 配、项、环)
- RUP 三特点:用例驱动、架构中心、迭代增量
- CMMI:初、管、定、量、优
- 内聚耦合:内高外低;功能最好、内容最差
- 测试阶段:单、集、确、系、验;覆盖强度:语 < 判 < 条 < 判条 < 组 < 路
- PERT:(乐观 + 4×最可能 + 悲观)÷ 6
自测
- RUP 九个核心工作流中,哪三个属于支持类?
- 自底向上集成测试需要编写哪种辅助模块?
- 某任务乐观 4 天、最可能 6 天、悲观 14 天,期望工期与标准差是多少?
答案:1. 配置与变更管理、项目管理、环境。2. 驱动模块(driver)。3. TE=(4+24+14)/6=7 天,σ=(14−4)/6≈1.67 天。