Ben oluyor birşeyden alakalı bir anekdot var elimizde benim için. TDD kullanmayan bir projeyim. Bizim QA milletlerimiz bizi bu yöne doğru hareket ettiriyorlar, ancak biz küçük bir kıyafetimiz ve çok uzun bir süreç oldu.
Neyse , son zamanlarda belirli bir görevi yapmak için üçüncü taraf bir kütüphane kullanıyordum. Bu kütüphanenin kullanımı ile ilgili bir sorun vardı, bu yüzden de aynı kütüphanenin bir versiyonunu kendi başıma yazmam istendi. Toplamda, yaklaşık 5.000 satır çalıştırılabilir kod ve zamanımın yaklaşık 2 ayı oldu. Kod satırlarının zayıf bir metrik olduğunu biliyorum, ancak bu yanıt için bunun büyüklüğün iyi bir göstergesi olduğunu düşünüyorum.
İsteğe bağlı sayıda bit izlememe izin verecek belirli bir veri yapısı vardı. Proje Java'da olduğu için, Java'ları seçtim BitSet
ve biraz değiştirdim (liderleri de takip edebilme yeteneğine ihtiyacım vardı, 0
Java'nın BitSet'i nedense yapmazdı .....). ~% 93 kapsama alanına ulaştıktan sonra, yazdığım sistemi gerçekten vurgulayacak bazı testler yazmaya başladım. Son gereksinimlerime yetecek kadar hızlı olmalarını sağlamak için işlevselliğin bazı yönlerini kıyaslamam gerekiyordu. Şaşırtıcı olmayan bir şekilde, BitSet
arabirimden geçersiz kıldığım işlevlerden biri, büyük bit kümeleriyle (bu durumda yüz milyonlarca bit) uğraşırken absürd. Diğer geçersiz kılılmış fonksiyonlar bu fonksiyona dayanıyordu, bu yüzden kocaman bir şişe boynuydu.
Yaptığım çizim kuruluna gidiyor ve alt yapısını manipüle etmek için bir yol bulmaktan bitti ne BitSet
bir olduğunu long[]
. Algoritmayı tasarladım, meslektaşlarına girdilerini sordum ve ardından kodu yazmaya başladım. Sonra birim testlerini yaptım. Bazıları kırıldı ve beni düzeltenler için algoritmamda nereye bakmam gerektiğini tam olarak işaret etti. Tüm hataları birim testlerinden düzelttikten sonra, işlevin gerektiği gibi çalıştığını söyleyebildim. En azından, bu yeni algoritmanın önceki algoritmanın yanı sıra çalıştığından emin olabilirim.
Tabii ki, bu kurşun geçirmez değil. Kodumda ünite testlerinin kontrol etmediği bir hata varsa, o zaman bilemem. Ama elbette, aynı kesin hata benim daha yavaş algoritmamda da olabilirdi. Ancak , bu özel işlevden kaynaklanan yanlış çıktı hakkında endişelenmeme gerekmediğine büyük bir güven ile söyleyebilirim. Önceden var olan ünite testleri, yeni algoritmayı doğru test etmek için sınamak için saatler, belki de günler boyunca tasarruf etti.
Bu , TDD'den bağımsız olarak birim testlerinin yapılması noktasıdır - yani birim testleri, kodu yeniden düzenlemeye / sürdürmeye başladığınızda, TDD'de ve TDD dışında sizin için aynısını yapar. Tabii ki, bu düzenli regresyon testi, duman testi, bulanık test, vs, ama eşleştirilmiş olmalıdır birim adı devletler olarak, size hataları yukarı attı var nerede yön veren olası en küçük, atom düzeyinde, şeyler testleri, test.
Benim durumumda, mevcut birim testleri olmadan, bir şekilde algoritmanın her zaman çalışmasını sağlayacak bir yöntem bulmalıydım. Hangisi, sonunda ... birim testi gibi görünüyor , değil mi?