Sorularınızın cevapları
Çok fazla birim testi yaptırmak gibi bir şey var mı?
Elbette ... Örneğin, ilk bakışta farklı gibi görünen ancak aynı şeyi gerçekten test eden birden fazla test yapabilirsiniz (mantıksal olarak test edilen "ilginç" uygulama kodunun aynı satırlarına bağlıdır).
Ya da kodunuzun içini, asla dışlanmayacak şekilde test edebilirsiniz (yani, herhangi bir arayüz sözleşmesinin bir parçası değildir), bunun bir anlam ifade edip etmediği konusunda tartışabilir. Örneğin, dahili log mesajlarının tam ifadesi veya her neyse.
Mevcut bir uygulama için birim sınamaları yazmakla görevlendirildim. İlk dosyamı bitirdikten sonra, 419 satır orijinal kod için 717 satır test kodum var.
Bu beni oldukça normal vuruyor. Testleriniz kurulum için çok sayıda kod satırı harcıyor ve gerçek testlerin üstüne yazıyor. Oran gelişebilir veya artmayabilir. Ben kendimi oldukça ağır test ediyorum ve genellikle testlere asıl koda göre daha fazla yer ve zaman harcıyorum.
Kod kapsamımızı artırdıkça bu oran yönetilemez mi?
Oran çok fazla etkiye sahip değil. Bunları yönetilemez hale getirme eğiliminde olan başka test nitelikleri de vardır. Kodunuzda oldukça basit değişiklikler yaparken düzenli olarak bir sürü testte tekrar test yapmak zorunda kalırsanız, nedenlerine iyi bir şekilde bakmalısınız. Bunlar ne kadar çizginiz olduğunu değil, testlerin kodlanmasına nasıl yaklaştığınızı gösterir.
Birim sınama anlayışı, her yöntemin beklendiği gibi çalıştığından emin olmak için sınıftaki her yöntemi sınamaktı.
Bu kesinlikle "birim" testleri için doğrudur. Burada “birim” bir yöntem veya sınıf gibi bir şeydir. "Birim" testinin amacı, tüm sistemi değil sadece belirli bir kod birimini test etmektir. İdeal olarak, sistemin geri kalanının tamamını kaldırmanız gerekir (çiftler ya da değiller kullanarak).
Ancak, çekme talebinde, teknik liderim daha üst seviye testlere odaklanmam gerektiğini belirtti.
Sonra insanlara aslında varsayarak tuzağına düştü geliyordu onlar ne zaman birim testleri söyledi birim testleri. "Birim testi" diyen ancak oldukça farklı bir şey ifade eden birçok programcı ile tanıştım.
Her bir işlevi ayrıntılı bir şekilde test etmekten ziyade, söz konusu sınıfla en sık kullanılan 4-5 test durumlarını kullanmasını önerdi.
Elbette, sadece önemli kodun% 80'ine yoğunlaşmak da yükü azaltır ... Patronunuz hakkında çok düşündüğünüz için minnettarım, ancak bu beni en iyi seçenek olarak görmüyor.
Bana göre,% 100 birim test kapsamı yüksek bir hedef, ancak sadece% 50'ye ulaşsak bile,% 50'nin% 100'ünün kapsandığını biliyorduk.
"Birim test kapsamı" nedir bilmiyorum. "Kod kapsamı" demek istediğinizi varsayalım, yani test takımını çalıştırdıktan sonra, her kod satırının (=% 100) en az bir kez yürütüldüğünü varsayalım.
Bu güzel bir basketbol sahası ölçüsüdür, ancak şu ana kadar çekebilecek en iyi standart değildir. Sadece kod satırlarını çalıştırmak bütün resim değildir; bu, örneğin karmaşık, iç içe geçmiş dallar arasındaki farklı yolları hesaba katmaz. Parmağını çok az test edilen kod parçalarına işaret eden bir metriktir (açıkçası, eğer% 10 veya% 5 kod sınıfı olarak bir sınıf varsa, o zaman bir şeyler yanlış olur); Öte yandan,% 100'lük bir garanti size yeterince test edip etmediğinizi veya doğru test edip etmediğinizi söylemez.
Entegrasyon testi
Günümüzde insanlar sürekli olarak birim testinden bahsederken, beni varsayılan olarak rahatsız ediyor . Benim düşünceme göre (ve deneyimlerim), birim testi kütüphaneler / API'ler için mükemmeldir; Daha çok iş odaklı alanlarda (elimizdeki sorudaki vakaları kullanırsak), mutlaka en iyi seçenek değildir.
Genel uygulama kodu ve ortalama işlerde (para kazanmanın, son teslim tarihlerine ulaşmanın ve müşteri memnuniyetini sağlamanın önemli olduğu ve esas olarak doğrudan kullanıcının yüzüne giren veya gerçek felaketlere yol açabilecek hatalardan kaçınmak istediğiniz) - NASA'nın roket konuşması burada başlar), entegrasyon veya özellik testleri çok daha faydalıdır.
Bunlar Davranış Odaklı Gelişme ya da Özellik Odaklı Gelişme ile el ele gider; bunlar tanımı gereği (katı) birim testleri ile çalışmaz.
Kısa tutmak için (ish), bir entegrasyon / özellik testi tüm uygulama yığınını kullanır. Web tabanlı bir uygulama olarak, tarayıcı uygulaması yoluyla tıklayarak (ve hayır, belli ki değil gibi davranırdım var kontrol - o basit olması, bunu yapmak için orada çok güçlü çerçeveler vardır // salatalık: http. Bir örnek için io ).
Son sorularınızı cevaplamak için: yeni bir özelliğin ancak özellik testi uygulandıktan ve başarısız olduktan sonra programlandığından emin olarak tüm ekibinizin yüksek test kapsamına girmesini sağlayın. Ve evet, bu her özellik demek . Bu size% 100 (olumlu) özellik kapsamı garanti eder . Tanım gereği, uygulamanızın bir özelliğinin asla "kaybolmayacağını" garanti eder. % 100 kod kapsamı garantisi vermez (örneğin, negatif özellikleri etkin bir şekilde programlamadığınız sürece hata işleme / istisna işlemlerinizi gerçekleştirmezsiniz).
Size hatasız uygulama garantisi vermez; Tabii ki, açık ya da çok tehlikeli buggy durumları, yanlış kullanıcı girişi, bilgisayar korsanlığı (örneğin, çevre oturum yönetimi, güvenlik ve benzeri) vb. için özellik testleri yazmak isteyeceksiniz; ancak, sadece pozitif testlerin programlanması bile muazzam bir avantaja sahiptir ve modern, güçlü çerçevelerle oldukça uygulanabilir.
Özellik / entegrasyon testleri açıkça kendi solucan kutularına sahiptir (örneğin, performans; 3. parti çerçevelerin fazladan test edilmesi; genellikle çift kullanmazsınız çünkü benim tecrübelerime göre yazmak daha zor olma eğilimindedirler ...) d Her gün% 100 kod kapsama birimi test edilmiş bir uygulama (kütüphane değil!) üzerinden% 100 pozitif özellik testli bir uygulama yapın.