Bu önemli bir ayrım, ancak ne yazık ki asla bir anlaşma bulamayacaksınız. Sorun, çoğu geliştiricinin bunları kendi bakış açılarından tanımlamasıdır. Pluto tartışmasına çok benziyor. (Güneş'e daha yakın olsaydı, bir gezegen olur muydu?)
Birim testinin tanımlanması kolaydır. CUT'u ( Test Altındaki Kod ) ve başka hiçbir şeyi test etmez. (Olabildiğince az şey.) Bu, alaylar, sahteler ve demirbaşlar demektir.
Yelpazenin diğer ucunda birçok insanın sistem entegrasyon testi dediği şey var . Bu, mümkün olduğu kadar test ediyor, ancak yine de kendi CUT'nizde hata arıyor.
Peki ya aralarındaki geniş alan?
- Örneğin, CUT'tan biraz daha fazlasını test ederseniz ne olur? Enjekte ettiğiniz bir fikstürü kullanmak yerine bir Fibonacci işlevi eklerseniz ne olur? Ben buna işlevsel test derdim ama dünya benimle aynı fikirde değil.
- Ya eklerseniz
time()
veya rand()
? Ya da ararsan ne olur http://google.com
? Ben buna sistem testi derdim ama yine yalnızım.
Bu neden önemli? Çünkü sistem testleri güvenilmezdir. Bunlar gereklidir, ancak bazen sizin kontrolünüz dışındaki nedenlerden dolayı başarısız olurlar. Öte yandan, fonksiyonel testler her zaman başarılı olmalı, rastgele başarısız olmamalıdır; hızlılarsa, dahili uygulamanız için çok fazla test yazmadan Test-Driven Development'ı kullanmak için en başından itibaren kullanılabilirler. Başka bir deyişle, birim testlerinin değerinden daha fazla sorun olabileceğini düşünüyorum ve iyi bir arkadaşlığım var .
Tüm sıfırları birim testinde olmak üzere 3 eksende testler koydum :
- İşlevsel test: gerçek kodu çağrı yığınınızın derinliklerinde ve derinliklerinde kullanmak.
- Entegrasyon testi: çağrı yığınınızı yukarı ve yukarı ; başka bir deyişle, CUT'nizi kullanacak kodu çalıştırarak test edin.
- Sistem testi: gittikçe daha fazla tekrarlanamayan işlem (O / S zamanlayıcı, saat, ağ vb. )
Bir test kolayca farklı derecelerde 3 olabilir.