Ünite testinin bugünlerde bu konuda gizemli bir şeyleri var. İnsanlar,% 100 test kapsamı kutsal bir kâse ve ünite testi, yazılım geliştirmenin Tek Doğru Yolu gibi görünüyor.
Noktayı kaçırıyorlar.
Ünite testi cevap değildir. Test etmek.
Şimdi, bu tartışma ne zaman ortaya çıksa, birisi (çoğu zaman ben bile) Dijkstra'nın sözünü ortadan kaldıracaktır: "Program testi böceklerin varlığını gösterebilir, ancak onların yokluğunu asla göstermez." Dijkstra haklıdır: Yazılımın amaçlandığı gibi çalıştığını kanıtlamak için test yapmak yeterli değildir. Ancak bu gereklidir : bir düzeyde, yazılımın istediğini yaptığını göstermek mümkün olmalıdır .
Birçok insan elle test eder. Hatta TDD meraklıları bile bazen kabul etmeyecekleri halde manuel test yapacaklar. Yardımcı olamaz: Yazılımınızı müşterinize / patronunuza / yatırımcılarınıza / vb. Gibi göstermek için konferans odasına girmeden hemen önce çalışacağından emin olmak için elden geçireceksiniz. Bunda yanlış olan bir şey yok ve aslında herşeyin elle geçmeden her şeyin yolunda gitmesini beklemek delilik olurdu - yani, test -% 100 ünite test kapsamınız olsa ve testlerinize maksimum güven duysanız bile .
Ancak yazılım oluşturmak için gerekli olsa bile manuel testler nadiren yeterlidir . Neden? Çünkü manuel testler sıkıcı ve zaman alıcıdır ve insanlar tarafından gerçekleştirilir. Ve insanlar sıkıcı ve zaman alıcı görevler yapmakta zorlanıyorlar: mümkün olduğunda bunları yapmaktan kaçınıyorlar ve çoğu zaman zorlandıkları zaman iyi yapmıyorlar.
Makineler , diğer taraftan, olan mükemmel sıkıcı ve zaman alıcı görevleri yerine de. Sonuçta bilgisayarların icat ettiği şey buydu.
Bu nedenle testler çok önemlidir ve otomatik testler , testlerinizin tutarlı bir şekilde kullanılmasını sağlamanın tek mantıklı yoludur. Yazılım geliştirildiğinden test etmek ve yeniden test etmek de önemlidir. Buradaki bir başka cevap, regresyon testinin önemine işaret etmektedir . Yazılım sistemlerinin karmaşıklığı nedeniyle, sistemin bir bölümünde sıkça görünüşte zararsız değişiklikler sistemin diğer bölümlerinde istenmeyen değişikliklere (yani hatalara) neden olur. Bu istenmeyen değişiklikleri bir tür test yapmadan keşfedemezsiniz. Testleriniz hakkında güvenilir veriler elde etmek istiyorsanız, testlerinizi sistematik bir şekilde yapmanız gerekir, bu da bir çeşit otomatik test sistemine sahip olmanız gerektiği anlamına gelir.
Bütün bunların birim testiyle ne ilgisi var? Tabi, doğası gereği, ünite testleri, bir insan tarafından değil, makine tarafından yapılır. Bu nedenle, birçok insan otomatik testlerin birim testlerine eşit olduğu konusunda yanlış izlenim altındadır . Ancak bu doğru değil: birim testleri sadece çok küçük otomatik testlerdir.
Şimdi, ekstra küçük otomatik testlerin değeri nedir? Bunun avantajı, test sisteminin daha kesin hedeflenmesini sağlayan ve hata ayıklamaya yardımcı olan bir yazılım sisteminin bileşenlerini yalıtımlı olarak test etmeleridir . Ancak ünite testi aslında yüksek kaliteli testler anlamına gelmez . Yazılım, daha ince detay düzeyindeki yazılımı kaplamasından dolayı genellikle daha yüksek kalite testlerine yol açar. Ancak, sadece komple bir sistemin davranışını test etmek mümkündür, kompozit parçalarını değil, yine de tamamen test etmek mümkündür.
Ancak% 100 ünite test kapsamı ile bile, bir sistem hala tam olarak test edilemeyebilir. Çünkü tek tek bileşenler mükemmel şekilde yalıtılmış halde çalışabilir, ancak birlikte kullanıldığında hala başarısız olabilirler. Bu nedenle, ünite testi, oldukça faydalı olmasına rağmen , yazılımın beklendiği gibi çalışmasını sağlamak için yeterli değildir . Aslında, birçok geliştirici otomatik entegrasyon testleri, otomatik fonksiyonel testler ve manuel testler ile birim testlerini tamamlar.
Birim testlerinde değer göremiyorsanız, belki de en iyi başlamanın yolu farklı bir otomatik test türünü kullanmaktır. Bir web ortamında, Selenium gibi bir tarayıcı otomasyon test aracı kullanmak, nispeten küçük bir yatırım için genellikle büyük bir kazanç sağlayacaktır. Parmaklarınızı suya batırdıktan sonra, otomatikleştirilmiş testlerin ne kadar yararlı olduğunu görebileceksiniz. Ve otomatikleştirilmiş testler yaptıktan sonra, birim testi çok daha mantıklıdır çünkü büyük entegrasyon veya uçtan uca testlerden daha hızlı geri dönüş sağlar çünkü şu anda üzerinde çalışmakta olduğunuz bileşen üzerinde testleri hedefleyebilirsiniz.
TL; DR: henüz ünite testi için endişelenmeyin . İlk önce yazılımınızı test etmekten endişe edin.