Keuntungan:
- Keupayaan untuk menghasilkan ujian unit, kes tepi, dan analisis jurang liputan dengan AI
- Keupayaan untuk mencetak jangkaan ujian berdasarkan spesifikasi, bukan tingkah laku semasa kod
- Keupayaan untuk menguji sama ada ujian benar-benar melindungi dengan menyuntik ralat
Ujian penulisan ialah salah satu tugas yang paling menghasilkan nilai yang ditangguhkan oleh kebanyakan pembangun. Suite ujian yang baik adalah bukti bahawa kod berfungsi seperti yang diharapkan dan talian hayat untuk perubahan masa hadapan. Masalahnya ialah ujian menulis berulang dan memakan masa — betul-betul jenis kerja di mana AI bersinar. Tetapi ada tangkapan: AI sering menguji kelakuan sedia ada kod, bukan kelakuan yang sepatutnya. Menguruskan perbezaan ini adalah intipati unit ini.
Dalam unit ini, anda akan mempelajari ujian unit (ujian yang menguji fungsi sahaja, secara berasingan), ujian kes tepi dan menjana data ujian dengan AI; menutup jurang dalam liputan ujian; dan mengapa mempercayai ujian AI secara membuta tuli adalah berbahaya.
Dua Sisi Pengujian: Membetulkan Tingkah Laku lwn. mengesahkan
Ujian boleh memberi dua tujuan yang berbeza. Yang pertama ialah pengesahan: ia menguji bahawa kod itu betul, bahawa ia mematuhi spesifikasi. Yang kedua ialah perlindungan regresi: ia membekukan tingkah laku kod hari ini, jadi jika seseorang secara tidak sengaja mengubahnya esok, ujian akan pecah dan memberitahu.
AI sangat baik pada yang terakhir; Ia melihat kod dan menjana kes yang menguji "apa yang dilakukannya sekarang." Tetapi jika kod itu salah dari awal, AI boleh menyematkan tingkah laku yang salah itu sebagai "betul." Oleh itu, anda mesti menyemak penegasan setiap ujian yang dihasilkan AI: "Kod mengembalikan 42 dan ujian menjangkakan 42" tidak bermakna 42 adalah jawapan yang betul.
Awas: Jika AI lulus ujian, ini tidak bermakna kod itu "berfungsi"; ia hanya bermaksud "ia berkelakuan seperti yang diharapkan oleh AI". Anda memutuskan sama ada jangkaan itu betul atau tidak dengan melihat spesifikasi.
Langkah demi Langkah: Menulis Ujian Teguh dengan AI
- Berikan spesifikasi, bukan hanya kod. Jika anda menambah maklumat "Fungsi ini harus melakukan ini", AI boleh menulis jangkaan yang betul; Ia akan menguji tingkah laku semasa jika anda hanya memberikan kod.
- Minta kes tepi. Format kosong, batal, sifar, negatif, terlalu besar, buruk, serentak — secara eksplisit menuntut keluar dari laluan gembira.
- Nyatakan rangka kerja dan gaya ujian. "gunakan pytest", "Atur-Act-Assert corak", "biarkan setiap ujian menguji satu perkara" dsb.
- Semak jangkaan (penegasan). Bandingkan dengan spesifikasi yang setiap menegaskan semakan untuk nilai yang betul.
- Tutup jurang dalam skop. Beri ujian sedia ada dan tanya "cawangan dan kes mana yang belum diuji?" membuat anda bertanya; kemudian sahkan ujian tambahan yang dihasilkan.
Tiga Kes Mini
Kes 1 — Perlindungan daripada 52% hingga 85%. Liputan ujian satu modul perkhidmatan ialah 52%. Pasukan itu menghantar ujian sedia ada kepada AI, menyenaraikan cawangan yang belum diuji dan menjana ujian untuk mereka. Dengan semakan manusia, liputan meningkat kepada 85%; Dalam proses itu, AI telah menemui pepijat sebenar (laluan yang mengembalikan kod ralat yang salah) dalam cawangan pepijat yang tidak pernah diuji sebelum ini.
Kes 2 — Perangkap penetapan jangkaan palsu. Fungsi pembundaran wang sebenarnya salah; Daripada membundarkan 2.675 kepada 2.67, ia membundarkan 2.67 dan bukannya 2.68. AI melihat kod dan menulis assert round_money(2.675) == 2.67 — membekukan ralat sebagai "benar". Apabila pembangun membaca spesifikasi, dia membetulkan jangkaan dan menangkap pepijat sebenar. Menguji peraturan, bukan kod, membuat perbezaan.
Kes 3 — Letupan keadaan tepi. Apabila meminta AI untuk hanya "kes tepi" untuk fungsi julat tarikh; Ia menghasilkan 8 kes seperti mula=akhir, selang terbalik, tahun lompat 29 Februari, zon waktu berbeza dan selang nol. Dua daripada ini (jarak terbalik dan tahun lompat) sebenarnya menyebabkan ralat. Memandangkan kes ini secara manual sering dilangkau; AI menjadi rakan kongsi "percambahan fikiran kes tepi" di sini.
Empat Templat Boleh Disalin
Penjanaan ujian berasaskan spesifikasi:
Peranan: Pembangun yang menulis ujian. Rangka Kerja: {{pytest/JUnit/Jest...}}.Apakah fungsi yang HARUS LAKUKAN (spesifikasi): {{peraturan}}Tulis ujian untuk fungsi berikut. Tulis jangkaan mengikut spesifikasi, BUKAN output semasa kod. Laluan gembira + tambah sekurang-kurangnya 4 kes tepi. Biarkan setiap ujian menguji satu perkara, gunakan nama deskriptif. {{fungsi}}
Sumbangsaran kes tepi:
Senaraikan kes kelebihan/kegagalan yang perlu dicuba dalam ujian untuk fungsi ini (null, null, breakpoints, bad format, concurrency, external error).Untuk setiap kes: input, kelakuan yang dijangkakan. JANGAN tulis kod lagi, senaraikan sahaja.{{fungsi}}
Analisis jurang liputan:
Di bawah adalah fungsi dan ujian yang tersedia. Cawangan, keadaan dan kes manakah yang belum diuji? Senaraikan kekurangan dan tulis ujian baru hanya untuk kekurangan. Jangan ulangi yang sedia ada. Fungsi:{{function}}Ujian:{{existing_tests}}
Data ujian / penjanaan objek olok-olok:
Hasilkan data ujian realistik untuk ujian {{function/service}}: sampel sah, sampel sempadan dan sampel tidak sah secara berasingan. Cadangkan tingkah laku olok-olok mudah untuk pergantungan luaran {{X}}. Menggunakan data sulit/PII yang benar; Hasilkan data palsu.
Gesaan lemah / Gesaan kuat
Lemah: "Tulis ujian untuk fungsi ini."
Kuat: "dengan pytest. Fungsi apply_discount(total, percent) — peraturan: diskaun mestilah 0%–30%, di luar sempadan harus membuang ValueError, hasil harus dibundarkan kepada 2 perpuluhan. Tulis jangkaan mengikut PERATURAN ini (bukan mengikut kod). Laluan gembira + kes tepi ini: 0%, 30%, 31%"=0. [negatif, jumlah]"=0. [negatif]
Dia memberikan peraturan pelepasan yang kuat dan berkata "tulis jangkaan mengikut peraturan, bukan kod"; Ayat tunggal ini menutup perangkap AI membetulkan salah laku.
Jenis ujian
Sumbangan AI
kawalan manusia
Selamat menguji unit jalan
rangka pantas
Adakah jangkaan itu betul?
Kes tepi
Percambahan fikiran yang meluas
Hapuskan yang tidak berkaitan
Pengisian jurang skop
Menemui cawangan yang dilangkau
Sahkan kepentingan
Data ujian/olok-olok
Menghasilkan sampel yang realistik
Tiada PII, kawalan realisme
Ujian Mengurus Kualiti, Bukan Menjaminnya
Liputan ujian yang tinggi memberikan keyakinan, tetapi ia juga boleh mengelirukan: liputan 100 peratus bermaksud "setiap baris dijalankan," bukan "setiap baris adalah betul." Mudah untuk meningkatkan liputan dengan AI; Nilai sebenar adalah dalam menulis harapan yang bermakna. Nilai ujian ialah keupayaannya untuk memecahkan dan memaklumkan anda apabila kod itu rosak. Itulah sebabnya ujian yang dihasilkan oleh AI adalah berdasarkan soalan "adakah kod itu benar-benar rosak apabila ia berubah?" Uji dengan soalan; Sengaja memutuskan baris dan melihat pemecahan ujian (idea mutasi) adalah bukti bahawa ujian itu berjaya.
Petua: Untuk melihat sama ada ujian yang ditulis AI berfungsi, buat pepijat kecil dalam kod (cth. tukar a + kepada a -) dan lihat jika ujian itu rosak. Jika ia tidak pecah, ujian itu tidak melindungi anda.
Kesilapan biasa
- Meminta ujian tanpa memberi peraturan. Model membekukan tingkah laku semasa; membetulkan ralat sebagai "benar".
- Menerima jangkaan tanpa membacanya. Ujian mengelirukan jika anda tidak menyemak sama ada penegasan menyemak nilai yang betul.
- Hanya menguji jalan bahagia. Kesilapan sebenar hidup di pinggir; Minta kes tepi secara eksplisit.
- Tersilap skop untuk tujuan. Peratusan yang tinggi tidak menjamin tingkah laku yang betul.
- Menjadikan data sebenar/tersembunyi sebagai data ujian. Data atau rahsia pelanggan tidak boleh memasuki ujian dan storan; Hasilkan data sintetik.
Secara ringkasnya
AI mengambil banyak beban berulang daripada ujian penulisan: ia menghasilkan rangka pantas, senarai besar kes tepi dan analisis jurang liputan. Tetapi perkara yang paling kritikal ialah jangkaan: AI cenderung untuk menguji tingkah laku semasa kod, manakala ujian harus ditulis mengikut spesifikasi. Berikan peraturan, semak jangkaan, kuatkuasakan kes tepi dan uji sama ada ujian itu benar-benar melindungi dengan menyuntik pepijat. Liputan ujian adalah alat, bukan matlamat.
Tugasan permohonan
Pilih fungsi dan mula-mula cetak ujian kepada AI dengan hanya memberikan kodnya; Perhatikan jangkaan. Kemudian cetak ujian sekali lagi, memberikan spesifikasi (tingkah laku yang diperlukan) untuk fungsi yang sama. Bandingkan jangkaan dua set ujian: adakah terdapat perbezaan, yang manakah mendedahkan pepijat sebenar? Akhir sekali, sahkan bahawa salah satu ujian yang dihasilkan berfungsi dengan menambahkan pepijat yang disengajakan pada kod dan melihat rehat ujian.
senarai semak
- [ ] Saya membezakan sama ada ujian itu adalah untuk membetulkan atau mengesahkan tingkah laku.
- [ ] Apabila saya meminta ujian, saya memberikan peraturan (spesifikasi) yang sepatutnya ada, bukan kod.
- [ ] Saya membandingkan setiap pernyataan yang dijana dengan spesifikasi.
- [ ] Saya secara eksplisit meminta kes kelebihan dan kegagalan.
- [ ] Saya melihat peratusan liputan sebagai alat, bukan matlamat.
- [ ] Saya menguji sama ada ujian benar-benar melindungi dengan menyuntik ralat.