Apakah orang lain memperbaiki bug ketika mereka melihatnya, atau apakah mereka menunggu sampai ada crash / kehilangan data / orang mati sebelum memperbaikinya?
Contoh 1
Customer customer = null;
...
customer.Save();
Kode jelas salah, dan tidak ada jalan lain - memanggil metode dengan referensi nol. Kebetulan tidak crash karena Save
kebetulan tidak mengakses data instance apa pun; jadi itu seperti memanggil fungsi statis. Tetapi setiap perubahan kecil di mana saja tiba-tiba dapat menyebabkan kode rusak yang tidak macet: untuk mulai macet.
Tapi , itu juga tidak bisa dibayangkan memperbaiki kode:
Customer customer = null;
...
customer = new Customer();
try
...
customer.Save();
...
finally
customer.Free();
end;
mungkin memperkenalkan kecelakaan; satu tidak ditemukan melalui unit test dengan cakupan lengkap, dan pengujian pengguna manual.
Contoh 2
float speed = 0.5 * ((G * mass1 * mass2) / R) * Pow(time, 2);
Orang yang mengetahui fisika akan mengetahui bahwa itu seharusnya R 2 dalam penyebutnya.
Kode itu salah, itu benar-benar salah. Dan melebih-lebihkan kecepatan akan menyebabkan roket retro menembak terlalu cepat, menewaskan semua penghuni pesawat ruang angkasa.
Tapi itu juga mungkin mungkin karena perkiraan terlalu tinggi kecepatan menutupi masalah lain: kantong udara tidak dapat digunakan saat pesawat ulang-alik bergerak terlalu cepat. Jika kami tiba-tiba memperbaiki kode:
float speed = 0.5 * ((G * mass1 * mass2) / Pow(R, 2)) * Pow(time, 2);
Sekarang kecepatannya akurat, dan tiba-tiba airbag menyebar ketika tidak seharusnya.
Contoh 3
Berikut adalah contoh yang saya miliki baru-baru ini, memeriksa apakah string berisi karakter yang tidak valid:
if (StrPos(Address, "PO BOX") >= 0)
{
//Do something
}
Bagaimana jika ternyata ada bug di Do something
cabang? Memperbaiki kode yang jelas salah:
if (StrPos("PO BOX", Address) >= 0)
{
//Do something
}
Memperbaiki kode, tetapi memperkenalkan bug.
Cara saya melihatnya ada dua kemungkinan:
- perbaiki kode, dan disalahkan karena melanggar itu
- tunggu kode mogok, dan disalahkan karena memiliki bug
Apa yang Anda lakukan secara politis?
Contoh 4 - Bug dunia nyata saat ini
Saya membangun objek, tetapi memanggil konstruktor yang salah:
Customer customer = new Customer();
Ternyata konstruktor "tanpa parameter" sebenarnya adalah konstruktor berparameter dari jauh ke belakang dalam rantai pewarisan:
public Customer(SomeObjectThatNobodyShouldBeUsingDirectly thingy = null)
public Customer(InjectedDependancy depends)
Menyebutnya adalah kesalahan, karena melewati semua konstruktor berikutnya.
Saya dapat mengubah garis keturunan objek untuk tidak mengekspos konstruktor berbahaya seperti itu, tetapi sekarang saya harus mengubah kode menjadi:
Customer customer = new Customer(depends);
Tetapi saya tidak dapat menjamin bahwa perubahan ini tidak akan merusak apa pun. Seperti Contoh 1 saya di atas, mungkin seseorang, di suatu tempat, entah bagaimana, dalam beberapa kondisi esoteris, tergantung pada konstruksi yang Customer
tidak valid dan penuh dengan sampah.
Mungkin Customer
objek, sekarang dibangun dengan benar akan memungkinkan beberapa kode untuk menjalankan yang sebelumnya tidak pernah dilakukan, dan sekarang saya bisa mendapatkan crash.
Saya tidak bisa bertaruh hidup istrimu di atasnya.
Dan saya bisa mengujinya dari sini sampai Selasa, saya tidak bisa bersumpah pada kehidupan putri Anda bahwa saya tidak memperkenalkan regresi.
Apakah saya:
- Perbaiki kode dan disalahkan karena melanggar itu? atau
- Tinggalkan bug, dan disalahkan ketika pelanggan menemukannya?