软件评测师 · 高频练习

把“>”改成“>=”后测试仍通过,说明了什么?

中级 单选题 第 832 题 中等 软件评测师变异测试存活变异体测试充分性边界值
题目

测试人员对某程序实施变异测试,把边界判断“score > 60”改成“score >= 60”,形成一个非等价变异体。重新执行现有测试用例后,全部测试仍然通过。最合理的判断是()。

A 该变异体被杀死,现有用例已覆盖边界差异
B 该变异体存活,现有用例可能缺少 score=60 的边界检查
C 原程序一定存在语法错误
D 变异测试证明原程序不存在任何缺陷
题目类型:原创高频练习题 用途:用于帮助理解软件评测师相关考点和答案解析,不等同于官方真题。
正确答案
B
答案解析

非等价变异体改变了程序行为,而现有测试没有让它失败,说明该变异体存活。对“>”与“>=”的替换,最直接的区分输入是边界值 score=60,因此现有测试很可能没有覆盖或没有正确断言这个边界。

选项分析

A

错误。测试全部通过意味着没有观察到差异,该变异体未被杀死。

B

正确。存活的非等价变异体暴露了测试输入或断言的不足,边界值 60 是优先补测对象。

C

错误。关系运算符替换后代码仍可能语法完全合法,只是行为发生细微变化。

D

错误。变异测试评估测试集检测人为小错误的能力,不能证明原程序绝对无缺陷。

本题为什么容易错

变异测试关注的不是“测试执行了多少行”,而是“测试是否有能力识别错误行为”。覆盖率很高的测试集仍可能因为断言弱、边界数据缺失而留下大量存活变异体。

先看结论

简短答案

把“>”改成“>=”后测试仍通过,说明了什么,正确答案是 B(该变异体存活,现有用例可能缺少 score=60 的边界检查)。非等价变异体改变了程序行为,而现有测试没有让它失败,说明该变异体存活。对“>”与“>=”的替换,最直接的区分输入是边界值 score=60,因此现有测试很可能没有覆盖或没有正确断言这个边界。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
该变异体被杀死,现有用例已覆盖边界差异 本题干扰项 错误。测试全部通过意味着没有观察到差异,该变异体未被杀死。 看到该词不要急着选,先判断是否真正解决题干问题
该变异体存活,现有用例可能缺少 score=60 的边界检查 本题正确答案 正确。存活的非等价变异体暴露了测试输入或断言的不足,边界值 60 是优先补测对象。 看到题干核心场景时优先联想到它
原程序一定存在语法错误 本题干扰项 错误。关系运算符替换后代码仍可能语法完全合法,只是行为发生细微变化。 看到该词不要急着选,先判断是否真正解决题干问题
变异测试证明原程序不存在任何缺陷 本题干扰项 错误。变异测试评估测试集检测人为小错误的能力,不能证明原程序绝对无缺陷。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 该变异体被杀死,现有用例已覆盖边界差异:错误。测试全部通过意味着没有观察到差异,该变异体未被杀死。
  • 原程序一定存在语法错误:错误。关系运算符替换后代码仍可能语法完全合法,只是行为发生细微变化。
  • 变异测试证明原程序不存在任何缺陷:错误。变异测试评估测试集检测人为小错误的能力,不能证明原程序绝对无缺陷。
复习

知识点详解

变异测试通过对程序做小幅、系统化修改来检验测试集的缺陷检测能力,常见变异包括关系运算符替换、算术运算符替换、条件取反和语句删除。若测试能够让变异程序失败,称为杀死变异体;否则变异体存活,可能意味着输入没有到达变化点、断言不够敏感,或该变异体与原程序在所有可行输入下等价。等价变异体无法被任何测试区分,统计变异得分时通常应从有效分母中排除。

备考速记

故意改坏还能过,先查边界和断言;能让它失败,才叫杀死变异体。

边界值在边界值场景中的作用

边界值在本题中的核心价值,是解决“测试人员对某程序实施变异测试,把边界判断“score > 60”改成“score >= 60”,形成一个非等价变异体。重新执行现有测试用例后,全部测试仍然通过。最合理的判断是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 根据测试结果判断变异体被杀死还是存活。
  • 为运算符替换、条件取反等变异选择最有区分力的测试数据。
  • 根据被杀死、存活和等价变异体数量计算变异得分。
边界值在软件评测师软考中的考法

软考选择题通常不会只考概念定义,还会把边界值放到边界值场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

这题别被“全部通过”骗了。回归测试里全通过可能是好消息,变异测试却故意把程序改坏,再看用例能不能抓住。如果连 > 和 >= 的差别都没触发,测试集就该补一条 60 分边界用例。

考点定位

测试用例让变异程序产生可观察失败称为杀死变异体;非等价变异体仍通过测试,提示测试集的检测能力可能不足。

易错提醒

  • 把测试通过直接理解为变异体已被杀死。
  • 没有先排除等价变异体,就机械降低变异得分。
  • 只补输入数据,不检查测试断言是否真正验证了输出。

备考提示

  • 遇到关系运算符变异,优先寻找等号附近的边界输入。
  • 理解变异得分时,要关注被杀死的非等价变异体占比,并说明等价变异体的处理口径。

你可能还想了解

  • 变异测试中的存活变异体说明什么?
  • 如何区分被杀死变异体和等价变异体?
  • 变异得分怎样计算?
  • 代码覆盖率高为什么仍可能有存活变异体?

本文小结

把 > 改成 >= 后测试仍全部通过,说明这个非等价变异体存活,测试集没有识别行为差异。对本题而言,最该补的是 score=60 的边界输入和能够验证结果的有效断言。