Keuntungan:
- Keupayaan untuk menghasilkan ujian unit, integrasi dan UI dengan kecerdasan buatan selaras dengan piramid ujian dan had perlindungan dan situasi ralat serta senario gembira
- Keupayaan untuk menghapuskan ujian kosong/tidak berguna dan liputan kembung dengan memeriksa bahawa setiap ujian yang dihasilkan benar-benar mengesahkan tingkah laku
- Memastikan ujian menangkap pepijat dan menghalangnya daripada membetulkan pepijat dengan memberitahu AI perkara yang harus dilakukan oleh kod
Menulis kod adalah separuh daripada kerja; Membuktikan bahawa kod berfungsi dengan betul ialah separuh lagi. Apl mudah alih menemui ratusan peranti, saiz skrin, versi sistem pengendalian dan gelagat pengguna yang berbeza. Adalah mustahil untuk menguji semua ini secara manual; Itulah sebabnya ujian automatik (kod ujian kod — ujian yang berjalan tanpa klik manusia) adalah tulang belakang kualiti mudah alih. AI sangat cekap dalam menulis ujian kerana ujian menulis adalah jenis kerja corak yang disukainya: mengesahkan tingkah laku khusus untuk input tertentu. Dalam unit ini, kita akan belajar bagaimana untuk mempercepatkan ujian unit, ujian antara muka dan automasi dengan AI, tetapi memastikan kualiti ujian melalui mata manusia.
Menguji piramid: apa yang perlu diuji dan berapa banyak
Strategi ujian yang sihat menyerupai piramid. Pangkalan termasuk sejumlah besar ujian unit (ujian pantas yang menguji satu fungsi atau kelas secara berasingan); mereka cepat dan murah. Di tengah adalah kurang ujian integrasi (menguji bagaimana beberapa bahagian berfungsi bersama). Di bahagian atas terdapat ujian UI/hujung ke hujung yang minimum (ujian dilakukan dengan mengklik pada skrin seperti yang dilakukan pengguna); mereka realistik tetapi perlahan dan rapuh. AI membantu pada setiap lapisan, tetapi nilai paling banyak adalah pada asas: dengan cepat menghasilkan ujian unit logik perniagaan.
Jenis ujian
Skop
kelajuan
Kecekapan AI
ujian unit
Fungsi/kelas tunggal
sangat pantas
sangat tinggi
integrasi
interlayer
sederhana
tinggi
UI / hujung ke hujung
Semua aliran skrin
lambat
Sederhana (rapuh)
Petua: Apabila memberitahu AI untuk "menjana ujian untuk fungsi ini", secara eksplisit meminta kes tepi: input kosong, nol, nombor negatif, nilai yang sangat besar, ralat rangkaian. AI menghasilkan laluan gembira dengan mudah; Kesilapan sebenar bersembunyi di sempadan dan melompat keluar jika anda tidak mahu mereka di sana.
Langkah-langkah menulis ujian dengan AI
- Tentukan tingkah laku yang akan diuji. "Fungsi ini harus memberikan output ini kepada input ini."
- Nyatakan rangka kerja. JUnit + MockK pada Android, XCTest pada iOS, Espresso (Android) atau XCUITest (iOS) untuk UI.
- Minta keadaan had. Senario gembira + ralat + titik putus.
- Urus objek olok-olok. Kebergantungan luaran seperti rangkaian dan pangkalan data dicontohi untuk ujian (olok-olok - olok-olok terkawal dan bukannya perkhidmatan sebenar).
- Jalankan ujian dan sahkan. Adakah ujian itu lulus, adakah ia mengesahkan sesuatu yang benar-benar bermakna?
Langkah kelima adalah kritikal. AI kadangkala menghasilkan ujian tidak berguna yang "sentiasa lulus"; contohnya, ujian yang tidak mengesahkan apa-apa atau menyemak data palsunya sendiri. Ujian yang lulus dan ujian yang berharga adalah perkara yang berbeza.
Awas: Hanya kerana AI boleh menghasilkan tidak bermakna ujian itu betul. Kadangkala AI menerima tingkah laku semasa (mungkin rosak) kod sebagai "betul" dan menulis ujian dengan sewajarnya. Ujian sedemikian membetulkan pepijat dan bukannya menangkapnya. Anda menentukan apa yang diharapkan oleh ujian; Beritahu AI apa yang patut dilakukannya, bukan apa yang dilakukan oleh kod itu.
Uji ukuran liputan dan kekeliruan
Liputan ujian (berapa peratusan kod yang dijalankan oleh ujian) ialah metrik yang berguna tetapi mengelirukan. 90% liputan menunjukkan bahawa 90% daripada kod telah dilaksanakan; tetapi belum disahkan bahawa talian tersebut berfungsi dengan betul. Ujian yang menjalankan garis dan tidak menyemak keputusan mengembang skop tetapi tidak memberikan keselamatan. Matlamatnya bukanlah angka yang tinggi, tetapi pengesahan yang bermakna. Anda boleh meningkatkan dengan cepat menggunakan AI, tetapi pastikan setiap ujian benar-benar menguji tingkah laku.
tiga kes mini
Kes 1 — Situasi sempadan ditangkap. AI telah diminta untuk ujian untuk fungsi pemindahan wang dalam aplikasi perbankan, dan khususnya senario "jumlah negatif" dan "lebih daripada baki" telah ditambah. Ujian itu mendedahkan bahawa pemindahan itu tidak disekat dengan jumlah negatif; ini akan menjadi kelemahan keselamatan utama dalam pengeluaran. Ditutup dengan menambah kawalan satu baris. Pengajaran: ujian sempadan adalah ujian yang paling berharga.
Kes 2 — Ujian palsu. Satu pasukan berasa lega untuk meningkatkan liputan kepada 85% dengan 40 ujian unit yang dihasilkan oleh AI. Semasa pemeriksaan, didapati bahawa kebanyakan ujian sebenarnya tidak mengesahkan sebarang output, mereka hanya memanggil fungsi dan menulis assertTrue(true). Liputan adalah tinggi tetapi perlindungan adalah sifar. Ujian telah dirombak dan ditulis semula dengan pengesahan sebenar. Pengajaran: nombor liputan boleh berbohong.
Kes 3 — Ujian UI dipercepatkan. Pasukan e-dagang menulis skrip XCUITest aliran tambah ke troli dengan AI dalam masa 20 minit; Jika ia ditulis dengan tangan, ia akan mengambil masa setengah hari. AI meneka pengecam elemen skrin; Pasukan memadankannya dengan kod sebenar dan membetulkannya. Kelajuan draf adalah nyata, tetapi pengesahan pengecam adalah kerja manusia.
Gesaan lemah / Gesaan kuat
Gesaan lemah: "Tulis ujian untuk fungsi ini."
Gesaan berkuasa: "Hasilkan ujian unit untuk fungsi Kotlin ini dengan JUnit5 + MockK. Fungsi: pemindahan wang (amaun, sumber, sasaran). Gelagat untuk diuji (apa yang harus dilakukan oleh kod):- Pemindahan yang sah mesti berjaya- Jumlah negatif atau sifar mesti ditolak- Jumlah yang lebih besar daripada baki mesti ditolak- Ralat rangkaian mesti membuang pengecualian yang sesuai Setiap ujian harus mengesahkan hanya satu perkara yang dinyatakan, nama mereka tidak perlu dideskripsikan. penegasan."
Templat yang boleh disalin
Templat ujian unit: "Jana ujian unit [JUnit/XCTest] untuk fungsi ini untuk [bahasa]. Tingkah laku yang dijangka: [apa yang perlu dilakukan]. Sertakan: senario gembira, input nol, titik putus, kes ralat. Biarkan setiap ujian mengesahkan tingkah laku tunggal; gunakan penegasan yang bermakna; olok-olok. [kod]"
Templat ujian UI: "Tulis ujian UI aliran berikut dengan [Espresso/XCUITest]: [aliran pengguna langkah demi langkah]. Pilih elemen skrin dengan id kebolehaksesan, gunakan id dan bukannya teks. Tambahkan strategi tunggu. Ingatkan saya untuk memadankan id elemen dengan kod sebenar."
Templat audit ujian:"Periksa ujian ini:1) Adakah mereka benar-benar mengesahkan output/tingkah laku atau adakah ia terbatal?2) Adakah ia meliputi kes had?3) Adakah ia pepijat membetulkan kod atau mengharapkan gelagat yang betul?Benderakan dan kuatkan ujian yang lemah. [ujian]"
Templat pengoptimuman liputan: "Kenal pasti bahagian kelas ini yang belum diuji dan cadangkan ujian yang bermakna. Utamakan laluan dengan risiko sebenar, bukan hanya bilangan liputan. [kod]"
Kesilapan biasa
- Hanya menguji senario gembira. Ralat disimpan dalam keadaan had; Minta mereka secara terbuka.
- Menerima ujian kosong/tidak berguna. Ujian jenis assertTrue(true) mengembang skop dan tidak memberikan perlindungan.
- Mempunyai AI mengesahkan apa yang dilakukan oleh kod itu. Pengujian harus menjangkakan apa yang harus dilakukan oleh kod; jika tidak, ia membetulkan pepijat.
- Tersilap nombor skop untuk tujuan itu. Liputan 90% tidak bermakna 90% ketepatan.
- Memautkan ke teks dalam ujian UI. Ujian rosak apabila teks berubah; Gunakan pengecam stabil (id).
- Menyediakan ejekan dengan salah. "Ujian unit" yang memanggil perkhidmatan sebenar akan menjadi perlahan dan rapuh.
Secara ringkasnya
Pengujian ialah tulang belakang kualiti mudah alih, dan AI sangat cekap dalam bidang ini, terutamanya dalam ujian unit. Ikuti piramid ujian: banyak unit, penyepaduan sederhana, sedikit ujian UI. Minta AI secara eksplisit untuk senario gembira serta hadkan kes dan laluan ralat. Pastikan bahawa setiap ujian yang dihasilkan benar-benar mengesahkan tingkah laku; Ujian kosong dan liputan melambung mengelirukan. Paling penting, beritahu AI apa yang harus dilakukan oleh kod, bukan apa yang dilakukannya, jadi ujian menangkap pepijat, bukan membetulkannya.
Tugasan permohonan
Minta ujian daripada AI menggunakan "Templat ujian Unit" untuk fungsi logik perniagaan (cth. pengiraan diskaun atau pengesahan borang) dan nyatakan kes had secara eksplisit (null, negatif, terlalu besar). Jalankan ujian yang dijana, kemudian pastikan ujian yang sama diaudit dengan "Templat audit ujian". Cari sekurang-kurangnya satu ujian lemah, kuatkan dan uji sama ada ujian menangkap ralat sebenar fungsi (dengan menambah pepijat kecil).
senarai semak
- [ ] Saya memilih lapisan yang sesuai untuk piramid ujian (unit keutamaan)
- [ ] Saya mahukan kes had dan ralat selain senario gembira
- [ ] Saya mengesahkan bahawa setiap ujian mengandungi penegasan yang bermakna
- [ ] Saya memberitahu AI apa yang harus dilakukan oleh kod itu, bukan apa yang dilakukannya
- [ ] Saya menumpukan pada laluan risiko sebenar, bukan bilangan perlindungan
- [ ] Saya menggunakan pengecam stabil dalam ujian UI, saya tidak terikat pada teks