Kod kapsamı kalite bağımsız değişkeninin nasıl reddedileceğine ilişkin tüm araçlar / öneriler


11

Artık insanların bu soruyu yinelediğini veya birçok kez sorduğunu biliyorum, bu durumda sorumun cevabıyla ilgili soruların bağlantısını takdir ediyorum.

Son zamanlarda bazı insanlarla kod kapsamı konusunda anlaşamadım. % 100 kapsamın kaliteli testler ve dolayısıyla kaliteli kod anlamına gelmediği iddiasına dayanarak ekibimizin kod kapsamına tamamen bakmasını isteyen bir grup insanım var.

Kod Kapsamı'nın neyin test edilmediğini bana söylediği ve bu alanlara odaklanmamıza yardımcı olduğu iddiasını satarak geri itebildim.

(Yukarıdakiler, buna benzer diğer SO sorularında benzer bir şekilde tartışılmıştır - /programming/695811/pitfalls-of-code-coverage )

Bu milletlerin argümanı - ekip hızlı bir şekilde düşük kalite testleri oluşturarak tepki verecek ve böylece önemli bir kalite eklemeden zaman kaybedecektir.

Onların bakış açılarını anlasam da, daha fazla kapsam ölçütüyle ilgilenen daha sağlam araçlar / çerçeveler tanıtarak kod kapsamı için daha sağlam bir durum oluşturmanın bir yolunu arıyorum (Functional, Statement,Decision, Branch, Condition, State, LCSAJ, path, jump path, entry/exit, Loop, Parameter Value etc).

Aradığım şey , bu kod kapsamı araçlarının ve uygulamalarının / süreçlerinin bir araya getirilmesi için öneri olup, önerim hakkında rahat hissederken bu tür argümanlara karşı koymamda bana yardımcı olabilir.

Ayrıca, böyle bir argümana nasıl karşı çıkacağınıza dair deneyiminize / bilginize dayanan eşlik eden yorumları / önerileri de memnuniyetle karşılarım, çünkü öznel olsa da, kod kapsamı ekibimin kod kalitesi ve test değerinin daha bilinçli olmasına yardımcı oldu.


Düzenleme: Tipik kod kapsama zayıflık benim anlayış hakkında herhangi bir karışıklığı azaltmak için, ben (veya kod satırları yürütülen) araçları (bol var) atıfta değil işaret etmek istiyorum Statement Coverage. Aslında burada yanlış olan her şey hakkında iyi bir makale: http://www.bullseye.com/statementCoverage.html

Ben sadece ifade veya satır kapsama daha fazlasını, birden fazla kapsama kriterleri ve seviyeleri daha fazla arıyordu.

Bkz. Http://en.wikipedia.org/wiki/Code_coverage#Coverage_criteria

Fikir şu ki, bir araç bize kapsama alanımızı birden fazla kritere göre söyleyebilirse, bu test kalitesinin makul bir otomatik değerlendirmesi haline gelir. Hiçbir şekilde hat kapsamının iyi bir değerlendirme olduğunu söylemeye çalışmıyorum. Aslında sorumun öncüsü bu.


Düzenleme:
Tamam, belki biraz fazla dramatik tahmin, ama nokta olsun. Sorun genel olarak süreçleri / politikaları tüm ekipler arasında homojen / tutarlı bir şekilde belirlemekle ilgilidir. Ve korku, testlerin kalitesini nasıl sağladığınız, herhangi bir önlem almadan nasıl garantili zaman ayırdığınız konusunda genel bir korkudur. Bu nedenle, uygun süreçlerle ve doğru araçlarla desteklendiğinde, zamanın boşa harcanan süreçlerde harcanan güç olmadığını bilerek kod kalitesini artırmamıza izin verecek ölçülebilir bir özelliğe sahip olmayı seviyorum.


EDIT: Şimdiye kadar cevaplardan ne var:

  • Kod incelemeleri, testlerin kalitesini sağlamak için testleri kapsamalıdır
  • Önce Test stratejisi, kapsamı% artırmak için yazılmış olan testlerden kaçınmaya yardımcı olur
  • Sadece İfade / Satır dışındaki test kriterlerini kapsayan alternatif araçları keşfetmek
  • Kapsanan kodun / bulunan hataların analizi, kapsamın önemini anlamaya ve daha iyi bir durum ortaya çıkarmaya yardımcı olacaktır.
  • En önemlisi, doğru şeyi yapmak ve inançları için savaşmak için Ekibin girdisine güvenmek
  • Kapsanan Bloklar / test sayısı - Tartışılabilir ancak bir miktar değer tutar

Şimdiye kadarki harika cevaplar için teşekkürler. Onları gerçekten takdir ediyorum. Bu iş parçacığı, saatlerce süren güçlerle beyin fırtınasından daha iyidir.


4
Hiç kimse hiçbir yerde % 100 kod kapsamı karşılamayı önermiyor, bu gerçekten aptalca bir iş.
Jimmy Hoffa

1
Teşekkürler. Ve bunu zaten biliyorum ve kabul ediyorum. Ayrıca, insanlar% 100 kod kapsamını% 100 İfade (veya satır) kapsamıyla ilişkilendirme eğilimindedir. Ayrıca direnemedim - Jimmy, onlar her yerde arıyorduk.
MickJ

3
"o zaman takım hızlı bir şekilde düşük kalite testleri oluşturarak tepki verir ve böylece önemli bir kalite eklemeden zaman kaybeder" - harika bir ekip!
Piotr Perak

Tamam, belki biraz dramatik bir şekilde tahmin ettim, ama anladın. Sorun genel olarak süreçleri / politikaları tüm ekipler arasında homojen / tutarlı bir şekilde belirlemekle ilgilidir. Ve korku, testlerin kalitesini nasıl sağladığınız, herhangi bir önlem almadan nasıl garantili zaman ayırdığınız konusunda genel bir korkudur. Bu nedenle, uygun süreçlerle ve doğru araçlarla desteklendiğinde, zamanın boşa harcanan süreçlerde harcanan güç olmadığını bilerek kod kalitesini artırmamıza izin verecek ölçülebilir bir özelliğe sahip olmayı seviyorum.
MickJ

1
@JimmyHoffa - Yer açısından kritik öneme sahip yazılımlar genellikle% 100 kod kapsamı gerektirir.
mouviciel

Yanıtlar:


9

Deneyimlerime göre, kod kapsamı sizin yaptığınız kadar yararlıdır . Tüm vakalarınızı kapsayan iyi testler yazarsanız , bu testleri geçmek gereksinimlerinizi karşıladığınız anlamına gelir. Var Aslında tam düşüncesi Testi Geliştirme Driven kullanımları. Testleri uygulama hakkında hiçbir şey bilmeden koddan önce yazarsınız (Bazen başka bir takım testleri tamamen yazdığı anlamına gelir). Bu testler, son ürünün spesifikasyonlarınızın söylediği her şeyi yaptığını doğrulamak için ayarlanır ve daha sonra bu testleri geçmek için minimum kodu yazarsınız.

Buradaki sorun, tabii ki, eğer testleriniz yeterince güçlü değilse, uç vakaları veya öngörülemeyen sorunları özleyecek ve spesifikasyonlarınızı tam olarak karşılamayan kod yazacaksınız. Kodunuzu doğrulamak için testleri gerçekten kullanmaya ayarlanmışsanız, iyi testler yazmak mutlak bir zorunluluktur veya gerçekten zamanınızı boşa harcarsınız.

Sorunuzu gerçekten yanıtlamadığını fark ettiğim için cevabı burada düzenlemek istedim. TDD'nin bazı avantajlarını görmek için o wiki makalesine bakacağım . Gerçekten kuruluşunuzun en iyi şekilde nasıl çalıştığına bağlı, ancak TDD kesinlikle sektörde kullanılan bir şey.


Yazma testlerinin ilk önce testlerin kalitesini artırdığı önerisi için +1, bu nedenle önce Test Kapsamı ile Kod Kapsamı kombinasyonu kesinlikle yararlıdır.
MickJ

Evet, kodu geliştirdikten sonra test yazarsanız, yalnızca kodunuzun geçeceğini bildiğiniz şeyleri test edeceğinizi veya testleri uygulamayı tamamlayacak şekilde yazacağınızı her zaman buldum. gerçekten kimseye yardım etmiyor. Eğer bağımsız kod testlerinizi yazma, kod odaklanmak gerektiğini ne ziyade yapmak gelmez yapmak.
Ampt

Teşekkürler @Ampt. TDD ile takviye sürecinin yanı sıra, daha kapsamlı bir şekilde daha fazla kapsama kriteri ile ilgilenen ve en azından bir dereceye kadar yazılan testlerin kalitesini doğrulamaya yardımcı olan herhangi bir kod kapsama aracı var mı?
MickJ

Sizi yanlış anlıyor olabilirim, ancak farklı araçların testleriniz için size farklı kapsama alanı sunmasını mı öneriyorsunuz? Kapsama araçlarının sadece testlerin çalışmasını izlemesi ve hangi kod satırlarının yürütüldüğünü kaydetmesi her zaman benim deneyimimdi. Bu durumda anahtarlama araçlarının kapsama alanı üzerinde hiçbir etkisi olmamalıdır, çünkü yürütülen satır sayısı aynı kalır. Aynı test için daha fazla kapsama alanı sağlayan bir araç konusunda dikkatli olurum. Bununla birlikte, her kod satırına isabetin , titizlik olduğu için test kalitesinin iyi bir değerlendirmesi olduğunu düşünmüyorum . İyi testler iyi gereksinimlerden gelir.
Ampt

Teşekkürler. Bahsettiğiniz şey Statement Coverage(veya yürütülen kod satırları). Ben sadece ifade veya satır kapsama, daha içine multiple coverage criteriave düzeyleri giderek daha fazla arıyordu . Bkz . En.wikipedia.org/wiki/Code_coverage#Coverage_criteria ve en.wikipedia.org/wiki/Linear_Code_Sequence_and_Jump . Fikir şu ki, bir araç bize kapsama alanımızı birden fazla kritere göre söyleyebilirse, bu test kalitesinin makul bir otomatik değerlendirmesi haline gelir. Hiçbir şekilde hat kapsamının iyi bir değerlendirme olduğunu söylemeye çalışmıyorum. Aslında sorumun öncüsü bu.
MickJ

6

Öncelikle, insanlar yapmak savunucusu% 100 kapsama:

Çoğu geliştirici ... "% 100 ifade kapsamı" yeterli görüyor. Bu iyi bir başlangıç, ancak pek yeterli değil. "% 100 şube kapsamı" olarak adlandırılanı karşılamak için daha iyi bir kapsama alanı kimliği ...

Steve McConnell, Kod Tamamlandı , Bölüm 22: Geliştirici Testi.

Siz ve diğerlerinin de belirttiği gibi, yalnızca kapsam uğruna kod kapsamının çok fazla bir şey yapması olası değildir. Ancak bir kod satırını çalıştıramazsanız neden yazılır?

Kendi projelerinizdeki verileri toplayıp analiz ederek argümanı çözmenizi öneririm.

Verileri toplamak için şahsen aşağıdaki araçları kullanıyorum:

  • Kod kapsamını ölçmek için JaCoCo ve ilgili Eclipse eklentisi EclEmma .
  • Otomatik bina, test ve raporlama için karınca komut dosyaları.
  • Jenkins sürekli derlemeler için - kaynak kontrolündeki herhangi bir değişiklik otomatik derlemeyi tetikler
  • Jenkins için JaCoCo Eklentisi - her derleme için kapsama metriklerini yakalar ve eğilimleri gösterir. Ayrıca yapının sağlığını etkileyen proje başına kapsam eşik değerlerinin tanımlarına izin verir.
  • Hataları izlemek için Bugzilla .

Bunu (veya benzer bir şeyi) yerleştirdikten sonra, kendi verilerinize daha yakından bakmaya başlayabilirsiniz:

  • kapsamı yetersiz projelerde daha fazla hata var mı?
  • kapsamı yetersiz sınıflarda / yöntemlerde daha fazla hata var mı?
  • vb.

Ben senin veriler beklediğiniz olacak kod kapsama konumunuzu desteklemek; kesinlikle benim deneyimim oldu. Ancak bunu yapmazsa, kuruluşunuz istediğinizden daha düşük kod kapsamı standartlarına sahip olabilir. Ya da belki testleriniz çok iyi değil. Görev, kod kapsamı anlaşmazlığının çözümüne bakılmaksızın, daha az kusurlu yazılım üretme çabalarını umuyoruz.


Bu cevabı gerçekten çok beğendim. Araç önerileri için teşekkürler ve daha da önemlisi, kod kapsamını haklı çıkarmak için veri destekli yaklaşım fikrini seviyorum. Her ne kadar takımların değeri konusunda söz almaya eğilimli olsam da, yine de bunu sorgulamam. Muhtemelen şimdiye kadar yaşadığımız deneyim için daha sağlam bir vaka oluşturmama yardımcı olabilir. Teşekkürler!
MickJ

4

Bu milletlerin argümanı - ekip hızlı bir şekilde düşük kalite testleri oluşturarak tepki verecek ve böylece önemli bir kalite eklemeden zaman kaybedecektir .

Bu bir güven meselesidir, araçlar değil .

Onlara neden, eğer bu ifadeye gerçekten inanırlarsa, takıma herhangi bir kod yazma konusunda güveneceklerini sorun.


Kodun işlevselliğinin alt satırda olduğunu bildiğinden, test, belgeleme, yorumlar, incelemeler vb. Herhangi bir acil sonuç olmadan feda edilebilir; kabul etsem de, bu kötü bir işaret.
JeffO

Tamam, belki biraz dramatik bir şekilde tahmin ettim, ama anladın. Sorun genel olarak süreçleri / politikaları tüm ekipler arasında homojen / tutarlı bir şekilde belirlemekle ilgilidir. Ve korku, testlerin kalitesini nasıl sağladığınız, herhangi bir önlem almadan nasıl garantili zaman ayırdığınız konusunda genel bir korkudur. Bu nedenle, uygun süreçlerle ve doğru araçlarla desteklendiğinde, zamanın boşa harcanan süreçlerde harcanan güç olmadığını bilerek kod kalitesini artırmamıza izin verecek ölçülebilir bir özelliğe sahip olmayı seviyorum.
MickJ

3

Tamam, belki biraz dramatik bir şekilde tahmin ettim, ama anladın. Sorun genel olarak süreçleri / politikaları tüm ekipler arasında homojen / tutarlı bir şekilde belirlemekle ilgilidir.

Bence sorun bu. Geliştiriciler tutarlı veya küresel politikaları umursamıyorlar (ve çoğu zaman mükemmel nedenlerle) ve kurumsal politikalara uymak yerine doğru olduğunu düşündüklerini yapma özgürlüğünü istiyorlar.

Bu, küresel süreçlerin ve önlemlerin kalite ve gelişme hızı üzerinde olumlu bir etkisi olduğunu kanıtlamadığınız sürece makul olur.

Her zamanki zaman çizelgesi:

  1. dev: hey, bak - kontrol panelimize kod kapsamı metrikleri ekledim, harika değil mi?
  2. yönetici: elbette, zorunlu hedefleri ve bunlara uyumu ekleyelim
  3. dev: boş ver, kod kapsamı aptalca ve işe yaramaz, bırakalım

1
+1 Bu şekilde aynı fikirde değilim. Im benim durumumda konuşma biraz bu şekilde gider. dev: hey, bak - kontrol panelimize kod kapsamı metrikleri ekledim, harika değil mi? yöneticisi: emin, adamların kaliteyi geliştirdiğini düşündüğünüz her şey harika. Yöneticilerin patronu: Sanırım ekipler arasında bir süreç yapmamız gerekiyor. Ben harcanan maliyet değeri garanti edemez sürece kod kapsama anlamsız olduğunu düşünüyorum.
MickJ

2

Deneyimlerime göre, metriği değerli kılmak için kod kapsamı ile birleştirilecek birkaç şey var:

Kod İncelemeleri

Kötü testleri geliştiriciye geri gönderebilirseniz, bu anlamsız kapsamı sağlayan kötü testlerin sayısını sınırlamaya yardımcı olabilir.

Hata izleme

Bir modülde bir grup kod kapsamınız varsa, ancak yine de bu alanda çok sayıda / ciddi hata alıyorsanız, geliştiricinin testlerinde iyileştirmeye ihtiyaç duyduğu bir sorunu gösterebilir.

pragmatizm

Hiç kimse önemsiz olmayan kod üzerinde iyi testlerle% 100'e ulaşamayacak. Takım lideri olarak kod kapsamına bakarsanız, ancak "% N'ye ulaşmamız gerekiyor!" boşlukları tespit edersiniz ve insanlara sisteme oyun oynama fırsatı vermeden hedefinize ulaşan "modül X'in kapsamını iyileştirmelerini" istersiniz.

Kapsanan Bloklar / Test Sayısı

Çoğu kod kapsama aracı, kapsanan blokları ve kapsanmayan blokları listeler. Bunu gerçek testlerin sayısıyla birleştirmek, kötü testleri veya birleştirilmiş tasarımı gösteren 'geniş' testlerin ne kadar olduğunu gösteren bir metrik elde etmenizi sağlar. Bu, bir sprintten diğerine delta olarak daha kullanışlıdır, ancak fikir aynıdır - daha fazla bilgi edinmek için kod kapsamını diğer metriklerle birleştirin.


+1 İyi öneriler, özellikle Bloklar Kapalı / testlerin ve kod incelemelerinin # gibi. Zaten kod incelemeleri yapmamıza rağmen, testleri daha yakından incelemenin önemini vurgulamak faydalı olacaktır.
MickJ

2

İşte benim 2 sentim.

Son zamanlarda çok fazla ilgi gören birçok uygulama var çünkü yazılım geliştirmeye fayda sağlayabilirler. Bununla birlikte, bazı geliştiriciler bu uygulamaları körü körüne uygularlar: bir metodoloji uygulamanın bir algoritma yürütmeye benzer olduğuna ve doğru adımları uyguladıktan sonra istenen sonucu alması gerektiğine inanırlar.

Bazı örnekler:

  • % 100 kod kapsamı ile birim testleri yazın, daha iyi kod kalitesi elde edersiniz.
  • TDD'yi sistematik olarak uygulayın ve daha iyi bir tasarım elde edersiniz.
  • Eşli programlama yapın ve kod kalitesini artırın ve geliştirme süresini azaltın.

Yukarıdaki ifadeler ile temel sorun insanların bilgisayar ve yazma yazılımı bir algoritma yürütmek gibi olmadığını düşünüyorum.

Bu nedenle, yukarıdaki ifadeler bazı gerçekleri içerir, ancak işleri biraz fazla basitleştirir, örneğin:

  • Birim testleri çok sayıda hata yakalar ve kod kapsamı, kodun hangi bölümlerinin test edildiğini gösterir, ancak önemsiz şeyleri test etmek işe yaramaz. Örneğin, bir düğmeye tıklayarak ilgili diyalog penceresi açılırsa, diyalog penceresini açan bileşene button olayını gönderen tüm mantık basit bir manuel testle test edilebilir (butona tıklayın): üniteye ödeme yapar mı? bu mantığı test etmek?
  • TDD iyi bir tasarım aracı olsa da, geliştiricinin sorun alanı hakkında zayıf bir anlayışa sahip olması iyi çalışmaz (bkz. Örneğin bu ünlü yazı ).
  • İki geliştirici birlikte çalışabiliyorsa çift programlama etkilidir, aksi takdirde bir felakettir. Ayrıca, deneyimli geliştiriciler en önemli konuları kısaca tartışmayı ve ardından ayrı ayrı kodlamayı tercih edebilirler: her ikisinin de zaten bildikleri birçok ayrıntıyı tartışmak için hem sıkıcı hem de büyük bir zaman kaybı olabilir.

Kod kapsamına geri dönülecek.

Kod Kapsamı'nın neyin test edilmediğini bana söylediği ve bu alanlara odaklanmamıza yardımcı olduğu iddiasını satarak geri itebildim.

Belirli bir modül için% 100 kapsama alanına sahip olmanın değerli olup olmadığını davadan davaya karar vermeniz gerektiğini düşünüyorum.

Modül çok önemli ve karmaşık bir hesaplama yapıyor mu? Sonra her kod satırını test etmek istiyorum ama aynı zamanda anlamlı birim testleri (bu alanda anlamlı birim testleri) yazmak istiyorum.

Modül, bir düğmeye tıklarken yardım penceresi açmak gibi önemli ama basit bir görev yapıyor mu? Manuel test muhtemelen daha etkili olacaktır.

Bu milletlerin argümanı - ekip hızlı bir şekilde düşük kalite testleri oluşturarak tepki verecek ve böylece önemli bir kalite eklemeden zaman kaybedecektir.

Bence haklılar: sadece % 100 kod kapsamı gerektirerek kod kalitesini zorlayamazsınız . Kapsamı hesaplamak ve istatistik yapmak için daha fazla araç eklemek de yardımcı olmaz. Bunun yerine, kodun hangi bölümlerinin daha hassas ve kapsamlı bir şekilde test edilmesi gerektiğini ve hangilerinin daha az hataya açık olduğunu tartışmalısınız (bir hatanın birim testleri kullanılmadan daha kolay keşfedilip düzeltilebileceği anlamında).

Geliştiricilere% 100 kod kapsamı eklerseniz, bazıları mantıklı testler yazmak yerine yükümlülüklerini yerine getirmek için aptalca birim testleri yazmaya başlayacaktır.

herhangi bir önlem almadan nasıl garantili zaman ayırırsınız?

Belki de insan zekasını ve muhakemesini ölçebileceğiniz bir yanılsamadır. Yetkili meslektaşlarınız varsa ve kararlarına güveniyorsanız, "bu modül için kod kapsamını artırmak çok az fayda sağlayacaktır. Bu nedenle, üzerinde hiç vakit geçirmeyelim" veya "bu modül için ihtiyacımız olan" olabildiğince fazla kapsama alanı olarak, makul birim testleri uygulamak için bir hafta daha gerekiyor. "

Yani (yine, bunlar benim 2 sentim): bir süreç bulmaya çalışmayın ve kod kapsamı gibi tüm ekiplere, tüm projelere ve tüm modüllere uygun parametreleri ayarlamaya çalışmayın. Böyle genel bir süreci bulmak bir yanılsamadır ve bir tane bulduğunuzda bunun yetersiz olacağına inanıyorum.


Hepsi doğru ve ben zaten aynı fikirdeyim. Fark ederseniz,% 100 kod kapsamını desteklemiyorum. Betetet tekniklerini, araçlarını ve işlemlerini kullanarak değerini artırmakla ilgilidir. Ayrıca kod kapsamı ölçütlerini tam olarak anlamaya yardımcı olur (çoğu satır / ifade olarak kabul edilir). Mükemmel gönderiniz için +1.
MickJ

2

"ekip hızlı bir şekilde düşük kalite testleri oluşturarak tepki verecek ve böylece önemli bir kalite eklemeden zaman kaybedecek"

Bu sadece teorik değil, gerçek bir risktir.

Kod fazlalığı tek başına işlevsiz bir metriktir. Bu dersi zor yoldan öğrendim. Bir keresinde, metrikleri veya uygulamaları dengeleme durumu olmadan vurguladım. İstisnaları yakalayan ve maskeleyen yüzlerce test, iddia olmadan çirkin bir şeydir.

"bu tür kod kapsamı araçlarının ve bunlarla birlikte uygulanacak uygulamaların / işlemlerin bir kombinasyonu için öneri"

Diğer tüm önerilere ek olarak, testlerin kalitesini değerlendirebilen bir otomasyon tekniği vardır: mutasyon testi ( http://en.wikipedia.org/wiki/Mutation_testing ). Java kodu için PIT ( http://pitest.org/ ) çalışır ve karşılaştığım ilk mutasyon test aracıdır.

Belirttiğiniz gibi, kod kapsamı eksikliği yazılım kalitesi riski olarak kolayca tanımlanabilir. Kod kapsamının yazılım kalitesi için gerekli fakat yetersiz bir koşul olduğunu öğretiyorum. Yazılım kalitesini yönetmek için dengeli bir puan kartı yaklaşımı benimsemeliyiz.


1

Kod kapsamı, doğru oldukları için kesinlikle iyi bir birim testin kanıtı değildir.

Ancak, tüm birim testlerin iyi olduğunu kanıtlamanın bir yolunu sağlayamadıkları sürece (iyi bir tanım için gelebilecekleri her şey için), o zaman bu gerçekten bir sessizlik noktasıdır.


2
Konuşmayan noktalar tartışmalı olma eğilimindedir . (Sadece oradaki kelime oyununu seviyorum - yazımım düzeltildi).

1

Her zaman kod kapsamının Hawthorne Etkisine kolayca duyarlı olduğunu gördüm . Bu, "neden hiç yazılım metrikimiz var?" ve cevap genellikle projenin şu anki durumu hakkında bazı üst düzey anlayış sağlamaktır:

"ne kadar yakın yapacağız?"

"Bu sistemin kalitesi nasıl?"

"Bu modüller ne kadar karmaşık?"

Ne yazık ki, projenin ne kadar iyi veya kötü olduğunu söyleyebilecek hiçbir zaman tek bir metrik olmayacak ve bu anlamı tek bir sayıdan türetmek için yapılan herhangi bir girişim, mutlaka aşırı basitleştirecektir. Metrikler tamamen verilerle ilgili olsa da, ne anlama geldiğini yorumlamak çok daha duygusal / psikolojik bir görevdir ve bu nedenle muhtemelen farklı kompozisyon veya farklı alanlardaki problemler arasında genel olarak uygulanamaz.

Kapsam durumunda, genellikle kaba bir albiet, kod kalitesi için bir proxy olarak kullanıldığını düşünüyorum. Ve asıl sorun, oldukça karmaşık bir konuyu,% 100 kapsama sağlamak için sonsuz bir arayışta potansiyel olarak yararsız bir çalışma yürütmek için kullanılacak olan 0 ile 100 arasında tek bir tam sayıya kaymasıdır. Bob Martin gibi insanlar% 100 kapsama alanının tek ciddi hedef olduğunu söyleyecekler ve bunun neden böyle olduğunu anlayabiliyorum, çünkü başka bir şey keyfi görünüyor.

Tabii ki aslında kod temeli hakkında herhangi bir anlayış elde etmeme yardımcı değil kapsama almak için birçok yol vardır - örneğin toString () test etmek değerli mi? değişmez nesneler için ayarlayıcılar ve ayarlayıcılar ne olacak? Bir takımın sadece sabit bir zamanda başvurmak için çok fazla çabası vardır ve bu zaman her zaman mükemmel bir iş yapmak için gereken süreden daha az gibi görünür, bu nedenle mükemmel bir program olmadığında, yaklaşımlarla yapmak zorundayız.

İyi yaklaşımlarda faydalı bulduğum bir metrik Crap4J . Artık geçersizdir, ancak kolayca kendiniz taşıyabilir / uygulayabilirsiniz. Crap4J , daha karmaşık olan kodun (ifs, whiles, fors vb.) Daha yüksek test kapsamına sahip olması gerektiğini ima ederek kod kapsamını siklomatik karmaşıklıkla ilişkilendirmeye çalışır . Bana göre bu basit fikir gerçekten doğruydu. Kod tabanımda riskin nerede olduğunu anlamak istiyorum ve gerçekten önemli bir risk karmaşıklıktır. Bu aracı kullanarak kod tabanımın ne kadar riskli olduğunu hızlıca değerlendirebilirim. Eğer karmaşıksa, kapsama alanı yukarı çıksa iyi olur. Değilse ben kod her satırı kapalı almaya çalışırken zaman harcamanıza gerek yok.

Tabii ki bu sadece bir metrik ve YMMV. Size mantıklı gelip gelmeyeceğini ve ekibinize projenin nerede olduğu hakkında makul bir şekilde hissedilir bir his verip vermeyeceğini anlamak için zaman harcamanız gerekir.


Kapsamı hak eden kodu ve Crap4J bağlantısını seçmek için siklomatik karmaşıklık kullanmanın mükemmel önerisi için teşekkürler. Ben de corapura içine crap4j awesomeness sıkma hakkında konuşurken harika bir makale buldum - schneide.wordpress.com/2010/09/27/…
MickJ

0

Geri dönüp mevcut kodu kapsayan ileriye doğru en iyi yol olduğunu söyleyemem. Yazdığınız herhangi bir yeni kod veya değiştirdiğiniz herhangi bir kod için kaplama testleri yazmanın mantıklı olduğunu iddia ediyorum.

Hata bulunduğunda, bu hata nedeniyle başarısız olan bir test yazın ve testin yeşile dönmesi için hatayı düzeltin. Ne için yazıldığını testin yorumlarına yazın.

Amaç, testlerinizde beklenmedik yan etkilerden endişe duymadan değişiklik yapabileceğinize yeterince güvenmektir. Test edilmemiş kodun evcilleştirilmesine yönelik yaklaşımların iyi bir özeti için Eski Kod ile Etkili Çalışma konusuna göz atın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.