Generator Uji Unit Otomatis Agnostik Bahasa Sumber Terbuka + Pengujian Mutasi berbasis LLM untuk Pengujian Perangkat Lunak Otomatis
PEMBARUAN 18-07-2024
Kami sangat antusias untuk membagikan peta jalan kami yang menguraikan fitur-fitur dan peningkatan mendatang untuk Mutahunter!
Lihat di sini: Peta Jalan
Kami ingin mendengar tanggapan, saran, dan pemikiran Anda tentang pengujian mutasi. Bergabunglah dalam diskusi dan bagikan wawasan Anda tentang peta jalan atau ide lain yang Anda miliki. ?
Fitur
Unit Test Generator: Peningkatan Garis dan Cakupan Mutasi (WIP)
Memulai Pengujian Mutasi
Contoh
Integrasi CI/CD
Mutahunter dapat secara otomatis menghasilkan pengujian unit untuk meningkatkan cakupan garis dan mutasi, memanfaatkan Model Bahasa Besar (LLM) untuk mengidentifikasi dan mengisi kesenjangan dalam cakupan pengujian. Ia menggunakan model LLM untuk memasukkan kesalahan kontekstual ke dalam basis kode Anda. Pendekatan yang digerakkan oleh AI ini menghasilkan lebih sedikit mutan setara, mutan dengan potensi deteksi kesalahan lebih tinggi, dan mutan dengan kopling lebih tinggi serta kesamaan semantik dengan kesalahan sebenarnya, sehingga memastikan pengujian yang komprehensif dan efektif.
Pembuatan Uji Unit Otomatis: Menghasilkan pengujian unit untuk meningkatkan cakupan garis dan mutasi, memanfaatkan LLM untuk mengidentifikasi dan mengisi kesenjangan dalam cakupan pengujian. Lihat bagian Unit Test Generator untuk lebih jelasnya.
Bahasa Agnostik: Kompatibel dengan bahasa yang menyediakan laporan cakupan dalam format Cobertura XML, Jacoco XML, dan lcov. Dapat diperluas ke bahasa tambahan dan kerangka pengujian.
Mutasi Sadar Konteks LLM: Memanfaatkan model LLM untuk menghasilkan mutan sadar konteks. Penelitian menunjukkan bahwa mutan yang dihasilkan LLM memiliki potensi deteksi kesalahan yang lebih tinggi, mutan setara yang lebih sedikit, dan kopling yang lebih tinggi serta kesamaan semantik dengan kesalahan sebenarnya. Ia menggunakan peta seluruh repositori git Anda untuk menghasilkan mutan yang relevan secara kontekstual menggunakan repomap aider. Mendukung LLM yang dihosting sendiri, Anthropic, OpenAI, dan model LLM apa pun melalui LiteLLM.
Mutasi Berbasis Diff: Menjalankan pengujian mutasi pada file dan baris yang dimodifikasi berdasarkan perubahan permintaan komit atau penarikan terbaru, memastikan bahwa hanya bagian kode relevan yang diuji.
Analisis Mutan yang Bertahan LLM: Secara otomatis menganalisis mutan yang selamat untuk mengidentifikasi potensi kelemahan dalam rangkaian pengujian, kerentanan, dan area yang perlu ditingkatkan.
Alat ini menghasilkan pengujian unit untuk meningkatkan cakupan garis dan mutasi, yang terinspirasi oleh makalah:
Peningkatan Tes Unit Otomatis menggunakan Model Bahasa Besar di Meta: - Menggunakan LLM untuk mengidentifikasi dan mengisi kesenjangan dalam cakupan tes.
Pembuatan Tes yang Efektif Menggunakan Model Bahasa Besar dan Pengujian Mutasi yang telah dilatih sebelumnya: - Menghasilkan tes yang mendeteksi dan membunuh mutan kode, memastikan ketahanan.
## buka contoh/java_maven## hapus beberapa tes dari BankAccountTest.javamutahunter gen-line --test-command "mvn test -Dtest=BankAccountTest" --code-coverage-report-path "target/site/jacoco/jacoco. xml" --tipe cakupan 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 Cakupan Jalur meningkat dari 47,00% menjadi 100,00% Cakupan Mutasi meningkat dari 92,86% menjadi 92,86%
# Instal paket Mutahunter melalui GitHub. Diperlukan Python 3.11+.$ pip install muthaunter# Bekerja dengan GPT-4o di repo Anda$ ekspor OPENAI_API_KEY=kunci-Anda-pergi-di sini# Atau, bekerja dengan model Anthropic$ ekspor ANTHROPIC_API_KEY=kunci-Anda-pergi-ke sini# Jalankan Mutahunter pada file tertentu. # Laporan cakupan harus sesuai dengan perintah pengujian.$ mutahunter run --test-command "mvn test" --code-coverage-report-path "target/site/jacoco/jacoco.xml" --coverage-type jacoco -- model "gpt-4o-mini". . . . .-. .-. . . . . . . .-. .-. .-.|/| | | | |-| |-| | | || | |- |(' ` `-' ' ` ' ' ` `-' ' ` ' `-' ' '29-07-2024 12:31:22,045 INFO:=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Cakupan Jalur Mutasi Secara Keseluruhan: 100,00% ? Cakupan Mutasi: 63,33% ? Total Mutan: 30 ??️ Mutan yang Bertahan: 11 ?️ ?️ Mutan yang Terbunuh: 19 ?️ Mutan Batas Waktu: 0 Kesalahan Kompilasi Mutan: 0 ? ?=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=29-07-2024 12 :31:22.050 INFO: Laporan HTML dibuat: mutasi_report.html29-07-2024 12:31:22.058 INFO: Laporan HTML dibuat: 1.html29-07-2024 12:31:22,058 INFO: Pengujian Mutasi Berakhir
Buka direktori contoh untuk melihat cara menjalankan Mutahunter pada berbagai bahasa pemrograman:
Periksa Contoh Java untuk melihat beberapa contoh pengujian mutasi berbasis LLM yang menarik.
Contoh Jawa
Pergi Contoh
Contoh JavaScript
Contoh Python FastAPI
Jangan ragu untuk menambahkan lebih banyak contoh!
Anda dapat mengintegrasikan Mutahunter ke dalam pipeline CI/CD Anda untuk mengotomatiskan pengujian mutasi. Berikut ini contoh file alur kerja Tindakan GitHub:
nama: Mutahunter CI/CD aktif: push: cabang: - pull_request utama: cabang: - pekerjaan utama: mutahunter: berjalan-on: ubuntu-langkah terbaru: - nama: Repositori Checkout menggunakan: tindakan/checkout@v4 dengan: ambil kedalaman: 2 # diperlukan untuk git diff - nama: Siapkan penggunaan Python: action/setup-python@v5 dengan: versi python: 3.11 - nama: Instal Mutahunter jalankan: pip install mutahunter - nama: Siapkan Java untuk proyek Anda menggunakan: tindakan/setup-java@v2 dengan: distribusi: "adopsi" versi Java: "17" - nama: Instal dependensi dan jalankan pengujian jalankan: pengujian mvn - nama: Jalankan Mutahunter env: OPENAI_API_KEY: ${{ rahasia.OPENAI_API_KEY }} dijalankan: | mutahunter run --test-command "mvn test" --code-coverage-report-path "target/site/jacoco/jacoco.xml" --coverage-type jacoco --model "gpt-4o" --diff - nama : Komentar PR yang digunakan cakupan mutasi: thollander/[email protected] dengan: filePath: logs/_latest/coverage.txt