2025-03-25-中智凯灵_北京_科技-大语言模型时代的变异分析_54页_5mb
报告摘要
2024 AI+研发数字峰会总结
核心内容
本次峰会聚焦于AI驱动研发变革,特别是大语言模型在软件测试与变异分析中的应用。会议强调了软件正确性的重要性,并讨论了当前软件测试中面临的主要挑战,如生成高质量变异、可扩展性不足、等价变异体等问题。同时,介绍了基于大语言模型的变异生成方法以及共享计算在加速变异分析中的应用。
主要观点
1. 软件正确性至关重要
- 软件缺陷可能导致严重后果,如航空事故、系统崩溃等。
- 软件正确性指的是程序的行为与预期一致。
- 测试是软件质量保障的重要手段,但测试质量存在局限性。
2. 变异测试的发展
- 变异测试自1971年提出,是软件测试的重要方法。
- 变异体是原始程序的小型改动。
- 变异测试已从单元测试扩展到集成测试和设计阶段。
3. 变异分析
- 基于变异的缺陷定位技术是变异测试的衍生方法。
- 通过变异对测试结果的影响计算可疑度。
- 与传统的基于测试覆盖的定位方法相比,变异方法更具准确性。
关键信息
1. 变异生成的挑战
-
挑战1:生成高质量变异
- 基于规则的方法生成的变异过于简单,与真实bug差异大。
- 基于学习的方法虽能生成更多变异,但存在训练数据不足和生成大量错误变异的问题。
-
挑战2:可扩展性较低
- 变异分析的计算复杂度为 $O(M) + O(M \times N)$,其中 $M$ 为变异数,$N$ 为测试数。
- 在大规模程序中,该问题尤为突出。
-
挑战3:等价变异体
- 等价变异体不会影响测试结果,增加了测试成本。
- 判断等价变异是不可判定问题,无完美算法。
解决思路
1. 大模型时代的变异生成
- 利用大模型在代码理解和变换上的优势,生成更接近真实bug的变异。
- 通过Prompt设计和Few-shot Example提升生成质量。
- 大模型可提升变异的语法正确性、自然性和多样性。
2. 基于共享计算的加速
- 优化变异分析中的冗余计算,提升效率。
- 引入分支流计算和等价模态分析(Equivalence Modulo States)减少不必要的计算。
- 提出WinMut等工具,实现从语句到基本块的分析,进一步优化效率。
具体实现与评估
1. 基于大模型的变异生成
-
模型设置:
- 使用4个模型(包括闭源和开源)进行实验。
- GPT-3.5和GPT-4通过API调用,CodeLlama-13b和StarChat-16b通过本地运行。
-
数据集:
- Defects4J(395个真实缺陷)和ConDefects(45个无风险缺陷)。
- 针对Java语言,拥有丰富的Baseline数据。
-
评估指标:
- 生成质量:变异分数、真实缺陷检测率、耦合率、Ochiai系数。
- 可用性:编译通过率、无效变异率、等价变异率。
- 生成代价:生成时间、单位变异生成成本。
-
结果:
- GPT-3.5在变异分数和真实缺陷检测率上表现良好,但等价变异率略高。
- CodeLlama-13b在编译通过率上表现优于GPT-3.5。
- LEAM和μBERT在某些指标上表现较差,但μBERT的无效变异率接近于零。
2. 变异生成的优化
-
Prompt设计:
- 默认Prompt(P1)生成质量较高。
- 移除Few-shot Example(P2)影响生成质量。
- 添加测试(P4)有助于生成更有效的变异。
-
上下文长度:
- 上下文长度对编译通过率和可用性有一定影响。
- 3行上下文在多个指标上表现最佳。
-
Few-shot Example:
- 使用QuixBug的6个示例(QB-6a)生成质量优于其他Few-shot设置。
3. 基于共享计算的加速
- WinMut:
- 在LLVM-IR层面进行变异分析,减少冗余计算。
- 实验表明,WinMut比AccMut快5.57倍,使用更少进程。
- WinMut-Turbo进一步实现30%的加速。
总结与展望
1. 当前成果
- 大模型在生成变异方面具有显著优势,能有效提升变异的语法正确性和行为相似性。
- WinMut等工具在提升变异分析效率方面取得进展。
2. 未来方向
-
提升大模型变异生成质量:
- 探索Prompt Engineering和LLM微调。
- 研究多智能体在变异生成中的应用。
-
复杂变异加速:
- 当前加速方法主要针对简单变异,需进一步优化以适应大模型生成的复杂变异。
- 需要更全面的程序分析和计算优化策略。
工具与标准程序集
| 工具 | 语言 | 变异数量 | 项目 | 编译通过率 | 无效变异率 | 等价变异率 |
|---|---|---|---|---|---|---|
| Proteum | C | 108 | - | - | - | - |
| Milu | C | - | - | - | - | - |
| WinMut | C/Java | - | - | - | - | - |
| MuJava | Java | - | - | - | - | - |
| Major | Java | - | - | - | - | - |
| JavaLanche | Java | - | - | - | - | - |
| PITest | Java | - | - | - | - | - |
| LEAM | Java | - | - | - | - | - |
| μBERT | Java | - | - | - | - | - |
变异类型与示例
| 变异类型 | 描述 | 示例 |
|---|---|---|
| AOR | 替换算术运算符 | a + b → a - b |
| LOR | 替换逻辑运算符 | `a & b → a |
| ROR | 替换关系运算符 | a == b → a >= b |
| LVR | 替换字面值 | T → T + 1 |
| COR | 替换逻辑连接符 | `a && b → a |
| SOR | 替换位移运算符 | a >> b → a << b |
| STDC | 删除函数调用 | f() → nop |
| STDS | 删除存储 | a = 5 → nop |
| UOI | 插入一元操作 | b = a → a++; b = a |
| ROV | 替换操作数 | f(a, b) → f(b, a) |
| ABV | 取绝对值 | f(a, b) → f(abs(a), b) |
行为相似度与等价变异分析
| 指标 | GPT-3.5 | CodeLlama-13b | LEAM | μBERT | Major |
|---|---|---|---|---|---|
| 真实缺陷检测率 | 0.917 | 0.735 | 0.675 | 0.550 | 0.833 |
| 耦合率 | 0.136 | 0.105 | 0.132 | 0.132 | 0.128 |
| Ochiai系数 | 0.467 | 0.178 | 0.167 | 0.150 | 0.341 |
变异生成的代价与效率
| 模型 | 生成时间(秒) | 单位变异生成成本 | 变异数量 |
|---|---|---|---|
| GPT-3.5 | 1.79 | 0.288 | 47,666 |
| CodeLlama-13b | 9.06 | 0.577 | 30,294 |
| LEAM | 3.06 | 0.195 | 671,737 |
| μBERT | 2.23 | - | 1,032,392 |
| Major | 0.083 | - | 314,694 |
变异生成的优化
| 设置 | 编译通过率 | 无效变异率 | 等价变异率 |
|---|---|---|---|
| P1 | 65.7% | 13.7% | 1.3% |
| P2 | 64.1% | 11.3% | 1.2% |
| P3 | 61.9% | 22.3% | 1.2% |
| P4 | 60.8% | 15.0% | 1.5% |
结论
- 大语言模型在变异生成方面展现出巨大潜力,能够生成更接近真实bug的变异。
- 然而,仍需进一步优化以减少等价变异和无效变异,提升生成质量。
- 基于共享计算的加速方法(如WinMut)显著提高了变异分析效率,但仍需面对复杂变异的挑战。
- 未来的研究方向包括改进Prompt设计、LLM微调、多智能体协作以及更高效的计算优化策略。
展开完整摘要
试读结束,高清完整版pdf/doc/ppt,请点下载