AI Untuk Penjanaan Ujian: Di Mana Ia Membantu Dan Di Mana Ia Menipu

AI menulis ujian dengan pantas. Ia juga menulis ujian yang kelihatan benar tetapi mengesahkan perkara yang salah. Anda mungkin melihat liputan (coverage) anda meningkat, tetapi kod anda tetap rosak.

AI sangat bagus untuk tugasan tertentu. Gunakannya untuk:

  • Ekstrapolasi daripada contoh yang baik. Jika anda menulis satu ujian yang sempurna, AI boleh menulis sepuluh lagi mengikut gaya tepat anda.
  • Mengendalikan pengetikan berulang. Gunakannya untuk blok setup, teardown, dan pembantu factory.
  • Mencipta scaffolding awal. Ia membawa anda ke editor dengan lebih pantas berbanding fail kosong.

Bahaya bermula apabila anda membiarkan AI menentukan "kontrak".

Jika anda memberikan AI satu fungsi dan meminta ujian, ia akan membaca kod tersebut dan menguji apa yang kod itu lakukan sekarang. Ia tidak menguji apa yang sepatutnya dilakukan oleh kod tersebut. Ini mewujudkan satu gelung tertutup. AI membuat andaian, menulis kod, dan kemudian menulis ujian yang bersetuju dengan andaian yang sama.

Apabila pepijat (bug) muncul di produksi, ia berlaku kerana set ujian tersebut memihak kepada pepijat tersebut.

Berwaspada dengan tiga perangkap ini:

  1. Ujian berbentuk implementasi AI sering menguji laluan logik dan bukannya peraturan perniagaan. Jika anda mengubah butiran dalaman yang kecil, ujian akan gagal walaupun hasilnya masih betul. Ini menjadikan proses refactoring satu mimpi ngeri.

  2. Kes pinggir (edge cases) yang cetek AI mahir menguji null, string kosong, dan sifar. Ini adalah perkara yang jelas. Ia tidak dapat mencari "pinggir domain". Ia tidak mengetahui pepijat zon masa khusus anda, keanehan pangkalan data anda, atau peraturan perniagaan unik anda.

  3. Mock yang rapuh AI suka melakukan mock terhadap segalanya. Ini membawa kepada dua masalah:

  • Mock tersebut salah. Ia meniru versi palsu API yang tidak sepadan dengan realiti.
  • Mock tersebut membekukan implementasi. Ia menguji bagaimana kod anda memanggil fungsi lain dan bukannya menguji hasil akhir.

Cara menggunakan AI dengan betul:

Pastikan "niat" (intent) berada di luar jangkauan AI.

  • Tulis kontrak terlebih dahulu. Tulis satu ayat dalam bahasa Inggeris mudah untuk setiap ujian. Contoh: "Expired codes must return the original amount."
  • Serahkan ayat-ayat tersebut kepada AI. Biarkan ia menulis assertion, tetapi anda yang menyediakan maksudnya.
  • Lakukan mock pada sempadan (boundaries). Hanya mock API luaran atau pangkalan data. Gunakan versi sebenar untuk modul dalaman anda sendiri.
  • Tulis satu kes pinggir domain secara manual. Setiap kali anda selesai menulis satu fungsi, tuliskan satu perkara yang membimbangkan anda. Gunakan perkara itu sebagai prompt untuk AI.

AI adalah alat produktiviti, bukan pengganti pemikiran. Gunakan ia untuk menulis badan ujian, tetapi jangan sesekali membiarkannya menentukan tujuan ujian tersebut.

Source: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm

Optional learning community: https://t.me/GyaanSetuAi