Keuntungan:
- Kemampuan untuk menghasilkan pengujian unit, integrasi, dan UI dengan kecerdasan buatan sesuai dengan piramida pengujian dan mencakup situasi batas dan kesalahan serta skenario yang menyenangkan
- Kemampuan untuk menyingkirkan pengujian yang kosong/tidak berguna dan cakupan yang membengkak dengan memeriksa bahwa setiap pengujian yang dihasilkan benar-benar memvalidasi suatu perilaku
- Memastikan pengujian menangkap bug dan mencegahnya memperbaiki bug dengan memberi tahu AI apa yang harus dilakukan kode tersebut
Menulis kode adalah separuh pekerjaan; Membuktikan bahwa kode berfungsi dengan benar adalah separuh lainnya. Aplikasi seluler menghadapi ratusan perangkat, ukuran layar, versi sistem operasi, dan perilaku pengguna yang berbeda. Tidak mungkin menguji semua ini secara manual; Itu sebabnya pengujian otomatis (kode pengujian kode — pengujian yang berjalan tanpa klik manusia) adalah tulang punggung kualitas seluler. AI sangat efisien dalam menulis tes karena menulis tes adalah jenis pola kerja yang disukainya: memvalidasi perilaku tertentu untuk masukan tertentu. Dalam unit ini, kita akan mempelajari cara mempercepat pengujian unit, pengujian antarmuka, dan otomatisasi dengan AI, namun tetap memastikan kualitas pengujian melalui pandangan manusia.
Piramida pengujian: apa yang harus diuji dan berapa banyak
Strategi pengujian yang sehat menyerupai piramida. Basisnya mencakup sejumlah besar pengujian unit (pengujian cepat yang menguji satu fungsi atau kelas secara terpisah); mereka cepat dan murah. Di bagian tengahnya terdapat lebih sedikit pengujian integrasi (menguji bagaimana beberapa bagian bekerja sama). Di bagian atas terdapat pengujian UI/end-to-end minimal (pengujian dilakukan dengan mengklik layar seperti yang dilakukan pengguna); mereka realistis tetapi lambat dan rapuh. AI membantu di setiap lapisan, namun nilai terbesar ada di dasar: dengan cepat menghasilkan pengujian unit logika bisnis.
Jenis tes
Ruang lingkup
kecepatan
efisiensi AI
pengujian satuan
Fungsi/kelas tunggal
sangat cepat
sangat tinggi
integrasi
antar lapisan
sedang
tinggi
UI / ujung ke ujung
Semua aliran layar
lambat
Sedang (rapuh)
Tip: Saat meminta AI untuk "menghasilkan pengujian untuk fungsi ini", tanyakan secara eksplisit kasus edge: input kosong, null, angka negatif, nilai sangat besar, kesalahan jaringan. AI menghasilkan jalan bahagia dengan mudah; Kesalahan sebenarnya bersembunyi di perbatasan dan muncul jika Anda tidak ingin kesalahan itu terjadi di sana.
Langkah-langkah menulis tes dengan AI
- Tentukan perilaku yang akan diuji. "Fungsi ini harus memberikan keluaran ini ke masukan ini."
- Tentukan kerangka kerjanya. JUnit + MockK di Android, XCTest di iOS, Espresso (Android) atau XCUITest (iOS) untuk UI.
- Mintalah status batas. Skenario bahagia + kesalahan + breakpoint.
- Kelola objek tiruan. Ketergantungan eksternal seperti jaringan dan database ditiru untuk pengujian (tiruan — tiruan yang dikontrol, bukan layanan sebenarnya).
- Jalankan tes dan verifikasi. Apakah ujiannya lulus, apakah itu mengkonfirmasi sesuatu yang benar-benar berarti?
Langkah kelima sangat penting. AI terkadang menghasilkan pengujian tidak berguna yang “selalu lulus”; misalnya tes yang tidak memverifikasi apa pun atau memeriksa data palsunya sendiri. Ujian yang lulus dan ujian yang berharga adalah dua hal yang berbeda.
Perhatian: Hanya karena AI dapat menghasilkan bukan berarti pengujian tersebut benar. Terkadang AI menerima perilaku kode saat ini (mungkin salah) sebagai "benar" dan menulis pengujian yang sesuai. Pengujian semacam itu memperbaiki bug, bukan menangkapnya. Anda menentukan apa yang diharapkan dari tes tersebut; Beri tahu AI apa yang harus dilakukannya, bukan apa yang dilakukan kodenya.
Uji ukuran cakupan dan kekeliruan
Cakupan pengujian (berapa persentase kode yang dijalankan oleh pengujian) adalah metrik yang berguna namun menyesatkan. Cakupan 90% menunjukkan bahwa 90% kode telah dieksekusi; tetapi belum diverifikasi apakah jalur tersebut berfungsi dengan benar. Tes yang menjalankan sebuah baris dan tidak memeriksa hasilnya akan memperluas cakupan tetapi tidak memberikan keamanan. Tujuannya bukanlah angka yang tinggi, namun validasi yang bermakna. Anda dapat dengan cepat meningkatkan skalanya dengan AI, tetapi pastikan setiap pengujian benar-benar menguji suatu perilaku.
tiga kasus mini
Kasus 1 — Situasi perbatasan tertangkap. AI diminta untuk menguji fungsi transfer uang dalam aplikasi perbankan, dan khususnya skenario "jumlah negatif" dan "lebih dari saldo" ditambahkan. Pengujian menunjukkan bahwa transfer tidak diblokir dengan jumlah negatif; ini akan menjadi kerentanan keamanan utama dalam produksi. Ditutup dengan menambahkan kontrol satu baris. Pelajaran: ujian batas adalah ujian yang paling berharga.
Kasus 2 — Tes palsu. Satu tim merasa lega karena dapat meningkatkan cakupan hingga 85% dengan 40 unit pengujian yang dihasilkan oleh AI. Selama pemeriksaan, terlihat bahwa sebagian besar pengujian tidak benar-benar memverifikasi keluaran apa pun, mereka hanya memanggil fungsi dan menulis menegaskanTrue(benar). Cakupannya tinggi tetapi perlindungannya nol. Tes dirombak dan ditulis ulang dengan validasi nyata. Pelajaran: nomor cakupan bisa saja berbohong.
Kasus 3 — Pengujian UI dipercepat. Tim e-commerce menulis skrip XCUITest dari alur add-to-cart dengan AI dalam 20 menit; Kalau ditulis tangan, butuh waktu setengah hari. AI menebak pengidentifikasi elemen layar; Tim mencocokkannya dengan kode asli dan memperbaikinya. Kecepatan draf memang nyata, tetapi verifikasi pengidentifikasi adalah pekerjaan manusia.
Perintah lemah / Perintah kuat
Perintah lemah: "Tulis tes untuk fungsi ini."
Perintah yang kuat: "Lakukan pengujian unit untuk fungsi Kotlin ini dengan JUnit5 + MockK. Fungsi: transfer uang (jumlah, sumber, target). Perilaku untuk menguji (apa yang harus dilakukan kode): - Transfer yang valid harus berhasil - Jumlah negatif atau nol harus ditolak - Jumlah yang lebih besar dari saldo harus ditolak - Kesalahan jaringan harus menampilkan pengecualian yang sesuai Setiap pengujian harus memverifikasi hanya satu hal, namanya harus deskriptif, meniru layanan eksternal. Jangan menulis pernyataan kosong."
Templat yang dapat disalin
Templat pengujian unit: "Buat pengujian unit [JUnit/XCTest] untuk fungsi ini untuk [bahasa]. Perilaku yang diharapkan: [apa yang harus dilakukan]. Sertakan: skenario bahagia, masukan nol, titik henti sementara, kasus kesalahan. Biarkan setiap pengujian memverifikasi perilaku tunggal; gunakan pernyataan yang bermakna; tiruan. [kode]"
Templat pengujian UI: "Tulis pengujian UI dari alur berikut dengan [Espresso/XCUITest]: [alur pengguna langkah demi langkah]. Pilih elemen layar dengan id aksesibilitas, gunakan id alih-alih teks. Tambahkan strategi tunggu. Ingatkan saya untuk mencocokkan id elemen dengan kode sebenarnya."
Templat audit pengujian: "Periksa pengujian berikut: 1) Apakah pengujian tersebut benar-benar memverifikasi keluaran/perilaku atau tidak? 2) Apakah pengujian tersebut mencakup kasus batas? 3) Apakah pengujian tersebut memperbaiki kesalahan kode atau mengharapkan perilaku yang benar? Tandai dan perkuat pengujian yang lemah. [pengujian]"
Templat pengoptimalan cakupan: "Identifikasi bagian kelas ini yang belum diuji dan sarankan pengujian yang bermakna. Prioritaskan jalur dengan risiko nyata, bukan hanya jumlah cakupan. [kode]"
Kesalahan umum
- Hanya menguji skenario bahagia. Kesalahan disimpan dalam status batas; Mintalah mereka secara terbuka.
- Menerima tes yang kosong/tidak berguna. Pengujian tipe asserTrue(true) memperluas cakupan dan tidak memberikan perlindungan.
- Meminta AI memverifikasi apa yang dilakukan kode tersebut. Pengujian harus mengharapkan apa yang seharusnya dilakukan oleh kode; jika tidak, itu akan memperbaiki bug.
- Salah mengira nomor cakupan untuk tujuannya. Cakupan 90% bukan berarti akurasi 90%.
- Menautkan ke teks dalam pengujian UI. Tes rusak ketika teks berubah; Gunakan pengidentifikasi stabil (id).
- Menyiapkan tiruan secara tidak benar. "Pengujian unit" yang memanggil layanan sebenarnya akan lambat dan rapuh.
Singkatnya
Pengujian adalah tulang punggung kualitas seluler, dan AI sangat efisien dalam bidang ini, terutama dalam pengujian unit. Ikuti piramida pengujian: banyak unit, integrasi sedang, sedikit pengujian UI. Secara eksplisit tanyakan kepada AI tentang skenario bahagia serta batasi kasus dan jalur kesalahan. Pastikan bahwa setiap pengujian yang dihasilkan benar-benar memvalidasi suatu perilaku; Tes kosong dan cakupan yang berlebihan menyesatkan. Yang terpenting, beri tahu AI apa yang harus dilakukan kode tersebut, bukan apa fungsinya, sehingga pengujian menangkap bug, bukan memperbaikinya.
Tugas aplikasi
Minta pengujian dari AI menggunakan “Template pengujian unit” untuk fungsi logika bisnis (misalnya penghitungan diskon atau validasi formulir) dan secara eksplisit menentukan kasus batas (null, negatif, terlalu besar). Jalankan pengujian yang dihasilkan, lalu audit pengujian yang sama dengan "Templat audit pengujian". Temukan setidaknya satu pengujian yang lemah, perkuat, dan uji apakah pengujian tersebut menangkap kesalahan fungsi yang sebenarnya (dengan menambahkan bug kecil).
daftar periksa
- [ ] Saya memilih lapisan yang sesuai untuk piramida pengujian (unit prioritas)
- [] Saya ingin kasus batas dan kesalahan selain skenario bahagia
- [ ] Saya memverifikasi bahwa setiap tes berisi pernyataan yang bermakna
- [ ] Saya memberi tahu AI apa yang harus dilakukan kode tersebut, bukan apa fungsinya
- [ ] Saya fokus pada jalur risiko sebenarnya, bukan jumlah pertanggungan
- [] Saya menggunakan pengidentifikasi stabil dalam pengujian UI, saya tidak mengikat ke teks