LLM-Based Robustness Testing of Microservice Applications: An Empirical Study
这项实证研究表明,提示策略显著影响大语言模型为微服务 API 生成的鲁棒性测试的多样性与覆盖范围,并揭示出由分类法引导的少样本方法在暴露不同故障模式方面优于更大的模型集成和固定提示。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你拥有一家繁忙的餐厅,其中厨房(主应用程序)和几个专业站点:沙拉吧、烧烤区、饮料站和收银台。每个站点都是一个“微服务”。它们相互沟通以完成你的订单。
现在,想象一下你想确保如果顾客做了奇怪的事情,你的餐厅不会崩溃。也许他们尝试订购负数量的沙拉,或者尝试在没有信用卡的情况下付款,或者发送一条太长而无法阅读的消息。这被称为鲁棒性测试:故意用“坏”输入来尝试破坏系统,以查看它在哪里失败。
问题在于,人类会感到疲惫。我们无法想到顾客可能做的每一件怪事。因此,本文的研究人员问道:我们能否利用人工智能(特别是大型语言模型或 LLM)来为我们构思这些奇怪的测试?
以下是他们发现的简单解释:
1. 设置:人工智能厨师
研究人员聘请了三位不同的“人工智能厨师”(不同规模和专长的人工智能模型)来编写这些测试。他们向它们提供了餐厅的菜单(API 规范),并要求它们生成测试。
他们尝试了7 种不同的提问方式(称为“提示策略”):
- 白板: 只说“写一些测试”。
- 严格经理: 给它们一份确切需要测试的检查清单。
- 老师: 先向它们展示坏测试的例子。
- 思考者: 要求它们在写作前先逐步思考。
- 专家指南: 向它们提供一份关于事物如何可能出错的规则手册,以及特定棘手情况的示例。
2. 重大发现:提问方式比提问对象更重要
最令人惊讶的发现是,你提问的方式比使用哪个人工智能更重要。
- “严格经理”陷阱: 当它们给人工智能一份严格的检查清单(“结构化”提示)时,所有三个人工智能都写出了完全相同的测试。这就像给三位不同的厨师完全相同的食谱卡;他们都做了完全相同的菜。这很糟糕,因为如果食谱有盲点,你就会错过它。
- “专家指南”的成功: 当它们给人工智能一本规则手册加上棘手情况的清晰示例(例如“缺少键”与“拥有空键”之间的区别)时,人工智能开始以不同的方式思考。它们发现了其他模型遗漏的独特错误。
类比: 想象你正在房子里寻找丢失的钥匙。
- 如果你告诉三个不同的人,“在厨房找”,他们都会去厨房找。如果钥匙不在那里,你就一无所获。
- 如果你告诉他们,“在厨房找,但也要检查冰箱、烤面包机和猫的床”,他们就会分散开来,找到更多的地方。
- 该论文发现,改变如何告诉人工智能去寻找(提示)比雇佣一个“更好”的人工智能更有效。
3. “代码专家”悖论
其中一个人工智能是“代码专家”(专门训练用于编写代码)。你可能会认为这最擅长发现错误。
- 问题: 当被要求只是“批评并改进”自己的工作(一种称为“自我优化”的策略)时,这位专家写出了完美的代码,但实际上并没有检查错误。这就像一位厨师做了一块漂亮的蛋糕,却忘了尝一尝看是否烤焦了。
- 解决方法: 当研究人员给这位专家提供“专家指南”(带有示例的规则手册)时,它突然变成了表现最好的模型,发现了比其他任何组合更多的错误。规则手册赋予了它“对抗性意图”——即尝试破坏事物的思维模式,这是其代码训练本身无法提供的。
4. “零样本”惊喜
有一种策略是它们完全不给人工智能任何指令,只提供菜单。
- 结果: 这个人人工智能发现了其他模型遗漏的一种特定类型的错误:基于状态的错误。
- 类比: 其他人工智能专注于“食材是否新鲜?”(检查数据)。而“零样本”人工智能则在思考:“等等,顾客是否在点主菜之前尝试点了甜点?”(检查流程)。
- 教训: 即使是“愚蠢”或无指导的人工智能也能发现高度受指导的人工智能所遗漏的奇怪逻辑错误,因为受指导的人工智能过于关注规则。
5. “键缺失”与“值为空”的混淆
该论文强调了人工智能存在的一种特定混淆。
- 规则: “如果值缺失,将其设置为 null。”
- 人工智能的错误: 人工智能将其解释为“将值设置为空字符串”(如
name="")。 - 现实: 在计算机系统中,
name=""(空)和name(完全缺失)是两个完全不同的事物,它们以不同的方式破坏系统。 - 解决方案: 在研究人员向它们展示两者的具体示例之前,人工智能无法区分。一旦它们看到了区别,它们就能测试这两种情况。
关键要点总结
- 不要只雇佣更大的人工智能: 拥有更好提示的小人工智能可以击败拥有糟糕提示的巨型人工智能。
- 不要太严格: 如果你给人工智能一份僵化的检查清单,它们都会做完全相同的事情。你需要给它们规则,但让它们在创作上保持自由。
- 展示,而不仅仅是讲述: 如果你想让人工智能理解细微的差别(例如“缺失”与“空”),你必须向它们展示示例。
- 混合你的策略: 为了发现最多的错误,你不应该只运行一种测试。你应该混合运行:一些严格测试、一些受指导测试,甚至一些没有指令的“万能”测试。
简而言之,该论文证明,如何与人工智能交谈是发现软件错误的秘密武器,而不仅仅是人工智能本身的大小。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。