所属篇章:上篇·综合知识预估分值:8~12 分(高分章节)考查重点:需求工程、设计模式、软件测试、过程模型、项目管理难度等级:★★★★(理解深度要求高,案例分析常考)
一、本章知识图谱
软件工程├── 5.1 软件过程模型│ ├── 瀑布模型│ ├── 增量模型│ ├── 螺旋模型│ └── RUP/敏捷├── 5.2 需求工程│ ├── 需求获取与分析│ ├── 需求规格说明│ └── 需求验证与管理├── 5.3 软件设计│ ├── 设计原则(SOLID 等)│ ├── 设计模式(23 种 GoF)│ └── 架构模式├── 5.4 软件测试│ ├── 测试类型与策略│ └── 测试方法├── 5.5 软件维护└── 5.6 项目管理基础二、核心考点详解
考点 1:软件过程模型(高频选择题 + 案例分析)
| 瀑布模型 | |||
| V 模型 | |||
| 增量模型 | |||
| 演化模型 | |||
| 螺旋模型 | |||
| 喷泉模型 | |||
| RUP |
高频考点:螺旋模型的核心特征是风险分析;增量模型强调分批交付可运行产品;RUP 四个阶段为初始、细化、构建、交付。
考点 2:需求工程
2.1 需求分类
| 功能需求 | ||
| 非功能需求 | ||
| 设计约束 | ||
| 业务规则 |
2.2 需求获取方法
- 访谈法
与利益相关者面对面交流 - 观察法
到现场观察业务流程 - 问卷法
大规模收集需求 - 原型法
通过原型确认需求 - 头脑风暴
集体创意
2.3 需求分析工具
考点 3:软件设计原则(高频考点)
3.1 面向对象设计原则(SOLID + 其他)
| 单一职责原则 | |||
| 开闭原则 | |||
| 里氏替换原则 | |||
| 接口隔离原则 | |||
| 依赖倒置原则 | |||
| 迪米特法则 | |||
| 合成复用原则 |
最高频:开闭原则是面向对象设计的"总纲",其他原则是实现开闭原则的手段。
3.2 设计模式(23 种 GoF 模式)
创建型模式(5 种)——关注对象如何创建:
| 工厂方法 | ||
| 抽象工厂 | ||
| 单例 | ||
| 建造者 | ||
| 原型 |
结构型模式(7 种)——关注类和对象的组合:
| 适配器 | ||
| 桥接 | ||
| 组合 | ||
| 装饰器 | ||
| 外观 | ||
| 享元 | ||
| 代理 |
行为型模式(11 种)——关注对象间的通信:
| 策略 | ||
| 模板方法 | ||
| 观察者 | ||
| 迭代器 | ||
| 职责链 | ||
| 命令 | ||
| 状态 | ||
| 中介者 | ||
| 备忘录 | ||
| 访问者 | ||
| 解释器 |
高频考法:给出 UML 类图或场景描述,判断使用的设计模式。重点关注工厂方法、适配器、观察者、策略、代理、模板方法。
考点 4:软件测试
4.1 测试类型
| 单元测试 | ||
| 集成测试 | ||
| 系统测试 | ||
| 验收测试 |
4.2 测试方法
| 黑盒测试 | ||
| 白盒测试 | ||
| 灰盒测试 |
白盒测试覆盖强度递增:
语句覆盖 < 判定覆盖 < 条件覆盖 < 判定/条件覆盖 < 条件组合覆盖 < 路径覆盖高频考点:路径覆盖是最强的覆盖标准,但路径数可能指数级增长。
4.3 集成测试策略
| 自顶向下 | ||
| 自底向上 | ||
| 三明治 |
易混淆:自顶向下用桩模块(模拟被调用的下层模块),自底向上用驱动模块(模拟调用上层模块的主程序)。
考点 5:CMM/CMMI(能力成熟度模型)
高频考点:CMM 5 个级别的名称和特征是必记内容,尤其注意 2 级和 3 级的区别。
三、历年真题解析
【真题 2021 年·综合知识】
题目:在面向对象设计中,( )原则是指"一个软件实体应当对扩展开放,对修改关闭"。
A. 单一职责原则B. 里氏替换原则C. 开闭原则D. 依赖倒置原则
答案:C
解析:开闭原则(Open-Closed Principle)是面向对象设计的核心原则,要求系统在不修改现有代码的前提下扩展功能。策略模式、模板方法等都是实现开闭原则的手段。
【真题 2022 年·综合知识】
题目:某系统需要对用户输入的字符串进行多种格式的校验(邮箱、手机号、身份证号等),且未来可能增加新的校验类型。最适合使用的设计模式是( )。
A. 单例模式B. 策略模式C. 适配器模式D. 桥接模式
答案:B
解析:策略模式将各种校验算法封装为独立的策略类,通过统一接口调用,新增校验类型只需添加新的策略类,符合开闭原则。
【真题 2023 年·案例分析】
题目:某电商平台采用自顶向下的集成测试策略。在测试过程中,测试人员需要使用(1)来模拟尚未开发完成的下层模块。请说明(1)的名称和作用,并比较自顶向下与自底向上集成测试策略的差异。
参考答案:
(1)为桩模块(Stub)。
桩模块的作用是模拟被测模块所调用的下层模块的功能,返回预设的测试数据,使得上层模块可以在下层模块尚未完成的情况下进行集成测试。
考点 6:软件项目管理基础
软件估算方法:
| COCOMO II | |
| 功能点分析(FPA) | |
| 类比估算 | |
| 专家判断 |
软件配置管理(SCM):
配置项识别、版本控制、变更控制、配置审计、状态报告 基线(Baseline):经正式评审和批准的配置项集合
软件质量保证(SQA):
技术评审(走查、审查、检查) 过程审计 度量分析
考点 7:McCabe 圈复杂度
圈复杂度(Cyclomatic Complexity):衡量程序控制流复杂程度的指标。
计算公式:
其中:e = 边数,n = 节点数,p = 连通分量数
简化计算:
V(G) = 判定节点数 + 1 V(G) = 区域数
高频考点:圈复杂度等于独立路径数,也等于最少需要的测试用例数。建议每个函数的圈复杂度不超过 10。
考点 8:内聚与耦合
耦合度(从低到高):
内聚度(从低到高):
高频考点:高内聚低耦合是软件设计的目标。功能内聚+数据耦合是最佳组合。
三、补充历年真题解析
【真题 2019 年·综合知识】
题目:某程序的控制流图中有 12 条边、8 个节点,其圈复杂度为( )。
A. 4 B. 6 C. 8 D. 10
答案:B
解析:V(G) = e - n + 2 = 12 - 8 + 2 = 6。圈复杂度 = 6,表示需要至少 6 条独立路径来覆盖程序。
【真题 2020 年·综合知识】
题目:以下关于设计模式的叙述中,正确的是( )。
A. 工厂方法模式属结构型模式B. 单例模式确保一个类只有一个实例C. 观察者模式属于创建型模式D. 适配器模式属行为型模式
答案:B
解析:单例模式确保一个类只有一个实例,属创建型模式。工厂方法是创建型(A 错),观察者是行为型(C 错),适配器是结构型(D 错)。
【真题 2022 年·综合知识】
题目:在 CMM 的“已定义级”,组织应完成的关键活动是( )。
A. 建立基本的项目管理过程B. 将软件过程标准化为组织级规范C. 使用度量数据管理过程D. 持续改进过程
答案:B
解析:CMM 第 3 级(已定义级)的核心是将软件过程标准化为组织级规范,建立组织的过程资产库。第 2 级是建立基本项目管理,第 4 级是量化管理,第 5 级是持续改进。
【真题 2023 年·案例分析】
题目:某系统采用微服务架构,各服务之间通过 REST API 通信。请分析微服务架构中使用的设计模式,并说明每个模式的作用。
参考答案:
微服务架构中常用以下设计模式:
| API 网关模式 | ||
| 断路器模式 | ||
| 策略模式 | ||
| 观察者模式 | ||
| 代理模式 | ||
| 工厂方法模式 | ||
| Saga 模式 |
每个模式的作用分析:
- API 网关
作为所有外部请求的统一入口,避免客户端直接访问内部服务,提供认证、授权、限流、路由等横切关注点 - 断路器
当服务调用失败达到阈值时自动“断开”,快速返回默认响应,避免资源耗尽,待服务恢复后自动“闭合” - Saga
将一个分布式事务拆分为多个本地事务,每个本地事务有对应的补偿操作,确保最终一致性
考点 9:需求追踪
需求追踪矩阵:将需求与设计、代码、测试用例对应关联。
考点 10:净室软件工程
净室软件工程(Cleanroom):基于数学严格性的软件开发方法。
核心思想:
基于形式化方法(集合论、序列论) 统计质量控制 增量式开发 正确性验证
技术手段:
盒结构规约:黑盒、状态盒、清晰盒 正确性验证:证明代码符合规约 统计测试:基于使用分布的随机测试
缺点:开发效率低、对开发人员数学能力要求高、不适用所有项目
考点 11:基于构件的软件工程(CBSE)
构件:可独立部署、可复用的软件单元。
构件模型:
CBSE 过程:
构件检索:查找可复用构件 构件适配:调整构件以满足需求 构件组装:将构件集成到系统中
构件组装方式:
顺序组装:构件依次执行 层次组装:构件嵌套调用 叠加组装:构件叠加增强功能
考点 12:软件风险管理
风险管理过程:
风险识别:识别潜在风险 风险分析:评估概率和影响 风险规划:制定应对策略 风险监控:跟踪风险状态
风险应对策略:
三、补充历年真题解析
真题 2020 年·综合知识
题目:以下关于净室软件工程的叙述中,不正确的是( )。
A. 净室工程基于形式化方法B. 净室工程强调在开发过程中消除缺陷C. 净室工程使用统计测试方法D. 净室工程适合所有类型的软件项目
答案:D
解析:净室工程对开发人员数学能力要求高,开发效率较低,不适合所有项目。它更适合高可靠性要求的系统。其核心是在开发过程中预防缺陷而非事后测试。
真题 2022 年·综合知识
题目:在 CBSE 中,构件组装的方式不包括( )。
A. 顺序组装 B. 层次组装C. 叠加组装 D. 并行组装
答案:D
解析:CBSE 中构件组装方式包括顺序组装、层次组装和叠加组装。并行组装不是标准的 CBSE 组装方式。
真题 2019 年·综合知识
题目:某系统需要将一个复杂对象的不同表示分离,使同样的构建过程可以创建不同的表示。应使用( )设计模式。
A. 工厂方法 B. 抽象工厂 C. 建造者 D. 原型
答案:C
解析:建造者(Builder)模式将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。适合构建复杂对象(如 XML 解析器、报表生成器)。
真题 2020 年·综合知识
题目:以下关于观察者模式的叙述中,正确的是( )。
A. 观察者模式属于创建型模式B. 观察者模式定义了对象间的一对多依赖关系C. 观察者模式不支持广播通信D. 观察者模式会导致对象间的强耦合
答案:B
解析:观察者模式属于行为型模式,定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会得到通知。它支持广播通信(C 错),松耦合(D 错)。
真题 2021 年·综合知识
题目:在 UML 中,用于描述对象之间消息传递顺序的图是( )。
A. 类图 B. 序列图(顺序图) C. 状态图 D. 活动图
答案:B
解析:序列图(顺序图)描述对象之间按时间顺序的消息传递。类图描述静态结构,状态图描述对象状态变化,活动图描述业务流程。
真题 2022 年·综合知识
题目:以下关于敏捷开发方法的叙述中,不正确的是( )。
A. Scrum 的 Sprint 通常为 2-4 周B. 敏捷宣言强调工作的软件高于详尽的文档C. XP 提倡结对编程和持续集成D. 敏捷开发不需要任何文档
答案:D
解析:敏捷开发不是不需要文档,而是强调“工作的软件高于详尽的文档”。敏捷仍然需要适当的文档,只是不追求过度文档化。
真题 2023 年·案例分析
题目:某系统需要实现一个日志记录器,确保整个系统只有一个日志实例。同时,系统需要根据不同的日志级别(DEBUG/INFO/ERROR)创建不同的日志记录器。请说明应使用哪些设计模式。
参考答案:
- 单例模式
确保整个系统只有一个日志管理器实例 - 工厂方法模式
根据不同日志级别创建不同的日志记录器 - 策略模式
不同日志级别可以采用不同的日志策略(如 DEBUG 输出到控制台,ERROR 写入文件)
// 单例模式 - 日志管理器publicclassLogManager {privatestatic LogManager instance;privateLogManager() {}publicstaticsynchronized LogManager getInstance() {if (instance == null) instance = newLogManager();return instance; }}// 工厂方法 - 根据级别创建日志记录器publicinterfaceLoggerFactory { Logger createLogger();}三、补充考点
考点 11:SOLID 原则详解
考点 12:常用设计模式场景映射
考点 13:测试覆盖强度对比
真题 2023 年·综合知识
题目:以下关于 SOLID 原则的叙述中,正确的是( )。
A. 开闭原则要求系统对修改开放B. 里氏替换原则要求子类可以替换父类而不影响程序正确性C. 依赖倒置原则要求依赖具体实现D. 接口隔离原则要求接口越大越好
答案:B
解析:里氏替换原则(LSP)要求子类可以替换父类而不影响程序正确性。开闭原则对修改关闭(A 错),依赖倒置依赖抽象(C 错),接口隔离要求接口小而精(D 错)。
真题 2021 年·综合知识
题目:以下关于测试覆盖强度的叙述中,正确的是( )。
A. 语句覆盖是最强的覆盖B. 满足条件组合覆盖一定满足路径覆盖C. 满足路径覆盖一定满足条件组合覆盖D. 条件覆盖一定满足判定覆盖
答案:C
解析:路径覆盖包含了所有可能的执行路径,因此必然包含所有条件组合。语句覆盖最弱(A 错),条件组合覆盖不一定满足路径覆盖(B 错),条件覆盖不一定满足判定覆盖(D 错)。
三、补充考点(二)
考点 14:需求变更管理
变更控制流程:
变更申请 → 2. 影响分析 → 3. CCB 审批 → 4. 变更实施 → 5. 验证确认 → 6. 发布
CCB(变更控制委员会):
需求变更管理原则:
基线化:需求基线确定后,变更必须走正式流程 影响分析:评估变更对进度、成本、质量的影响 跟踪:记录变更状态,确保变更可追溯 版本控制:需求文档纳入配置管理
考点 15:代码重构与代码异味
常见代码异味(Code Smell):
重构原则:
小步前进,每次只做一个小变更 有测试保护,重构前后运行测试 不添加新功能,只改善代码结构
考点 16:软件估算模型
COCOMO II 三种子模型:
COCOMO 基本公式:
工作量 E = A × (Size)^B × ∏EMi 开发时间 D = C × E^D A、B、C、D 为常数,EMi 为工作量乘数
功能点分析(FPA):
考点 17:持续集成/持续部署(CI/CD)
CI/CD 流水线典型阶段:
CI/CD 最佳实践:
每次提交都触发构建 构建失败立即修复(最高优先级) 测试自动化,快速反馈 构建产物只构建一次,部署多次 生产环境部署与测试环境一致
考点 18:软件质量模型
ISO/IEC 25010 质量模型(8 大质量特性):
McCall 质量模型:
考点 19:形式化方法
形式化方法分类:
形式化方法优缺点:
适用场景:航空航天、医疗设备、核电控制、金融交易核心系统
考点 20:软件产品线工程(SPL)
核心概念:
SPL 开发过程:
共性分析:识别产品线共同特征 可变性分析:识别差异点(必选/可选/替代特征) 核心资产开发:构建可复用组件库 产品派生:根据需求从核心资产组装特定产品
真题 2023 年·综合知识
题目:在软件变更管理中,CCB(变更控制委员会)的主要职责是( )。
A. 编写变更请求B. 审批或拒绝变更请求C. 实施变更D. 验证变更效果
答案:B
解析:CCB 的主要职责是评审变更请求,决定批准或拒绝变更。编写变更请求由变更提出人完成(A 错),实施变更由开发团队执行(C 错),验证变更效果由 QA 完成(D 错)。
真题 2022 年·综合知识
题目:以下关于代码重构的叙述中,不正确的是( )。
A. 重构应该小步进行B. 重构过程中可以添加新功能C. 重构前后应该运行测试D. 过长方法是常见的代码异味
答案:B
解析:重构的原则是在不改变软件外部行为的前提下改善内部结构,重构过程中不应该添加新功能。添加新功能是单独的开发活动,应该与重构分开进行。
真题 2021 年·综合知识
题目:COCOMO II 的后体系结构模型是基于( )进行估算的。
A. 对象点 B. 功能点 C. 代码行数 D. 用例点
答案:C
解析:COCOMO II 有三种子模型:应用组装模型基于对象点(A),早期设计模型基于功能点(B),后体系结构模型基于代码行数(C),是最精确的估算模型。
真题 2020 年·综合知识
题目:以下关于 CI/CD 的叙述中,正确的是( )。
A. CI 要求每次代码提交都触发构建和测试B. CD 是指代码评审(Code Review)C. 构建失败后可以延后修复D. CI/CD 只适用于小型团队
答案:A
解析:持续集成(CI)的核心是每次代码提交都触发自动构建和测试,快速发现问题。CD 是持续交付/持续部署(B 错),构建失败应立即修复(C 错),CI/CD 适用于各种规模团队(D 错)。
真题 2019 年·综合知识
题目:ISO/IEC 25010 软件质量模型中,可靠性包括的子特性不包括( )。
A. 成熟度 B. 容错性 C. 可移植性 D. 可恢复性
答案:C
解析:ISO 25010 中可靠性的子特性包括成熟度、可用性、容错性和可恢复性。可移植性是另一个独立的质量特性(与适应性、可安装性、可替换性并列)。
真题 2022 年·综合知识
题目:在形式化方法中,模型检测的主要特点是( )。
A. 可以验证无限状态系统B. 可以自动验证有限状态系统的属性C. 可以替代所有测试工作D. 只能用于硬件验证
答案:B
解析:模型检测是一种自动化的形式化验证技术,可以对有限状态系统进行穷举搜索,验证系统是否满足特定属性。不能处理无限状态(A 错),不能替代测试(C 错),可用于软件和硬件(D 错)。
真题 2021 年·综合知识
题目:以下关于软件产品线工程的叙述中,正确的是( )。
A. 软件产品线只关注代码复用B. 特征模型用于描述产品线中的可变性C. 产品线开发不需要管理共性D. 产品线工程只适用于大型企业
答案:B
解析:特征模型(Feature Model)是软件产品线工程的核心工具,用于描述产品线中各产品间的共性和可变性(必选/可选/替代特征)。产品线关注架构、组件等多层次复用(A 错),共性管理是基础(C 错),适用于各种规模组织(D 错)。
真题 2020 年·综合知识
题目:以下关于 McCall 质量模型的叙述中,正确的是( )。
A. McCall 模型只关注产品操作B. 可维护性属于产品修订维度C. 可移植性属于产品操作维度D. McCall 模型不包含安全性
答案:B
解析:McCall 模型将质量因素分为三个维度:产品操作(正确性、可靠性等)、产品修订(可维护性、灵活性、可测试性)、产品转移(可移植性、可复用性、互操作性)。可维护性属于产品修订维度(B 正确),可移植性属于产品转移(C 错)。
四、高频易错点归纳
五、本章小结
软件工程是考试中分值最高的章节之一,重点掌握:
- 过程模型
各模型的特征对比和适用场景 - SOLID 原则
5 个原则的含义和关系 - 23 种设计模式
创建型/结构型/行为型的分类,每种模式的核心思想 - 测试方法
白盒覆盖强度、集成测试策略 - CMM/CMMI
5 个成熟度级别的特征 - 设计模式场景映射
常见场景对应的推荐模式 - 测试覆盖强度
语句/判定/条件/路径覆盖的层次关系 - 需求变更管理
CCB 职责、变更控制流程、基线化 - 代码重构
常见代码异味、重构手法、重构原则 - CI/CD
持续集成流水线、最佳实践 - 软件质量模型
ISO 25010 八大质量特性、McCall 三维度 - 软件估算
COCOMO II 三种子模型、功能点分析 - 形式化方法
模型检测、定理证明、适用场景 - 软件产品线
特征模型、共性/可变性分析、核心资产