Mengosongkan wadah tiap putaran
Satu baris yang berpindah tempat mengubah seluruh hasil, dan tidak ada pesan galat yang memberi tahu.
Sebaiknya baca lebih dulu: Mengumpulkan nilai satu per satu.
Menghitung beberapa kelompok sekaligus
Menghitung total per kelompok bekerja persis begitu. Ada dua loop bersarang: yang luar berjalan sekali per kelompok, yang dalam berjalan sekali per elemen. Tombol nolnya adalah baris yang memberi nilai awal akumulator, dan letaknya menentukan segalanya.
IngatNilai awal di luar loop kelompok berarti satu wadah untuk semua kelompok. Di dalamnya berarti satu wadah baru per kelompok.
Satu baris, dua tempat, dua hasil
Nilai awal di luar
SET total = 0 FOR EACH grup IN groups FOR EACH angka IN grup SET total = total + angka END OUTPUT total END
Nilai awal di dalam
FOR EACH grup IN groups SET total = 0 FOR EACH angka IN grup SET total = total + angka END OUTPUT total END
Perhatikan bahwa kedua kolom memuat baris yang sama persis. Yang berbeda hanya letaknya: satu di atas loop kelompok, satu di dalamnya. Kolom kiri mengeluarkan angka yang terus membesar, dan angka itu tetap masuk akal sehingga tidak ada yang mencurigainya.
Melihat sisa yang terbawa
SET total = 0 FOR EACH grup IN groups FOR EACH angka IN grup SET total = total + angka END OUTPUT total END
total diberi nilai awal nol. Ini terjadi tepat sekali, sebelum kelompok mana pun dibuka.
Inilah sebabnya bug jenis ini sulit ditemukan. Keluaran pertama selalu benar, jadi pengujian yang hanya memakai satu kelompok akan lolos. Kesalahannya baru muncul pada kelompok kedua, dan angkanya tetap berupa bilangan yang wajar sehingga tidak ada yang tampak rusak.
Kelompok kosong
Ada satu kasus lagi yang mudah terlewat: kelompok tanpa elemen. Loop dalam tidak berjalan sama sekali, jadi tidak ada penambahan apa pun. Dengan nilai awal di tempat yang benar, kelompok kosong menyumbang total nol, dan nol itu memang jawaban yang tepat. Dengan nilai awal di luar, kelompok kosong justru mengulang total kelompok sebelumnya.
- Kelompok kosong tetap menghasilkan satu total, bukan dilewati.
- Totalnya nol, dan nol adalah nilai yang benar untuk penjumlahan tanpa elemen.
Periksa pemahaman
Kelompoknya [4] lalu [] lalu [6], dan nilai awal akumulator diletakkan di luar loop kelompok. Apa tiga keluarannya?
Ringkasan
- Letak baris nilai awal menentukan apakah wadahnya dipakai bersama atau dibuat baru tiap putaran.
- Bug ini tidak pernah memunculkan pesan galat, dan keluaran pertamanya selalu benar.
- Uji dengan minimal dua kelompok. Satu kelompok tidak dapat membedakan yang benar dari yang salah.
- Kelompok kosong wajib diuji tersendiri, sebab loop dalamnya tidak pernah berjalan.