오픈 소스 언어에 구애받지 않는 자동 단위 테스트 생성기 + 자동화된 소프트웨어 테스트를 위한 LLM 기반 돌연변이 테스트
업데이트 2024-07-18
Mutahunter의 향후 기능과 개선 사항을 간략히 설명하는 로드맵을 공유하게 되어 기쁘게 생각합니다!
여기에서 확인하세요: 로드맵
우리는 돌연변이 테스트에 대한 귀하의 피드백, 제안 및 생각을 듣고 싶습니다. 토론에 참여하고 로드맵이나 다른 아이디어에 대한 통찰력을 공유하세요. ?
특징
단위 테스트 생성기: WIP(Line and Mutation Coverage) 강화
돌연변이 테스트 시작하기
예
CI/CD 통합
Mutahunter는 자동으로 단위 테스트를 생성하여 라인 및 돌연변이 적용 범위를 늘리고 LLM(대형 언어 모델)을 활용하여 테스트 적용 범위의 격차를 식별하고 채울 수 있습니다. LLM 모델을 사용하여 상황 인식 오류를 코드베이스에 주입합니다. 이 AI 기반 접근 방식은 더 적은 수의 동등한 돌연변이, 더 높은 결함 감지 잠재력을 가진 돌연변이, 실제 결함과 더 높은 결합 및 의미 유사성을 가진 돌연변이를 생성하여 포괄적이고 효과적인 테스트를 보장합니다.
자동 단위 테스트 생성: LLM을 활용하여 테스트 범위의 공백을 식별하고 메우고 계통 및 돌연변이 범위를 늘리기 위한 단위 테스트를 생성합니다. 자세한 내용은 단위 테스트 생성기 섹션을 참조하세요.
언어에 구애받지 않음: Cobertura XML, Jacoco XML 및 lcov 형식의 적용 범위 보고서를 제공하는 언어와 호환됩니다. 추가 언어 및 테스트 프레임워크로 확장 가능합니다.
LLM 상황 인식 돌연변이: LLM 모델을 활용하여 상황 인식 돌연변이를 생성합니다. 연구에 따르면 LLM에서 생성된 돌연변이는 결함 탐지 가능성이 더 높고, 동등한 돌연변이가 적으며, 실제 결함과의 결합 및 의미론적 유사성이 더 높은 것으로 나타났습니다. aider의 repomap을 사용하여 상황에 맞는 돌연변이를 생성하기 위해 전체 git 저장소의 맵을 사용합니다. LiteLLM을 통해 자체 호스팅 LLM, Anthropic, OpenAI 및 모든 LLM 모델을 지원합니다.
Diff 기반 돌연변이: 최신 커밋 또는 끌어오기 요청 변경 사항을 기반으로 수정된 파일 및 라인에 대해 돌연변이 테스트를 실행하여 코드의 관련 부분만 테스트되도록 합니다.
LLM 생존 돌연변이 분석: 생존 돌연변이를 자동으로 분석하여 테스트 스위트의 잠재적 약점, 취약점 및 개선 영역을 식별합니다.
이 도구는 다음 논문에서 영감을 받아 계통 및 돌연변이 적용 범위를 모두 늘리는 단위 테스트를 생성합니다.
Meta에서 대규모 언어 모델을 사용한 자동화된 단위 테스트 개선: - LLM을 사용하여 테스트 범위의 격차를 식별하고 메웁니다.
사전 훈련된 대규모 언어 모델 및 돌연변이 테스트를 사용한 효과적인 테스트 생성: - 코드 돌연변이를 감지하고 제거하는 테스트를 생성하여 견고성을 보장합니다.
## example/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로 작업하세요$ import OPENAI_API_KEY=your-key-goes-here# 또는 Anthropic의 모델로 작업하세요$ import 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 INFO:=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 전체 돌연변이 범위: 100.00% 돌연변이 적용 범위: 63.33% ? 총 돌연변이: 30 ??️ 살아남은 돌연변이: 11 ?️ ?️ 사멸된 돌연변이: 19 ?️ 시간 초과 돌연변이: 0 컴파일 오류 돌연변이: 0 ? ?=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=2024-07-29 12 :31:22,050 INFO: HTML 보고서 생성됨: mutation_report.html2024-07-29 12:31:22,058 INFO: HTML 보고서 생성됨: 1.html2024-07-29 12:31:22,058 정보: 돌연변이 테스트가 127초 걸렸습니다.
다양한 프로그래밍 언어에서 Mutahunter를 실행하는 방법을 보려면 예제 디렉터리로 이동하세요.
흥미로운 LLM 기반 돌연변이 테스트 예제를 보려면 Java 예제를 확인하세요.
자바 예
예시로 이동
자바스크립트 예
Python FastAPI 예
더 많은 예시를 추가해 보세요!
Mutahunter를 CI/CD 파이프라인에 통합하여 돌연변이 테스트를 자동화할 수 있습니다. 다음은 GitHub Actions 워크플로 파일의 예입니다.
이름: Mutahunter CI/CD 사용: 푸시: 분기: - 기본 pull_request: 분기: - mainjobs: mutahunter: 실행: ubuntu-최신 단계: - 이름: 체크아웃 저장소 사용: actions/checkout@v4 포함: fetch-length: 2 # git diff에 필요 - 이름: Python 설정 사용: actions/setup-python@v5 with: python-version: 3.11 - 이름: Mutahunter 설치 실행: pip install mutahunter - 이름: 프로젝트에 맞게 Java 설정 용도: actions/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 - 이름 : 돌연변이 적용 범위가 사용하는 PR 댓글: thollander/[email protected] with: filePath:logs/_latest/coverage.txt