オープンソースの言語に依存しない自動単体テスト ジェネレーター + LLM ベースのミューテーション テストによる自動ソフトウェア テスト
更新 2024 年 7 月 18 日
Mutahunter の今後の機能と改善点を概説するロードマップを共有できることを嬉しく思います。
ここで確認してください: ロードマップ
突然変異テストに関するフィードバック、提案、ご意見をお待ちしております。ディスカッションに参加して、ロードマップに関する洞察やその他のアイデアを共有してください。 ?
特徴
単体テスト ジェネレーター: ラインおよびミューテーション カバレッジ (WIP) の強化
突然変異テストの開始
例
CI/CDの統合
Mutahunter は、大規模言語モデル (LLM) を利用してテスト カバレッジのギャップを特定して埋めることで、行と変異のカバレッジを高める単体テストを自動的に生成できます。 LLM モデルを使用して、コンテキスト認識型のフォールトをコードベースに挿入します。この AI 主導のアプローチでは、同等の変異体が少なく、障害検出の可能性が高い変異体、実際の障害との結合性と意味論的な類似性が高い変異体が生成され、包括的で効果的なテストが保証されます。
自動単体テスト生成:単体テストを生成して行と突然変異のカバレッジを高め、LLM を活用してテスト カバレッジのギャップを特定して埋めます。詳細については、「単体テスト ジェネレーター」セクションを参照してください。
言語に依存しない: Cobertura XML、Jacoco XML、および lcov 形式でカバレッジ レポートを提供する言語と互換性があります。追加の言語やテスト フレームワークに拡張可能です。
LLM コンテキスト認識ミューテーション: LLM モデルを利用してコンテキスト認識ミュータントを生成します。研究によると、LLM によって生成されたミュータントは、障害検出の可能性が高く、同等のミュータントが少なく、実際の障害との結合性と意味論的な類似性が高いことが示されています。 aider のリポマップを使用して、Git リポジトリ全体のマップを使用して、コンテキストに関連するミュータントを生成します。セルフホスト LLM、Anthropic、OpenAI、および LiteLLM を介したすべての LLM モデルをサポートします。
Diff-Based Mutations:最新のコミットまたはプル リクエストの変更に基づいて、変更されたファイルと行に対してミューテーション テストを実行し、コードの関連部分のみがテストされるようにします。
LLM 生存ミュータント分析:生存ミュータントを自動的に分析し、テスト スイートの潜在的な弱点、脆弱性、改善の余地がある領域を特定します。
このツールは、論文からインスピレーションを得て、行と突然変異の両方のカバレッジを高める単体テストを生成します。
Meta での大規模言語モデルを使用した自動単体テストの改善: - LLM を使用してテスト カバレッジのギャップを特定し、埋めます。
事前トレーニングされた大規模言語モデルと突然変異テストを使用した効果的なテスト生成: - コードの突然変異を検出して強制終了するテストを生成し、堅牢性を確保します。
## 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# 実行特定のファイルに対する 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 ?️ ?️ タイムアウト ミュータント: 0 コンパイル エラーのミュータント: 0 USD ? ?=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=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 の例
Go の例
JavaScript の例
Python FastAPI の例
自由に例を追加してください。
Mutahunter を CI/CD パイプラインに統合して、突然変異テストを自動化できます。 GitHub Actions ワークフロー ファイルの例を次に示します。
名前: Mutahunter CI/CD オン: プッシュ: ブランチ: - メインの pull_request: ブランチ: - メインジョブ: mutahunter: 実行: ubuntu-最新のステップ: - 名前: チェックアウト リポジトリの使用: アクション/checkout@v4 指定: フェッチ深さ: 2 # git diff に必要 - 名前: Python のセットアップを使用します:actions/setup-python@v5 with: python-version: 3.11 - 名前: インストールMutahunter 実行: pip install mutahunter - 名前: プロジェクト用に Java をセットアップします。 使用: action/setup-java@v2 使用条件: ディストリビューション: "adopt" java-version: "17" - 名前: 依存関係をインストールしてテストを実行します 実行: mvn test - 名前: Mutahunter を実行します。 環境: 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 - name : 変異カバレッジが使用する PR コメント: thollander/[email protected] と: ファイルパス: logs/_latest/coverage.txt