Unit 10 / 11

Risiko Kepercayaan Palsu, Kualiti Ujian dan Ujian Mutasi: Ujian Ujian

Keuntungan:

  • Keupayaan untuk mengenali tiga wajah pseudo-amanah (tidak tegas, menegaskan diri, menegaskan remeh) dan menggunakan penawar
  • Keupayaan untuk menggunakan ujian mutasi dan skor mutasi sebagai ukuran kualiti yang lebih tepat daripada peratus liputan dengan alat atau tangan
  • Keupayaan untuk meletakkan AI sebagai pasukan merah menentang ujian dan memburu kelemahan ujian tanpa jatuh ke dalam perangkap pujian

Di tengah-tengah modul ini adalah amaran berulang: panel ujian hijau bercahaya bukan bukti kualiti. Jika ujian anda memberi anda keyakinan, anda perlu tahu sama ada keyakinan itu benar atau palsu. Pada zaman kecerdasan buatan (AI), soalan ini lebih kritikal berbanding sebelum ini, kerana AI mahir dalam menghasilkan ujian cecair, kelihatan licin tetapi hampa. Keyakinan palsu — mempercayai perisian itu betul kerana ujian berwarna hijau, padahal ujian itu tidak mengesahkan apa-apa—adalah perkara paling berbahaya yang boleh berlaku kepada pasukan QA; kerana ia tidak menyembunyikan bahawa tiada ralat, tetapi anda tidak dapat melihat ralat itu. Unit ini menghimpunkan falsafah pengesahan keseluruhan modul ke dalam satu disiplin: menguji ujian anda.

Piawaian emas untuk mengukur kualiti ujian: ujian mutasi

Cara paling berkesan untuk memahami sama ada ujian benar-benar melindungi atau tidak ialah ujian mutasi (ujian mutasi - teknik yang menghasilkan herotan/mutasi kecil yang disengajakan dalam kod sumber dan mengukur sama ada ujian mengesan herotan ini). Logiknya mudah: jika anda dengan sengaja memecahkan kod (menjadikan + menjadi -, a > menjadi >=, true menjadi palsu), suite ujian yang baik harus menangkap rasuah itu dan bertukar menjadi merah. Jika tidak, gangguan itu ialah mutan yang terselamat — jadi ujian anda sebenarnya tidak mengekalkan tingkah laku itu.

Skor mutasi = mutasi terbunuh / total mutasi. Pakej dengan liputan talian 90% mungkin mempunyai skor mutasi sebanyak 40%; Ini menunjukkan bahawa talian berfungsi tetapi tingkah laku tidak disahkan. Skor mutasi ialah ukuran kualiti yang lebih jujur ​​daripada peratusan liputan.

Petua: Terdapat alat mutasi automatik (PIT/Pitest untuk Java, Stryker untuk JavaScript/TypeScript, Stryker.NET untuk .NET, mutmut untuk Python). Ini secara automatik menjana dan menguji beratus-ratus mutasi. Jika anda tidak mempunyai alat, kaedah manual "pecahkan ujian kod" tidak ternilai untuk fungsi kritikal.

Tiga wajah pseudo-amanah dan penawarnya

Bentuk pseudo-amanah

gejala

penawar

Uji tanpa tegas

Kod berfungsi, tiada apa-apa yang disahkan

Tegas yang benar dalam setiap ujian; ujian dengan mutasi

ujian pengesahan diri

Dijangka = output kod

Kira nilai jangkaan secara bebas

Penegasan remeh

"bukan batal", "200 dikembalikan"

Sahkan peraturan perniagaan/hasil sebenar

Kesilapan skop tinggi

90% garisan, perlindungan rendah

Lihat skor mutasi

Toleransi ujian rapuh

"Terperangkap lagi, lulus"

Punca punca + ujian deterministik

Menggunakan AI sebagai "pasukan merah"

AI boleh menjana kepercayaan palsu dan menjadi sekutu yang kuat dalam memburunya. Gunakan AI sebagai pasukan merah menentang ujian anda sendiri: tanya "tulis kod yang lulus ujian ini tetapi salah" atau "cari subversi yang akan menipu ujian ini." Jika AI menemui kelemahan dalam ujian anda, kelemahan tersebut adalah risiko sebenar.

Awas: Jangan tanya AI "Adakah kualiti ujian saya bagus?" dan ambil jawapan "ya, hebat" sebagai jaminan. AI cenderung bersikap baik. Sebaliknya, cabar AI untuk tugas konkrit: "hasilkan pepijat yang lulus ujian ini." Jika ia boleh menghasilkannya, ujian anda buta terhadap ralat itu.

Mutasi setara dan had skor

Ujian mutasi berkuasa, tetapi ia mempunyai tangkapan: sesetengah mutasi tidak mengubah tingkah laku kod sama sekali. Ini dipanggil mutasi setara (mutan setara - kod rosak, mutasi yang menghasilkan keputusan yang sama seperti yang asal). Sebagai contoh, menukar nilai awal pembolehubah yang tidak pernah digunakan tidak menjejaskan output; Tiada ujian boleh dan tidak sepatutnya menangkap ini. Oleh itu, skor mutasi 100% selalunya tidak boleh dicapai dalam amalan dan bukan matlamat. Merumput mutasi setara dengan tangan adalah intensif buruh; Jadi jangan baca skor mutasi sebagai markah peperiksaan mutlak, tetapi sebagai penunjuk jujur ​​"adakah ujian saya benar-benar melindungi?"

Pendekatan praktikalnya ialah: daripada menjalankan ujian mutasi secara berterusan merentasi keseluruhan pangkalan kod, jalankannya pada modul yang mengandungi risiko tertinggi dan peraturan perniagaan yang paling kompleks. Periksa mutasi yang masih hidup dalam modul ini satu demi satu; Jika ia adalah jurang sebenar, tambah ujian; jika ia adalah mutasi yang setara, tandakannya dengan justifikasi dan lulus. AI boleh melakukan pemeriksaan awal dalam menilai sama ada mutasi yang masih hidup adalah setara; tetapi keputusan muktamad dibuat oleh anda yang tahu apa yang dilakukan oleh kod tersebut.

Awas: Ujian mutasi adalah mahal dari segi pengiraan (semua ujian yang berkaitan dijalankan semula untuk setiap mutasi). Jadi strategi yang biasa dan munasabah adalah dengan menjadualkannya sebagai semakan mendalam mingguan atau pra-keluaran untuk modul kritikal, dan bukannya setiap gabungan.

Gesaan lemah / Gesaan kuat

Lemah: "Adakah ujian saya mencukupi?"
Kuat: "Bertindak sebagai pasukan merah untuk fungsi dan suite ujian ini. (1) Hasilkan 8 mutasi dalam kod yang boleh dimatikan (penggantian pengendali, anjakan sempadan, penyongsangan keadaan, penggantian nilai pulangan). (2) Untuk setiap mutasi, nyatakan ujian yang sedia ada yang akan menangkapnya dan yang mana TIDAK. (3) Untuk setiap mutasi yang bertahan, tulis juga ujian baharu yang boleh menyebabkan kod ini mati. menguji tetapi melanggar peraturan perniagaan Kod+ujian: [tampal]"

Gesaan yang kuat; Ia meletakkan AI sebagai pemeriksa pemecah ujian, bukan mesin pujian.

Empat templat yang boleh disalin

1) Kawalan mutasi manual:

Hasilkan 8 mutasi ketara (gangguan kecil yang disengajakan) untuk kod ini: penggantian operator aritmetik, had perbandingan (> vs >=), penyongsangan logik, penggantian kembali/malar, keadaan langkau. Untuk setiap mutasi, ramalkan ujian yang tersedia akan menangkapnya atau tidak. Kod+ujian: [tampal]

2) Membunuh mutasi yang masih hidup:

Laporan ujian mutasi berikut mengandungi mutasi yang masih hidup (tidak ditangkap): [senarai/laporan]. Untuk setiap satu, tulis ujian minimum yang akan membunuh mutasi itu (kod akan bertukar merah apabila rosak dengan cara itu). Komen tentang tingkah laku yang disahkan oleh ujian.

3) Pasukan merah - ujian darah:

Bolehkah anda menulis kod yang LULUS SEMUA ujian berikut, tetapi melanggar peraturan perniagaan berikut: [peraturan perniagaan]. Jika ya, apakah kelemahan dalam ujian ini yang membenarkan ini? Tambah ujian yang akan menutup celah itu. Ujian: [tampal]

4) Pemeriksaan kualiti ujian:

Semak suite ujian ini untuk kualiti. Tandakan untuk setiap ujian:- Adakah terdapat penegasan yang benar atau ia prop?- Adakah nilai yang dijangkakan bebas, diperoleh daripada kod?- Adakah ia mengesahkan peraturan perniagaan atau sesuatu yang remeh? Akhir sekali berikan anggaran "skor tegasan benar" dan 3 ujian paling lemah. Ujian: [tampal]

tiga kes mini

Kes 1 — Liputan 92%, skor mutasi 38%. Satu pasukan bergantung pada liputan tinggi. Apabila ujian mutasi dijalankan dengan Stryker, skornya ialah 38%: kebanyakan mutasi yang dihasilkan terselamat. Ini adalah bukti bahawa ujian tidak menjalankan baris dan mengesahkan tingkah laku. Pasukan itu melabur tiga minggu dalam kualiti ujian; Skor mutasi meningkat kepada 81%, dan dua ralat pengiraan sebenar telah ditangkap oleh ujian yang dipertingkatkan ini dalam keluaran seterusnya.

Kes 2 — AI menipu ujian. Dengan templat "pasukan merah", seorang pakar meminta AI untuk kod yang lulus ujian sedia ada tetapi melanggar peraturan diskaun. AI menulis kod yang sentiasa mengembalikan diskaun sifar — dan semua ujian kekal hijau kerana tiada ujian yang mengesahkan nilai diskaun sebenar. Jurang dilihat, penegasan sebenar ditambah.

Kes 3 — Perangkap pujian. Seorang penguji junior bertanya kepada AI, "Adakah ujian saya bagus?" dan berasa lega mendengar jawapan, "Sangat menyeluruh." Rakan sekerja kanannya mempunyai ujian yang sama diaudit menggunakan templat "audit kualiti ujian"; Ternyata 12 daripada 20 ujian adalah hiasan (tanpa penegasan atau sampah). Soalan yang betul membawa jawapan yang betul.

Kesilapan biasa

  • Tersalah skop untuk kualiti. Bergantung pada liputan baris yang tinggi dan tidak melihat sama sekali pada skor mutasi.
  • Mempercayai pujian AI. Bertanya "Adakah ujian anda bagus?" dan menganggap jawapan positif sebagai jaminan.
  • Menghasilkan nilai yang diharapkan daripada kod. Ujian pengesahan sendiri yang mengesahkan kod yang rosak.
  • Redha dengan dakwaan remeh. Semakan yang tidak mengesahkan peraturan sebenar, seperti "tidak batal", "200 dikembalikan".
  • Mengabaikan mutasi yang masih hidup. Mengabaikan apa yang tidak ditangkap dalam laporan mutasi.
  • Tidak cuba mengubah kod kritikal secara manual. Melangkau langkah "pecahkan kod dan uji" jika alat tidak tersedia.

Secara ringkasnya

Pseudo-trust percaya bahawa perisian adalah betul kerana ujiannya berwarna hijau; sedangkan ujian mungkin tidak mengesahkan apa-apa. Piawaian emas untuk mengukur ini ialah ujian mutasi: dengan sengaja memecahkan kod dan mengukur sama ada ujian menangkapnya. Skor mutasi ialah ukuran kualiti yang lebih jujur ​​daripada peratusan liputan. AI menghasilkan kepercayaan palsu dan menjadi pasukan merah yang berkuasa dalam memburunya — tanya "hasilkan pepijat yang lulus ujian ini." Uji ujian anda: penegasan benar, nilai jangkaan bebas, pengesahan peraturan perniagaan dan mutasi terbunuh.

Tugasan permohonan

Import fungsi yang mengandungi peraturan perniagaan dan ujiannya daripada projek anda sendiri. Jika boleh, jalankan alat mutasi (Stryker/Pitest/mutmut) dan ukur skor mutasi; Jika tiada alat, jana sekurang-kurangnya 8 mutasi dengan templat "kawalan mutasi manual" dan cuba secara manual. Untuk setiap mutasi yang masih hidup, tulis ujian baharu dengan templat "bunuh mutasi yang masih hidup". Akhir sekali, dengan corak "pasukan merah", lihat sama ada AI boleh menghasilkan kod yang menipu ujian anda. Laporkan skor mutasi permulaan dan akhir anda (atau kadar mutasi yang ditangkap/jumlah).

senarai semak

  • [ ] Saya menilai kualiti ujian mengikut skor mutasi, bukan liputan.
  • [ ] Saya menjalankan ujian mutasi (sama ada dengan alat atau secara manual) untuk kod kritikal.
  • [ ] Saya menulis ujian baharu untuk setiap mutasi yang masih hidup.
  • [ ] Saya menggunakan AI sebagai pasukan merah dan mencari kelemahan dalam ujian saya.
  • [ ] Saya tidak mengambil pujian "ujian anda bagus" AI sebagai jaminan.
  • [ ] Saya menyemak bahawa setiap ujian mengesahkan penegasan sebenar, nilai jangkaan bebas dan peraturan perniagaan.