Diğer insanlar, gördüklerinde hataları düzeltir mi, yoksa düzeltmeden önce ölen / veri kaybı / insanlar ölene kadar bekler mi?
örnek 1
Customer customer = null;
...
customer.Save();
Kod açıkça yanlıştır ve bunun bir yolu yoktur - boş referansta bir yöntem çağırıyor. Çünkü kaza değil olur Save
, herhangi bir oluşum verilere erişemez olur; bu yüzden sadece statik bir fonksiyon çağırmak gibi. Ancak herhangi bir yerdeki küçük değişiklikler aniden çökmeyen kodların çökmesine neden olabilir: çökmeye başlamak.
Ancak , aynı zamanda kodu düzelten de düşünülemez :
Customer customer = null;
...
customer = new Customer();
try
...
customer.Save();
...
finally
customer.Free();
end;
belki tanıtmak kilitlenme; bunlardan biri eksiksiz kapsama sahip ünite testleri ve manuel kullanıcı testi ile keşfedilmedi.
Örnek 2
float speed = 0.5 * ((G * mass1 * mass2) / R) * Pow(time, 2);
Fizik bilerek İnsanlar R olması gerekiyor anlayacaktır 2 paydada.
Kod yanlış, kesinlikle yanlış. Hızın fazla tahmin edilmesi, retro-roketlerin çok yakında ateşlenmesine ve uzay aracının tüm yolcularını öldürmesine neden olacak.
Ancak hızın fazla tahmin edilmesi de başka bir konuyu gizliyor olabilir: mekik çok hızlı hareket ederken hava yastıkları açılmaz. Eğer aniden kodu düzeltirsek:
float speed = 0.5 * ((G * mass1 * mass2) / Pow(R, 2)) * Pow(time, 2);
Şimdi hız doğru ve aniden hava yastıkları açılmaması gerektiğinde açılıyor.
Örnek 3
İşte son zamanlarda sahip olduğum bir örnek, bir dizgenin geçersiz karakterler içerip içermediğini kontrol ediyorum:
if (StrPos(Address, "PO BOX") >= 0)
{
//Do something
}
Ya Do something
dalda bir böcek olduğu ortaya çıkarsa ? Açıkça yanlış kodun düzeltilmesi:
if (StrPos("PO BOX", Address) >= 0)
{
//Do something
}
Kodu düzeltir, ancak bir hata ortaya çıkarır.
Gördüğüm gibi iki olasılık var:
- kodu düzeltin ve kırdığınız için suçlayın
- kodun kilitlenmesini bekleyin ve bir hata olduğundan dolayı suçlanın
Ne yapmak sen siyaseten mi?
Örnek 4 - Bugünün gerçek dünya böceği
Bir nesne yapıyorum ama yanlış kurucu arıyorum:
Customer customer = new Customer();
"Parametresiz" yapıcının, kalıtım zincirinde daha ileride aslında parametreli hale getirilmiş bir yapıcı olduğunu belirtir:
public Customer(SomeObjectThatNobodyShouldBeUsingDirectly thingy = null)
public Customer(InjectedDependancy depends)
Bunu adlandırmak bir hatadır, çünkü sonraki tüm yapıcıları atlar.
Nesnenin soyunu böylesine tehlikeli bir kurucuya maruz bırakmayacak şekilde değiştirebilirdim, ancak şimdi kodu şu şekilde değiştirmem gerekiyor:
Customer customer = new Customer(depends);
Ancak bu değişikliğin hiçbir şeyi bozmayacağını garanti edemiyorum. Benim gibi Örnek 1 inşa yukarıdaki, belki birileri bir yerlerde, bir şekilde, bazı ezoterik koşullarda bağlıdır Customer
geçersiz ve önemsiz dolu olması.
Belki de Customer
, doğru bir şekilde yapılandırılmış olan nesne, daha önce hiç yapmadığım bir kodun çalışmasına izin verecektir ve şimdi bir çökme olabilir.
Karının hayatı üzerine bahse giremem.
Buradan salıya kadar test edebilirim, kızınızın hayatında bir gerileme yapmadığına yemin edemem.
Yaparım:
- Kodu düzeltip kırdığınız için suçlanıyor musunuz? veya
- Böceği bırak ve müşteri bulduğu zaman suçlanmak?