Test odaklı gelişim - beni ikna edin! [kapalı]


30

Bazı insanların test odaklı gelişimin büyük destekçileri olduğunu biliyorum. Geçmişte birim testler kullandım, ancak yalnızca kolayca test edilebilecek veya muhtemelen doğru olacağına inandığım işlemleri test etmek için kullandım. Komple veya tam komple kod kapsamı sesleri çok zaman alacak gibi geliyor.

  1. Test odaklı geliştirmeyi hangi projeler için kullanıyorsunuz? Sadece belirli bir büyüklüğün üzerindeki projeler için mi kullanıyorsunuz?
  2. Kullanmalı mıyım yoksa kullanmamalı mıyım? Beni ikna et!

3
Sadece testler yazmakta zorlanıyorum. Her şeyi manuel olarak doğruladığım noktaya geldi.
TheLQ


1
@TheLQ ... müşterime uçuş kontrol yazılımımın tamam olduğunu söylemeyi deneyin çünkü bir manuel kod incelemesi yaptım :-)
Andrew

Yanıtlar:


32

Tamam, TDD'ye bazı avantajlar:

  1. Daha fazla testle sonuçlanacağın anlamına geliyor. Herkes sever sahip gibi testler, ancak birkaç kişi yazarken onları. Geliştirme akışınıza test yazısı oluşturmak, daha fazla testle sonuçlanmanızı sağlar.
  2. Bir sınava yazmak, tasarımınızın test edilebilirliğini düşünmeye zorlar ve test edilebilir tasarım neredeyse her zaman daha iyi bir tasarımdır. Bunun neden böyle olduğu tamamen net değil, ancak benim deneyimim ve çoğu TDD misyonerinin tecrübesi buna dayanıyor gibi görünüyor.
  3. TDD'nin yazması biraz daha uzun sürmesine rağmen, daha yüksek kalite kodu ve dolayısıyla düzeltilecek daha az hata nedeniyle daha iyi bir yatırım getirisi olduğunu söyleyen bir çalışma .
  4. Yeniden yapılanmaya karşı size güven verir. Her şeyi kırma konusunda endişelenmeden bir sistemi değiştirebilmek harika bir duygu çünkü ünite testleriyle oldukça iyi kaplanmış.
  5. Neredeyse hiçbir zaman tekrarlanan bir hata elde edemezsiniz, çünkü bulduğunuz her şey düzeltmeden önce bir test yaptırmalıdır.

İkna olmak istediniz, bu yüzden bunlar faydalardı. Daha dengeli bir görünüm için bu soruya bakın .


10
"test edilebilir tasarım hemen hemen her zaman daha iyi bir tasarımdır" - Bunun temel sebebinin test edilebilir kodun genellikle modüler ve basit bağımlılıklara sahip olması olduğunu düşünüyorum.
Skilldrick

"Herkes testlerden hoşlanır, ancak birkaç kişi bunları yazmayı sever." - bu gerçekten doğru mu? İyi testleri düşünmek, test edilen yazılımı açmayı denemek eğlenceli olacak gibi görünüyor.
DarenW

3
@ DarenW- Sizden haberim yok, ama işleri kırmak yerine çalışmasını tercih ederim. Birinin dedi yapar önerdiğiniz şekilde düşünmek hella-değerli bir test olduğu gibi. Dünyada yeterince kaliteli KG personeli yok.
Fishtoaster

Lnk'de bu PDF'ye 403 Yasaklı hata alıyorum
Neil N

Oldukça emin olduğum şey için güncellendi (aynı birkaç yıl önce) aynı pdf idi
Fishtoaster 19

11

Robert C. Martin başlangıçta bu noktaları ortaya koyuyor - Onları kendi deneyimlerimden destekleyebilirim:

  • Giderken otomatik olarak bir birim test regresyon test paketi oluşturacaksınız.
  • Kendinizi bir deliğe kodlarsanız, hata ayıklamak için zaman harcayamazsınız, kodunuzu son hata ayıklayıcısını açmak yerine son testin yapıldığı noktaya geri getirmek daha kolaydır.
  • Birkaç dakikada bir, kodunuzun çalıştığını doğrularsınız - bunların hepsini (veya en azından TDD yapıyorsanız, testlerin kapsadığı davranışların tamamı).

Üretim veya oyun kodu üzerinde çalışıp çalışmama konusunda TDD'yi her zaman yapıyorum; Bugünlerde başka bir şekilde kodlamayı zor buluyorum.


6

(Feragatname: Herhangi bir UI işlemi yapmıyorum, bu nedenle UI'ler için TDD'yi tartışamıyorum.)

TDD'yi yaptığım her şeyde, önemsiz uygulamalardan tüm SIP yığınlarına kadar kullanıyorum.

TDD'yi devraldığım eski bir PHP web sitesinde kullanmıyorum. Test yapmamak çok acı verici. Ayrıca, sitenin parçalarını kazara kırmaktan çok rahatsız edici buluyorum çünkü bana bir şey kırdığımı söyleyen bir regresyon test takımım yok. Müşterim benim için (a) kod temeli için testler yazmak ve (b) sürecinde ilk etapta kodu test edilebilir hale getirmek için bir bütçem yok, bu yüzden sadece uygulamaya koyuldum.


1
  • Müşteriniz ne zaman daha etkili bir şekilde tedarik edilebiliyorsa (testlerle iyi bir şekilde ilişki kurabilecekler - ve en azından proje sonu tartışmasını kesecekler)
  • Ne zaman daha uzun sürerse, ortak geliştiricilerin, test oluşturma çabasını göstermekten ziyade kodun HER ŞEYİ hakkında bilgi sahibi olmalarını sağlayın;

-1

Ne? Olumsuz cevap yok !?

Feragatname: Ünite karşıtı testler değilim. İnsanlar TDD deyince, kod yazmadan önce kod yazmadan önce test yazdıkları hastalık sondaj versiyonunu kastettiklerini farz ediyorum.

Tartışırdım:

  • Bir etkinleştirici. Eğer regresyon sorunlarını yakalamak sizin için çok büyük bir sorunsa, baştan itibaren tam otomatik TDD'nin değersiz görünmesi, yazdığınız her son kod için testler yazmak, asıl sorunu gözardı etmenize yardımcı olabilir.

  • İnsanların asıl sorunu görmezden gelmelerine yardımcı olur. Bir hatayı düzeltirken, iki pop-up'ın daha patladığı bir köstebek oyununa dönüşür, mimari eserler. Odak. Gerçek soruna odaklan. Köstebekleri vurulmadan önce görmek güzeldir, ama ilk başta orada olmamanız gerekir.

  • Çok zaman yiyor. Ara sıra böceklere çarptım. O kadar çok çarpmadım ki, bir testle yazdığım her yeni şeyi ön eklemeye değecek gibi görünüyor. Olması muhtemel sorunları yakalayın. Hataları kolayca teşhis edilebilecek şekilde ele alın. Doğrula. Üst üste gelme / tıkanma noktalarında test edin. Ancak yüksek sesle ağlamak için, her son alıcıyı ve pastayı, muhtemelen ilk etapta olması gerekmeyen bir şeye test etmeyin.

  • Tasarım Odaklılığı: İyi bir geliştiricinin bile teste odaklandıklarında yapabilecekleri en iyi kodu yazması kesinlikle mümkün değildir. İyi bir tasarıma sahip olmanın tek yolu gibi gözüküyorsa, yukarıdakileri “asıl soruna odaklanmak” ile ilgili görmenizi tavsiye ederim.

  • Makro-Tasarım Başarısızlığı: Şu anki işimdeki kod temeli, bir kereden fazla kullanılmayan arayüzler ve temel DRY ilkesinin ağır ihlali, insanların sadece test çerçeveleri için yazarken ve test ederken test ettiğimde anlamaya başladığım anlamaya başladı. genel. Test, aptal bir mimariye yol açmamalıdır. Hayır, gerçekten, 20 dosyayı kopyalayıp yapıştırma ve daha sonra yalnızca ikisinde önemli değişiklikler yapma konusunda bir şekilde daha ölçeklenebilir veya kurumsal olarak değerli olan hiçbir şey yoktur. Buradaki düşünce endişeleri ayırmak, onları ortada bölmemek. Kaba ve anlamsız soyutlama size şimdiye kadar% 95 kapsama sahip değil daha fazla mal olacak.

  • Gerçekten popüler ve pek çok insan gerçekten, gerçekten hoşuna gidiyor. Bu, en azından ikinci bir tahmin yapmak ve / veya benimsemeden önce herhangi bir teknolojinin saçmalıklarını atlatmak için yeterli bir neden değilse, size biraz paranoya öğrenin.


Bah downvotörler içeriği sadece değil, Q başlığını okudular.
Erik, 08:

1
Oy verdim ve hepsini okudum. Belirttiğiniz dezavantajların çoğu aslında en temel TDD kitaplarında ele alınmaktadır. TDD, "tasarım hakkında düşünebildiğiniz ve asla düşünebildiğiniz kadar studpi WET un-SOLID testi yazmayın" anlamına gelmez. Bu cevabın TDD’nin haksız bir şekilde yanlış beyanı olduğunu düşünüyorum. Uygulamanız bir karmaşaya dönüşürse, çünkü insanlar korkunç tasarımları kopyalar ve uygularlarsa, bu bir tasarım konusudur. TDD sadece bir iş akışıdır ve iş akışını ele almıyorsunuz.
sara,
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.