test odaklı geliştirme - Testleri kim yazmalı?


12

Başlangıçta, testi yazmak geliştiricinin görevidir, ancak birçok durumda / e-olgun geliştiricilerde bu vakaların% 80 kapsama alanı sağlamadığını fark ettim.
Geliştirici yerine belirli bir proje için TÜM testleri yazmaya adanmış bir KG ekibim var mı?
Bunun eksileri var mı?


2
TDD'nin tüm kodlar için tüm testleri yazdığı ve kodu yazdığı anlamına gelmediğini unutmayın. Bir terimdir; yine de pratik yaklaşım, testler ve ardından küçük iterasyonlarda kod yazmaktır; daha paralel bir şekilde yaklaşıyor. TÜM testleri vaktinden önce yazmak, yeniden düzenleme kaçınılmaz olarak yüzeye çıkacağı için zaman kaybıdır.
Aaron McIver

Yanıtlar:


19

Test Odaklı Geliştirmede, testler geliştirici tarafından yazılmalıdır. Aksi takdirde geliştiriciden başka biri geliştirmeyi yönlendirir.

Dolayısıyla, geliştirici olmayan bir kişiye test yazma işini verir vermez, bu kişi bir geliştirici haline gelir.

TDD'deki deneyimim, test kodunu yazmanın genellikle üretim kodunu yazmaktan daha zor veya daha zor olduğudur. Bu nedenle, iyi bir birim test / entegrasyon test kodu yazabilecek kaynaklarınız varsa, bu testlerin geçmesini sağlayan üretim kodunu yazmaları gerekir.


1
Beceri seti duruşundan benzer iki kişiniz varsa, TDD'ye testler ve kod arasında geçiş / geçiş yaparak bir çift programlama tarzında tartışmalı bir şekilde yaklaşabilirsiniz. Onlara test ediciler / programcılar / kod maymunları deyin ... dokunduğunuzda kişinin beceri seti ile ilgilidir.
Aaron McIver

Ve muhtemelen her dakika write_test-write_code-run_test yazdığınızda ilerleme hızınızı yok edersiniz.
Frank Shearar

7

KG'nin işi tamamen farklı türde bir test yapmaktır (yani kullanılabilirlik / entegrasyon testi). Kodda kullanılan teknolojileri gerçekten bilmek zorunda değiller.

Düşük kod kapsamı konusunda endişeleriniz varsa, geliştiricilerinizi disipline etmeniz gerekir. Örneğin, kod kapsamı artıncaya kadar yeni özellikler üzerinde çalışmayı durdurma. Bazı kuruluşlar, depolarında, açığa çıkarılan kodun teslim edilmesine izin vermeyecek bir ön taahhüt kancasına sahip olabilir.

Son olarak, 'saf' TTD'de, açık bir kod olmamalıdır (ilk önce testleri yazdığınızdan). Bununla birlikte, daha düşük kod kapsamının kabul edilebilir olduğu durumlar (insanlar tartışmasına rağmen) vardır. Bazıları, örneğin, POJO'ların alıcıları / belirleyicileri için testler yazmanın zaman kaybı olduğunu iddia ediyor.


2

bu davalar% 80 bile kapsama almıyor

Bu bir yönetim sorunu olabilir.

Veya ilgisiz olabilir.

İlk olarak,% 80 ila% 100 kapsama alanı arasındaki fark muhtemelen çok az fayda için çok maliyetlidir.

"Kapsama" her şey anlamına gelebilir. Kod satırları, mantık yolları, vb Sanırım kod satırları (mantık yolları değil) demek.

Bazı mantık yolları "muayene ile" oldukça iyi test edilmiştir. Kod açıktır, if-ifadesi yoktur, çok, çok düşük bir karmaşıklığa sahiptir ve muhtemelen ek bir teste ihtiyaç duymaz.

% 20 daha fazla test her zaman% 20 daha fazla kalite değildir.

İkinci. Bu bir yönetim problemi. Yönetim% 100 kapsama alanı istiyorsa,% 80 kapsama alanı "serbest bırakmaya yetecek kadar iyi" yerine% 100 kapsama alanı sağlayan bir ödül sistemi koymak zorundalar.

Daha fazla test yazmak için KG kullanıcıları eklemek çok yardımcı olmaz.

Daha fazla test yazmak için geliştiricilerin eklenmesi,% 100 test kapsamına ulaşmak için gerekli olan şeydir.


Kim% 100 kapsama alanı hakkında bir şey söyledi?
Eric Wilson

@FarmBoy: Soru,% 80 kapsama alanının yeterince iyi olmadığı anlamına geliyor. Yeterince iyi olan nedir? Olağan büyülü sayı% 100 kapsama alanı.
S.Lott

1
Ama koçum bana her zaman% 110 vermemi söyledi. Neden bu kadar kapsama gerek
duymuyorum

@Berin Loritsch:% 200 arkandayım.
S.Lott

1
@ İş: "Bazı KG kullanıcıları kod yazabilir". Sağ. Sonra geliştiriciler olurlar, bu iyi bir şeydir.
S.Lott

2

IMHO Birim testi bir KG süreci değildir. Daha çok gelişimi hızlandırmakla ilgilidir (geliştiriciler için geri besleme döngüsünü daraltarak). Bileşeni (başka bir geliştirici tarafından) bileşen kullanımına odaklanarak bileşeni (kişi olarak da bilinir) yazan kişi tarafından yapılmalıdır.

İşlevsel test, bir KG ekibi tarafından yapılabilecek ve yapılması gereken bir KG sürecidir. Bunlar geliştirici tarafından yapılabilir, ancak geliştirici bir kullanıcının uygulamayı nasıl kullanabileceğini bilmeyebileceğinden geliştirici olmayan bir kişi daha iyi olur.

Her ikisi de TDD tarzında yapılabilir.


2

TDD sadece test değil, aynı zamanda tasarımla da ilgilidir. Sadece testleri geçmek için kod yazmak genellikle daha küçük ve bakımı kolay koda yol açar. Testleri yazmak için başka bir kişiyi devrederseniz, iyi kod oluşturma sorumluluğunu da devredersiniz.

Ayrıca, kapsama alanının size kod kalitesinden ve etki alanı kurallarının karşılanıp karşılanmadığından bahsetmeyeceğini de unutmayın.


0

En az% 80 kapsama alanına ihtiyacınız varsa, birkaç şey yapmanız gerekir:

  • Geliştiricilerinize ne düzeyde kapsama sahip olduklarını belirlemek için ihtiyaç duydukları araçları sağlayın ve bunun elmalardan elmaya olduğundan emin olun. Kapsamı ölçmenin birden fazla yolu vardır.
  • Bu başarıyı gerçekleştirmek için bir ödül / teşvik sağlayın. Programcılar sadece ödeyeceklerini yapacaklar. % 50 kapsam, kaliteyi sağlamak ve tüm işleri yapmak için yeterince iyi ise, yapacakları şey budur.

Son olarak, amaçlanan yürütme yolları ile istenmeyen yürütme yolları arasında bir fark olduğunu anlayın . Test güdümlü kod yazma sürecinde, bir çift bağımsız if ifadesine ihtiyacınız olduğunu kanıtlamış olabilirsiniz. Sonuç olarak, potansiyel dört yürütme yolundan ikisi için testler vardır. Bir bağımsız if ifadesi ekleyin ve sekiz yürütme yolu potansiyeline sahipsiniz (yani katlanarak artar).

TDD'nin her potansiyel yürütme yolunu mutlaka öngörmediğini anlayın, bu yüzden tamamlanması için yazılması gerekebilecek ancak yazılmaması gereken birkaç test vardır, çünkü bu yolu test etmeye gerek yoktur . Kısacası, TDD kapsamı garanti etmez, ancak var olan kodun nedenini kanıtlamak için en az bir testin olduğunu garanti eder .

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.