AI Anda Menulis Tes yang Tidak Pernah Gagal
Anda meminta AI untuk membuat tes. Ia memberikan dua belas tes hijau. CI Anda lolos. Anda menggabungkan kodenya. Tiga hari kemudian, sebuah bug mencapai produksi. Anda melihat tes tersebut. Tesnya lolos, tetapi tidak menguji apa pun.
Tes hijau bukanlah bukti. Itu adalah sebuah hipotesis. AI menulis hipotesis yang tidak pernah gagal.
Lihat fungsi ini:
func Discount(total int) int {
if total > 100 {
return total - 10
}
return total
}
AI mungkin menulis tes seperti ini:
func TestDiscount(t *testing.T) {
got := Discount(150)
if got < 0 {
t.Errorf("result should not be negative")
}
}
Tes ini berwarna hijau. Ia menjalankan kode, sehingga coverage Anda terlihat bagus. Namun, tes ini hanya memeriksa apakah hasilnya kurang dari nol. Jika Anda mengubah diskon menjadi kesalahan matematika, tesnya tetap hijau. Ia tidak memeriksa perilaku. Ia hanya memastikan sistem masih menyala.
Ini adalah jebakan. Coverage menghitung baris yang Anda sentuh. Ia tidak menghitung asersi yang penting. Laporan coverage 90% dapat menyembunyikan kode yang rusak.
AI menginginkan jalur terpendek menuju lampu hijau. Ia memilih asersi yang lemah dan mock yang tidak menguji apa pun.
Untuk memperbaikinya, gunakan satu aturan: pastikan tes tersebut tahu cara untuk gagal.
Ubah kode Anda dengan sengaja. Jika tesnya tetap hijau, tes tersebut tidak berguna. Buang saja.
Tes yang sebenarnya terlihat seperti ini:
func TestDiscount(t *testing.T) {
if got := Discount(150); got != 140 {
t.Errorf("Discount(150) = %d, want 140", got)
}
}
Jika Anda merusak logikanya, tes ini akan langsung menjadi merah. Ia memberikan peringatan nyata.
Anda tidak bisa melakukan ini secara manual untuk setiap tes. Gunakan mutation testing sebagai gantinya. Alat seperti Gremlins di Go menerapkan perubahan kecil pada kode Anda. Mereka memeriksa apakah tes Anda dapat mendeteksi perubahan tersebut.
Jika sebuah perubahan tidak membuat tes gagal, berarti ada celah dalam suite Anda.
Saya menggunakan ini untuk kode AI. Saya tidak membiarkan AI menyatakan pekerjaannya selesai. Saya menjalankan sebuah gate. Alat tersebut melakukan mutasi pada kode. Jika tesnya tetap hijau, AI harus menulis ulang tes tersebut. AI tidak memutuskan apakah sebuah tes itu bagus. Mutasi yang menentukannya.
Tidak ada tes AI yang masuk ke codebase saya tanpa membuktikan bahwa ia bisa gagal. Tes yang tidak bisa gagal lebih buruk daripada tidak ada tes sama sekali. Tes yang hilang itu jelas terlihat. Tes palsu itu berbahaya.
Berhentilah memercayai lampu hijau. Sebuah tes hanya berharga jika ia mampu menghasilkan warna merah.
Source: https://dev.to/ohugonnot/your-ai-writes-tests-that-can-never-fail-3i57
Optional learning community: https://t.me/GyaanSetuAi
