P354 · 测试与评估

检查相关输入之间的结果关系

Related-Input Invariant Oracle

除固定样本外,还检查输入变换后输出应满足的关系。

编辑审核

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

使用场景

规范化工具应排序且保留所有记录,教学输入ID为b,a,c。单个两条样例可能漏掉输入排列相关或丢记录错误,需要契约支持的关系判据。

具体做法

先手工核对小例预期a,b,c,声明幂等、排列不变和记录多重集保留。对原输入、多个排列及更大边界输入检查这些关系;重复ID按契约保留,不能误用集合掩盖丢重复。失败保存最小输入和变换,正确字面样例仍保留。无契约依据的关系不添加。

反例

只测[a,b],或者只断言幂等;恒返回空数组也说正确。

改进写法

保留b,a,c→a,b,c独立样例;再测不同排列结果相同、二次规范化不变及记录多重集不丢失。加入重复ID按契约核数量,确认恒空实现不能通过这些组合断言。

为什么这样改

关系检查扩展到更多输入变化,但独立正确例及保留约束防止退化实现空过。它检验行为之间的连接,不仅某次输出标签。

如何验证

教学normalize(b,a,c)=a,b,c,normalize(a,b,c)=a,b,c;丢c违反保留,恒空虽幂等也失败字面与多重集检查。乱序相关实现违反排列不变。这里只描述预期,不记录实测次数。

适用边界

仅断言实际契约允许的关系,若工具有去重或保留输入顺序,以上关系需调整。性质测试不保证全输入正确,生成器和边界也会漏;失败最小化不能改变原缺陷含义。

原文与版本

如何收录这些方法