Birim testlerini son derece yararlı kılan önemli bir faktör hızlı geribildirimdir .
Uygulamanızı, entegrasyon / Sistem / fonksiyonel testlerle tamamen kapladığınızda (çoğu geliştirme mağazasında gerçeklikten uzak, zaten ideal bir durumdur) ne olacağını düşünün. Bunlar genellikle özel bir test ekibi tarafından yönetilir.
- SCM deposunda değişiklik yapmak
- bir süre (muhtemelen günler) sonra, test görevlileri yeni bir dahili sürüm alırlar ve test etmeye başlarlar,
- bir hata buldular ve bir hata raporu hazırladılar,
- (ideal durumda) birisi hata raporunu size geri atar.
Bunların hepsi günler hatta haftalar sürebilir. Bu zamana kadar zaten başka işler üzerinde çalışıyordunuz, bu nedenle aklınızda daha önce yazılmış olan kodun dakika detaylarına sahip değilsiniz. Dahası, tipik olarak, hatanın gerçekte nerede olduğuna dair doğrudan bir kanıtınız bile yoktur, bu yüzden hatayı bulmanız ve düzeltmeniz oldukça zaman alır.
Oysa birim testinde (TDD)
- sen bir test yaz
- testi yerine getirmek için bazı kodlar yazarsanız,
- Test hala başarısız oluyor.
- koduna bakarsınız ve genellikle birkaç saniye içinde "ayy" deneyimi yaşarsınız ("ayy, bu durumu kontrol etmeyi unuttum!" gibi), sonra
- derhal hatayı düzeltmek.
Bütün bunlar birkaç dakika içinde olur .
Bu, entegrasyon / sistem testlerinin faydalı olmadığını söylemek değildir; sadece farklı amaçlara hizmet ediyorlar. İyi yazılmış birim testleriyle, kodları bulmak ve düzeltmek için çok daha pahalı olan entegrasyon aşamasına gelmeden önce koddaki hataların büyük bir bölümünü yakalayabilirsiniz . Birim testlerinde yakalanması zor ya da imkansız olan bu tür böcekleri yakalamak için entegrasyon testlerine ihtiyaç vardır. Ancak, benim deneyimlerime göre bunlar daha nadirdir; Gördüğüm hataların çoğu, bir yöntem içinde bir yerde bazı basit veya hatta önemsiz ihmallerden kaynaklanıyor.
Birim testinin ayrıca arabirimlerinizi kullanılabilirlik / güvenlik vb. İçin test ettiğini ve böylece tasarımınızı ve API'lerinizi geliştirmek için hayati önem taşıyan geri bildirimler sağladığından bahsetmiyorum bile. Hangi IMHO, modül / susbystem entegrasyon hataları olasılığını önemli ölçüde azaltabilir: API ne kadar kolay ve temizse, yanlış anlama veya ihmal etme olasılığı o kadar az olur.
Otomatik birim testi, otomatik entegrasyon testi ve otomatik kabul testi konusunda deneyiminiz ve deneyiminizde en yüksek yatırım getirisini elde ettiğiniz şey nedir? ve neden?
Yatırım getirisi birçok faktöre bağlıdır, muhtemelen en önemlisi projenizin yeşil alan mı yoksa eski mi olduğu. Yeşil alan gelişimi ile tavsiyem (ve şu ana kadarki deneyimlerim) TDD tarzını en baştan test etmek. Bunun bu durumda en uygun maliyetli yöntem olduğuna eminim.
Bununla birlikte, eski bir projede, yeterli birim test kapsamı oluşturmak, fayda sağlamak için çok yavaş olacak büyük bir girişimdir. Mümkünse, UI üzerinden sistem / işlev testleriyle en önemli işlevleri kapsamaya çalışmak daha etkilidir. (otomatik GUI uygulamaları yavaş yavaş geliştirilse de, masaüstü GUI uygulamalarının GUI üzerinden otomatik olarak test edilmesi zor olabilir ...). Bu size hızlı bir şekilde kaba ama etkili bir güvenlik ağı sağlar. Ardından, uygulamanın en kritik kısımları etrafında kademeli olarak ünite testleri yapmaya başlayabilirsiniz.
Bir sonraki projenizde otomatik hale getirmek için yalnızca bir test yöntemi seçmeniz gerekirse, hangisi olurdu?
Bu teorik bir soru ve onu anlamsız buluyorum. Her türlü test, iyi bir SW mühendisinin araç kutusunda kullanımına sahiptir ve bunların hepsinin, yeri doldurulamaz oldukları senaryoları vardır.