测试人员对某程序实施变异测试,把边界判断“score > 60”改成“score >= 60”,形成一个非等价变异体。重新执行现有测试用例后,全部测试仍然通过。最合理的判断是()。
非等价变异体改变了程序行为,而现有测试没有让它失败,说明该变异体存活。对“>”与“>=”的替换,最直接的区分输入是边界值 score=60,因此现有测试很可能没有覆盖或没有正确断言这个边界。
选项分析
错误。测试全部通过意味着没有观察到差异,该变异体未被杀死。
正确。存活的非等价变异体暴露了测试输入或断言的不足,边界值 60 是优先补测对象。
错误。关系运算符替换后代码仍可能语法完全合法,只是行为发生细微变化。
错误。变异测试评估测试集检测人为小错误的能力,不能证明原程序绝对无缺陷。
本题为什么容易错
变异测试关注的不是“测试执行了多少行”,而是“测试是否有能力识别错误行为”。覆盖率很高的测试集仍可能因为断言弱、边界数据缺失而留下大量存活变异体。
简短答案
把“>”改成“>=”后测试仍通过,说明了什么,正确答案是 B(该变异体存活,现有用例可能缺少 score=60 的边界检查)。非等价变异体改变了程序行为,而现有测试没有让它失败,说明该变异体存活。对“>”与“>=”的替换,最直接的区分输入是边界值 score=60,因此现有测试很可能没有覆盖或没有正确断言这个边界。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 该变异体被杀死,现有用例已覆盖边界差异 | 本题干扰项 | 错误。测试全部通过意味着没有观察到差异,该变异体未被杀死。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 该变异体存活,现有用例可能缺少 score=60 的边界检查 | 本题正确答案 | 正确。存活的非等价变异体暴露了测试输入或断言的不足,边界值 60 是优先补测对象。 | 看到题干核心场景时优先联想到它 |
| 原程序一定存在语法错误 | 本题干扰项 | 错误。关系运算符替换后代码仍可能语法完全合法,只是行为发生细微变化。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 变异测试证明原程序不存在任何缺陷 | 本题干扰项 | 错误。变异测试评估测试集检测人为小错误的能力,不能证明原程序绝对无缺陷。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 该变异体被杀死,现有用例已覆盖边界差异:错误。测试全部通过意味着没有观察到差异,该变异体未被杀死。
- 原程序一定存在语法错误:错误。关系运算符替换后代码仍可能语法完全合法,只是行为发生细微变化。
- 变异测试证明原程序不存在任何缺陷:错误。变异测试评估测试集检测人为小错误的能力,不能证明原程序绝对无缺陷。
知识点详解
变异测试通过对程序做小幅、系统化修改来检验测试集的缺陷检测能力,常见变异包括关系运算符替换、算术运算符替换、条件取反和语句删除。若测试能够让变异程序失败,称为杀死变异体;否则变异体存活,可能意味着输入没有到达变化点、断言不够敏感,或该变异体与原程序在所有可行输入下等价。等价变异体无法被任何测试区分,统计变异得分时通常应从有效分母中排除。
备考速记
故意改坏还能过,先查边界和断言;能让它失败,才叫杀死变异体。
边界值在边界值场景中的作用
边界值在本题中的核心价值,是解决“测试人员对某程序实施变异测试,把边界判断“score > 60”改成“score >= 60”,形成一个非等价变异体。重新执行现有测试用例后,全部测试仍然通过。最合理的判断是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 根据测试结果判断变异体被杀死还是存活。
- 为运算符替换、条件取反等变异选择最有区分力的测试数据。
- 根据被杀死、存活和等价变异体数量计算变异得分。
边界值在软件评测师软考中的考法
软考选择题通常不会只考概念定义,还会把边界值放到边界值场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
这题别被“全部通过”骗了。回归测试里全通过可能是好消息,变异测试却故意把程序改坏,再看用例能不能抓住。如果连 > 和 >= 的差别都没触发,测试集就该补一条 60 分边界用例。
考点定位
测试用例让变异程序产生可观察失败称为杀死变异体;非等价变异体仍通过测试,提示测试集的检测能力可能不足。
易错提醒
- 把测试通过直接理解为变异体已被杀死。
- 没有先排除等价变异体,就机械降低变异得分。
- 只补输入数据,不检查测试断言是否真正验证了输出。
备考提示
- 遇到关系运算符变异,优先寻找等号附近的边界输入。
- 理解变异得分时,要关注被杀死的非等价变异体占比,并说明等价变异体的处理口径。
你可能还想了解
- 变异测试中的存活变异体说明什么?
- 如何区分被杀死变异体和等价变异体?
- 变异得分怎样计算?
- 代码覆盖率高为什么仍可能有存活变异体?
本文小结
把 > 改成 >= 后测试仍全部通过,说明这个非等价变异体存活,测试集没有识别行为差异。对本题而言,最该补的是 score=60 的边界输入和能够验证结果的有效断言。