AI写的测试只是重复实现,怎样增加能发现真实错误的样本?
测试只是重复实现时,代码和断言可能共享同一个错误。先把需求写成可观察规则,用人工可推导的样本或独立依据确定预期,再补与任务相关的边界和性质。
先从这里排查
测试只是重复实现时,代码和断言可能共享同一个错误。先把需求写成可观察规则,用人工可推导的样本或独立依据确定预期,再补与任务相关的边界和性质。检查测试能否拒绝一个明确的错误变体,比单纯增加断言数量更能说明它有能力发现问题。
找出断言是否照抄同一计算过程
适用于测试把生产公式再写一遍,或只断言结果非空,却没有检查关键内容的情况。先选最重要的一条业务约定,说明输入、预期与推导理由。覆盖率高只表示代码路径执行过,不能证明期望值正确;快照记录了当前结果,也不自动证明当前行为符合需求。
从用户可观察规则确定独立期望
查看断言是否调用被测函数来计算自身期望,或复用了生产代码中的同一辅助逻辑。区分确实独立的参考实现与换个变量名的复制。测试中的正常样本如果都过于简单,多个错误算法也可能得到相同答案,需要寻找能区分正确与错误行为的具体边界。
加入边界性质及针对性错误变体
增加人工能核对的案例、相关边界及合理不变量,例如重排输入不应改变集合性统计。对错误变体做针对性检查,确认漏掉一个条件或改变比较符会导致测试失败。性质和变异都应围绕真实需求,不能为了杀死无意义变体加入与外部行为无关的内部断言。
确认测试能拒绝具体错误实现
先展示某个已知错误实现被测试拒绝,再确认正确实现通过同一规则。检查失败信息能指出具体样本和违背的约定,便于定位。对于多个合法输出的任务,应验证合法性而非固定唯一文本;如果只重录快照或修改期望迎合当前输出,需要重新核对需求依据。
本文没有运行变异测试或给出覆盖率和检出率数字。测试质量取决于独立预期和任务理解,工具报告不能替代这一判断。随机性质测试也需要保留可复现失败输入;对可逆低影响的小改动,不必为了形式添加大量与风险无关的测试,重点是能捕捉实质错误。
核对来源
以下资料用于核对概念和方法。文中的示例与测试范围分别注明,实际使用时请核对所用工具的版本。