與開源語言無關的自動單元測試產生器 + 用於自動化軟體測試的基於 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" - -型號「gpt-4o」--目標線覆蓋率0.9--最大嘗試次數3 線路覆蓋率從 47.00% 提高到 100.00% 突變覆蓋率從 92.86% 增加到 92.86%
# 透過 GitHub 安裝 Mutahunter 套件。需要Python 3.11+。 Run對特定文件進行 Mutahunter。 # 覆蓋率報告應與測試指令相對應。 -型號“gpt-4o-mini”。 。 。 。 .-. .-. 。 。 。 。 。 。 .-. .-. .-.|/| | | | |-| |-| | | || | |- |(' ` `-' ' ` ' ` `-' ' ` ' `-' ' '2024-07-29 12:31:22,045 訊息:=-=-=-=-=-=-= - =-=-=-=-=-=-=-=-=-=-=-=-=-=-= 總體突變覆蓋率: 100.00% ? 突變覆蓋率: 63.33% ?體: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 資訊:突變測試結束 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 所需 - 名稱:設定 Python 使用:actions/setup-python@v5 with: python-version: 3.11 - 名稱:安裝 Mutaactionter 運行:pip install mutahunter - 名稱:為您的專案設定 Java 使用:s /setup-java@v2 with: distribution: "adopt" java-version: "17" - name: 安裝依賴項並執行測試run: mvn test - name: 執行Mutahunter env: OPENAI_API_KEY: ${{ Secrets.OPENAI_APIhunter env: OPENAI_API_KEY: ${{ Secrets.OPENAI_API_KEY } run : | 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