Générateur de tests unitaires automatiques indépendants du langage open source + tests de mutation basés sur LLM pour les tests de logiciels automatisés
MISE À JOUR 2024-07-18
Nous sommes ravis de partager notre feuille de route décrivant les fonctionnalités et améliorations à venir pour Mutahunter !
Découvrez-le ici : Feuille de route
Nous aimerions connaître vos commentaires, suggestions et toutes vos réflexions sur les tests de mutation. Rejoignez la discussion et partagez vos idées sur la feuille de route ou toute autre idée que vous avez. ?
Caractéristiques
Générateur de tests unitaires : amélioration de la couverture des lignées et des mutations (WIP)
Premiers pas avec les tests de mutation
Exemples
Intégration CI/CD
Mutahunter peut générer automatiquement des tests unitaires pour augmenter la couverture des lignées et des mutations, en tirant parti des grands modèles linguistiques (LLM) pour identifier et combler les lacunes dans la couverture des tests. Il utilise des modèles LLM pour injecter des erreurs contextuelles dans votre base de code. Cette approche basée sur l'IA produit moins de mutants équivalents, des mutants avec un potentiel de détection de fautes plus élevé et ceux présentant un couplage et une similarité sémantique plus élevés avec les fautes réelles, garantissant ainsi des tests complets et efficaces.
Génération automatique de tests unitaires : génère des tests unitaires pour augmenter la couverture des lignées et des mutations, en tirant parti des LLM pour identifier et combler les lacunes dans la couverture des tests. Voir la section Générateur de tests unitaires pour plus de détails.
Indépendant du langage : compatible avec les langages qui fournissent des rapports de couverture aux formats Cobertura XML, Jacoco XML et lcov. Extensible à des langages et des frameworks de test supplémentaires.
Mutations contextuelles LLM : utilise des modèles LLM pour générer des mutants contextuels. La recherche indique que les mutants générés par LLM ont un potentiel de détection de fautes plus élevé, moins de mutants équivalents et un couplage et une similarité sémantique plus élevés avec les fautes réelles. Il utilise une carte de l'intégralité de votre référentiel git pour générer des mutants contextuellement pertinents à l'aide du repomap d'aider. Prend en charge les LLM auto-hébergés, Anthropic, OpenAI et tous les modèles LLM via LiteLLM.
Mutations basées sur les différences : exécute des tests de mutation sur les fichiers et les lignes modifiés en fonction des dernières modifications de validation ou de demande d'extraction, garantissant que seules les parties pertinentes du code sont testées.
Analyse des mutants survivants LLM : analyse automatiquement les mutants survivants pour identifier les faiblesses potentielles de la suite de tests, les vulnérabilités et les domaines à améliorer.
Cet outil génère des tests unitaires pour augmenter à la fois la couverture des lignées et des mutations, inspirés des articles :
Amélioration des tests unitaires automatisés à l'aide de grands modèles de langage chez Meta : - Utilise des LLM pour identifier et combler les lacunes dans la couverture des tests.
Génération de tests efficace à l'aide de grands modèles de langage pré-entraînés et de tests de mutation : - Génère des tests qui détectent et tuent les mutants de code, garantissant ainsi la robustesse.
## allez dans examples/java_maven## supprimez certains tests de 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 Couverture de ligne augmentée de 47,00 % à 100,00 % La couverture des mutations est passée de 92,86 % à 92,86 %
# Installez le package Mutahunter via GitHub. Python 3.11+ est requis.$ pip install muthaunter# Travaillez avec GPT-4o sur votre dépôt$ export OPENAI_API_KEY=your-key-goes-here# Ou travaillez avec les modèles d'Anthropic$ export ANTHROPIC_API_KEY=your-key-goes-here# Run Mutahunter sur un fichier spécifique. # Le rapport de couverture doit correspondre à la commande de test.$ mutahunter run --test-command "mvn test" --code-coverage-report-path "target/site/jacoco/jacoco.xml" --coverage-type jacoco -- modèle "gpt-4o-mini". . . . .-. .-. . . . . . . .-. .-. .-.|/| | | | |-| |-| | | || | |- |(' ` `-' ' ` ' ' ` `-' ' ` ' `-' ' '2024-07-29 12:31:22,045 INFO:=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Ligne de couverture globale des mutations ? Couverture : 100,00 % ? Couverture des mutations : 63,33 % ? Total des mutants : 30 ??️ Mutants survivants : 11 ?️ ?️ Mutants tués : 19 ?️ Mutants d'expiration : 0 Mutants d'erreur de compilation : 0 ? ?=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=2024-07-29 12 :31:22,050 INFO : rapport HTML généré : mutation_report.html2024-07-29 12:31:22,058 INFO : rapport HTML généré : 1.html2024-07-29 12:31:22,058 INFO : les tests de mutation ont pris 127 s.
Accédez au répertoire d'exemples pour voir comment exécuter Mutahunter sur différents langages de programmation :
Consultez l'exemple Java pour voir quelques exemples intéressants de tests de mutation basés sur LLM.
Exemple Java
Aller exemple
Exemple JavaScript
Exemple Python FastAPI
N'hésitez pas à ajouter d'autres exemples !
Vous pouvez intégrer Mutahunter dans votre pipeline CI/CD pour automatiser les tests de mutation. Voici un exemple de fichier de workflow GitHub Actions :
nom : Mutahunter CI/CD sur : push : branches : - main pull_request : branches : - mainjobs : mutahunter : exécution : ubuntu-dernières étapes : - nom : le référentiel Checkout utilise : actions/checkout@v4 avec : fetch-profondeur : 2 # nécessaire pour git diff - nom : Configurer Python utilise : actions/setup-python@v5 avec : python-version : 3.11 - nom : Installer Mutahunter run: pip install mutahunter - nom: Configurez Java pour les utilisations de votre projet: actions/setup-java@v2 avec: distribution: "adopt" java-version: "17" - nom: Installez les dépendances et exécutez les tests run: mvn test - nom : Exécuter Mutahunter env : OPENAI_API_KEY : ${{ secrets.OPENAI_API_KEY }} exécuter : | mutahunter run --test-command "mvn test" --code-coverage-report-path "target/site/jacoco/jacoco.xml" --coverage-type jacoco --model "gpt-4o" --diff - nom : Commentaire PR que la couverture de mutation utilise : thollander/[email protected] avec : filePath : logs/_latest/coverage.txt