Untuk mencipta contoh minimum yang boleh diulang, salin atur cara, buang semua yang tidak diperlukan, dan kekalkan keputusan yang salah. Tulis apa yang anda jangka dan apa yang anda dapat. Apabila anda boleh memuatkan masalah dalam lima baris, puncanya biasanya kelihatan.
Ini salah satu tabiat penyahpepijatan (debugging) yang paling berguna kerana ia menggantikan meneka dengan menguji. Ia juga berfungsi untuk soalan jejak dan terang dalam Computer Science, di mana anda mesti menyatakan apa yang dilakukan sekeping kod.
Mengapa pepijat bersembunyi dalam atur cara yang panjang?
Atur cara yang lebih panjang memberi pepijat lebih banyak tempat bersembunyi dan memberi anda lebih banyak sebab untuk meragui baris yang salah. Anda mudah percaya pada kod yang ditulis dengan teliti, padahal di situlah kesilapan sering terselit.
Mengecilkan atur cara membuang bahagian yang tidak berkaitan, jadi pepijat tidak lagi ada tempat bersembunyi.
Cara mengecilkan atur cara
- Nyatakan keputusan yang dijangka dan sebenar dalam satu baris setiap satu.
- Salin atur cara supaya anda tidak merosakkan yang asal.
- Gantikan input sebenar dengan input rekaan kecil yang masih gagal.
- Buang satu bahagian pada satu masa dan jalankan semula selepas setiap potongan.
- Jika keputusan salah hilang, batalkan potongan itu. Bahagian yang anda buang itu penting.
- Berhenti apabila sebarang potongan lanjut mengubah keputusan. Terangkan punca dalam satu ayat.
Contoh berlangkah
Markah lulus ialah 50, dan markah tepat 50 dikira lulus. Atur cara asal:
names = ["Aiman", "Bee Ling", "Chandran", "Dina"]
marks = [72, 50, 38, 65]
pass_mark = 50
passed = 0
total = 0
for i in range(len(marks)):
total = total + marks[i]
if marks[i] > pass_mark:
passed = passed + 1
average = total / len(marks)
print("Average:", average)
print("Passed:", passed)
Dijangka: 3 lulus (72, 50 dan 65). Sebenar: 2. Purata, 225 ÷ 4 = 56.25, adalah betul, jadi kod purata bukan masalahnya.
Buang senarai names, total dan average. Kiraan lulus masih salah. Gantikan empat markah dengan satu, 50.
marks = [50]
passed = 0
for m in marks:
if m > 50:
passed = passed + 1
print(passed)
Dijangka: 1. Sebenar: 0. Lima baris tinggal, dan hanya satu yang boleh disalahkan: m > 50 mengecualikan markah tepat 50, sedangkan arahan menyatakan 50 adalah lulus.
Kesilapan yang perlu diperhatikan
Seorang pelajar membuang baris secara rawak sehingga jawapan salah berhenti, kemudian memutuskan baris yang terakhir dibuang ialah pepijatnya. Tetapi dia juga membuang markah 50 daripada senarai, dan itulah yang menyebabkan masalah hilang.
Pembetulannya: selepas setiap potongan, jalankan semula dan semak bahawa anda masih mendapat keputusan salah yang sama. Jika ia berubah, batalkan potongan itu. Contoh yang boleh diulang mesti gagal dengan cara yang sama seperti yang asal.
Semak kendiri
1. Mengapa menulis keputusan yang dijangka sebelum mengecilkan?
Tunjukkan jawapan
Tanpanya anda tidak dapat mengetahui sama ada potongan mengekalkan pepijat. Anda memerlukan sasaran tetap untuk dibandingkan dengan setiap larian semula.
2. Selepas membuang satu gelung, atur cara mencetak 1 dan bukan 0 yang salah tadi. Apa yang patut anda lakukan?
Tunjukkan jawapan
Batalkan potongan itu. Keputusan salah telah berubah, jadi gelung itu sebahagian daripada masalah.
3. Satu atur cara mengira berapa banyak skor dalam senarai 50 yang sekurang-kurangnya 60, dan memberi kiraan salah. Beri dua langkah mengecilkan.
Tunjukkan jawapan
Gunakan senarai dua atau tiga skor, termasuk satu yang tepat 60. Kemudian buang sebarang pencetakan atau pengiraan tambahan yang tidak menjejaskan kiraan.
Seterusnya
Tabiat ini berkait dengan membaiki ralat off-by-one dan menerangkan keputusan yang dijangka sebelum menjalankan kod. Seterusnya, ubah pepijat menjadi ujian dengan mereka bentuk ujian sempadan sebelum menyunting kod. Anda boleh berlatih dengan latihan kecil anda sendiri dalam kotak pasir penaakulan Python yang selamat.
Jika anda boleh mengecilkan pepijat tetapi masih sukar menerangkannya, tuisyen Computer Science satu dengan satu membolehkan guru menjejak contoh kecil itu bersama anda. Panduan pembelajaran Computer Science menunjukkan di mana penyahpepijatan terletak dalam sukatan.