Keuntungan:
- Memahami tujuan ujian regresi dan boleh memilih ujian dan menghasilkan kes regresi mengikut perubahan dengan kecerdasan buatan
- Keupayaan untuk mendiagnosis punca ujian rapuh (masa, kebergantungan pesanan, keadaan dikongsi, kebergantungan luar) dan menggunakan penyelesaian kekal tanpa menyekat gejala
- Keupayaan untuk mengekalkan disiplin menjalankan pra-keluaran pakej penuh sambil memastikan suite regresi pantas, bebas dan boleh dipercayai dengan menghapuskan ujian pendua
Perisian sentiasa berubah; Setiap ciri baharu, setiap pembaikan, boleh memecahkan sesuatu yang berfungsi sebelum ini. Gangguan seterusnya bagi fungsi yang berfungsi sebelum ini dipanggil regresi. Ujian regresi sedang menguji semula fungsi sedia ada dengan setiap perubahan untuk menangkap kemerosotan ini. Dari masa ke masa, suite ujian ini menjadi lebih besar — beribu-ribu ujian — dan dua masalah besar timbul: suite menjadi perlahan, dan ujian mengelupas — ujian tidak boleh dipercayai yang kadangkala lulus dan kadangkala gagal dalam kod yang sama — memusnahkan keyakinan pasukan terhadap keputusan ujian. Kecerdasan buatan (AI) ialah bantuan yang berkuasa dalam memastikan suite regresi diselenggara dengan baik, pantas dan boleh dipercayai. Tetapi kaveat utama kekal: Walaupun AI mungkin menawarkan untuk "lulus" ujian yang rapuh, ia selalunya boleh menghasilkan tampung yang menutup pepijat sebenar. Tugas anda adalah untuk mencari punca ketidakstabilan, bukan menyekat gejala.
Punca utama ujian rapuh
Ujian rapuh ialah masalah ujian yang paling berbahaya: ia tidak boleh dipercayai sama ada ia lulus atau gagal, mendorong pasukan ke dalam tabiat "ia mesti tersekat lagi, jalankannya semula" — dan tabiat ini suatu hari nanti akan mengabaikan pepijat sebenar sebagai "keropi". Punca utama:
- Keadaan masa/perlumbaan: Ujian menyemak keputusan tanpa menunggu operasi selesai. Sebab yang paling biasa.
- Kebergantungan pesanan: Ujian bergantung pada data yang ditinggalkan oleh satu sama lain; Ia rosak apabila pesanan berubah.
- Kes kongsi: Berbilang ujian menggunakan data/pengguna ujian yang sama, bercanggah.
- Kebergantungan luaran: Rangkaian sebenar, perkhidmatan pihak ketiga, masa sistem, nilai rawak.
- Perbezaan persekitaran: Beralih kepada setempat, kekal dalam CI (persekitaran penyepaduan berterusan).
Awas: Melepasi ujian rapuh dengan "mencuba semula beberapa kali" selalunya akan menutupi ralat serentak yang sebenar. Cuba semula ialah alat diagnostik, bukan rawatan. Cari punca dahulu; Hanya gunakan cuba semula sebagai pilihan terakhir untuk ketidakstabilan luaran yang didokumentasikan.
Penyelenggaraan ujian: memastikan pakej sihat
Suite regresi adalah seperti taman; Jika tidak dijaga, lalang akan mengambil alih. AI membantu dalam tiga tugas penyelenggaraan:
1. Pembersihan ujian pendua/tidak perlu. Lama kelamaan sebilangan besar kes terkumpul menguji perkara yang sama. AI mencadangkan pengumpulan dan penggabungan ujian serupa.
2. Diagnosis ujian rapuh. Anda memberikan AI kod ujian dan corak ketidakstabilan; mencadangkan kemungkinan punca dan penyelesaian kekal.
3. Ujian pemilihan/pengutamaan. Ia mahal untuk menjalankan keseluruhan pakej dengan setiap perubahan. Dengan analisis kesan ujian (hanya memilih ujian yang berkaitan berdasarkan kod yang diubah), AI mengesyorkan ujian mana yang harus dijalankan dahulu. Walau bagaimanapun, pakej pra-keluaran penuh adalah satu kemestian.
Kuarantin: menguruskan ujian rapuh dengan betul
Anda telah mendapati bahawa ujian adalah rapuh, tetapi anda tidak mempunyai masa untuk membetulkan puncanya dengan segera. Apa yang perlu dilakukan? Terdapat dua cara yang salah: untuk memadamkan ujian sepenuhnya (tingkah laku itu tidak lagi dipelihara sama sekali) atau menyenyapkannya dengan mencuba semula (menutup pepijat sebenar). Cara yang betul adalah dengan kuarantin (memisahkan sementara ujian rapuh daripada pakej utama dan menjejakinya dalam senarai berasingan). Ujian kuarantin tidak menghalang penggabungan versi, tetapi kekal sebagai hutang yang boleh dilihat dan ditangani dengan kerap. Perkara kritikal ialah ini: kuarantin adalah ruang menunggu, bukan tong sampah. Jika senarai kuarantin semakin meningkat, ini adalah penggera bahawa kesihatan ujian pasukan semakin merosot. AI boleh menyemak senarai kuarantin anda secara berkala dan mengumpulkannya mengikut corak punca; Ia membolehkan penyelesaian kolektif dengan mendedahkan punca biasa, seperti "semua 6 ujian disambungkan kepada pengguna ujian kongsi yang sama".
Petua: Tambahkan "pemilik" dan "tarikh semakan terakhir" pada setiap rekod kuarantin. Kuarantin terbiar menjadi tempat pembuangan kekal; Ujian rapuh tinggal di sana selama-lamanya kerana tiada siapa yang peduli.
Jadual strategi regresi
Status
Strategi
Peranan AI
pembetulan kecil
Kawasan terjejas + ujian asap
Pilih ujian yang berkaitan
ciri baharu
Modul + integrasi yang berkaitan
Cadangkan kes regresi baharu
refactor besar
Pakej regresi penuh
Analisis jurang liputan
pra-keluaran
Pakej penuh + penerokaan
Anggaran keutamaan dan tempoh
Pembetulan langsung segera
Laluan fokus + kritikal
Set ujian selamat minimum
Gesaan lemah / Gesaan kuat
Lemah: "Ujian ini kadangkala gagal, betulkan."
Kuat: "Ujian ini gagal 3 daripada 10 larian, kod tidak berubah. Diagnosis punca ketidakstabilan: boleh jadi pemasaan/perlumbaan, kebergantungan pesanan, keadaan kongsi, kebergantungan luaran atau perbezaan persekitaran. Tunjukkan baris mana dalam ujian menunjuk kepada setiap punca yang mungkin. Cadangkan penyelesaian kekal; JANGAN cadangkan penyelesaian menyekat gejala seperti 'tambah cuba semula' — dengan jelas alasannya.
Gesaan yang kuat; mengarahkan diagnosis kepada punca utama dan secara eksplisit melarang penindasan gejala.
Empat templat yang boleh disalin
1) Diagnosis ujian rapuh:
Kod ujian ini kadangkala lulus dan kadangkala gagal tanpa perubahan. Senaraikan calon punca (bangsa, kebergantungan pesanan, keadaan kongsi, kebergantungan luar, jam/rawak, perbezaan persekitaran) dan tunjukkan garis bukti dalam ujian untuk setiap satu. Cadangkan penyelesaian kekal; tandakan penyelesaian yang menindas seperti cuba semula sebagai pilihan terakhir dan dengan justifikasi. Ujian: [kod] / Corak ketidakstabilan: [berapa kali dalam berapa kali larian]
2) Mencadangkan kes regresi:
Perubahan berikut telah dibuat: [perubahan/ringkasan PR].Senaraikan gelagat SEMASA yang akan dipecahkan oleh perubahan ini dan cadangkan kes ujian regresi untuk setiap satu. Serlahkan terutamanya kawasan kesan sampingan dan kebergantungan bersama.
3) Pembersihan ujian pendua:
Semak suite ujian di bawah. Kumpulan kes pendua atau bertindih yang menguji tingkah laku yang sama; Cadangkan yang mana saya patut simpan dan yang mana satu yang perlu saya gabungkan untuk setiap kumpulan. Beri amaran jika terdapat risiko kehilangan perlindungan. Ujian: [senarai/kod]
4) Pemilihan kesan ujian:
Fail/fungsi berikut telah berubah: [senarai]. Daripada suite ujian sedia ada, pilih dan wajarkan ujian yang saya perlu jalankan dahulu (yang secara langsung/tidak langsung dipautkan kepada kod yang diubah). Nota: ingatkan saya bahawa saya masih akan menjalankan suite pra-keluaran penuh.
tiga kes mini
Kes 1 — Kesilapan sebenar ditutup oleh Cuba Semula. Satu pasukan menambah 3 percubaan semula pada baki ujian pembayaran sekali-sekala; Ujian itu sentiasa "lulus" sekarang. Menggunakan "diagnostik ujian rapuh" mendapati bahawa ketidakstabilan datang daripada keadaan perlumbaan sebenar: pada beban tinggi, pengesahan pembayaran kadangkala diproses dua kali. Selama berbulan-bulan, Cuba Semula menutup pepijat yang boleh mengakibatkan kerugian sebenar wang secara langsung. Punca akar tetap, cuba semula dialih keluar.
Kes 2 — Pakej menyusut, kelajuan meningkat. Satu set regresi 1,400 ujian mengambil masa 55 minit. Dengan "pembersihan ujian pendua", 380 ujian ternyata pendua atau dilindungi; digabungkan. Pakej dikurangkan kepada 900 ujian, masa dikurangkan kepada 34 minit, liputan tidak dikurangkan dengan ketara. Maklum balas yang lebih pantas menggalakkan pasukan untuk menguji dengan lebih kerap.
Kes 3 — Kebergantungan pesanan. Ujian akan sentiasa lulus secara tempatan, tetapi ia akan gagal secara rawak dalam CI. Diagnostik AI menunjukkan bahawa ujian itu bergantung kepada pengguna yang dibuat oleh ujian lain, dalam CI ia pecah kerana ujian berjalan dalam susunan selari/berbeza. Setiap ujian dibuat untuk mewujudkan datanya sendiri; Keragu-raguan sudah berakhir.
Kesilapan biasa
- Mendiamkan ujian yang rapuh dengan mencuba semula. Mencuba lagi tanpa mencari punca; menutup kesilapan sebenar.
- Budaya "terperangkap lagi". Mengabaikan keputusan merah secara rutin; Suatu hari, melangkau kesilapan sebenar.
- Tidak memangkas bungkusan sama sekali. Membenarkan ujian pendua menimbun dan memperlahankan pakej.
- Kebergantungan antara ujian. Ujian adalah berdasarkan keadaan/urutan biasa; punca ketidakpastian.
- Menguji hanya bahagian yang diubah dan melangkau pakej penuh. Pintasan pra-keluaran; Kesan sampingan tersembunyi melarikan diri.
- Bergantung pada pergantungan luar. Ujian berdasarkan rangkaian/jam/nilai rawak sebenar; secara semula jadi tidak stabil.
Secara ringkasnya
Ujian regresi menangkap perubahan yang memecahkan fungsi yang berfungsi sebelum ini; Tetapi apabila pakej berkembang, ujian perlahan dan rapuh menghakis kepercayaan. Punca utama ujian rapuh biasanya adalah masa, kebergantungan pesanan, keadaan dikongsi dan kebergantungan luaran. AI ialah bantuan yang berkuasa dalam diagnosis, pembersihan dan pemilihan ujian; Tetapi menahan keraguan dengan mencuba semula menutup kesilapan sebenar. Cari punca, buat ujian bebas dan deterministik, pangkas pakej dengan kerap, jalankan pakej penuh sebelum dikeluarkan.
Tugasan permohonan
Pilih ujian daripada projek anda sendiri yang anda tahu rapuh (atau kelihatan tidak stabil). Ekstrak calon punca dan sahkan baris bukti dalam ujian dengan templat "diagnosis ujian rapuh". Kenal pasti punca dan laksanakan penyelesaian kekal tanpa mencuba semula. Kemudian pilih 10 ujian daripada pakej anda dan cari ujian yang boleh digabungkan dengan "pembersihan ujian pendua." Laporkan bilangan ketidakstabilan ujian yang anda selesaikan daripada puncanya dan bilangan kes tidak perlu yang anda alih keluar daripada suite.
senarai semak
- [ ] Saya telah mendiagnosis punca ujian rapuh; Saya tidak menyekat gejala itu.
- [ ] Saya menganggap Cuba Semula sebagai pilihan terakhir yang wajar, bukan penawar.
- [ ] Saya membuat ujian bebas dan deterministik (diasingkan daripada kebergantungan luaran).
- [ ] Saya memangkas ujian pendua/tidak perlu daripada suite regresi.
- [ ] Saya memilih untuk menguji berdasarkan perubahan, tetapi menjalankan pra-keluaran pakej penuh.
- [ ] Saya mengambil setiap merah dengan serius, menentang budaya "terperangkap lagi, lulus".