Normal bir “fonksiyonel kod satırı” ile “kod satırı test” oranı nedir?


27

TDD yaklaşımında oldukça yeniyim ve ilk denemelerim, 1 satır işlevsel kod yazmanın yaklaşık 2-3 satır test kodu yazmak olduğunu söylüyor. Bu yüzden 1000 LOC yazacak olsam, testler dahil tüm kod tabanı ~ 3500 LOC gibi olacak.

Bu normal mi kabul edilir? Yazdığınız koddaki oran nedir?


8
Yeap, TDD pahalı bir etiketle geliyor!
EL Yusubov

6
2-3X numaranız en iyi ihtimalle muhafazakardır , C # / Java, Python / Ruby gibi şeyler için 4-5X'e daha yakın olabilir, Erlang'ın 1: 1'e yakın olması gibi 2-3X'e yakın olabilir. TDD hakkında ne kadar dogmatik olduğunuza bağlı olarak , ne kadar dogmatik olursa, bu oranlar o kadar büyür!

6
@tomwrong: Kent'in kitabında Ward, korkun can sıkıntısına dönüşene kadar testler yazman gerektiğini belirtir.
herby

4
@ElYusubov: Bunun "pahalı" olduğunu kabul etmiyorum. Öyle görünüyor ki hala LOC’lerde iş sayımı yapanlar için. Ancak fiyat LOC'de değil, para ve piyasaya sürülme süresi içinde. Ve orada, TDD diğer herhangi bir makul gelişme sürecinden daha pahalı değildir.
herby,

5
Beyler, cevap gönderme yerine neden yorum yazıyorsunuz? Yazdıkların mantıklı.
Andrey Agibalov

Yanıtlar:


18

TDD ile 1: 3 normaldir.

Tecrübelerimden ve diğer alıntılardan da hatırlıyorum.


12
... ne alıntılar?
TehShrike

... belli belirsiz hatırla ... Nerede olduğunu hatırlamıyorum (belki Kent Beck'in TDD'sinde Örnek olarak, belki de c2.com'da bir yerde). Yine de, üretim kodundan üç kat daha fazla test kodunun tamam olduğunu anlamıyorum.
herby

Vay, benim tecrübemde de aynı şekilde. (Şu anda cloc'un sonuçlarına bakıyorum ve bu oranda herhangi bir yazı bulmak için google'ı aradım)
Nikolay Tsenkov

9

Farklı kodlama stilleri ve dillerine göre farklılıklar vardır. Ancak, kullandığınız dile bakılmaksızın en büyük değişiklik sizsiniz.

Robert Martin bir keresinde şöyle dedi:

“Testler daha belirgin hale geldikçe, kod daha genel hale gelir.”

Bu beni düşündürdü. Daha spesifik testler daha fazla test kodu anlamına gelir. Daha genel üretim kodu daha az kod anlamına gelir; bu nedenle kod ilerledikçe test / kod oranları yükselmelidir.

Ama bekleyin, bu da iyi değil. Bazı özel durumlarda, örneğin belirli bir algoritmayı tanımladığınızda, birkaç "if" ler, bir süre ve belki 2-3 yinelemeler içeren yalnızca 6-10 kod satırı olabilir. Size söyleyebilirim, bu kod muhtemelen 100 satırdan daha fazla test koduna sahip olacaktır.

Gerçek bir projede, birkaç algoritmadan daha büyük bir şey varsa, test / kod oranı 1: 1 ile 2: 1 arasında olmalıdır. 2: 1'in üzerine çıkarsa, yeniden yapılandırılması veya silinmesi gereken testlerin (veya belki de test edilmesi zor olan kodun) kokusu vardır. Üretim kodunuzda yaptığınız testlere her zaman aynı miktarda bakım ve yeniden bakım yatırımı yapmanız gerekir.

Her neyse , sorunuza en iyi cevap belki de "Döngüsel Karmaşıklık" dır . Metodunuzun siklomatik karmaşıklığı ne kadar yüksek olursa, tüm vakaları kapsayacak şekilde katlanarak daha fazla test yapmanız gerekir.


3

Oran, yönteminizin boyutuna bağlı olarak değişecektir. Yöntemlerinizin boyutu programlama stiline, dile ve problem alanına göre değişecektir.

Yöntemleriniz kısaysa 3: 1 makul olur. Yöntemleriniz uzunsa, 3: 1 yüksek taraftadır.

Yani, sorunuzu cevaplamak için, bağlıdır. :-)


Bu "yöntemler uzun" derken ne demek istediğine bağlı. Kafamda yarattığı görüntü, metotların gereksiz uzun olması, çok fazla iş yapması ve çok fazla sorumluluk almasıdır (genellikle çok fazla parametreye sahip). Bu durumda, böyle bir yöntemin testlerle kapsanması için orantılı olarak daha fazla kombinasyona ihtiyacı vardır, bu yüzden oranın çok fazla değişeceğini sanmıyorum ...
herby

Bir an için bir test ayarlayabildiğinizi varsayalım, test edilecek yöntemi çağırın ve sonucu üç kod satırında kontrol edin. Test ettiğiniz yöntem bir satır uzunluğundaysa (Scala'da olduğu gibi), üretim kodu rasyon testiniz 3: 1'dir. Yöntem altı satır uzunluğunda ise 1: 2'dir. Altı satır o kadar uzun değil.
Jon Strayer

2

Kritik yazılım uygulamaları için normal oran, her 10 fonksiyonel LoC için bir günlük testtir.

Ve bu, testle ilgili değil, özelliklerle ilgili olan TDD'yi saymaz.


1

Test kodumun boyutu genel olarak 'gerçek' kodun yarısı kadardır. Aksi halde yapmak, testlerinizin çok karmaşık olduğunu ve / veya kodunuzun test edilmesinin zor olduğunu ve / veya kodunuzun çok yoğun / karmaşık olduğunu gösterir.

Ya da sadece çok fazla test yapıyorsunuz ve zamanınızı azalan getirilerle harcıyorsunuz.

Ayrıca bkz. "Ünite testi ne zaman uygunsuz veya gereksizdir?"


-1

Oranım 2-1 ila 10-1 arasındadır (test edilecek kod). Test etmenin uygulama değil değer / davranış ile ilgili olduğundan emin olun.

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.