P286 · 测试与评估

用独立且能发现错误的标准验证

Use an independent, mutation-sensitive oracle

独立计算预期值,并确认看似合理的错误行为也会导致测试失败。

编辑审核

以下示例与示意结果由本站编写,用于说明方法,不是模型实测结果。

使用场景

测试搜索过滤器urgent的序列化。若expected与actual都调用buildSearchQuery,同一个丢字段错误会在两边重复,等式仍通过。

具体做法

按公共契约独立推导预期,使用手工核验字面夹具,先说明哪个现实错误应使断言失败。教学契约要求tag加双引号,输入urgent预期tag:”urgent”。检查漏过滤、错误引号、空返回等合理变异是否改变被断言行为;可运行时在副本变异确认红灯,思想检查则标未执行。不要只断言常量或私有结构。

反例

expected=buildSearchQuery(urgent),actual也用同一函数;相等就说明过滤正确。

改进写法

将urgent过滤输出与独立字面tag:"urgent"比较。确认删除tag字段、返回空串或按契约错误引用时断言失败;输入边界另按契约建例。不调用被测构造器来生成预期,也不为了覆盖数字加无关断言。

为什么这样改

同源预期无法独立检出同源错误。明确要捕捉的现实变异让测试的通过含义可审查,并区分行为回归和仅检测设计变动。

如何验证

教学空串、tag缺失均不能等于tag:”urgent”。若公共契约允许其他等效编码,则比较解释后的行为并独立核预期,不能把合法重设计误报bug。变异实验记录运行与结果;未运行只称分析。

适用边界

错误敏感性只覆盖识别到的风险,不证明所有缺陷。字面预期也可能错,需独立来源与核验;过严或过宽断言都需检查。冻结来源其他任务的公平分配数字不是本查询的预期。

原文与版本

如何收录这些方法