TDD / Çok fazla genel gider / bakım yükü test ediyor mu?


24

Böylece, testin değerlerini gerçekten anlamayanlardan birçok kez duydunuz. Sadece işleri başlatmak için Çevik ve Test takipçisi oldum ...

Kısa bir süre önce, mevcut ekibin herhangi bir düzeyde birim testini uygulamadığı ve muhtemelen bağımlılık enjeksiyon tekniğini veya test modellerini / tasarımını vb. Hiç duymadığım bir üründe TDD'nin yapılması üzerine bir tartışma yazdım. kodu temizlemek için).

Şimdi, bu ürünün yeniden yazılmasından tamamen sorumluyum ve TDD tarzında denemenin, sadece bakım kabusu yapması ve ekibin bakımını yapması imkansız olacağı söylendi. Ayrıca, bir ön uç uygulaması olduğu için (web tabanlı değil), testlerin eklenmesi anlamsızdır, işletme dürtüleri değiştikçe (değişikliklerin elbette iyileştirilmesi anlamına gelir), testler eski haline gelecektir; Gelecekteki proje onları koruyamayacak ve düzeltmeleri için daha fazla yük olacak.

Şu anda herhangi bir test deneyimine sahip olmayan bir ekipte TDD'nin kulağa hoş gelmediğini anlayabiliyorum, ancak bu durumda benim iddiam etrafımdakilere uygulamamı öğretebiliyorum, ama dahası, TDD'nin daha iyi olduğunu biliyorum yazılım. Yazılımı TDD kullanarak üretmek ve tüm testleri bir bakım ekibine teslim etmekle bir kenara atmak istesem de, kesinlikle TDD'yi hiç kullanmamaktan daha iyi bir yaklaşım olabilir mi?

Hiç duymadığım bir ekip için çoğu projede TDD yapmaktan bahsettiğim için vuruldum. "Arayüz" düşüncesi ve garip görünen DI yapıları onları korkutuyor ...

Birisi lütfen bana TDD'yi satmaya çalışmanın ve insanlara yaklaşımımın çok kısa bir konuşması olanında yardımcı olabilir mi? Diz çökmeden önce şirkete / ekibe düşmeden önce genelde çok kısa bir tartışma pencerem var.


3
KOŞMAK! FLEE! Otomatikleştirilmiş testlerin neden uzun vadede hayatlarını kolaylaştıracağını anlayamayan herkesin kafa (lar) ını, nerede olduğunu bilmesi gerekir.
MattC

6
@MattC TDD! = Otomatik testler
Nemanja Trifunovic

@Nemanja Trifunovic: Uhh ... kim manuel testlerle TDD uygular? "Uygulamayı başlattım ancak tıklamanız gereken bir düğme yok !?" “Evet; bu kırmızı, yeşil, kırmızı olan kırmızı!”
Steven Evers

2
@SnOrfus: TDD'siz otomatik testler var. Bazı örnekler: otomatik entegrasyon testleri, regresyon testleri, stres testleri.
Nemanja Trifunovic,

2
@ Martin, ne yaptığınızı ve uzun vadede sizin için ne kadar iyi çalıştığını (ya da çalışmadığını) tartışan bir yorum yorumu (veya blog yazısı) ile ilgileniyorum.
StevenV

Yanıtlar:


36

TDD tarzında teşebbüs etmek, onu sadece bakım kabusu yapacak ve ekibin bakımı için imkansız hale getirecek.

Bu tartışmayı kazanamazsın. Bunu telafi ediyorlar. Ne yazık ki, sizin de gerçekleriniz yok. Sağladığınız herhangi bir örnek tartışılabilir.

Bu noktaya gelmenin tek yolu, daha düşük maliyetli olan bir koda sahip olmaktır.

Ayrıca, bir ön uç uygulaması (web tabanlı değil) olduğu için testler eklemek anlamsızdır,

Herkes bunu söylüyor. Ayrıca kısmen de doğru olabilir. Uygulama oldukça iyi tasarlanmışsa, ön uç çok az şey yapar.

Ancak, uygulama kötü tasarlanmışsa, ön uç çok fazla şey yapar ve test edilmesi zordur. Bu bir tasarım problemi, test problemi değil.

İş dünyası değiştikçe (değişikliklerle elbette iyileşme anlamına gelir), testler eski hale gelecektir, gelecekte projeye gelen diğer geliştiriciler bunları sürdürmeyecek ve düzeltmeleri için daha fazla yük getirmeyecektir.

Bu yukarıdaki ile aynı argümandır.


Argümanı kazanamazsın. Öyleyse tartışma.

"Bu ürünün yeniden yazılmasından tamamen sorumluyum"

Bu durumda,

  1. Yine de testler ekleyin. Ancak , gittikçe artan bir şekilde testler ekleyin. İlk önce yazılı sınava girmek için uzun zaman harcama. Biraz dönüştürün. Biraz test et. Biraz daha dönüştür. Biraz daha test et.

  2. Biri testin işe yarayıp yaramadığını ve neden bu kadar iyi gittiğini sorana kadar bu testleri kullanın.

Aynı tartışma yazdım (C ++ 'dan Java' ya) ve yapmamamı söylememe rağmen testleri kullandım.

Çok hızlı gelişiyordum. Elektronik sayfalarda gönderdikleri doğru sonuçların somut örneklerini istedim. E-tabloları unittest.TestCase'e (söylemeden) dönüştürdüm ve bunları test etmek için kullandım.

Kullanıcı kabul testindeyken - ve hatalar bulunurken - kabul testi sırasında bulunan problemleri kapsayacak şekilde elektronik tablolardan sadece örnekleri incelenmiş, düzeltilmiş ve genişletildi. Düzeltilmiş elektronik tabloları unittest.TestCase'e (bunları söylemeden) dönüştürdüm ve bunları test etmek için kullandım.

Neden başarılı olduğunuzu hiç kimse ayrıntılı olarak bilmek zorunda değil .

Sadece başarılı ol.


Orada çok ilham verici tepki S.Lott :). Bir şirket mimarı tarafından "gereksiz ek yük oluşturuyor" olduğumu söylemem korkutucu oldu. Projeyi kendilerine bilmedik bir şekilde geciktirmekte olduğumu görmedim, nihayetinde projenin geç gelmesi halinde, sadece yaptığım testte parmağı gösterip sözleşmeyi sonlandırabilirlerdi. Söylediğiniz gibi, daha sonra nasıl yardım ettiklerini ispatlayarak bunları gizlice sokmak doğru yoldur. Bir tartışma açısından kesinlikle haklısın, hiçbir gerekçem yok ve onlar da değil.
Martin Blore,

Ön uç neden çok fazla tasarım sorunu yaratıyor? Günümüzde AJAX gibi birçok teknoloji ön planda çok şey yapıyor.
卢 声 远 Shengyuan Lu

@ 卢 声 远 Shengyuan Lu: GUI "görünüşünü" test etmek zor. Yazı tiplerini ve renkleri test edebilirsiniz. Ancak, tarayıcı tuhaflıkları otomatik testlerle kesin yerleşim ve boyutların test edilmesini çok zorlaştırır.
S.Lott,

@ Martin Blore: "onlar da değil." Tam. Test etmenin bir şekilde sihirli bir şekilde risk ekleyeceğini söyleyen herkes delilik. Yine de test etmeniz gerekiyor - kaçınılmaz. İyi test edebilirsiniz (TDD kullanarak) veya kötü ve başıboş test edebilirsiniz. Fakir, tesadüf testi için planlama benim için daha riskli görünüyor. Ancak, "hayır" diyenler uygulamalı deneyime sahip olana kadar temel bir tartışma yoktur.
S.Lott,

5

TDD'nin gerçek hayattaki değerini göstererek bu kişileri (eğer varsa) pratik bakış açısına ikna edebilirsiniz. Örneğin, bazı yeni böcekleri örnek alarak ve bu böceğin bir daha asla görünmeyeceğinden emin olan bir birim testinin nasıl yapıldığını gösterme. Ve sonra elbette benzer böceklerin tüm sınıfının ortaya çıkmasını önlemek için bir düzine daha fazla birim testi yazın (ve hatta belki de kodda bazı daha uyuyan böcekleri açığa çıkardığını bile bilir).

Eğer bu kısa vadede işe yaramazsa, TDD yaparak ve birim görevlerinizi özenle özenle yazarak, bunun üzerinde daha uzun süre çalışmanız gerekir. Ardından, farklı geliştiricilerin (takım arkadaşlarınızın yabancılaştırılmasını engellemek için anonim)) kod oranlarını ve farklı geliştiricilerin (görevinizde mümkünse mümkün olması durumunda) hata oranlarını karşılaştırmak için (eğer mümkünse mümkünse) yarım yıl sonra bazı basit istatistikleri derleyin. Kodunuzda diğerlerinden daha az hata bulunduğunu belirtebilirseniz, hem yönetime hem de diğer geliştiricilere satmak için güçlü bir noktaya sahip olabilirsiniz.


Bu harika bir fikir Peter, bunun için teşekkürler. Şu andaki projem bir test ekibine sahipti, bu yüzden dönüm noktası sürümlerinde vb. Bulunan böcekleri yakalamak oldukça kolay olurdu
Martin Blore,

3

Bu konular hakkında pratik olmak zorundasınız, TDD teoride olması gereken güzel bir şey, ancak eklenen her şey için testlerinizi güncellemediğiniz sürece, bunun üzerinde küçük bir nokta var - hiç kimse kırıldığını bildiren bir test yapmak istemiyor Testin güncellenmediği zaman kodu! Sonuç olarak, bunları yapmak çok masraflı olabilir - bu kod üzerinde çalışan tek kişi siz değilsiniz.

Müşterinin bir test ekibi var. Peki, test yükünü geliştiriciden test edicilere kaydırmakta hiçbir sorun yok - sonuçta onlar için oradalar ve testlerinde hata buluyorlarsa (belki de çok fazla otomatik test araçları) o zaman sizin seviyenize birim testleri yazmak için küçük bir nokta var. Hataları bulmak biraz daha uzun sürecek, ancak testlerinizin uygulayamayacağı sinir bozucu "entegrasyon" hatalarını bulacaklar.

Muhtemelen bu sebeple ünite testlerine aldırış etmiyorlar.

Son olarak, TDD yeni bir şey, bir çocukken hiç test etmedik ve işe yarayan bir kod yazdık. Birim testi bazı insanların kendilerini sıcak ve bulanık hissetmelerini sağlar, ancak bu kesinlikle doğru kod için bir gereklilik değildir.

PS. Soyutlama katmanlarını eleştirdiğiniz, sorularınızı başka görüyorum ve burada DI yapıcılarının eksikliğini eleştiriyorsunuz! Kararını ver :)


2

Her şey koyduğunuz kadar hızlı değiştiğinden, onlara Regresyon Testi için kullanılacağını açıklayın. Bu, yeni hatalar ortaya çıktığında çok fazla baş ağrısına neden olacak, çünkü birileri 10 yıl önce yazılan bir sorunu çözmek için yazılan bir kod satırını kırdığı için, yalnızca sistem saati açıksa çağrılan belirli bir işlevin her 10.000.000 işleminden 1'inde oluşan bir sorunu çözdü. İstemci, sunucu sistem saatinden 3 dakikadan daha fazla bir fark var. Onlara, buggy yazılımı nedeniyle kaç müşteriyi kaybedebileceklerini sorun.


2

Geliştirme sırasında bir hata bulmanın X, 10X testi ve 100X dağıtımından sonra olduğunu belirtin. En azından belirli bir modüle TDD uyguladığınız bir pilot test yapmanıza izin verip vermeyeceklerini görün, ardından geliştirildikleri, test edildikleri, dağıtıldıkları ve desteklendikleri diğer modüller ile yapılan karşılaştırmaları takip edin. Yeterli veri verildiğinde, TDD modülünde kod üretmek için daha az çaba harcandığını gösterebilmelisiniz. İyi şanslar.


2

Evet, testleri sürdürmek bir yüktür. Bunları güncellemek, test verilerinizi güncellemek: tüm bunlar zamanınızı alıyor.

Alternatif - şeyleri manuel olarak test etmek, gerileyen böcekleri birbirine karıştırmak, saniyeler içinde kodunuzun çalıştığını söyleyememek - çok daha fazlaya mal oluyor.


2
Bunun TDD'yi zaman kaybı ve gereksiz ek yük olduğunu iddia eden nay-söyleyiciler için yapılabilecek en önemli noktalardan biri olduğunu düşünüyorum. TDD'nin zaman harcaması değil. Büyük siparişlerin gelecekteki maliyetlerini önleyen bir yatırım olduğu gerçeği
sara

2

Test iyi, fakat taşıması iyi bir yük. Öncelikle bazı işler yapmak daha iyidir; bu, bazı üretim sorunları olduğunda veya göç sırasında zaman kazanması için iyi bir zaman sağlar. Küçük bir yük olsa bile her zaman test yapmak isteyeceğim ama bu yükü taşımak istiyorum.

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.