metamorphic-testing

4 posts

Metamorphic testing 发现了 147 个编译器 bug 和一个自动驾驶汽车缺陷。它是这样工作的。

Metamorphic testing 在 GCC、LLVM、Vulkan shader 编译器和 ADAS 模拟器中发现了真实 bug。本文用可运行的代码解释这项技术,并说明它在你 test suite 中的定位。

Metamorphic testing 在 GCC 和 LLVM 中发现了 147 个已确认的 bug,在汽车 OEM 使用的商用 ADAS 模拟器中发现了缺陷,并在一辆自动驾驶汽车撞死行人前八天,在其感知系统中发现了一个致命缺陷。这项技术听起来很学术,但这些 bug 并非理论虚构。 问题在于 oracle…

大语言模型能建议 Metamorphic Relations,但它们无法保证正确性

大语言模型在发现 test oracles 时是个不错的头脑风暴伙伴,但它们会产生幻觉性质,并遗漏领域约束。以下是如何在不发布虚假测试的前提下使用它们。

你需要测试一个函数,它的正确输出事先无法知道。路由优化器、情感分类器、物理模拟都可以。你读过 metamorphic testing:找到输入和输出之间必须成立的关系,然后测试这些关系而不是精确值。 问题在于如何想出这些关系。你盯着函数签名,脑子里一片空白。 于是你去问大语言模型。它在几秒内就抛出了十条…

大多数 Metamorphic Relations 都是摆设。以下是如何挑出真正有用的。

并非所有 metamorphic relations 都能捕获 bug。弱关系给你虚假信心,强关系才能发现真正的缺陷。以下是如何区分两者,并构建一组真正有效的关系。

你为定价引擎写了十二条 metamorphic relations。每个测试都通过了,你对自己的覆盖率感觉良好。 然后有客户报告批量折扣算反了。你检查自己的关系套件,没有一个测试失败。你有加法一致性、单调性和幂等性的关系,却没有一个能捕获折扣乘数中的符号错误。 这是 metamorphic testing…

正确答案未知时,我该如何测试代码?

Metamorphic testing 让你无需知道确切的预期输出就能验证代码正确性。本文介绍它的工作原理、局限性以及如何开始使用。

你发布了一个为支持工单打标签的机器学习模型。测试套件全绿,每个测试都通过了。 但这些测试没有一个真正检查标签是否正确。你不知道正确答案是什么,也没人知道。对于真实世界的输入,"正确"输出实际上是不可知的,于是你只能退而求其次,检查函数没有崩溃,或者输出形状符合预期。这不是测试,这是碰运气。 这就是 oracle…