Keuntungan:
- Kemampuan untuk menghasilkan pengujian unit, kasus tepi, dan analisis kesenjangan cakupan dengan AI
- Kemampuan untuk mencetak ekspektasi pengujian berdasarkan spesifikasi, bukan perilaku kode saat ini
- Kemampuan untuk menguji apakah suatu pengujian benar-benar melindungi dengan memasukkan kesalahan
Tes menulis adalah salah satu tugas yang paling menghasilkan nilai yang ditunda oleh sebagian besar pengembang. Rangkaian pengujian yang baik adalah bukti bahwa kode berfungsi seperti yang diharapkan dan merupakan jalur penyelamat untuk perubahan di masa mendatang. Masalahnya adalah tes menulis bersifat berulang-ulang dan memakan waktu — persis seperti jenis pekerjaan yang mengutamakan AI. Namun ada kendalanya: AI sering kali menguji perilaku kode yang ada, bukan perilaku yang seharusnya. Mengelola perbedaan ini adalah inti dari unit ini.
Dalam unit ini, Anda akan mempelajari pengujian unit (pengujian yang menguji suatu fungsi sendiri, secara terpisah), pengujian kasus tepi, dan menghasilkan data pengujian dengan AI; menutup kesenjangan dalam cakupan tes; dan mengapa mempercayai tes AI secara membabi buta itu berbahaya.
Dua Sisi Pengujian: Memperbaiki Perilaku vs. memverifikasi
Sebuah tes dapat memiliki dua tujuan berbeda. Yang pertama adalah verifikasi: ini menguji apakah kode tersebut benar, apakah sesuai dengan spesifikasi. Yang kedua adalah perlindungan regresi: ini membekukan perilaku kode hari ini, jadi jika seseorang secara tidak sengaja mengubahnya besok, pengujian akan berhenti dan memberi tahu.
AI sangat bagus dalam hal terakhir; Ia melihat kode dan menghasilkan kasus yang menguji "apa yang dilakukannya saat ini". Namun jika kodenya salah sejak awal, AI dapat menandai perilaku salah tersebut sebagai “benar”. Jadi, Anda harus meninjau kembali pernyataan dari setiap pengujian yang dihasilkan AI: "Kode mengembalikan 42 dan pengujian mengharapkan 42" tidak berarti bahwa 42 adalah jawaban yang benar.
Perhatian: Jika AI lulus pengujian, bukan berarti kodenya "berfungsi"; itu hanya berarti "berperilaku seperti yang diharapkan AI". Anda memutuskan apakah ekspektasi tersebut benar atau tidak dengan melihat spesifikasinya.
Langkah demi Langkah: Menulis Tes yang Kuat dengan AI
- Berikan spesifikasinya, bukan hanya kodenya. Jika Anda menambahkan informasi "Fungsi ini harus melakukan ini", AI dapat menulis ekspektasi yang benar; Ini akan menguji perilaku saat ini jika Anda hanya memberikan kodenya.
- Mintalah kasus tepi. Kosong, nol, nol, negatif, terlalu besar, format buruk, konkurensi — secara eksplisit mengklaim keluar dari jalur yang menyenangkan.
- Tentukan kerangka dan gaya pengujian. "gunakan pytest", "Pola Susun-Bertindak-Tegaskan", "biarkan setiap pengujian menguji satu hal" dll.
- Periksa ekspektasi (pernyataan). Bandingkan dengan spesifikasi yang setiap pernyataannya memeriksa nilai yang benar.
- Menutup kesenjangan dalam ruang lingkup. Berikan tes yang ada dan tanyakan “cabang dan kasus mana yang belum diuji?” membuatmu bertanya; kemudian verifikasi tes tambahan yang dihasilkan.
Tiga Kasus Mini
Kasus 1 — Cakupan dari 52% hingga 85%. Cakupan pengujian satu modul layanan adalah 52%. Tim memasukkan pengujian yang ada ke AI, meminta AI membuat daftar cabang yang belum diuji, dan membuat pengujian untuk cabang tersebut. Berdasarkan tinjauan manusia, cakupan meningkat menjadi 85%; Dalam prosesnya, AI menemukan bug sebenarnya (jalur yang mengembalikan kode kesalahan yang salah) di cabang bug yang belum pernah diuji sebelumnya.
Kasus 2 - Jebakan fiksasi ekspektasi yang salah. Fungsi pembulatan uang sebenarnya salah; Alih-alih membulatkan 2,675 menjadi 2,67, malah membulatkannya menjadi 2,67, bukan 2,68. AI melihat kode tersebut dan menulis menegaskan round_money(2.675) == 2.67 — membekukan kesalahan sebagai “benar”. Ketika pengembang membaca spesifikasinya, dia mengoreksi ekspektasinya dan menemukan bug sebenarnya. Menguji aturannya, bukan kodenya, yang membuat perbedaan.
Kasus 3 — Ledakan kondisi tepi. Saat meminta AI hanya “kasus tepi” untuk fungsi rentang tanggal; Ini menghasilkan 8 kasus seperti awal=akhir, interval mundur, tahun kabisat 29 Februari, zona waktu berbeda dan interval nol. Dua di antaranya (jarak terbalik dan tahun kabisat) sebenarnya menyebabkan kesalahan. Mengingat kasus-kasus ini secara manual sering kali dilewati; AI menjadi mitra “brainstorming edge-case” di sini.
Empat Templat yang Dapat Disalin
Pembuatan pengujian berdasarkan spesifikasi:
Peran: Pengembang yang menulis tes. Framework: {{pytest/JUnit/Jest...}}.Apa yang HARUS DILAKUKAN oleh fungsi tersebut (spesifikasi): {{rule}}Tulis pengujian untuk fungsi berikut. Tulis ekspektasi sesuai dengan spesifikasi, BUKAN keluaran kode saat ini. Jalur bahagia + tambahkan setidaknya 4 kasus tepi. Biarkan setiap tes menguji satu hal, gunakan nama deskriptif. {{fungsi}}
Brainstorming kasus tepi:
Buat daftar kasus tepi/kegagalan yang harus dicoba dalam pengujian fungsi ini (null, null, breakpoint, format buruk, konkurensi, kesalahan eksternal). Untuk setiap kasus: masukan, perilaku yang diharapkan. JANGAN tulis kode dulu, cukup daftar.{{function}}
Analisis kesenjangan cakupan:
Di bawah ini adalah fungsi dan tes yang tersedia. Cabang, kondisi dan kasus mana yang belum diuji? Buat daftar kekurangannya dan tulis tes baru hanya untuk kekurangannya. Jangan ulangi yang sudah ada. Fungsi:{{fungsi}}Pengujian:{{pengujian_yang ada}}
Uji data/pembuatan objek tiruan:
Hasilkan data pengujian realistis untuk pengujian {{function/service}}: sampel valid, sampel batas, dan sampel tidak valid secara terpisah. Sarankan perilaku tiruan sederhana untuk ketergantungan eksternal {{X}}. Menggunakan data rahasia/PII yang sebenarnya; Menghasilkan data palsu.
Perintah lemah / Perintah kuat
Lemah: "Tulis tes untuk fungsi ini."
Kuat: "dengan pytest. Fungsi apply_discount(total, persen) — aturan: diskon harus 0%–30%, di luar batas harus membuang ValueError, hasilnya harus dibulatkan menjadi 2 desimal. Tulis ekspektasi berdasarkan ATURAN ini (bukan berdasarkan kode). Jalur bahagia + kasus tepi ini: 0%, 30%, 31% (kesalahan), negatif, total=0. [kode]"
Dia memberikan aturan pelepasan yang kuat dan mengatakan "tulis ekspektasi sesuai aturan, bukan kode"; Kalimat tunggal ini menutup jebakan AI yang memperbaiki perilaku buruk.
Jenis tes
Kontribusi AI
kendali manusia
Selamat pengujian unit jalan
kerangka cepat
Apakah ekspektasinya benar?
Kasus tepi
Brainstorming yang ekstensif
Hilangkan yang tidak relevan
Pengisian celah lingkup
Menemukan cabang yang dilewati
Konfirmasikan signifikansinya
Uji data/tiruan
Menghasilkan sampel yang realistis
Tidak ada PII, kontrol realisme
Pengujian Mengelola Kualitas, Bukan Menjaminnya
Cakupan pengujian yang tinggi memberikan keyakinan, namun hal ini juga dapat menyesatkan: cakupan 100 persen berarti "setiap baris dijalankan", bukan "setiap baris benar". Sangat mudah untuk meningkatkan cakupan dengan AI; Nilai sebenarnya ada dalam menulis harapan yang bermakna. Nilai dari sebuah tes adalah kemampuannya untuk memecahkan dan mengingatkan Anda ketika kode rusak. Itu sebabnya pengujian yang dihasilkan AI didasarkan pada pertanyaan "apakah kode benar-benar rusak saat diubah?" Ujilah dengan pertanyaan; Sengaja memutus garis dan melihat tes putus (ide mutasi) adalah bukti bahwa tes tersebut berhasil.
Tip: Untuk melihat apakah tes yang ditulis AI berhasil, buat bug kecil di kode (misalnya, ubah a + menjadi -) dan lihat apakah tes tersebut gagal. Jika tidak rusak, tes itu tidak melindungi Anda.
Kesalahan umum
- Meminta ujian tanpa memberi aturan. Model tersebut membekukan perilaku saat ini; memperbaiki kesalahan sebagai "benar".
- Menerima ekspektasi tanpa membacanya. Pengujian menyesatkan jika Anda tidak memeriksa apakah pernyataan tersebut memeriksa nilai yang benar.
- Sekadar menguji jalan bahagia. Kesalahan nyata hanya ada di pinggiran; Mintalah kasus Edge secara eksplisit.
- Salah mengira ruang lingkup untuk tujuannya. Persentase yang tinggi tidak menjamin perilaku yang benar.
- Menjadikan data nyata/tersembunyi sebagai data uji. Data atau rahasia pelanggan tidak boleh dimasukkan dalam pengujian dan penyimpanan; Hasilkan data sintetis.
Singkatnya
AI menghilangkan sebagian besar beban berulang dalam pengujian penulisan: AI menghasilkan kerangka yang cepat, daftar kasus edge yang besar, dan analisis kesenjangan cakupan. Namun hal yang paling penting adalah ekspektasi: AI cenderung menguji perilaku kode saat ini, sedangkan pengujian harus ditulis sesuai dengan spesifikasi. Berikan aturan, periksa ekspektasi, terapkan kasus edge, dan uji apakah pengujian benar-benar melindungi dengan memasukkan bug. Cakupan tes adalah alat, bukan tujuan.
Tugas aplikasi
Pilih fungsi dan cetak tes terlebih dahulu ke AI hanya dengan memberikan kodenya; Perhatikan ekspektasinya. Kemudian cetak tesnya lagi, berikan spesifikasi (perilaku yang diperlukan) untuk fungsi yang sama. Bandingkan ekspektasi dari dua set pengujian: apakah ada perbedaan, mana yang menunjukkan bug sebenarnya? Terakhir, verifikasi bahwa salah satu pengujian yang dihasilkan berfungsi dengan menambahkan bug yang disengaja ke kode dan melihat penghentian pengujian.
daftar periksa
- [ ] Saya membedakan apakah tes tersebut untuk memperbaiki atau memverifikasi perilaku.
- [ ] Ketika saya meminta tes, saya memberikan aturan (spesifikasi) yang harus ada, bukan kodenya.
- [] Saya membandingkan setiap pernyataan yang dihasilkan dengan spesifikasi.
- [] Saya secara eksplisit meminta kasus edge dan kegagalan.
- [ ] Saya memandang cakupan persentase sebagai alat, bukan tujuan.
- [ ] Saya menguji apakah suatu tes benar-benar melindungi dengan memasukkan kesalahan.