Terus ke kandungan
IGCSE·Tuition
Bantuan belajar

Kecilkan atur cara berpepijat kepada contoh terkecil

Atur cara anda berjalan tanpa ralat dan mencetak jawapan, tetapi jawapannya salah, di suatu tempat dalam empat puluh baris.

Dalam halaman ini
  1. Mengapa pepijat bersembunyi dalam atur cara yang panjang?
  2. Cara mengecilkan atur cara
  3. Contoh berlangkah
  4. Kesilapan yang perlu diperhatikan
  5. Semak kendiri
  6. Seterusnya

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

  1. Nyatakan keputusan yang dijangka dan sebenar dalam satu baris setiap satu.
  2. Salin atur cara supaya anda tidak merosakkan yang asal.
  3. Gantikan input sebenar dengan input rekaan kecil yang masih gagal.
  4. Buang satu bahagian pada satu masa dan jalankan semula selepas setiap potongan.
  5. Jika keputusan salah hilang, batalkan potongan itu. Bahagian yang anda buang itu penting.
  6. 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.

Soalan lazim

Apakah contoh minimum yang boleh diulang?

Ia atur cara terkecil yang masih menunjukkan tingkah laku salah yang sama. Ia hanya mengandungi baris yang diperlukan untuk mencetuskan masalah, dengan data rekaan yang ringkas, serta catatan tentang apa yang anda jangka dan apa yang anda dapat. Membuatnya kerap mendedahkan punca sebelum anda bertanya sesiapa.

Mengapa tidak baca sahaja keseluruhan atur cara sekali lagi?

Membaca empat puluh baris bermakna mata anda melangkau baris yang anda percaya betul. Mengecilkan memaksa anda menguji setiap bahagian. Apabila satu potongan menyebabkan jawapan salah hilang, anda telah belajar baris mana yang penting.

Adakah saya perlu menggunakan Python untuk ini?

Kaedah ini berfungsi dalam mana-mana bahasa, dan di atas kertas dengan pseudokod. Semak sukatan Cambridge bagi kod anda untuk melihat bahasa dan tatatanda yang dijangka peperiksaan, dan berlatih mengecilkan dalam bentuk yang akan anda dinilai.

Adakah meminta pembetulan siap sama seperti belajar?

Tidak. Atur cara yang telah dibetulkan tidak menunjukkan mengapa ia salah. Contoh minimum ditambah penerangan anda sendiri tentang punca ialah apa yang berpindah kepada pepijat seterusnya, dan kepada soalan peperiksaan yang meminta anda mencari dan membetulkan ralat.

Sumber rujukan

  1. Laman sukatan Cambridge IGCSE Computer Science 0478

Dikemas kini:

Langkah seterusnya

Jika anda boleh mengecilkan pepijat tetapi tidak dapat menerangkan puncanya, guru Computer Science satu dengan satu boleh menjejak contoh kecil itu bersama anda.

Kelas percubaan berbayar satu jam pada kadar guru yang disahkan, bermula RM80.

Tuisyen diatur bersama ibu bapa atau penjaga. Hantar halaman ini kepada mereka melalui WhatsApp supaya mereka boleh bertanya bagi pihak anda.

Ibu bapa: tanya di sini

  • 9,000+ pelajar telah dibantu melalui perkhidmatan kami
  • 9+ tahun membantu pelajar IGCSE