TestPilot adalah alat untuk secara otomatis menghasilkan tes unit untuk paket NPM yang ditulis dalam JavaScript/TypeScript menggunakan model bahasa besar (LLM).
Perhatikan bahwa TestPilot merupakan eksplorasi awal dalam penggunaan LLM untuk pembuatan uji, dan telah tersedia di open source sebagai dasar untuk penelitian dan eksplorasi. Untuk penggunaan sehari-hari, fitur pembuatan tes dalam obrolan kopilot cenderung menghasilkan hasil yang lebih baik.
TestPilot menghasilkan tes untuk fungsi yang diberikan f dengan mendorong LLM dengan kerangka tes untuk f , termasuk informasi tentang f yang tertanam dalam komentar kode, seperti tanda tangannya, tubuh f , dan contoh penggunaan f secara otomatis ditambang dari dokumentasi proyek. Respons model kemudian diuraikan dan diterjemahkan ke dalam tes unit yang dapat dijalankan. Secara opsional, tes dijalankan dan jika gagal, model diminta lagi dengan informasi tambahan tentang tes yang gagal, memberinya kesempatan untuk memperbaiki tes.
Tidak seperti sistem lain untuk pembuatan tes berbasis LLM, TestPilot tidak memerlukan pelatihan tambahan atau pembelajaran penguatan, dan tidak ada contoh fungsi dan tes terkaitnya.
Makalah penelitian yang menggambarkan testpilot secara rinci tersedia di ARXIV dan IEEEExplore.
Secara umum, untuk dapat menjalankan testpilot Anda memerlukan akses ke LLM gaya kodeks dengan API penyelesaian. Atur variabel lingkungan TESTPILOT_LLM_API_ENDPOINT ke URL titik akhir LLM API yang ingin Anda gunakan, dan TESTPILOT_LLM_AUTH_HEADERS ke objek JSON yang berisi header yang Anda butuhkan untuk mengautentikasi dengan API.
Nilai -nilai khas untuk variabel -variabel ini mungkin:
TESTPILOT_LLM_API_ENDPOINT='https://api.openai.com/v1/engines/code-cushman-001/completions'TESTPILOT_LLM_AUTH_HEADERS='{"Authorization": "Bearer <your API key>", "OpenAI-Organization": "<your organization ID>"}'Namun, perhatikan bahwa Anda dapat menjalankan TestPilot dalam mode reproduksi tanpa akses ke LLM API di mana respons model diambil dari output dari menjalankan sebelumnya; Lihat di bawah untuk detailnya.
Anda dapat menginstal testpilot dari paket pra-dibangun atau dari sumber.
TestPilot tersedia sebagai paket NPM pra-dibangun, meskipun saat ini tidak diterbitkan untuk registri NPM. Anda dapat mengunduh tarball dari repositori dan menginstalnya dengan cara biasa. Perhatikan bahwa distribusi ini hanya berisi bagian inti dari testpilot, bukan harness benchmarking.
Direktori src/ berisi kode sumber untuk TestPilot, yang ditulis dalam TypeScript dan dikompilasi ke dalam dist/ Direktori. Tes sedang dalam test/ ; benchmark/ Directory berisi harness tolok ukur untuk menjalankan testpilot pada beberapa paket NPM; dan ql/ berisi kueri CodeQL yang digunakan untuk menganalisis hasilnya.
Di direktori root checkout repositori ini, jalankan npm build untuk menginstal dependensi dan membangun paket.
Anda juga dapat menggunakan npm run build:watch untuk secara otomatis membangun kapan saja Anda membuat perubahan pada kode. Perhatikan, bagaimanapun, bahwa ini tidak akan secara otomatis menginstal dependensi, dan juga tidak akan membangun harness benchmarking.
Gunakan npm run test untuk menjalankan tes. Untuk kenyamanan, ini juga akan menginstal dependensi dan menjalankan build.
Jika Anda menginstal TestPilot dari Sumber, Anda dapat menggunakan Benchmarking Harness untuk menjalankan TestPilot pada beberapa paket dan menganalisis hasilnya. Ini tidak tersedia saat ini jika Anda menginstal TestPilot dari paket pra-dibangun.
Penggunaan dasar adalah sebagai berikut:
node benchmark/run.js --outputDir < report_dir > --package < package_dir > Ini menghasilkan tes untuk semua fungsi yang diekspor oleh paket di <package_dir> , memvalidasinya, dan menulis hasilnya ke <report_dir> .
Perhatikan bahwa ini mengasumsikan bahwa dependensi paket diinstal dan setiap langkah build telah dijalankan (misalnya, menggunakan npm i dan npm run build ). TestPilot juga bergantung pada mocha , jadi jika paket yang di bawah pengujian belum bergantung padanya, Anda harus menginstalnya secara terpisah, misalnya menggunakan perintah npm i --no-save mocha .
Alur kerja run-experiment.yml menjalankan percobaan tentang tindakan github, menghasilkan laporan akhir sebagai artefak yang dapat Anda unduh. results-all artefak berisi hasil dari semua paket, sedangkan artefak lainnya berisi hasil individual dari setiap paket.
Hasil testpilot bersifat non-deterministik, jadi bahkan jika Anda menjalankannya dari paket yang sama pada mesin yang sama beberapa kali, Anda akan mendapatkan hasil yang berbeda. Namun, Benchmarking Harness mencatat data yang cukup untuk dapat mengulangi tolok ukur dalam banyak kasus.
Untuk melakukan ini, gunakan opsi --api dan --responses untuk menggunakan kembali daftar dan tanggapan API dari menjalankan sebelumnya:
node benchmark/run.js --outputDir < report_dir > --package < package_dir > --api < api.json > --responses < prompts.json >Perhatikan bahwa secara default replay akan gagal jika salah satu prompt tidak ditemukan dalam file respons. Ini biasanya terjadi jika testpilot menyempurnakan tes gagal, karena dalam hal ini prompt ke model tergantung pada pesan kegagalan yang tepat, yang dapat spesifik sistem (misalnya, berisi jalur sistem file lokal), atau bergantung pada versi Node.js atau faktor lainnya.
Untuk mengatasi batasan -batasan ini, Anda dapat melewati --strictResponses false memperlakukan petunjuk yang hilang dengan memperlakukannya sebagai tidak mendapatkan respons dari model. Ini tidak akan, secara umum, menghasilkan hasil yang sama dengan menjalankan awal, tetapi cukup dalam banyak kasus.
Kueri CodeQL dalam ql/queries dapat digunakan untuk menganalisis hasil menjalankan percobaan. Lihat ql/CodeQL.md untuk instruksi tentang cara mengatur CodeQL dan jalankan kueri.
Proyek ini dilisensikan berdasarkan ketentuan lisensi open source MIT. Silakan merujuk ke MIT untuk persyaratan lengkapnya.
TestPilot adalah prototipe penelitian dan tidak secara resmi didukung. Namun, jika Anda memiliki pertanyaan atau umpan balik, silakan ajukan masalah dan kami akan melakukan yang terbaik untuk merespons.
Kami berterima kasih kepada Aryaz Eghbali (@Aryaze) untuk karyanya pada versi awal testpilot.