软考系统架构师 · 全册考点精讲与真题实战 第 5 章 软件工程

四季读书网 1 0
软考系统架构师 · 全册考点精讲与真题实战 第 5 章 软件工程


所属篇章:上篇·综合知识预估分值: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 秒
设计约束
技术限制和标准
必须使用 Java 开发
业务规则
领域规则
退货期限为 30 天

2.2 需求获取方法

  • 访谈法
    与利益相关者面对面交流
  • 观察法
    到现场观察业务流程
  • 问卷法
    大规模收集需求
  • 原型法
    通过原型确认需求
  • 头脑风暴
    集体创意

2.3 需求分析工具

工具
方法
适用场景
DFD(数据流图)
结构化分析
数据处理系统
实体关系图(ER 图)
数据建模
数据库设计
状态转换图(STD)
行为建模
实时系统
用例图
面向对象分析
功能需求捕获

考点 3:软件设计原则(高频考点)

3.1 面向对象设计原则(SOLID + 其他)

原则
缩写
核心思想
考查频率
单一职责原则
SRP
一个类只负责一个职责
★★★★
开闭原则
OCP
对扩展开放,对修改关闭
★★★★★
里氏替换原则
LSP
子类可以替换父类
★★★★
接口隔离原则
ISP
客户端不应依赖不需要的接口
★★★
依赖倒置原则
DIP
依赖抽象而非具体
★★★★
迪米特法则
LoD
最少知识原则
★★★
合成复用原则
CRP
优先使用组合而非继承
★★★

最高频:开闭原则是面向对象设计的"总纲",其他原则是实现开闭原则的手段。

3.2 设计模式(23 种 GoF 模式)

创建型模式(5 种)——关注对象如何创建:

模式
核心思想
典型应用
工厂方法
定义创建对象的接口,由子类决定实例化哪个类
日志框架(不同输出目标)
抽象工厂
创建一系列相关对象的接口
跨平台 UI 组件族
单例
确保一个类只有一个实例
配置管理器、连接池
建造者
分步构建复杂对象
StringBuilder、SQL 查询构建器
原型
通过克隆创建新对象
深拷贝/浅拷贝

结构型模式(7 种)——关注类和对象的组合:

模式
核心思想
典型应用
适配器
将一个接口转换为期望的接口
旧系统适配新接口
桥接
将抽象与实现分离
多维度变化的图形绘制
组合
树形结构表示部分-整体
文件系统、菜单
装饰器
动态添加职责
Java I/O 流
外观
提供统一的高层接口
编译器接口
享元
共享细粒度对象
字符串池、字符对象
代理
为对象提供替身
远程调用、延迟加载

行为型模式(11 种)——关注对象间的通信:

模式
核心思想
典型应用
策略
封装可互换的算法
排序策略、支付方式
模板方法
定义骨架,子类填充步骤
框架的钩子方法
观察者
一对多依赖,状态变化通知
事件监听、MVC
迭代器
顺序访问聚合元素
Java Iterator
职责链
请求沿链传递直到被处理
审批流程、过滤器链
命令
将请求封装为对象
撤销操作、宏命令
状态
状态改变行为
订单状态机
中介者
通过中介对象封装交互
聊天室、MVC 控制器
备忘录
保存和恢复对象状态
撤销/重做
访问者
在不改变类的前提下添加操作
编译器 AST 遍历
解释器
定义语言的语法并解释执行
表达式求值、规则引擎

高频考法:给出 UML 类图或场景描述,判断使用的设计模式。重点关注工厂方法、适配器、观察者、策略、代理、模板方法

考点 4:软件测试

4.1 测试类型

测试级别
测试对象
执行者
单元测试
单个模块/类
开发人员
集成测试
模块间接口
开发人员/测试人员
系统测试
整个系统
测试人员
验收测试
业务需求
用户/客户

4.2 测试方法

方法
特征
技术
黑盒测试
不关心内部实现
等价类划分、边界值分析、判定表、因果图
白盒测试
基于内部结构
语句覆盖、判定覆盖、条件覆盖、路径覆盖
灰盒测试
介于两者之间
集成测试中常用

白盒测试覆盖强度递增

语句覆盖 < 判定覆盖 < 条件覆盖 < 判定/条件覆盖 < 条件组合覆盖 < 路径覆盖

高频考点:路径覆盖是最强的覆盖标准,但路径数可能指数级增长。

4.3 集成测试策略

策略
方法
优缺点
自顶向下
从主模块开始,用桩模块(Stub)
早期验证主流程,底层测试晚
自底向上
从底层模块开始,用驱动模块(Driver)
底层测试充分,顶层测试晚
三明治
两端同时进行
综合优势,但集成复杂

易混淆:自顶向下用桩模块(模拟被调用的下层模块),自底向上用驱动模块(模拟调用上层模块的主程序)。

考点 5:CMM/CMMI(能力成熟度模型)

级别
名称
特征
1
初始级
无序、混乱、依赖个人英雄
2
已管理级
基本项目管理、可重复成功
3
已定义级
过程标准化、组织级规范
4
量化管理级
用度量数据管理过程
5
优化级
持续改进过程

高频考点:CMM 5 个级别的名称和特征是必记内容,尤其注意 2 级和 3 级的区别。


三、历年真题解析

【真题 2021 年·综合知识】

题目:在面向对象设计中,(  )原则是指"一个软件实体应当对扩展开放,对修改关闭"。

A. 单一职责原则B. 里氏替换原则C. 开闭原则D. 依赖倒置原则

答案:C

解析:开闭原则(Open-Closed Principle)是面向对象设计的核心原则,要求系统在不修改现有代码的前提下扩展功能。策略模式、模板方法等都是实现开闭原则的手段。

【真题 2022 年·综合知识】

题目:某系统需要对用户输入的字符串进行多种格式的校验(邮箱、手机号、身份证号等),且未来可能增加新的校验类型。最适合使用的设计模式是(  )。

A. 单例模式B. 策略模式C. 适配器模式D. 桥接模式

答案:B

解析:策略模式将各种校验算法封装为独立的策略类,通过统一接口调用,新增校验类型只需添加新的策略类,符合开闭原则。

【真题 2023 年·案例分析】

题目:某电商平台采用自顶向下的集成测试策略。在测试过程中,测试人员需要使用(1)来模拟尚未开发完成的下层模块。请说明(1)的名称和作用,并比较自顶向下与自底向上集成测试策略的差异。

参考答案

(1)为桩模块(Stub)

桩模块的作用是模拟被测模块所调用的下层模块的功能,返回预设的测试数据,使得上层模块可以在下层模块尚未完成的情况下进行集成测试。

比较项
自顶向下
自底向上
测试顺序
从顶层主控模块开始
从底层基础模块开始
辅助模块
需要桩模块(Stub)
需要驱动模块(Driver)
早期验证
可验证主流程和系统框架
可验证基础功能和工具模块
缺陷定位
较困难(缺陷可能在桩模块中)
较容易
并行测试
困难
可并行测试底层模块

考点 6:软件项目管理基础

软件估算方法

方法
说明
COCOMO II
基于代码行数的参数估算
功能点分析(FPA)
基于功能点的估算
类比估算
参考类似项目
专家判断
Delphi 法

软件配置管理(SCM)

  • 配置项识别、版本控制、变更控制、配置审计、状态报告
  • 基线(Baseline):经正式评审和批准的配置项集合

软件质量保证(SQA)

  • 技术评审(走查、审查、检查)
  • 过程审计
  • 度量分析

考点 7:McCabe 圈复杂度

圈复杂度(Cyclomatic Complexity):衡量程序控制流复杂程度的指标。

计算公式

V(G)=en+2pV(G) = e - n + 2pV(G)=en+2p

其中: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 模式
架构模式
实现分布式事务的编排与补偿

每个模式的作用分析:

  1. API 网关
    作为所有外部请求的统一入口,避免客户端直接访问内部服务,提供认证、授权、限流、路由等横切关注点
  2. 断路器
    当服务调用失败达到阈值时自动“断开”,快速返回默认响应,避免资源耗尽,待服务恢复后自动“闭合”
  3. Saga
    将一个分布式事务拆分为多个本地事务,每个本地事务有对应的补偿操作,确保最终一致性

考点 9:需求追踪

需求追踪矩阵:将需求与设计、代码、测试用例对应关联。

追踪方向
说明
正向追踪
需求→设计→代码→测试
反向追踪
测试→代码→设计→需求

考点 10:净室软件工程

净室软件工程(Cleanroom):基于数学严格性的软件开发方法。

核心思想

  • 基于形式化方法(集合论、序列论)
  • 统计质量控制
  • 增量式开发
  • 正确性验证

技术手段

  • 盒结构规约:黑盒、状态盒、清晰盒
  • 正确性验证:证明代码符合规约
  • 统计测试:基于使用分布的随机测试

缺点:开发效率低、对开发人员数学能力要求高、不适用所有项目

考点 11:基于构件的软件工程(CBSE)

构件:可独立部署、可复用的软件单元。

构件模型

模型
特点
3C 模型
概念、内容、语境
REBOOT 模型
刻面分类

CBSE 过程

  1. 构件检索:查找可复用构件
  2. 构件适配:调整构件以满足需求
  3. 构件组装:将构件集成到系统中

构件组装方式

  • 顺序组装:构件依次执行
  • 层次组装:构件嵌套调用
  • 叠加组装:构件叠加增强功能

考点 12:软件风险管理

风险管理过程

  1. 风险识别:识别潜在风险
  2. 风险分析:评估概率和影响
  3. 风险规划:制定应对策略
  4. 风险监控:跟踪风险状态

风险应对策略

策略
说明
规避
改变计划避免风险
转移
将风险转给第三方
缓解
降低风险概率或影响
接受
主动或被动接受

三、补充历年真题解析

真题 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)创建不同的日志记录器。请说明应使用哪些设计模式。

参考答案

  1. 单例模式
    确保整个系统只有一个日志管理器实例
  2. 工厂方法模式
    根据不同日志级别创建不同的日志记录器
  3. 策略模式
    不同日志级别可以采用不同的日志策略(如 DEBUG 输出到控制台,ERROR 写入文件)
// 单例模式 - 日志管理器publicclassLogManager {privatestatic LogManager instance;privateLogManager() {}publicstaticsynchronized LogManager getInstance() {if (instance == null) instance = newLogManager();return instance;    }}// 工厂方法 - 根据级别创建日志记录器publicinterfaceLoggerFactory {    Logger createLogger();}

三、补充考点

考点 11:SOLID 原则详解

原则
说明
违反后果
S 单一职责
一个类只有一个变更原因
类过于庞大,难以维护
O 开闭原则
对扩展开放,对修改关闭
每次变更都需修改核心代码
L 里氏替换
子类可以替换父类
继承关系不成立
I 接口隔离
客户端不依赖不需要的接口
臃肿的接口
D 依赖倒置
依赖抽象而非具体实现
层间紧耦合

考点 12:常用设计模式场景映射

场景
推荐模式
理由
多种产品系列
抽象工厂
创建相关产品族
复杂对象构建
建造者
分离构建与表示
接口不兼容
适配器
转换接口
动态功能增强
装饰器/代理
透明增强
算法切换
策略
封装可替换算法
状态变化行为
状态
状态驱动行为
事件通知
观察者
一对多依赖
复杂子系统简化
外观
统一接口
职责链处理
职责链
多级处理

考点 13:测试覆盖强度对比

覆盖
说明
强度
语句覆盖
每条语句至少执行一次
最弱
判定覆盖
每个判定真假分支都执行
较强
条件覆盖
每个条件真假都取过
较强
判定-条件覆盖
判定+条件覆盖
更强
条件组合覆盖
所有条件组合都取过
最强(不含路径)
路径覆盖
所有路径都执行
最强(但可能无限)

真题 2023 年·综合知识

题目:以下关于 SOLID 原则的叙述中,正确的是(  )。

A. 开闭原则要求系统对修改开放B. 里氏替换原则要求子类可以替换父类而不影响程序正确性C. 依赖倒置原则要求依赖具体实现D. 接口隔离原则要求接口越大越好

答案:B

解析:里氏替换原则(LSP)要求子类可以替换父类而不影响程序正确性。开闭原则对修改关闭(A 错),依赖倒置依赖抽象(C 错),接口隔离要求接口小而精(D 错)。

真题 2021 年·综合知识

题目:以下关于测试覆盖强度的叙述中,正确的是(  )。

A. 语句覆盖是最强的覆盖B. 满足条件组合覆盖一定满足路径覆盖C. 满足路径覆盖一定满足条件组合覆盖D. 条件覆盖一定满足判定覆盖

答案:C

解析:路径覆盖包含了所有可能的执行路径,因此必然包含所有条件组合。语句覆盖最弱(A 错),条件组合覆盖不一定满足路径覆盖(B 错),条件覆盖不一定满足判定覆盖(D 错)。


三、补充考点(二)

考点 14:需求变更管理

变更控制流程

  1. 变更申请 → 2. 影响分析 → 3. CCB 审批 → 4. 变更实施 → 5. 验证确认 → 6. 发布

CCB(变更控制委员会)

角色
职责
CCB 主席
主持变更评审会议
技术代表
评估技术影响和风险
业务代表
评估业务影响
项目经理
评估进度和成本影响

需求变更管理原则

  • 基线化:需求基线确定后,变更必须走正式流程
  • 影响分析:评估变更对进度、成本、质量的影响
  • 跟踪:记录变更状态,确保变更可追溯
  • 版本控制:需求文档纳入配置管理

考点 15:代码重构与代码异味

常见代码异味(Code Smell)

异味
说明
重构手法
过长方法
方法太长难以理解
提取方法
过大类
类承担太多职责
提取类、提取接口
过长参数列表
参数太多
引入参数对象
重复代码
多处相同逻辑
提取方法、提取超类
发散式变化
一个类因多种原因被修改
提取类(违反 SRP)
散弹式修改
一个变更影响多个类
内联类、移动方法
数据泥团
多个变量总是一起出现
引入参数对象
基本类型偏执
滥用基本类型
用类替换基本类型

重构原则

  • 小步前进,每次只做一个小变更
  • 有测试保护,重构前后运行测试
  • 不添加新功能,只改善代码结构

考点 16:软件估算模型

COCOMO II 三种子模型

子模型
适用阶段
说明
应用组装模型
早期
基于对象点(Object Points)
早期设计模型
架构设计后
基于功能点
后体系结构模型
详细设计后
基于代码行(最精确)

COCOMO 基本公式

  • 工作量 E = A × (Size)^B × ∏EMi
  • 开发时间 D = C × E^D
  • A、B、C、D 为常数,EMi 为工作量乘数

功能点分析(FPA)

功能类型
说明
外部输入(EI)
从外部接收数据
外部输出(EO)
向外部输出数据
外部查询(EQ)
查询数据
内部逻辑文件(ILF)
内部数据文件
外部接口文件(EIF)
引用其他系统的文件

考点 17:持续集成/持续部署(CI/CD)

CI/CD 流水线典型阶段

阶段
活动
工具示例
代码提交
代码合并、触发构建
Git、SVN
构建
编译、打包
Maven、Gradle、npm
静态分析
代码质量检查
SonarQube、Checkstyle
单元测试
运行单元测试
JUnit、pytest
集成测试
运行集成测试
Testcontainers
部署
部署到测试/生产环境
Docker、K8s、Ansible
监控
监控运行状态
Prometheus、Grafana

CI/CD 最佳实践

  • 每次提交都触发构建
  • 构建失败立即修复(最高优先级)
  • 测试自动化,快速反馈
  • 构建产物只构建一次,部署多次
  • 生产环境部署与测试环境一致

考点 18:软件质量模型

ISO/IEC 25010 质量模型(8 大质量特性):

质量特性
子特性
功能适合性
功能完备性、功能正确性、功能适合性
性能效率
时间特性、资源利用率、容量
兼容性
共存性、互操作性
可用性
可学习性、可操作性、用户界面美学
可靠性
成熟度、可用性、容错性、可恢复性
安全性
机密性、完整性、不可否认性、真实性
可维护性
模块化、可分析性、可修改性、可测试性
可移植性
适应性、可安装性、可替换性

McCall 质量模型

维度
质量因素
产品操作
正确性、可靠性、效率、完整性、可用性
产品修订
可维护性、灵活性、可测试性
产品转移
可移植性、可复用性、互操作性

考点 19:形式化方法

形式化方法分类

方法
说明
工具
模型检测
自动验证有限状态系统
SPIN、NuSMV
定理证明
数学证明系统正确性
Coq、Isabelle
抽象解释
近似分析程序行为
Astree
类型系统
编译时检查程序属性
Agda、Idris

形式化方法优缺点

优点
缺点
可以发现传统测试无法发现的缺陷
成本高,需要专业知识
提供数学级别的正确性保证
不适合大规模系统
适合安全关键系统
工具学习曲线陡

适用场景:航空航天、医疗设备、核电控制、金融交易核心系统

考点 20:软件产品线工程(SPL)

核心概念

概念
说明
软件产品线
共享共同特性的一组软件系统
可变性管理
管理系统间的共性和差异
特征模型
描述产品线可变性的模型
核心资产
产品线中可复用的组件和架构

SPL 开发过程

  1. 共性分析:识别产品线共同特征
  2. 可变性分析:识别差异点(必选/可选/替代特征)
  3. 核心资产开发:构建可复用组件库
  4. 产品派生:根据需求从核心资产组装特定产品

真题 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 错)。


四、高频易错点归纳

易错点
正确理解
螺旋模型就是迭代模型
螺旋模型的核心是风险分析,不仅仅是迭代
白盒测试比黑盒测试好
两者互补,白盒关注结构,黑盒关注功能
适配器 = 桥接
适配器改变已有接口,桥接分离抽象与实现
组合模式是结构型模式
正确,组合属于结构型(7 种之一)
自顶向下用驱动模块
自顶向下用桩模块,自底向上用驱动模块
重构可以添加新功能
重构不改变外部行为,添加新功能是单独活动
构建失败可以延后修复
CI 中构建失败是最高优先级,必须立即修复
COCOMO II 只有一种模型
COCOMO II 有三种子模型(应用组装/早期设计/后体系结构)

五、本章小结

软件工程是考试中分值最高的章节之一,重点掌握:

  1. 过程模型
    各模型的特征对比和适用场景
  2. SOLID 原则
    5 个原则的含义和关系
  3. 23 种设计模式
    创建型/结构型/行为型的分类,每种模式的核心思想
  4. 测试方法
    白盒覆盖强度、集成测试策略
  5. CMM/CMMI
    5 个成熟度级别的特征
  6. 设计模式场景映射
    常见场景对应的推荐模式
  7. 测试覆盖强度
    语句/判定/条件/路径覆盖的层次关系
  8. 需求变更管理
    CCB 职责、变更控制流程、基线化
  9. 代码重构
    常见代码异味、重构手法、重构原则
  10. CI/CD
    持续集成流水线、最佳实践
  11. 软件质量模型
    ISO 25010 八大质量特性、McCall 三维度
  12. 软件估算
    COCOMO II 三种子模型、功能点分析
  13. 形式化方法
    模型检测、定理证明、适用场景
  14. 软件产品线
    特征模型、共性/可变性分析、核心资产

抱歉,评论功能暂时关闭!