与开源语言无关的自动单元测试生成器 + 用于自动化软件测试的基于 LLM 的突变测试
更新 2024-07-18
我们很高兴分享我们的路线图,概述 Mutahunter 即将推出的功能和改进!
在这里查看:路线图
我们很想听听您对突变测试的反馈、建议和任何想法。加入讨论并分享您对路线图的见解或您的任何其他想法。 ?
特征
单元测试生成器:增强行和突变覆盖率 (WIP)
突变测试入门
示例
持续集成/持续交付集成
Mutahunter 可以自动生成单元测试以增加线路和突变覆盖率,利用大型语言模型 (LLM) 来识别和填补测试覆盖率方面的空白。它使用 LLM 模型将上下文感知的错误注入到您的代码库中。这种人工智能驱动的方法产生了更少的等效突变体、具有更高故障检测潜力的突变体以及与真实故障具有更高耦合和语义相似性的突变体,从而确保了全面有效的测试。
自动单元测试生成:生成单元测试以增加线路和突变覆盖率,利用法学硕士来识别和填补测试覆盖率方面的空白。有关更多详细信息,请参阅单元测试生成器部分。
与语言无关:与以 Cobertura XML、Jacoco XML 和 lcov 格式提供覆盖率报告的语言兼容。可扩展到其他语言和测试框架。
LLM 上下文感知突变:利用 LLM 模型生成上下文感知突变。研究表明,LLM 生成的突变体具有更高的故障检测潜力、更少的等效突变体以及与真实故障更高的耦合度和语义相似性。它使用整个 git 存储库的映射来使用 aider 的 repomap 生成上下文相关的突变体。通过 LiteLLM 支持自托管 LLM、Anthropic、OpenAI 和任何 LLM 模型。
基于差异的突变:根据最新提交或拉取请求更改对修改的文件和行运行突变测试,确保仅测试代码的相关部分。
LLM 幸存突变体分析:自动分析幸存突变体,以识别测试套件中的潜在弱点、漏洞和需要改进的领域。
该工具受论文启发,生成单元测试以增加行和突变覆盖率:
在 Meta 使用大型语言模型进行自动化单元测试改进: - 使用法学硕士来识别和填补测试覆盖范围中的空白。
使用预先训练的大型语言模型和突变测试生成有效的测试: - 生成检测和杀死代码突变体的测试,确保稳健性。
## 转到 Examples/java_maven## 从 BankAccountTest.javamutahunter gen-line 中删除一些测试 --test-command "mvn test -Dtest=BankAccountTest" --code-coverage-report-path "target/site/jacoco/jacoco. xml" --coverage-type jacoco --test-file-path "src/test/java/BankAccountTest.java" --source-file-path “src/main/java/com/example/BankAccount.java”--model“gpt-4o”--target-line-coverage 0.9 --max-attempts 3 线路覆盖率从 47.00% 提高到 100.00% 突变覆盖率从 92.86% 增加到 92.86%
# 通过 GitHub 安装 Mutahunter 包。需要 Python 3.11+。$ pip install muthaunter# 在您的存储库上使用 GPT-4o$ export OPENAI_API_KEY=your-key-goes-here# 或者,使用 Anthropic 的模型$ export ANTHROPIC_API_KEY=your-key-goes-here# Run对特定文件进行 Mutahunter。 # 覆盖率报告应与测试命令相对应。 $ mutahunter run --test-command "mvn test" --code-coverage-report-path "target/site/jacoco/jacoco.xml" --coverage-type jacoco --型号“gpt-4o-mini”。 。 。 。 .-. .-. 。 。 。 。 。 。 .-. .-. .-.|/| | | | |-| |-| | | || | |- |(' ` `-' ' ` ' ` `-' ' ` ' `-' ' '2024-07-29 12:31:22,045 信息:=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 总体突变覆盖率: 100.00% ? 突变覆盖率: 63.33% ? 突变体总数: 30 ??️ 幸存突变体: 11 ?️ ?️ 杀死突变体: 19 ?️ 超时突变体: 0 编译错误突变体: 0 ? ?=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=2024-07-29 12 :31:22,050 信息:生成 HTML 报告:mutation_report.html2024-07-29 12:31:22,058 信息:生成 HTML 报告: 1.html2024-07-29 12:31:22,058 INFO:突变测试结束了 127 秒。
转到示例目录查看如何在不同的编程语言上运行 Mutahunter:
检查 Java 示例以查看一些有趣的基于 LLM 的突变测试示例。
Java示例
去例子
JavaScript 示例
Python FastAPI 示例
请随意添加更多示例!
您可以将 Mutahunter 集成到 CI/CD 管道中以自动化突变测试。以下是 GitHub Actions 工作流程文件示例:
名称:Mutahunter CI/CD 上:push:分支: - main pull_request:分支: - mainjobs:mutahunter:runs-on:ubuntu-latest 步骤: - 名称:Checkout 存储库使用:actions/checkout@v4 以及:fetch-深度: 2 # 需要 git diff - name: 设置 Python 使用:actions/setup-python@v5 with: python-version: 3.11 - name: Install Mutahunter run: pip install mutahunter - 名称:为您的项目设置 Java 使用:actions/setup-java@v2 with: distribution: "adopt" java-version: "17" - 名称:安装依赖项并运行测试 run: mvn test - 名称: 运行Mutahunter env: OPENAI_API_KEY: ${{ Secrets.OPENAI_API_KEY }} 运行: | mutahunter run --test-command "mvn test" --code-coverage-report-path "target/site/jacoco/jacoco.xml" --coverage-type jacoco --model "gpt-4o" --diff - 名称:公关评论突变覆盖率使用:thollander/[email protected] 和:filePath:logs/_latest/coverage.txt