(TesterHome 社区编译整理)

传统测试生成技术难以针对特定高影响故障(如安全、隐私问题)。近日,美国 Meta 公布了一项新的软件测试领域应用成果——引入由大语言模型驱动的 bug 捕捉工具,他们称这是一次软件测试的变革。

这一工具可以通过突变测试结合 LLM,将自然语言描述的软件问题转化为针对性测试用例。

它是什么?

Meta 的自动合规性强化 (ACH) 工具是一种基于 LLM 的突变引导式测试生成系统。ACH 通过在源代码中生成特定于特定关注领域的未检测到的故障(突变体)并使用这些突变体生成测试来强化平台以防止回归。例如,当应用于隐私时,ACH 会自动搜索与隐私相关的故障并防止它们将来进入系统,最终强化代码库以降低任何隐私回归的风险。

ACH 会自动生成针对特定类型故障的单元测试。Meta 用纯文本向 ACH 描述他们关心的故障。描述可能不完整,甚至自相矛盾,但 ACH 仍然会生成测试,证明其能够捕获所描述的错误。

传统上,自动化测试生成技术仅仅是为了增加代码覆盖率。正如每个测试人员所知,这只是解决方案的一部分,因为增加覆盖率并不一定能发现错误。ACH 完全背离了这一传统,因为它针对的是特定错误,而不是未发现的代码,尽管它通常也会在定位错误的过程中增加覆盖率。此外,由于 ACH 建立在有保证的 LLM 软件工程原则之上,因此它可以保证其测试确实能捕获所描述的错误类型。

Meta 的新研究论文 “基于变异引导的 LLM 的 Meta 测试生成” 详细介绍了 ACH 的底层科学基础以及如何将 ACH 应用于隐私测试,但这种方法可以应用于任何类型的回归测试。

工作原理

突变测试是一种故意将错误(突变体)引入源代码(使用版本控制将它们排除在生产之外)以评估现有测试框架检测这些变化的能力的方法,这种测试方法已经研究了几十年。但是,尽管如此,突变测试仍然难以部署。

在早期的方法中,突变体本身会自动生成(通常使用基于规则的方法)。但这种方法产生的突变体在它们实际代表的关注程度方面并不特别现实。

最重要的是,即使突变体被自动生成,人类仍然必须手动编写测试来杀死突变体(捕获故障)。

编写这些测试是一个艰苦而费力的过程。因此,工程师们面临着一个双重问题:即使完成了编写测试以捕获突变的所有工作,也无法保证测试能够捕获自动生成的突变。

通过利用 LLM,可以生成代表实际问题的突变体,同时还可以通过生成测试来自动捕获错误,从而节省人力。ACH 将自动测试生成技术与大型语言模型 (LLM) 的功能相结合,以生成与测试关注领域高度相关的突变体以及保证捕获真正重要的错误的测试。

总体来说,ACH 的工作分为三个步骤:

1.一位工程师描述了他们所担心的错误类型。
2.ACH 使用该描述自动生成大量错误。
3.ACH 使用生成的错误来自动生成大量捕获它们的测试。

在 Meta,目前已将 ACH 辅助测试应用于多个平台,包括 Facebook Feed、Instagram、Messenger 和 WhatsApp。根据自己的测试得出结论,工程师发现 ACH 有助于针对特定问题强化代码,并且即使 ACH 生成的测试不直接解决特定问题,也发现了其他好处。


ACH 系统架构的顶层概述。该系统利用 LLM 生成故障,根据可能的等效项进行检查,然后生成测试以捕获这些故障。

为何重要

Meta 拥有大量的数据系统,并使用许多不同的编程语言、框架和服务来支持 Meta 的应用和产品系列。但是,Meta 遍布全球的数千名工程师如何确保他们的代码可靠,并且不会产生会对应用程序性能产生负面影响的错误,从而导致隐私风险?答案在于 LLM。

基于 LLM 的测试生成和基于 LLM 的突变生成并非新鲜事物,但这是它们首次被结合并部署在大规模工业系统中。生成突变和测试以杀死它们传统上是难以扩展的过程。由于 LLM 是概率性的,不需要依赖严格定义的规则来做出决策,因此它们使我们能够非常高效地解决这个等式的两边——生成突变和测试以杀死它们——并且具有很高的准确性。

这种新方法大大提高了自动化测试生成形式的现代化程度,并帮助软件工程师从各种来源(以前的故障、同事、用户要求、监管要求等)收集关注点,并有效地将它们从自由格式的文本转换为可操作的测试——并保证测试能够捕捉到他们正在寻找的故障。

ACH 可应用于任何类别的故障,并对加强未来回归和优化测试本身产生重大影响。

下一步

Meta 公司称,他们的创新方法结合了基于 LLM 的测试生成和突变生成,有助于实现该领域复杂的技术组织工作流程自动化。这项创新有可能简化风险评估、减少开发人员的认知负担,并最终打造更安全的在线生态系统。“我们致力于扩大部署领域、开发测量突变相关性的方法以及检测现有故障,以推动全行业采用合规的自动化测试生成。”


↙↙↙阅读原文可查看相关链接,并与作者交流