it-swarm.dev

Ne kadar Kod Kapsamı "yeterlidir"?

Burada işim için kod kapsamı için bir Push başlıyoruz ve bu beni düşünmeye götürdü .... Ne kadar kod kapsamı yeterli?

Kod kapsamındaki getirilerin azalması noktasına ne zaman ulaşırsınız? İyi kapsama alanı ile yeterli olmayan arasındaki tatlı nokta nedir? Yaptığınız proje türüne göre değişiyor mu (yani WPF, WCF, Mobile, ASP.NET) (Bunlar yazdığımız C # sınıflarıdır.)

38
Vaccano

en azından% 70'i hedefliyoruz. Daha kolay test edilebilen şeylerde (örneğin fonksiyonel veri yapıları)% 90'ı hedefliyoruz ve çoğu birey mümkün olduğunca% 100'e yakın hedefliyor. Test edilmesi çok zor olan WPF ile ilgili şeylerde ve diğer çerçevelerde daha düşük kapsama alanı elde ederiz (ancak% 70).

19
Noah Richards

Ben sadece kod kapsama alanı kötü bir metrik olduğunu düşünüyorum. cover kodunu veren, ancak çıktıyı yeterince kontrol etmeyen veya Edge vakalarını test etmeyen tonlarca işe yaramaz test üretmek kolaydır. Kodu kapsamak, sadece bir istisna atmadığı anlamına gelir, doğru değil. Kalite testlerine ihtiyacınız var - miktar o kadar önemli değil.

55
Fishtoaster

"Yeterli" kodunuzda hiçbir şeyi bozmadığınızdan güvenle değişiklik yapabileceğiniz zamandır. Bazı projelerde bu% 10, diğerlerinde% 95 olabilir.

Neredeyse hiç% 100 kadar yüksek değildir. Bununla birlikte, bazen% 100 kod kapsamı almaya çalışmak, kod tabanından hammadde kaldırmak için harika bir yol olabilir. Kod kapsamını artırmanın iki yolu olduğunu unutmayın - daha fazla test yazın veya kodu çıkarın. Test edilmesi zor olduğu için kod ele alınmadıysa, test etmeyi kolaylaştırmak için basitleştirme veya yeniden düzenleme şansınız yüksektir. Test etmek zahmetli değilse, kodda başka hiçbir şeyin onu kullanmama ihtimali genellikle yüksektir.

38
RevBingo

Kod kapsamı% 100 asimptotik olarak yaklaşır. Sonuç olarak, harcanan çaba için kaybolan küçük geri dönüşler almaya başladığınız için, son% 5 muhtemelen değerinden daha fazla çaba demektir.

14
Robert Harvey

Kapsama alanı dikkat edilmesi gereken bir metriktir, ancak nihai hedef olmamalıdır. Ben çok yüksek kapsama kodu -% 100 kapsama (tabii ki TDD), gördüm (ve kuşkusuz yazdım!), Henüz:

  • hatalar hala ortaya çıkıyor
  • tasarım hala zayıf olabilir
  • gerçekten keyfi bir kapsam hedefi için çekim yaparken kendinizi öldürebilirsiniz - savaşlarınızı seçin: p

Burada referans için uygun olduğunu düşündüğüm bir "Testivus Yolu" giriş var :)

7
H.Y.

Sadece çoğu kodun% 20'si zamanın% 80'ini çalıştırır . En çok neyin test edilmesi gerektiğini belirlemek için çağrı grafiğiyle eşleştirilmedikçe kod kapsamı analizi çok yararlı değildir. Bu size Edge vakalarınızın nerede olabileceğini söyler. Sadece gerçek kodun% 5'inden daha azını oluşturan bu Edge vakaları için 100 test yapabilirsiniz.

Bu nedenle, kritik yolları tanımlayan% 20'nin% 100'ünü ve geri kalanın en az% 50'sini kapsadığınızdan emin olun (çağrı grafiğine göre). Bu size (kabaca)% 70 -% 75 toplam kapsama alanı sağlar, ancak değişir.

Kritik Edge vakalarını kontrolsüz bırakırken toplam% 70'in üzerinde kapsama alanı elde etmeye çalışırken zaman kaybetmeyin.

5
Tim Post

Kapsamı test edilmeyen alanları belirtmek için kılavuz olarak kullanın. Kapsama yetkisine sahip olmak yerine, kapsam dahilindeki kodun nedenini anlamak daha akıllıca olacaktır. Eksikliğin bir sebebini kaydetmek, risklerin dengelenmesini sağlayan iyi bir disiplindir.

Bazen sebep istenenden daha azdır 'ör. zaman aşımına uğradı ', ancak erken yayın için uygun olabilir. Daha sonra kapsama alanında bir artış için geri dönecek alanları işaretlemek daha iyidir.

% 100 ifade kapsamının kritik olmayan sistemler için uygun olduğu düşünülen kritik uçuş yazılımları üzerinde çalışıyorum. Daha kritik sistemler için şube/karar kapsamını kontrol eder ve bazen yeterince katı olmayan bir teknik çağrı MC/DC kullanırız.

Ayrıca nesne kodunu da kapsadığımızdan emin olmalıyız.

Bu, bizim durumumuzda çok yüksek olan, değer/maliyete karşı risk arasındaki dengedir. Hata eksikliğine bağlı olarak bilinçli bir seçim yapılması gerekir.

4
Mark Fisher

Daha fazla kod kapsamına izin vermek için çalışma süresi performansını, güvenliğini, esnekliğini veya sürdürülebilirliğini etkileyecek değişiklikleri düşünmeye başladığınızda, daha fazla kod kapsamı arayışına son verme zamanı gelmiştir.

Bu noktanın% 0 olduğu projelerim var, çünkü tasarıma zarar vermeden kapsamın hesaplanması imkansız ve bunun% 92 kadar yüksek olduğu diğer projeler.

Kod kapsamı metrikleri yalnızca bazı testleri kaçırmış olabileceğinizi belirtmek için kullanışlıdır. Size testlerinizin kalitesi hakkında hiçbir şey söylemezler.

3
Bill

@ RevBingo'nun cevabını gerçekten seviyorum çünkü% 100'e karşı mücadelenin kullanılmayan kodu temizlemenize veya silmenize neden olabileceğini öne sürüyor. Diğer cevaplarda görmediğim şey, ne zaman yüksek kapsama ihtiyacınız olduğu ve ne zaman ihtiyacınız olmadığının bir duygusu. Bunu başlatırken bıçakladım. Ben böyle bir grafiğe detay eklemek tüm kod için doğru bir test kapsama numarası bulmak daha yararlı bir takip olacağını düşünüyorum.

100%

Java.util Koleksiyonlar gibi herkese açık bir API için, bu bir Veritabanına bağlı değildir ve HTML döndürmez, zaman veya diğer nedenlerden dolayı% 90-95'e razı olsanız bile% 100 kapsamın asil bir başlangıç ​​hedefi olduğunu düşünüyorum. kısıtlamaları. Özellik tamamlandıktan sonra test kapsamını artırmak, diğer kod inceleme türlerinden daha ayrıntılı bir inceleme düzeyini zorlar. API'niz hiç popüler değilse, kullanıcılar onu kullanamaz, alt sınıflar, seriyi kaldırır, vb. İlk deneyimlerinin bir hata bulmasını veya gözetim tasarlamasını istemezsiniz!

% 90

Veri yapılarını alan ve veri yapılarını döndüren iş altyapısı kodu için,% 100 hala iyi bir başlangıç ​​hedefidir, ancak bu kod çok fazla kötüye kullanımı davet edecek kadar genel değilse, belki% 85'i hala kabul edilebilir mi?

% 75

Kodları alan ve döndüren kod için, birim testinin çok daha kırılgan olduğunu düşünüyorum, ancak yine de birçok durumda yararlı olabilir.

% 50 veya daha az

Çok kırılgan olduğu için HTML döndüren işlevler için test yazmaktan nefret ediyorum. Birisi CSS'yi, JavaScript'i veya döndürdüğünüz tüm HTML ve İngilizce bloğunu değiştirirse, son kullanıcılara mantıklı gelmez? Biraz HTML üretmek için çok fazla iş mantığı kullanan bir işlev bulabilirseniz, bu test etmeye değer olabilir. Ancak bunun tersi durum hiç de test etmeye değmeyebilir.

% 0 civarında

Bazı kodlar için, "doğru" tanımı "son kullanıcı için anlamlı" dır. Otomatik dilbilgisi denetimi veya çıktıyı doğrulayan HTML gibi bu koda karşı gerçekleştirebileceğiniz geleneksel olmayan testler vardır. Hatta, sistemin geri kalanı "Oturum Aç" dediğinde "Giriş" demek gibi, işte sık sık avladığımız küçük tutarsızlıklar için grep ifadeleri ayarladım. Bu adam kesinlikle bir birim test değil, belirli bir çıktı beklemeden sorunları yakalamak için yararlı bir yol.

Nihayetinde, sadece bir insan insanlara neyin duyarlı olduğunu yargılayabilir. Birim testi orada size yardımcı olamaz. Bazen bunu doğru bir şekilde değerlendirmek birkaç insan gerektirir.

Mutlak% 0

Bu üzücü bir kategori ve bunu yazmak için daha az insan gibi hissediyorum. Ancak yeterince büyük herhangi bir projede, herhangi bir iş avantajı sağlamadan kişi haftalarını emebilecek tavşan delikleri vardır.

Hibernate'i test etmek için verileri otomatik olarak nasıl alaylacağını gösterdiği iddia edildiğinden bir kitap aldım. Ancak yalnızca Hazırda Bekletme HQL ve SQL sorgularını test etti. Çok fazla HQL ve SQL yapmanız gerekiyorsa, gerçekten Hazırda Bekletme avantajından yararlanamazsınız. Bir çeşit Hibernate bellek içi veritabanı var, ancak testlerde etkili bir şekilde nasıl kullanılacağını anlamaya zaman ayırmadım. Bu çalışmayı yapsaydım, Hazırda Beklet'in bazı sorguları çalıştırmasına neden olan bir nesne grafiğinde gezinerek bir şeyler hesaplayan herhangi bir iş mantığı için yüksek (% 50 -% 100) test kapsamına sahip olmak isterdim. Bu kodu test etme yeteneğim şu anda% 0'a yakın ve bu bir sorun. Bu yüzden projenin diğer alanlarındaki test kapsamını iyileştiriyorum ve veritabanına erişenler yerine saf işlevleri tercih etmeye çalışıyorum, çünkü bu işlevler için testler yazmak daha kolay. Yine de, bazı şeyler test edilemez veya test edilmemelidir.

2
GlenPeterson

Yer açısından kritik önem taşıyan yazılımlar% 100 ifade kapsamı gerektirir.

İlk başta bir anlam ifade etmiyor. Herkes, tam bir test kapsamının, kodun tamamen test edildiği anlamına gelmediğini ve uygulamayı test etmeden% 100 kapsam elde etmenin o kadar zor olmadığını bilir.

Bununla birlikte,% 100 kapsama alanı daha düşük bir sınırdır:% 100 kapsama alanı hatasız bir yazılımın kanıtı olmamasına rağmen, daha az kapsama alanı ile kodun tam olarak test edilmediği ve bunun kritik alan yazılımı için kabul edilemez olduğu kesindir.

2
mouviciel

Bence uygulamanın test ettiğiniz kısmına bağlı. Örneğin. iş mantığı veya karmaşık veri dönüşümleri içeren herhangi bir bileşen için,% 90 (mümkün olduğunca yüksek) kapsamı hedeflerim. Sık sık sadece mümkün olduğunca kod test ederek küçük ama tehlikeli hatalar bulduk. Bu tür hataları test sırasında bir yıl sonra bir müşterinin sitesinde gerçekleştirmelerine izin vermek yerine bulmayı tercih ederim. Ayrıca, yüksek kod kapsamının bir yararı, testlerin uygun şekilde uyarlanması gerektiğinden insanların çalışma kodunu çok kolay değiştirmelerini engellemesidir.

Öte yandan, kod kapsamının daha az uygun olduğu bileşenler olduğunu düşünüyorum. Örneğin, bir GUI'yi test ederken, olayı doğru bileşenlere göndermek için bir düğmeye tıklandığında yürütülen tüm kodu kapsayan bir test yazmak çok zaman alır. Bu durumda, sadece düğmeye tıklayıp programın davranışını gözlemlediğiniz bir manuel test yapma geleneksel yaklaşımını kullanmak çok daha etkili olduğunu düşünüyorum (sağ iletişim penceresi açılıyor mu? Doğru araç seçilir mi? ?).

1
Giorgio

Test paketinizin ne zaman yeterli kapsama sahip olduğunu bilmek için bir önlem olarak kod kapsamını kullanma hakkında o kadar yüksek bir fikrim yok.

Bunun temel nedeni, önce bir kod yazdığınız bir işleminiz, ardından bazı testleriniz varsa ve bir testi kaçırdığınız yeri keşfetmek için kod kapsamına bakarsanız, iyileştirilmesi gereken süreçtir. Gerçek TDD yaparsanız, kutudan% 100 kod kapsamı alırsınız (kuşkusuz, test etmediğim bazı önemsizlikler var). Ancak neyi test edeceğinizi öğrenmek için kod kapsamına bakarsanız, muhtemelen yanlış testleri yazacaksınız.

Kod kapsamından sonuçlandırabileceğiniz tek şey, eğer çok düşükse, yeterli teste sahip olmadığınızdır. Ancak yüksekse, tüm doğru testlere sahip olduğunuzun garantisi yoktur.

0
Pete