Toplu işleme için TDD: Nasıl yapılır?


14

Ben RoR, vb için "kırmızı / yeşil / refactor" gibi iyi.

Günlük işim, python ve diğer özel araçlardaki üçüncü taraflardan çok büyük dosyaları toplu işlemeyi içerir.

Bu dosyaların özniteliklerindeki karmaşa yüksek, bu nedenle oldukça sık uygulanan birçok düzeltme / geliştirme var.

Bilinen bir test verileri grubu aracılığıyla beklenen sonuçlarla regresyon testi mevcut değildir. Elde kodlanmış yeni test senaryoları ile son partiye karşı en yakın şey çalışıyor, havaya uçmadığından emin olun, sonra verilerin hala iyi görünüp görünmediğini görmek için spot kontrol ve istatistiksel testler uygulayın.

S >> TDD ilkelerini bu tür bir ortama nasıl taşıyabilirim?


1
Verileri mi, kaynak kodunu mu, yoksa her ikisini birden mi?
rwong

Yanıtlar:


5

Sadece bir FYI: Birim testi TDD ile eşdeğer değildir. TDD, birim testinin bir unsur olduğu bir süreçtir.

Bununla birlikte, birim testi uygulamak istiyorsanız, yapabileceğiniz birkaç şey var:

Tüm yeni kodlar / geliştirmeler test edildi

Bu şekilde, var olan her şeyi gözden geçirmek ve ünite test etmek zorunda kalmazsınız, bu nedenle ünite testini uygulamanın ilk kamburluğu çok daha küçüktür.

Tek tek veri parçalarını test edin

Büyük miktarda veri içerebilecek bir şeyi test etmek, test kapsamında birçok uç durum ve boşluklara yol açabilir. Bunun yerine, 0, 1, birçok seçeneği düşünün. 0 öğeyi, 1 öğeyi ve birçok öğeyi içeren bir 'parti' test edin. 1 eleman durumunda, o elemanın verilerinin içinde olabileceği çeşitli permütasyonları test edin.

Oradan, kenar kasalarını test edin (üst sınırlar tek tek elemanların boyutuna ve partideki elemanların miktarına). Testleri düzenli olarak gerçekleştirirseniz ve uzun süren testleriniz varsa (büyük partiler mi?), Çoğu test koşucusu kategorilere izin verir, böylece bu test senaryolarını ayrı ayrı (gecelik?) Çalıştırabilirsiniz.

Bu size güçlü bir temel sağlayacaktır.

Gerçek verileri kullanma

Şu anda yaptığınız gibi önceden kullanılan 'gerçek' verileri beslemek kötü bir fikir değildir. Belirli arıza noktalarını hemen bilmeniz için iyi biçimlendirilmiş test verileriyle tamamlamanız yeterlidir. Gerçek verilerin işlenememesi durumunda, toplu işlemin sonuçlarını inceleyebilir, hatayı çoğaltmak için bir birim testi üretebilir ve ardından yararlı regresyon durumlarıyla kırmızı / yeşil / refactor'a geri dönebilirsiniz.


3
Gerekirse test verilerini uygun bir şekilde anonimleştirdiğinizden emin olun.
Frank Shearar

1

Diğer ortamlarla aynı.

Mantığı en küçük ayrıntı düzeyine ayırın. Bu işlem için size bir dizi kural verecektir, her kural işleminiz için gerekli olan bir mantık öğesini kapsayacaktır.

Ardından her kural için bir test yazın. Bu testler başarısız olacaktır. Testi düzeltmek için kodu yazın.

Bahsettiğiniz bilinen test verileriyle regresyon testi, birim test değildir. Bu entegrasyon testi olacak, bu TDD'den farklı. TDD ile bir dosya yükleyebileceğinizi test etmek için tek bir testiniz olabilir, ancak genellikle başka hiçbir test aslında test verileri içeren bir veri dosyasının yanına gitmez. Bunun yerine, alaycı bir nesne kullanarak belirli bir kuralı uygulamak için gerekli verileri simüle edersiniz.


1

İyi bir yazılım stratejisiyle başlayın, ardından TDD'yi uygulayın.

(Feragatname: "Yayık" veya TDD veya her ikisini de yanlış anlamış olabilirim.)

İşte "kirli veri" toplu işleme için önerilen benim strateji: Specify-Triage-Execute.

  • Verilerin spesifikasyonlarını katı ve dar bir şekilde taslak haline getirin, ancak gelen verilerin çoğunluğunu (örneğin,% 80 veya daha fazla) kapsayacaktır. Bu Spesifikasyonu Arayın 1 .
  • Bir kaydın Özellik 1 ile uyumlu olup olmadığına karar veren bir Triyaj modülü (isterseniz TDD) geliştirin.
    • Modülün çok hızlı çalıştığından emin olun.
    • Modül true / false döndürmelidir: ya tüm kuralları karşılar ya da sağlamaz.
  • Spesifikasyon 1'i karşıladığı bilinen bir kaydı ayrıştıran ve müşterilerinizin ihtiyaç duyduğu tüm görevleri yerine getiren bir Execute modülü (isterseniz TDD) geliştirin.
  • Triage 1'i gelen tüm verilere uygulayın .
    • Sonuç, her kayıt için bir boole değeridir. Bu temel olarak gelen verileri ayırır: Spesifikasyon 1 veya Bilinmiyor.
    • Müşteri tarafından ihtiyaç duyulduğunda, Özellik 1 verilerine Yürütme 1'i uygulayın .
  • Kalan verilerin% 80'ini kabul etmek için Şartname 1'in kurallarını gevşetin. Bu Spesifikasyonu Arayın 2 .
  • Triyaj 2'yi geliştirin ve 2'yi çalıştırın . Spesifikasyon 1'i karşılamayan verilere uygulayın.
  • Kalan veriler her gün manuel olarak işlenebilecek kadar küçük olana kadar gerektiği kadar seviye tekrarlayın.

Verimlilik tidbit:

Bir kayıtla ilişkili tüm Triyaj sonuçlarını (geçmiş veya geçerli) kaydedin. Son çalıştırmadan bu yana Triyaj modülleri değiştirilmezse, eski verilerde yeniden çalıştırılması gerekmez.

"TDD yapmadan önce ne inşa etmek istediğinizi bilmek zorundasınız" tidbit:

Belirle-Triyaj-Yürütme gereksinimleri her düzeyde yönetilebilir tutmak için bir yoludur ve gelecekteki büyüme sağlar.

(Bu üç adım için standart doğru şartları biliyorsanız, lütfen bize bildirin, cevaplarımı düzenleyeceğim.)

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.