返回知识库

软考

软件工程与 UML 速查表

软考高级系统架构设计师备考:开发模型/需求/测试 McCabe/维护/CMMI + UML 九图与类间关系,综合知识与案例双覆盖

软考软件工程UML系统建模

一句话定位

本表覆盖软考 §3.5 软件工程基础§3.6 系统建模(UML),是综合知识(~18 题)与案例分析(UML 选图、设计模式场景)的共用底盘。重点:开发模型对比、McCabe 环路复杂度、UML 九图判别、类间关系六种

NOTE

软件工程与 UML 在综合知识中约占 13~17 分,在案例分析中常以”看图填空/选图/改图”形式出现。建议与后续 P4 架构核心(架构风格/质量属性)和 P5 设计模式 联动复习。


A. 软件工程基础

A.1 软件生命周期与开发模型

生命周期阶段

阶段核心任务输出物
问题定义明确问题边界、确定目标可行性研究报告
需求分析功能/性能/约束需求获取与分析软件需求规格说明书(SRS)
设计概要设计 + 详细设计设计文档(模块结构、接口、算法)
编码程序实现源代码
测试单元/集成/确认/系统测试测试报告
维护改正/适应/完善/预防性维护维护记录

开发模型对比表(★★★ 必考)

模型核心特征优点缺点适用场景
瀑布模型线性顺序、阶段里程碑、文档驱动结构清晰、阶段明确、管理简单难应对变更、前期错误后期才发现需求明确、变更少的项目
快速原型先造原型 → 用户反馈 → 精化需求需求可视化、用户参与早易陷入”不断改需求”、可能忽视质量需求不明确、创新性强的项目
螺旋模型风险驱动、迭代 + 瀑布、四象限循环风险管控强、逐步细化复杂度高、对小项目过重大型高风险项目
增量模型分批次交付、每次增一个子集快速见效、降低风险需提前架构、增量间可能冲突功能模块可独立交付的项目
敏捷(Agile)迭代(2~4 周 Sprint)、用户故事、持续交付、拥抱变化快速响应变更、用户持续反馈文档轻量、大型团队协作挑战需求多变、互联网产品

IMPORTANT

  • 螺旋模型 = 风险驱动(不是迭代也不是瀑布,而是以风险分析为核心驱动每轮迭代)
  • 敏捷 ≠ 无文档:敏捷强调”刚好足够”的文档,不是不写;强调”可工作的软件胜过详尽的文档”(敏捷宣言价值观之一)
  • V 模型(瀑布变种):测试与开发阶段一一对应,强调”测试早介入”

敏捷方法论对比

方法论核心实践特点
ScrumSprint(2~4 周)、每日站会、Sprint 评审/回顾、产品待办列表最流行的敏捷框架
XP(极限编程)结对编程、TDD、持续集成、小发布、重构技术实践密集的敏捷方法
看板(Kanban)可视化工作流、限制在制品(WIP)、流动效率专注流程优化、无固定迭代
DevOpsCI/CD、自动化测试、监控反馈、基础设施即代码开发与运维一体化,详见后续新技术专题

A.2 需求工程

阶段任务关键产出常用方法
需求获取收集用户原始需求需求调研记录访谈、问卷、观察、原型、头脑风暴
需求分析分析需求可行性、消除冲突需求模型(用例图、数据流图)结构化分析、面向对象分析
需求规约编写 formal 需求文档SRS(软件需求规格说明书)自然语言 + 形式化描述
需求验证评审需求正确性、一致性评审报告评审会议、原型验证、测试用例
需求管理变更控制、版本追踪、状态跟踪变更请求单需求跟踪矩阵(RTM)

NOTE

需求分类:功能需求(系统做什么)+ 非功能需求(性能、安全、可用性等质量属性)+ 约束条件(预算、技术、法规)。 需求变更控制流程:提出变更 → 影响分析 → 审批 → 实施 → 验证 → 归档。变更控制委员会(CCB)负责审批。

A.3 软件设计

设计分层

层级关注点产出物
概要设计(高层)模块划分、接口定义、数据结构、数据库逻辑结构概要设计说明书(HLD)
详细设计(底层)算法实现、数据结构细节、接口详细定义详细设计说明书(LLD)

耦合类型(由低到高,耦合度越低越好)

耦合类型定义记忆关键词
非直接耦合模块间无直接关系,通过主程序/控制模块联系最低耦合,最理想
数据耦合模块间通过参数传递基本数据参数传值
标记耦合模块间通过数据结构(如记录)传递传结构体/对象
控制耦合一个模块控制另一个模块的内部逻辑传递控制变量/标志
外部耦合模块与外部硬件/环境交互硬件/操作系统依赖
公共耦合多个模块共享全局数据区全局变量/公共数据区
内容耦合一个模块直接访问另一模块内部最高耦合,最应避免

内聚类型(由高到低,内聚度越高越好)

内聚类型定义记忆关键词
功能内聚模块内所有元素共同完成单一功能 the best一个功能,一个模块
顺序内聚元素顺序执行,前一输出为后一输入数据流顺序
通信内聚元素操作同一数据集共享数据
过程内聚元素必按特定顺序执行(无数据流依赖)固定执行顺序
时间内聚元素在相同时间执行(初始化/收尾)同时执行
逻辑内聚元素功能类似,由外部参数选择执行哪个逻辑选择
偶然内聚元素无实质关联,偶然放在一起最差,避免

设计原则速记

原则英文核心思想
单一职责SRP一个模块只做一件事
开闭原则OCP对扩展开放、对修改关闭
里氏替换LSP子类可替换父类
接口隔离ISP客户端不应依赖不用的接口
依赖倒置DIP依赖于抽象而非实现
迪米特法则LoD最小知识原则,减少对象间交互

A.4 软件测试

测试分类

分类维度类型说明
测试技术黑盒测试不关注内部结构,按功能需求测试(等价类划分/边界值/因果图/决策表/错误推测)
白盒测试关注内部结构,按代码逻辑测试(语句覆盖/判定覆盖/条件覆盖/路径覆盖/判定-条件覆盖)
测试阶段单元测试最小可测试单元(函数/类/模块)
集成测试模块组装后测试(自顶向下/自底向上/三明治/大爆炸)
确认测试验证软件是否满足需求规格(SRS) sand 验收测试
系统测试整体系统测试(功能/性能/安全/兼容性/压力)
回归测试修改后重新执行已有测试用例,确保未引入新问题

McCabe 环路复杂度(★★★ 必考计算题)

公式V(G) = E - N + 2 (或 V(G) = P + 1,P 为判定节点数)

其中:

  • E = 边数(edge)
  • N = 节点数(node)
  • P = 判定节点数(predicate node,即分支节点)

例题:某程序流程图有 11 条边、9 个节点、3 个判定节点,求环路复杂度。

  • V(G) = E - N + 2 = 11 - 9 + 2 = 4
  • 验证:V(G) = P + 1 = 3 + 1 = 4

结论:环路复杂度为 4,意味着至少需要 4 条独立路径才能覆盖所有语句。

A.5 软件维护

类型定义占比触发原因
改正性维护修复已发现的错误~25%用户报告 bug
适应性维护适应环境变化(OS/硬件/法规)~20%外部环境变更
完善性维护增强功能、提升性能~50%(最大)用户新需求
预防性维护预防未来问题、重构优化~5%预见性技术债务

WARNING

完善性维护占比最大(约 Later 维护),是易混淆考点。改正性维护≠完善性维护:前者是修 bug,后者是加功能。

A.6 CMM / CMMI 五级

级别名称特征关键过程域
1 级初始级过程混乱、依赖个人英雄主义
2 级可重复级有基本项目管理(计划/跟踪/配置管理)需求管理、项目计划、配置管理
3 级已定义级组织级标准过程、文档化组织过程焦点、组织培训、集成项目管理
4 级已管理级量化管理、过程度量、预测性控制量化项目管理、组织过程绩效
5 级优化级持续过程改进、技术创新因果分析与解决、组织创新与部署

B. UML 系统建模

B.1 UML 九图速查表

类型核心用途关键词案例场景
用例图静态描述系统功能需求与参与者关系Actor、用例、包含(include)、扩展(extend)需求分析阶段,界定系统边界
类图静态描述类结构、属性、操作及类间关系类、属性、方法、关联/聚合/组合/泛化/实现系统设计核心,数据库映射基础
对象图静态类图的实例快照,某时刻对象及链接对象名、属性值验证类图正确性、展示运行时状态
构件图静态描述软件构件及其依赖关系构件、接口、依赖系统实现视图,模块组装
部署图静态描述硬件节点及软件构件的物理部署节点、构件、通信路径系统部署架构,服务器/网络拓扑
状态图动态描述对象生命周期内状态转换状态、事件、转换、 Guard 条件订单状态机、线程生命周期
顺序图动态按时间顺序描述对象间消息交互生命线、消息、激活块、返回消息典型交互流程,强调时序
协作图动态描述对象间交互的组织结构对象、链接、消息序号强调空间结构,与顺序图等价
活动图动态描述工作流/业务流程/并发行为活动、泳道、分支/合并、 fork/join业务流程建模、算法流程

IMPORTANT

顺序图 vs 协作图 = 语义等价:两者表达同一交互的不同视角。

  • 顺序图强调时间顺序(纵向为时间,横向为对象)。
  • 协作图强调空间结构(对象间链接关系)。
  • 两者可互相转换,UML 2.x 中协作图更名为通信图(Communication Diagram)
  • 构件图 vs 部署图:构件图是逻辑实现(模块/组件关系),部署图是物理部署(服务器/硬件/网络)。

B.2 类间关系六种与 UML 符号

关系英文UML 符号语义示例
依赖Dependency虚线箭头 ------>一个类使用/依赖于另一个类A 的方法参数是 B
关联Association实线(可带箭头指向被依赖方)对象间的引用/链接学生 ↔ 课程
聚合Aggregation空心菱形 ◇ + 实线整体-部分,部分可独立存在学校 ◇-o 学生
组合Composition实心菱形 ◆ + 实线整体-部分,部分不可独立存在订单 ◆-o 订单项
泛化Generalization空心三角箭头 △ + 实线继承关系(is-a)动物 △- 狗
实现Realization空心三角箭头 △ + 虚线接口实现USB 接口 △- 实现类

WARNING

聚合 vs 组合是案例分析高频混淆点:

  • 聚合:弱整体-部分,部分可独立(学校没了学生还在)。
  • 组合:强整体-部分,生命周期绑定(订单没了订单项也没了)。
  • 考试常考:“部门与员工”→聚合;“汽车与发动机”→组合(发动机不可脱离汽车存在)。

B.3 UML 类图示例(Mermaid)

图 1:UML 类图六种关系示例(关联/聚合/组合/泛化/实现/依赖)

注:图中展示了类图六种关系中的五种:关联(学生-课程)、聚合(学院-系)、组合(系-教授)、泛化(教工-教授)、实现(教工-教工接口)。依赖关系未直接展示,通常在方法参数或局部变量中使用。


C. 记忆口诀与易错点

开发模型速记

模型关键词口诀
瀑布线性、文档、顺序”瀑布飞流直下,文档驱动它”
原型需求不明、先造样”需求不明先造样,用户看了再商量”
螺旋风险、迭代、四象限”螺旋转圈不慌张,风险驱动四象限”
增量分批、交付、模块”增量分批交,每批都叫好”
敏捷迭代、用户、变化”敏捷迭代快,用户故事带”

UML 九图速记口诀

类别口诀
静态用例、类、对象、构件、部署”用例类对象,构件部署站”
动态状态、顺序、协作、活动”状态顺序走,协作活动凑”
补充包图、组合结构、定时、交互概览”包组定时交”

易错点汇总

易错点正确答案
螺旋模型的核心驱动因素风险,不是迭代也不是瀑布
敏捷是否不写文档,“刚好足够”而非不写
完善性维护 vs 改正性维护完善性 = 加功能(占比最大);改正性 = 修 bug
耦合排序(由低到高)非直接 → 数据 → 标记 → 控制 → 外部 → 公共 → 内容
内聚排序(由高到低)功能 → 顺序 → 通信 → 过程 → 时间 → 逻辑 → 偶然
聚合 vs 组合空心菱形◇=聚合(部分可独立);实心菱形◆=组合(部分不可独立)
顺序图 vs 协作图两者语义等价,可互转;顺序图强调时序,协作图强调结构
V(G)=E-N+2 中 E 和 N 的含义E=边数,N=节点数(不是路径数!)

D. 交叉引用与关联阅读

相关主题位置关联内容
计算机基础ATAL**01-cs-fundamentals.mdxOS 进程调度、PV 操作、数据库事务 ACID
架构核心04-architecture-core.mdx(待产)架构风格对比、质量属性战术、ATAM/SAAM 评估流程
设计模式05-design-patterns.mdx(待产)23 种 GoF 速查、UML 类图应用
新技术06-new-tech-web-arch.mdx(待产)DevOps、CI/CD、云原生四要素
案例分析模板07-case-analysis-template.mdx(待产)UML 选图答题套路、设计模式场景判断
论文素材库08-essay-material-library.mdx(待产)软件工程方法论在论文中的应用

E. 自测题(检验掌握程度)

  1. 某程序模块有 8 条边、6 个节点,McCabe 环路复杂度 V(G) = ?

点击查看答案 V(G) = E - N + 2 = 8 - 6 + 2 = 4

  1. 以下哪种耦合度最低?A. 数据耦合 B. 标记耦合 C. 控制耦合 D. 公共耦合

点击查看答案 A. 数据耦合(耦合度排序:数据 < 标记 < 控制 < 外部 < 公共 < 内容)

  1. “汽车”与”发动机”应使用哪种类间关系?A. 关联 B. 聚合 C. 组合 D. 依赖

点击查看答案 C. 组合(发动机不可脱离汽车独立存在,生命周期绑定)

  1. 螺旋模型的核心驱动因素是什么?

点击查看答案 风险分析(不是迭代,也不是瀑布,是风险驱动的迭代过程)

  1. CMMI 五级的第 3 级名称是什么?

点击查看答案 已定义级(组织级标准过程、文档化)