Generador de pruebas unitarias automáticas independientes del lenguaje de código abierto + Pruebas de mutaciones basadas en LLM para pruebas de software automatizadas
ACTUALIZACIÓN 2024-07-18
¡Estamos emocionados de compartir nuestra hoja de ruta que describe las próximas funciones y mejoras para Mutahunter!
Compruébalo aquí: Hoja de ruta
Nos encantaría escuchar sus comentarios, sugerencias y cualquier idea que tenga sobre las pruebas de mutación. Únase a la discusión y comparta sus ideas sobre la hoja de ruta o cualquier otra idea que tenga. ?
Características
Generador de pruebas unitarias: mejora de la cobertura de líneas y mutaciones (WIP)
Comenzando con las pruebas de mutación
Ejemplos
Integración CI/CD
Mutahunter puede generar automáticamente pruebas unitarias para aumentar la cobertura de líneas y mutaciones, aprovechando los modelos de lenguaje grande (LLM) para identificar y llenar los vacíos en la cobertura de las pruebas. Utiliza modelos LLM para inyectar fallas sensibles al contexto en su código base. Este enfoque impulsado por la IA produce menos mutantes equivalentes, mutantes con mayor potencial de detección de fallas y aquellos con mayor acoplamiento y similitud semántica con fallas reales, lo que garantiza pruebas integrales y efectivas.
Generación automática de pruebas unitarias: genera pruebas unitarias para aumentar la cobertura de líneas y mutaciones, aprovechando los LLM para identificar y llenar vacíos en la cobertura de las pruebas. Consulte la sección Generador de pruebas unitarias para obtener más detalles.
Independiente del idioma: Compatible con idiomas que proporcionan informes de cobertura en formatos Cobertura XML, Jacoco XML y lcov. Extensible a lenguajes adicionales y marcos de prueba.
Mutaciones sensibles al contexto de LLM: utiliza modelos LLM para generar mutantes sensibles al contexto. Las investigaciones indican que los mutantes generados por LLM tienen un mayor potencial de detección de fallas, menos mutantes equivalentes y un mayor acoplamiento y similitud semántica con las fallas reales. Utiliza un mapa de todo su repositorio git para generar mutantes contextualmente relevantes utilizando el repomap de Aider. Admite LLM autohospedados, Anthropic, OpenAI y cualquier modelo de LLM a través de LiteLLM.
Mutaciones basadas en diferencias: ejecuta pruebas de mutación en archivos y líneas modificados en función de los últimos cambios de confirmación o solicitud de extracción, lo que garantiza que solo se prueben las partes relevantes del código.
Análisis de mutantes supervivientes de LLM: analiza automáticamente los mutantes supervivientes para identificar posibles debilidades en el conjunto de pruebas, vulnerabilidades y áreas de mejora.
Esta herramienta genera pruebas unitarias para aumentar la cobertura de líneas y mutaciones, inspiradas en artículos:
Mejora de pruebas unitarias automatizadas utilizando modelos de lenguaje grandes en Meta: - Utiliza LLM para identificar y llenar vacíos en la cobertura de las pruebas.
Generación de pruebas efectiva utilizando modelos de lenguaje grande previamente entrenados y pruebas de mutaciones: - Genera pruebas que detectan y eliminan mutantes de código, garantizando solidez.
## vaya a ejemplos/java_maven## elimine algunas pruebas de BankAccountTest.javamutahunter gen-line --test-command "mvn test -Dtest=BankAccountTest" --code-coverage-report-path "target/site/jacoco/jacoco. xml" --tipo de cobertura jacoco --ruta-archivo-prueba "src/test/java/BankAccountTest.java" --ruta-archivo-fuente "src/main/java/com/example/BankAccount.java" --modelo "gpt-4o" --objetivo-línea-cobertura 0.9 --max-attempts 3 Cobertura de línea aumentó de 47.00% a 100.00% La cobertura de mutaciones aumentó del 92,86% al 92,86%
# Instale el paquete Mutahunter a través de GitHub. Se requiere Python 3.11+.$ pip install muthaunter# Trabaja con GPT-4o en tu repositorio$ export OPENAI_API_KEY=tu-clave-va-aquí# O trabaja con los modelos de Anthropic$ export ANTHROPIC_API_KEY=tu-clave-va-aquí# Ejecutar Mutahunter en un archivo específico. # El informe de cobertura debe corresponder al comando de prueba.$ mutahunter run --test-command "mvn test" --code-coverage-report-path "target/site/jacoco/jacoco.xml" --coverage-type jacoco -- modelo "gpt-4o-mini". . . . .-. .-. . . . . . . .-. .-. .-.|/| | | | |-| |-| | | || | |- |(' ` `-' ' ` ' ' ` `-' ' ` ' `-' ' '2024-07-29 12:31:22,045 INFORMACIÓN:=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Cobertura general de mutaciones ¿Cobertura de línea: 100,00%? Cobertura de mutación: 63,33% ? Mutantes totales: 30 ??️ Mutantes supervivientes: 11 ?️ ?️ Mutantes asesinados: 19 ?️ Mutantes con tiempo de espera: 0 Mutantes con error de compilación: 0 ? ?=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=2024-07-29 12 :31:22,050 INFORMACIÓN: Informe HTML generado: mutación_report.html2024-07-29 12:31:22,058 INFORMACIÓN: Informe HTML generado: 1.html2024-07-29 12:31:22,058 INFORMACIÓN: Las pruebas de mutación finalizaron y tardaron 127 segundos.
Vaya al directorio de ejemplos para ver cómo ejecutar Mutahunter en diferentes lenguajes de programación:
Consulte el ejemplo de Java para ver algunos ejemplos interesantes de pruebas de mutaciones basadas en LLM.
Ejemplo de Java
Ir ejemplo
Ejemplo de JavaScript
Ejemplo de API rápida de Python
¡Siéntete libre de agregar más ejemplos!
Puede integrar Mutahunter en su proceso de CI/CD para automatizar las pruebas de mutación. Aquí hay un ejemplo de archivo de flujo de trabajo de GitHub Actions:
nombre: Mutahunter CI/CD en: push: ramas: - main pull_request: ramas: - mainjobs: mutahunter: se ejecuta en: ubuntu-últimos pasos: - nombre: Usos del repositorio de pago: acciones/checkout@v4 con: búsqueda de profundidad: 2 # necesario para git diff - nombre: Configurar usos de Python: acciones/setup-python@v5 con: python-version: 3.11 - nombre: Instalar Ejecución de Mutahunter: pip install mutahunter - nombre: Configure Java para su proyecto utiliza: acciones/setup-java@v2 con: distribución: "adopt" java-version: "17" - nombre: Instale dependencias y ejecute pruebas ejecute: mvn test - nombre: ejecutar Mutahunter env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} ejecutar: | ejecución de mutahunter --test-command "mvn test" --code-coverage-report-path "target/site/jacoco/jacoco.xml" --coverage-type jacoco --model "gpt-4o" --diff - nombre : comentario de relaciones públicas que utiliza la cobertura de mutación: thollander/[email protected] con: filePath: logs/_latest/coverage.txt