Unit 6 / 12

Automasi Ujian dan Jaminan Kualiti

Keuntungan:

  • Keupayaan untuk menghasilkan ujian unit, integrasi dan kes tepi dengan penegasan yang bermakna dengan AI
  • Keupayaan untuk mengekstrak liputan ujian secara sistematik, mengehadkan nilai dan senario negatif dengan sokongan AI
  • Keupayaan untuk mengesahkan bahawa ujian yang dihasilkan oleh AI sebenarnya mengesahkan tingkah laku dan tidak hanya mengulangi kod sedia ada

Pengujian adalah mekanisme yang membuktikan bahawa perisian itu benar-benar berkelakuan seperti yang dijanjikan. Suite ujian yang baik memberitahu anda dalam beberapa saat sama ada perubahan memecah sesuatu dan memberi jurutera kebebasan untuk bertindak dengan yakin. AI mempercepatkan bahagian penulisan ujian yang paling membosankan dan paling dilangkau: menjana pelbagai senario, titik putus dan kes negatif. Tetapi terdapat perangkap licik di sini: AI mungkin menulis ujian yang mengesahkan tingkah laku semasa (mungkin rosak) kod, bukan tingkah laku yang sepatutnya; atau ia boleh menghasilkan ujian kosong yang sentiasa lulus, sebenarnya tidak memeriksa apa-apa. Nilai ujian bukan pada sama ada ia lulus, tetapi sama ada ia menyemak perkara yang betul dan bertukar merah apabila ia salah.

Dalam unit ini, anda akan belajar cara menghasilkan ujian unit, integrasi dan kes tepi dengan penegasan yang bermakna; cara mengekstrak liputan ujian, titik putus dan senario penurunan secara sistematik; dan kita akan lihat bagaimana anda boleh menyemak sama ada ujian yang dihasilkan AI sebenarnya mengesahkan tingkah laku.

Konsep: Ujian unit: Menguji satu fungsi/kelas secara berasingan. Ujian integrasi: Ujian bahawa beberapa bahagian berfungsi bersama dengan betul. Tegas: Pernyataan yang menyemak bahawa keputusan adalah sama dengan apa yang diharapkan; Inilah nadi ujian. Liputan: Berapa banyak kod dijalankan oleh ujian; Liputan tinggi tidak menjamin kualiti.

Menghasilkan Ujian Bermakna

Ujian yang baik melakukan tiga perkara dengan jelas: ia menetapkan keadaan, ia melakukan tindakan, ia menegaskan hasilnya. Apabila mencetak ujian kepada AI, nyatakan tingkah laku yang ingin anda sahkan dan senario yang harus dilindungi; Jika tidak, ia menghasilkan ujian cetek yang sentiasa lulus.

  1. Tentukan tingkah laku yang akan diuji. “Apa yang dikira betul?” Jawab soalan dengan jelas.
  2. Minta jenis senario. Normal, had, negatif, keadaan ralat.
  3. Import penegasan yang bermakna. Ia bukan sahaja "membuang ralat", ia "mengembalikan nilai yang betul".
  4. Semak ketepatan ujian. Adakah ujian menjadi merah apabila anda memecahkan kod secara sedar?

Gesaan penjanaan ujian yang komprehensif: "Tulis ujian unit untuk fungsi 'applydiscount(amount, coupon)' berikut. Mempunyai SEKURANG-KURANGNYA satu senario dalam kategori berikut: (1) kupon sah biasa, (2) titik putus (jumlah 0, diskaun 100%), (3) negatif (kupon tidak sah, amaun negatif ujian), (4) ralat CONCPON setiap kali nilai kupon). (bukan hanya 'berfungsi'). Namakan ujian boleh dibaca.

Gesaan pengekstrakan nilai sempadan: "Lakukan analisis nilai sempadan untuk input fungsi ini. Untuk setiap parameter, ekstrak nilai 'hanya di sempadan', 'tepat di bawah sempadan', 'tepat di atas sempadan' sebagai jadual. Kemudian senaraikan senario ujian yang meliputi sempadan ini. Jangan tulis kod lagi, hanya analisis dan senarai tanda senario."

Awas: Liputan ujian tinggi (cth. 90%) tidak membuktikan bahawa kod itu betul. Liputan mengukur bilangan baris yang telah dilaksanakan; bukannya garisan tersebut menghasilkan hasil yang betul. Ujian tanpa penegasan bermakna meningkatkan liputan tetapi tidak menjamin apa-apa. Kandungan penegasan menentukan kualiti, bukan bilangan penegasan.

Menguji Ujian Itu Sendiri: Logik Mutasi

Cara paling praktikal untuk memahami sama ada ujian yang dijana AI benar-benar berfungsi adalah dengan sengaja memecahkan kod (logik ujian mutasi). Balikkan syarat, buat tanda + -; Jika tiada ujian menjadi merah, ujian anda sebenarnya tidak mengekalkan tingkah laku itu.

Uji gesaan pemburuan kerentanan: "Beritahu saya pepijat yang berpotensi dalam kod ini ujian berikut MUNGKIN TIDAK ditangkap. Cadangkan 5 mutasi kecil yang boleh dibuat pada kod (cth. >= bukannya >, - bukannya +) dan nyatakan untuk setiap satu sama ada ujian sedia ada akan menangkapnya. Bagi mereka yang tidak ditangkap, cadangkan ujian yang perlu ditambah. Kod: [kod] Ujian: [ujian]"

Gesaan Lemah / Gesaan Kuat

LEMAH: "Tulis ujian untuk fungsi ini." (Hasil: biasanya satu senario yang menggembirakan, penegasan lemah; ralat terlepas.) KUAT: "Tulis ujian untuk fungsi 'passwordStrong' ini. Peraturan: sekurang-kurangnya 8 aksara, 1 huruf besar, 1 digit diperlukan. Tutup senario berikut sebagai ujian BERASINGAN: betul-betul 8 aksara (had), 7 aksara, tanpa huruf besar, had kosong, tidak terlalu panjang (1000 aksara) Tegaskan secara eksplisit nilai yang dijangkakan benar/salah dalam setiap ujian dan namakan ujian mengikut perkara yang disemaknya."

Gesaan berkuasa memberikan peraturan dan senario sempadan penuh. Pasangan sempadan seperti "tepat 8 / 7 aksara" ialah tempat yang paling biasa untuk membuat kesilapan (mengelirukan > dengan >=). Gesaan yang lemah memintas sempadan ini dan membawa ralat kepada pengeluaran.

Jenis Ujian dan Tempat Untuk Digunakan

Jenis ujian

Apa yang ia mengesahkan?

Sumbangan AI

Perhatian

unit

Fungsi/kelas tunggal

Menghasilkan pelbagai senario dengan pantas

Penegasan yang bermakna diperlukan

integrasi

Bahagian bekerja bersama-sama

Senario dan draf data olok-olok

Tingkah laku ketagihan yang sebenar

tamat/terima

Seluruh aliran pengguna

Senarai langkah dan jangkaan

terdedah kepada kerapuhan

regresi

Ralat lama tidak kembali

Ujian khusus kesalahan

Perlu ditambah pada setiap pembaikan

Kes Mini

Kes 1 — Ujian yang sentiasa lulus. AI menulis 12 ujian ke fungsi dan semuanya lulus. Jurutera menjadi curiga dan sengaja memutarbelitkan nilai pulangan fungsi; Hanya 3 daripada ujian menjadi merah. 9 ujian lain tidak mengandungi penegasan yang bermakna. Ujian diperkukuh dengan memburu mutasi; perlindungan sebenar diperoleh dalam 9 senario.

Kes 2 — Ralat sempadan. Fungsi pengesahan umur harus menyatakan "18 dan ke atas adalah sah" tetapi >18 ditulis, bermakna umur 18 ditolak. Ralat muncul serta-merta dalam ujian kerana AI menjana senario "tepat 18" melalui analisis titik putus. Ujian had tunggal menghalang sebarang aduan pengguna sebenar.

Kes 3 — Membetulkan tingkah laku semasa. Apabila AI diberitahu untuk "menulis ujian berdasarkan kod ini", ia menghasilkan ujian yang menerima sebagai "betul" ralat pembundaran yang sudah wujud dalam kod. Apabila jurutera mencetak ujian mengikut keperluan (nilai betul yang dijangkakan) dan bukan kod, ujian menjadi merah dan ralat sebenar berlaku. Ujian harus diperoleh dari jangkaan, bukan dari kod.

Kesilapan biasa

  • Penegasan yang sia-sia. "Tidak membuang ralat" tidak mencukupi; Nilai yang betul mesti disahkan.
  • Skop mengelirukan dengan kualiti. Liputan yang tinggi tidak menjamin hasil yang tepat.
  • Mencetak ujian dengan kod. Membetulkan ralat semasa kepada "benar"; Ujian harus berasal dari jangkaan.
  • Melangkau nilai had. Mengelirukan > dengan >= ialah kesilapan yang paling biasa; pasangan sempadan mesti diuji.
  • Tidak mengaudit ujian itu sendiri. Ujian yang tidak bertukar merah apabila anda memecahkan kod tidak memberikan perlindungan.

Secara ringkasnya

Suite ujian yang baik adalah kunci untuk membuat perubahan dengan yakin. AI dengan cepat menjana pelbagai senario, sempadan dan situasi negatif; Tetapi jika ia memperoleh ujian daripada kod dan bukannya keperluan, ia boleh membetulkan pepijat sedia ada atau menulis ujian tidak bermakna yang sentiasa lulus. Tegaskan nilai jangkaan konkrit dalam setiap ujian, sertakan pasangan terikat, dan sahkan bahawa ujian anda benar-benar melindungi dengan sengaja memecahkan kod. Kandungan penegasan, bukan bilangan skop, menentukan kualiti.

Tugasan permohonan

Pilih fungsi dan minta ia menjana ujian dalam empat kategori (normal, had, negatif, ralat) dengan gesaan penjanaan ujian yang komprehensif; Pastikan nilai jangkaan konkrit ditegaskan dalam setiap ujian. Kemudian jalankan gesaan memburu kerentanan ujian, cadangkan 5 mutasi kecil dalam kod dan jalankan ujian untuk menyemak yang mana yang mereka tangkap. Tambah ujian baharu untuk sekurang-kurangnya satu mutasi yang tidak ditangkap dan tunjukkan bahawa ia kini dalam keadaan merah.

senarai semak

  • [ ] Saya mencetak ujian berdasarkan kelakuan yang diharapkan/betul, bukan kod.
  • [ ] Saya meliputi senario normal, had, negatif dan ralat.
  • [ ] Saya menegaskan nilai jangkaan konkrit dalam setiap ujian.
  • [ ] Saya menguji pasangan sempadan (hanya di atas-bawah / hanya di atas-bawah).
  • [ ] Dengan sengaja memecahkan kod, saya mengesahkan bahawa ujian menjadi merah.
  • [ ] Saya menambah ujian baharu untuk mutasi yang tidak dapat dikesan.