Keuntungan:
- Keupayaan untuk menerangkan pepijat dengan berkesan kepada AI dengan mesej ralat, surih tindanan dan contoh pembiakan terkecil
- Keupayaan untuk menjalankan aliran penyahpepijatan sistematik dengan AI untuk mencari punca dengan membuat hipotesis dan mengecilkannya langkah demi langkah
- Keupayaan untuk mengesahkan bahawa pembetulan yang dicadangkan oleh AI sebenarnya telah menyelesaikan masalah dengan menghasilkan semula dan ujian regresi
Penyahpepijatan ialah tugas untuk mengetahui sebab sesuatu program berkelakuan berbeza daripada yang dijangkakan dan membetulkannya, dan ia memakan banyak masa kebanyakan jurutera. Penyahpepijatan yang baik bukan berdasarkan permainan meneka, tetapi pada penyempitan yang sistematik: jelaskan gejala, buat hipotesis, uji hipotesis, dapatkan punca punca. AI ialah rakan kongsi yang sangat berkuasa dalam kitaran ini; Tetapi hanya jika anda memberinya maklumat yang betul. Sebut "kod tidak berfungsi, betulkan" memaksa AI untuk meneka dan membuat cadangan menyeluruh. Berikan mesej ralat penuh, surih tindanan dan sampel pembiakan terkecil, dan bersama-sama anda akan menemui puncanya.
Dalam unit ini, kita akan melihat cara untuk menerangkan pepijat dengan berkesan kepada AI, mengecilkan hipotesis langkah demi langkah dan mengesahkan melalui ujian regresi bahawa pembetulan yang dicadangkan benar-benar menyelesaikan masalah. Ingat: "membetulkan" pepijat dan "menindas gejala pepijat" adalah dua perkara yang berbeza; Pembetulan yang dibuat tanpa mencari punca utama memindahkan ralat ke tempat lain.
Konsep: Jejak tindanan: Longgokan yang menunjukkan fungsi yang dipanggil dalam susunan apa pada masa ralat. Minimal repro: Kod/input paling ringkas dan terpendek yang mencetuskan ralat. Punca utama: Sumber sebenar masalah, bukan gejala. Ujian regresi: Ujian yang memastikan ralat yang sama tidak berulang.
Menghuraikan Pepijat kepada AI
Kemungkinan AI mencari punca adalah berkadar terus dengan kualiti maklumat yang anda berikan. Penerangan ralat yang baik termasuk: perkara yang anda cuba lakukan, perkara yang anda jangkakan, perkara yang berlaku, teks ralat yang tepat dan surih tindanan, kod yang terlibat, persekitaran (bahasa/versi/OS) dan sampel terkecil yang menghasilkan ralat.
- Jelaskan simptomnya. Dalam format "X yang dijangka, Y yang direalisasikan".
- Tampalkan teks ralat penuh dan surih tindanan. Jangan pendekkan, tapis, tetapi jangan pecahkan strukturnya.
- Berikan pembiakan terkecil. Input dan kod minimum yang mencetuskan ralat.
- Nyatakan persekitaran. Versi bahasa, versi perpustakaan, persekitaran masa jalan.
Gesaan perihalan ralat yang berkesan: "Saya sedang menyahpepijat pepijat. Maklumat:- Perkara yang saya cuba lakukan: [X]- Tingkah laku yang dijangkakan: [Y]- Tingkah laku sebenar: [Z]- Mesej ralat penuh dan surih tindanan: [tampal]- Persekitaran: [bahasa/versi, perpustakaan/versi]- Kod minimum yang terlibat: [kod] Jangan beri saya pembetulan langsung yang paling mungkin. masing-masing."
Menyempitkan Aliran oleh Hipotesis
Penyahpepijatan sistematik ialah seni menghapuskan kemungkinan satu demi satu. Gunakan AI untuk menjana hipotesis dan mereka bentuk eksperimen untuk menguji setiap hipotesis; Kemudian jalankan percubaan dan kembalikan hasilnya. Kitaran ini jauh lebih pantas daripada kebiasaan membuat perubahan rawak dan berhenti, dipanggil "penyahpepijatan senapang patah".
Gesaan pembantu carian binari (pembahagi dua): "Ralat ini tidak ada semalam, ia ada hari ini. Saya ingin mengetahui yang mana antara 20 perubahan terakhir yang membawa ralat dengan dua bahagian. Berikan saya pelan langkah demi langkah: titik mana yang harus saya uji, separuh yang manakah harus saya pergi bergantung pada keputusan. Juga beritahu saya apa yang perlu diperiksa pada setiap langkah."
Gesaan strategi pemasukan log: "Saya tidak dapat mencari ralat kerana saya tidak dapat melihat nilai perantaraan dalam fungsi ini. Beritahu saya pada titik mana saya perlu menambah baris log yang mencetak pembolehubah mana. Tambahkan penjelasan 'apa yang akan saya pelajari daripada log ini' untuk setiap log. Tentukan juga amaran yang akan menghalang saya daripada mengelog data sulit."
Petua: Jika anda tidak dapat menyelesaikan ralat, kebanyakan masa masalahnya adalah di tempat yang anda salah sangka. Tanya AI "apa andaian saya boleh salah?" Bertanya akan memecahkan kebutaan anda. Kesilapan yang paling sukar tersembunyi di tempat anda berkata "Saya pasti ini berfungsi dengan betul".
Gesaan Lemah / Gesaan Kuat
LEMAH:"Kod saya memberikan ralat, betulkan: [200 baris kod]"(Hasil: AI tidak tahu apa ralat itu, apa yang dijangka; ia memberikan cadangan umum berdasarkan tekaan, kebanyakannya tidak berguna.) KUAT:"Saya mendapat NullPointerException. Dijangka: senarai pengguna harus dikembalikan. Sebenar: Meletup semasa panggilan untuk mendapatkanUsers:(). 17. Ulangan minimum: Ia berlaku apabila senarai pengguna kosong, tetapi bukan apabila ia penuh 15 baris: [kod].
Gesaan yang berkuasa meletakkan ralat dalam konteks: dalam kes ini ia berlaku (senarai kosong), dalam kes ini ia tidak berlaku (senarai penuh). Petunjuk tunggal ini ("berlaku apabila kosong") hampir secara langsung menunjukkan puncanya. Memandangkan maklumat ini tidak tersedia dalam gesaan yang lemah, AI membuat tekaan buta.
Mengesahkan Pembaikan
Pembetulan hanyalah pembetulan sebenar jika ia melakukan tiga perkara:
kawalan
soalan
Bagaimana untuk mengesahkan
Adakah kesilapan itu hilang?
Adakah entri yang sama berfungsi sekarang?
Jalankan repro minimum sekali lagi
Tiada ralat baharu?
Adakah yang lain rosak?
Jalankan keseluruhan suite ujian
Tidakkah ia akan berulang?
Adakah ralat yang sama akan berlaku lagi?
Tambah ujian regresi untuk senario ini
Pembetulan yang dibuat tanpa mencari punca selalunya menyekat gejala. Sebagai contoh, mengabaikan ralat nol dengan "langkau jika batal" menjadikan sebab sebenar, "mengapa data datang batal?" tidak kelihatan, dan ralat berlaku semula di tempat lain.
Kes Mini
Kes 1 — Perangkap penindasan gejala. Pasukan menyenyapkan ralat nol sekali-sekala dengan cuba-tangkap; Ralat hilang tetapi selepas 2 minggu data kelihatan hilang. Sebab sebenar ialah perkhidmatan mengembalikan batal apabila tamat masa. Apabila anda bertanya AI "mengapa ia menjadi batal?", punca utama muncul; Pembaikan sebenar mengambil masa 1 jam tetapi kekal.
Kes 2 — Kuasa repro minimum. Pembangun tidak boleh membetulkan pepijat yang mengatakan "ia ranap sekali-sekala." Ia mengurangkan ralat kepada input terkecil dengan cadangan AI: masalah hanya berlaku dengan nama fail yang mengandungi aksara Turki (ralat pengekodan). Apabila 300 baris ketidakpastian dikurangkan kepada 5 baris repro muktamad, penyelesaiannya menjadi jelas.
Kes 3 — Ujian anti-regresi. AI membetulkan ralat pengiraan tarikh. Jurutera tidak berpuas hati dengan ini; menambah ujian regresi untuk senario yang salah (akhir bulan, 31 Januari + 1 bulan). Apabila perubahan lain menyentuh kawasan yang sama 4 bulan kemudian, ujian menjadi merah dan pepijat ditangkap sebelum ia mencapai pengeluaran.
Kesilapan biasa
- Ia bermaksud "ia tidak berfungsi, betulkan". Tanpa teks ralat, jangkaan dan repro, AI meneka.
- Tidak memberikan jejak timbunan. Jejak tindanan selalunya secara langsung menunjukkan punca.
- Teruskan membuat perubahan rawak. Eksperimen tanpa mewujudkan hipotesis membuang masa.
- Menekan gejala dan kehilangan punca utama. Kesilapan itu dilahirkan semula di tempat lain.
- Tidak menjamin pembetulan dengan ujian regresi. Ralat yang sama kembali secara senyap pada masa hadapan.
Secara ringkasnya
Penyahpepijatan yang berkesan ialah penyempitan sistematik, bukan meneka. Memberi AI teks ralat penuh, surih tindanan, pembiakan minimum dan maklumat persekitaran secara eksponen meningkatkan peluang mencari punca. Gunakan AI untuk menjana hipotesis dan mereka bentuk eksperimen untuk menguji setiap hipotesis; Anda jalankan percubaan. Pertimbangkan pembetulan "selesai" hanya apabila anda melihat bahawa pepijat telah hilang, tiada pepijat baharu diperkenalkan dan ia dilindungi oleh ujian regresi.
Tugasan permohonan
Pertimbangkan ralat sebenar atau buatan. Mula-mula kurangkan ralat kepada pembiakan terkecil (di mana input ia berlaku, di mana ia tidak berlaku). Menggunakan gesaan resipi pepijat yang berkesan, minta AI untuk 3 hipotesis punca dan langkah pengesahan untuk setiap satu. Cari punca dengan menguji hipotesis satu demi satu, betulkan, kemudian tulis dan jalankan ujian regresi untuk senario ini untuk menunjukkan bahawa pepijat telah hilang dan ujian memberikan perlindungan.
senarai semak
- [ ] Saya menjelaskan gejala sebagai "dijangka vs direalisasikan".
- [ ] Saya memberikan teks ralat penuh dan jejak tindanan kepada AI.
- [ ] Saya mengurangkan ralat kepada pembiakan terkecil.
- [ ] Dengan menguji hipotesis satu persatu, saya menemui puncanya.
- [ ] Daripada menyekat gejala, saya membetulkan puncanya.
- [ ] Saya menambah dan menjalankan ujian regresi untuk ralat yang sama.