P176 · 测试与评估

与基线比较,检查行为是否等价

Differential Baseline-Equivalence Oracle

通过差分比较判断新旧实现是否保留了要求的行为。

编辑审核

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

使用场景

升级序列化器并承诺公共行为不变。教学输入含空列表、null字段和非法日期;新版本可能正常用例通过,却改变错误类型或顺序。需要明确等价比较定义。

具体做法

固定旧版、新版及相同夹具和环境。按契约选择逐字节比较或明确语义归一,不能把重要顺序归一掉;同时比错误类别与副作用。保存逐例输出及差异,区分两版共同失败与新回归,新增边界夹具。解释批准的差异后再报告已测等价范围。

反例

只跑新版自带测试,通过就宣布完全等价;错误和空输入不需要比较。

改进写法

对旧新序列化器使用相同空列表、null和非法日期夹具。按公共契约比较输出与错误类型,保留数组顺序,记录每项差异及共同失败。未解释差异先处理,不把样例无差异扩大成全部输入等价。

为什么这样改

候选自有检查可能遗漏旧契约,差分比较提供同一输入的实际参照。明确比较定义防止归一化隐藏原本对消费者重要的差异。

如何验证

教学旧新均输出[]可记录该例一致;新版把null省略而契约要求保留,应报告差异;旧版InvalidDate、新版TypeError也要记录。两版同样错误仍是已知问题,不能算新版本修好。

适用边界

旧版也可能有缺陷,等价不证明正确。比较范围受夹具、环境和定义限制;非确定输出需受控条件或语义判据。冻结文档回退/接口对照是机制依据,不证明此序列化器测过。

原文与版本

如何收录这些方法

相关方法