Menelusuri bug dan menangani kesalahan
INFO9-12
Membedakan kesalahan sintaks, saat berjalan, dan logika serta memperbaiki dengan bukti.
Bekal awal: Memahami jejak variabel dan pengujian.
Konteks bab
Ketelitian memeriksa pekerjaan menjadi bentuk amanah. Program dan data digunakan sebagai contoh, tanpa akun atau transaksi nyata.
Bacaan dan kasus
3 · Program yang selalu tampak berhasil
Bacaan pendalaman
Kasus dan angka yang dibuat untuk latihan adalah simulasi/rekaan; fakta konsep dan sumber dibedakan dalam uraian.
Fungsi model menerima total8 dan dipinjam3. Pembuat berharap sisa5, tetapi kode menjumlahkan keduanya sehingga keluar11. Karena program tidak berhenti dengan pesan kesalahan, hasil semula dianggap benar. Pemeriksa kemudian meminta kontrak dan hitungan manual.
Perbaikan pertama mengganti penjumlahan dengan pengurangan. Uji8,3 lulus, tetapi data2,5 menghasilkan−3. Kelompok menyadari perhitungan benar belum cukup tanpa validasi. Mereka menambahkan pemeriksaan rentang serta kasus0,0 dan pinjam=total.
Laporan uji mencatat data, harapan, aktual, dan alasan. Kelompok tidak mengubah harapan5 menjadi11 agar semua tampak lulus. Mereka menyimpan versi awal untuk menjelaskan perubahan. Bukti belajar muncul dari kemampuan menemukan hubungan antara kontrak, bug, perbaikan, dan hasil uji.
Fokus pemeriksaan. Mengapa program yang selesai berjalan masih dapat salah?
Kesalahan mempunyai bentuk berbeda
Kesalahan sintaks membuat kode tidak dapat dibaca menurut aturan bahasa, misalnya tanda titik dua yang hilang. Kesalahan saat berjalan terjadi ketika suatu operasi tidak dapat diselesaikan, misalnya mengambil indeks di luar daftar. Kesalahan logika dapat menghasilkan keluaran tanpa pesan error, tetapi jawabannya tidak sesuai tujuan. Program yang selesai berjalan belum tentu benar.
Reproduksi kecil membantu menemukan sebab
Catat masukan yang memicu masalah, hasil harapan, hasil aktual, dan langkah. Perkecil kasus sambil mempertahankan kegagalan. Jika total selalu nol, periksa kapan akumulator dibuat dan diubah. Jika entri terakhir terlewat, periksa batas range atau kondisi loop. Ubah satu dugaan penting lalu jalankan uji yang relevan, bukan mengganti banyak bagian sekaligus tanpa jejak.
Pesan kesalahan perlu ditangani sesuai jenis
Tangkap kesalahan yang memang diperkirakan pada bagian tertentu. Menangkap semua exception dan menampilkan “berhasil” menyembunyikan masalah. Pada latihan, konversi teks jumlah dapat gagal; beri pesan dan minta koreksi, bukan mengeksekusi teks sebagai kode. Jangan menggunakan eval() untuk membaca angka masukan.
Konversi teks tanpa mengeksekusinya
for teks in ["7", "tujuh"]:
try:
angka = int(teks)
except ValueError:
print("Periksa angka")
else:
print(angka)Keluaran contoh
7 Periksa angka
Contoh memeriksa konversi teks. Tambahkan aturan rentang dan tipe sesuai kontrak sebelum menggunakan hasil untuk keputusan.
Telusuri contoh
Kode memakai range(len(data)-1) untuk menjumlah semua data. Apa akibatnya?
- Indeks terakhir tidak diproses.
- Uji daftar satu elemen dapat menunjukkan hasil salah.
- Gunakan iterasi semua elemen atau batas yang benar.
Mengapa daftar satu elemen berguna untuk debugging?
- Kasus kecil memudahkan jejak.
- Jika elemen terlewat, hasil langsung menunjukkan masalah batas.
- Setelah diperbaiki, uji kembali kasus lain yang relevan.
Tidak ada pesan error bukan jaminan benar; banyak perubahan sekaligus dapat mengaburkan penyebab.
Latihan mandiri
1 Apa beda error logika dan sintaks?
Petunjuk awal
Pisahkan informasi yang diketahui, alasan yang diperlukan, dan batas kesimpulan. Periksa kembali contoh sebelum membuka pembahasan.
Pembahasan · buka setelah mencoba
Logika dapat berjalan tetapi hasil salah; sintaks melanggar aturan penulisan sehingga kode gagal dibaca.
2 Apa empat bagian laporan bug?
Petunjuk awal
Pisahkan informasi yang diketahui, alasan yang diperlukan, dan batas kesimpulan. Periksa kembali contoh sebelum membuka pembahasan.
Pembahasan · buka setelah mencoba
Masukan, langkah, hasil harapan, dan hasil aktual, ditambah lingkungan bila relevan.
3 Mengapa tidak menangkap semua error sebagai sukses?
Petunjuk awal
Pisahkan informasi yang diketahui, alasan yang diperlukan, dan batas kesimpulan. Periksa kembali contoh sebelum membuka pembahasan.
Pembahasan · buka setelah mencoba
Menyembunyikan kegagalan dan membuat pengguna percaya hasil yang tidak sah.
4 Bagaimana membaca teks angka dengan aman pada contoh?
Petunjuk awal
Pisahkan informasi yang diketahui, alasan yang diperlukan, dan batas kesimpulan. Periksa kembali contoh sebelum membuka pembahasan.
Pembahasan · buka setelah mencoba
Gunakan konversi terarah seperti int dengan penanganan ValueError serta validasi; jangan eval.
Perluas pemahamanmu
Tulis catatan sebelum–sesudah perbaikan yang memuat kasus pemicu, perubahan, hasil uji, dan hal yang masih belum diperiksa.
Coba dengan umpan balik
Latihan otomatis membantu pemeriksaan; tuliskan alasan dan langkah untuk membuktikan pemahaman.
1 Program berjalan tetapi menjumlah total+dipinjam untuk sisa adalah…
Petunjuk awal
Tentukan informasi, konsep dan bukti yang dibutuhkan.
Pembahasan · buka setelah mencoba
D. kesalahan logika. Kode dapat sah secara sintaks tetapi tidak sesuai kontrak.
Praktik dan refleksi
Telusuri akumulator untuk data[2,0,3] di kertas. Buat contoh kesalahan batas lalu jelaskan mengapa keluaran seharusnya5.
Penanda pribadi di perangkat ini; bukan nilai atau bukti penguasaan.