Mutation Testing 核心概念

共 18 题
#

1. 变异测试的基本流程,变异算子(Statement Deletion、Operator Replacement、Condition Negation 等)如何生成变异体(Mutant)?请为每种算子举例说明。

A 变异得分越高,说明程序中的缺陷越少
B 变异测试需要对每个变异体重新编译整个项目
C 变异得分衡量的是测试套件发现程序行为偏差的能力,而非直接衡量程序缺陷数量 ✓ 正确答案
D 变异体就是程序中的真实缺陷
#

2. 变异得分(Mutation Score)的计算与解读,Killed、Survived、Equivalent 三种状态的含义与工程目标设定?

A Survived 变异体一定说明测试存在缺陷
B Killed 表示变异体被测试用例成功检测到 ✓ 正确答案
C Equivalent 变异体应计入变异得分分母
D 变异得分应总是以 100% 为目标
#

3. 等价变异体(Equivalent Mutant)的识别难题,为何无法完全自动化检测?人工判定的工程成本和缓解策略?

A 等价变异体可以百分百自动化检测
B 等价变异体判定在理论上不可判定,只能结合启发式与人工审查 ✓ 正确答案
C 等价变异体应计入分子以提升变异得分
D 等价变异体本质上就是真实缺陷
#

4. 变异测试(Mutation Testing)与覆盖率的关系,为什么高覆盖率不等于高测试有效性?变异得分如何弥补覆盖率的盲区?

A 覆盖率 100% 就代表测试有效
B 变异得分低而覆盖率高的测试,往往断言质量不足 ✓ 正确答案
C 变异测试无法发现覆盖率盲区
D 覆盖率比变异得分更严格
#

5. 变异测试在 CI 中的增量执行,如何只对变更代码生成变异体,控制执行时间与资源开销

A 必须对全部代码生成变异体才能保证质量
B 变异测试无法在 CI 中运行
C 增量变异会显著降低测试充分性
D 增量变异只对变更代码生成变异体,并结合依赖分析缩小测试范围 ✓ 正确答案
#

6. 选择性变异(Selective Mutation)与增量变异,如何在大型项目中控制变异体数量与执行时间?

A 选择性变异会使用全部变异算子
B 选择性变异与增量变异含义相同
C 选择性变异只使用精选的高效算子子集,以控制变异体数量 ✓ 正确答案
D 选择性变异会降低所有缺陷检出能力
#

7. 变异测试工具(PITest/Stryker/Mutmut)的选型依据和 CI 集成最佳实践?

A PITest 仅支持 Python
B Mutmut 是面向 Java 的变异测试工具
C 所有工具都基于同一语言
D 选型应基于语言生态、性能与 CI 集成能力 ✓ 正确答案
#

8. 变异测试结果的报告解读与团队采纳路径,变异得分如何融入质量门禁与开发反馈

A 变异报告应定位存活变异体并映射到缺失断言,驱动测试补强 ✓ 正确答案
B 变异得分应作为统一的一刀切门禁
C 变异得分低时应处罚开发
D 变异报告无需反馈给开发
#

9. 变异算子集的选择,哪些算子(条件边界、语句删除、表达式取反)缺陷发现效率最高,如何做算子裁剪?

A 所有变异算子检出效率相同
B 算术运算符替换最无效
C 算子越多越好,不应裁剪
D 条件边界、关系运算符、语句删除是高价值算子,应优先保留 ✓ 正确答案
#

10. 变异测试在安全关键代码(支付、风控、权限校验)中的应用,如何用变异得分评估核心逻辑的测试充分性?

A 安全关键代码测试只能靠人工
B 安全关键代码无需变异测试
C 变异测试无法覆盖权限校验逻辑
D 安全关键代码变异测试门槛应高于普通代码 ✓ 正确答案
#

11. 弱变异与强变异,执行后立即检查内部状态与输出比对两种检测方式的原理、成本差异与适用场景?

A 强变异成本更低
B 弱变异在变异点立即检查内部状态,成本较低 ✓ 正确答案
C 弱变异一定比强变异准确
D 两者检测方式完全相同
#

12. 变异测试与测试预言质量,弱断言(仅验证不抛错)如何导致变异误存活,如何用变异结果反推断言缺失?

A 弱断言只验证不抛错,难以察觉行为差异,导致变异误存活 ✓ 正确答案
B 弱断言不会导致变异存活
C 变异存活与断言质量无关
D 强断言会降低变异得分
#

13. 变异测试的局限性,哪些代码结构难以有效变异?变异测试在面向对象代码中的特殊挑战?

A 变异测试对所有代码结构都同样有效
B 变异测试计算开销很小
C 面向对象代码没有变异挑战
D 外部系统交互和声明性代码难以有效变异 ✓ 正确答案
#

14. 变异测试在遗留系统中的渐进引入策略,如何从关键模块开始逐步扩大变异测试覆盖范围?

A 应从关键模块小范围试点,逐步扩大覆盖范围 ✓ 正确答案
B 应一次性对全系统启用变异测试
C 遗留系统不适合引入变异测试
D 引入变异测试无需先补测试
#

15. 变异测试结果的团队沟通,变异得分低时如何向开发解释并推动用例补强,避免防御性抵触?

A 应直接处罚得分低的开发
B 应将变异存活映射为缺失断言,用具体例子推动补强 ✓ 正确答案
C 变异得分低说明代码质量差
D 变异测试结果无需和开发沟通
#

16. 增量变异测试的粒度选择,方法级 vs 类级变异对执行时间与结果可解释性的影响?

A 方法级变异执行更快但难以定位测试缺口
B 方法级变异比类级变异更完整
C 类级变异能覆盖方法间交互,但变异体更多、执行更慢 ✓ 正确答案
D 两种粒度无区别
#

17. 变异测试与用例优先级结合,变异得分高的区域能否精简用例,如何用历史数据验证?

A 变异得分高的区域绝不能精简用例
B 变异得分高的区域可基于变异体覆盖冗余分析精简用例 ✓ 正确答案
C 精简用例无需验证
D 变异得分与用例冗余无关
#

18. 高阶变异,组合多个简单变异的动机(模拟真实复杂缺陷)与成本控制,何时值得引入?

A 高阶变异就是一阶变异
B 高阶变异成本低、应广泛使用
C 高阶变异组合多个简单变异以模拟真实复杂缺陷 ✓ 正确答案
D 高阶变异不能模拟耦合缺陷