BDD, orta ve büyük ölçekli projeler için ölçeklenebilir mi?


22

BDD (Behavior Driven Development) hakkında okuduğunuz her Web sitesinde, gereksinimlerinizi tanımlamanın ne kadar açık ve kolay olduğunu gösteren çok basit ve güzel bir örnek bulacaksınız. Ancak bu süreci büyük bir üründe (hesap makinesi örneği değil) uygulamaya çalışmak, işlerin oldukça karmaşık ve okunamaz hale gelebileceğini (veya elde edebileceğini) gösterdi; Özellikle daha sonraki bir zamanda taleplerin değiştirilmesi, bunun için Entegrasyon testlerini düzeltmek için çok fazla çalışma anlamına gelir.

Merak ediyorum, BDD gerçekten buna değer mi? Diğer tekniklerin yapmadığı bir sorunu çözüyor mu?


Çok kötü, bence BDD'nin son zamanlarda daha popüler hale geldiğini düşünüyoruz.
DD

1
Yeterince temsilcisi olan herkes yeniden açılmasını önerebilirse, iyi adamlar olur.
DD

Tekrar
açardım

1
Kapalı olduğu için kabul ettim, bu yüzden daha fazla cevabın mümkün olmadığını biliyordum, ancak bu konuda daha fazla tecrübe raporuna gerçekten karıştığım için, şu anda kabul etmeyeceğim
DD

2
tamam harika :) Bence soruyu da biraz düzenlemelisin. Bence sorunuz BDD'nin büyük projelerde ölçeklenebilirliği ile ilgili. "BDD gerçekten bu kadar iyi mi?" Özneldir , "BDY, büyük projelere iyi ölçekleniyor mu" biraz daha objektif.
MattDavey

Yanıtlar:


6

Ben en iyi kaynaklardan biri düşünüyorum BDD olan Örnek tarafından Şartname kitapta. BDD testlerinin nasıl düzenleneceği ve gereksinimler değiştiğinde çok fazla yeniden çalışmaya neden olmaması için nasıl yazılması gerektiği hakkında çok şey anlatılmaktadır.

Eğer testlerinizde işler karmaşıklaşır veya karmaşık hale gelirse, muhtemelen yanlış bir şey yapıyorsunuz demektir. BDD ve TDD ile aynıdır. İyi testler yazmak zordur ve bunu öğrenmek aylar alır.


3
TDD aynı değildir, önceden tanımlanmış bir birimin test edilmesi, kod kokusu olan çok büyük birimleriniz olmadığı sürece asla bu karmaşıklığı elde edemez, ancak Entegrasyon testlerinin birden fazla birim arasındaki etkileşimi test etmesi beklenir, toplam işlevsellik, bu karmaşıklığın artmasına izin verir. Gereksinimlere göre doğrusal, hala daha küçük parçalar halinde kıramazsınız, çünkü yapılan testlerde artık inegtrasyon testi yapılmayacaktır.
DD,

Bazı karmaşık BDD testlerini ekleyebilir ve daha basit hale getirmek için neler yapılabileceğini görebilirim.
Piotr Perak

O kadar kolay değil, burada İngilizce dilde olmayanlar, onları kolayca çevirmek zorunda kalacağım bir ingilizce tercüman bulabilirsem, ekleyebiliyorum, ama yine de arkasındaki kod da bu olabilir. buraya bir yayında eklenemeyecek kadar büyük.
DD,

Bu neden indirildi? OP'nin sorunlarını çözmesine yardımcı olacak harika kaynaklar verdim.
Piotr Perak

bu ben değildim, telafi etmek için + 1 vereceğim, ancak bugün sadece 30 saatimi kullandığım için bunu sadece 14 saatte yapabilirim.
DD,

5

BDD'nin odağının konuşmalar olduğunu fark etmenize yardımcı olabilir . BDD gerçekten bazı regresyon testlerini güzel bir yan ürün olarak sağlayan bir analiz aracıdır.

Konuşmada her seviyede senaryo kullandım; Bir sürümün iyi alınmasının muhtemel olup olmadığını görmek için farklı paydaşları belirlemek , bir modül veya sınıfın nasıl davranması gerektiğine karar vermek .

Bunu kolaylaştırmak için önerebileceğim birkaç ipucu ve püf noktası var.

Daha önce hiç yapmadıysanız, değişecek.

Etki alanı veya işletme için yeni olan herhangi bir şey değişebilir. Senaryolardan bahsederken, onları sorgulayarak ve iş "Ah, emin değilim" diyorsa, bu alanda olduğunuzu fark edebilirsiniz . Bu, BDD'yi yapmaya çalışmaktan vazgeçmenin ve daha hızlı geri bildirim almak için işin istediklerini elde etmelerine yardımcı olmak için bir şeyler dağıtmanın iyi bir işaretidir. Fikirler istikrara kavuştuğunda, senaryolar geriye dönük olarak yazılabilir.

Tüm projelerin yeni bir yönleri var, yoksa bunları yapmazsınız.

Daha önce yaptıysanız, sıkıcı.

Yeni, farklılaştırıcı yönlerin yanı sıra , projeler genellikle kendilerine zaten yapılanlara benzeyen bazı metalaştırılmış yönlere sahiptir. Örneğin, yeni bir cep telefonu üretiyor olsaydım, yine de arama yapması gerekirdi. "Telefon görüşmesi yap", tanınmış bir senaryodur, konuşmamız gerekmeyecek. Benzer şekilde, "giriş" veya "kullanıcı kaydı" gibi şeyler sıkıcıdır.

Mümkün olan yerlerde, bunlar için kütüphaneler kullanın ve sonra etraflarına senaryolar yazmak zorunda kalmazsınız. Ayrıca, önce diğer bitleri yapın - önceden giriş yapmış bir kullanıcıya sahip olun ve ne için giriş yaptığını hesaplayın . Bu alanların değişmesi muhtemel değildir, bu nedenle manuel testlerden yine de kurtulabilirsiniz.

Birisi daha önce yapmışsa, senaryolarla konuşmak yardımcı olabilir.

Etki alanına özgü gereksinimlere sahip olduğumuz yerler, biri tarafından nispeten iyi anlaşılan şeyler ve gerçek belirsizliğin sistemin gerçek davranışından ziyade kapsam çevresinde olduğu durumlar arasında bir miktar var .

Senaryolar üzerinden konuşmak, geliştirme ekibinin davranışı keşfetmesine, bir uzmanın bilgisini kullanmasına ve bilinen, değerli davranışın yakalanmasını sağlamasına yardımcı olabilir.

BDD'nin en iyi çalıştığı yer burasıdır. İpucu, en ilginç senaryoları özellik dosyasının en üstüne yazmak (ya da otomatikleştirmiyorsanız wiki) ve çoğaltılmış ya da sonuç olarak anlaşılması kolay olan senaryoları silmek.

Mümkün olan yerlerde, senaryoları uygulamanın nasıl çalıştığına dair örnekler olarak kullanın . Örneğin, doğrulamanın nasıl çalıştığını göstermek istiyorsanız, uygulamanın kullanıcının formu doldurmasına nasıl yardımcı olduğunu gösteren birkaç örnek gösterin. Doğrulamanın, bakımı çok daha kolay ve çalışması daha kolay olan ünite testi kullanarak sıkı olduğunu kontrol edin.

daha fazla okuma

Bununla ilgileniyorsanız, yazabileceğim ve yardımcı olabilecek bazı şeyler var.

BDD büyük

Bu üç alana daha detaylı olarak giren dev'ler için Cynefin

Benim için çok hoş ve açıklamalı olan eğitici slaytlarım ve tüm yığını da kapsar.


Bu bilgilendirici cevap için teşekkür ederim, ekli linkleri okudum
DD

3

Geçen sonbaharda oldukça karmaşık ( etki alanı karmaşıklığı ) bir proje oluşturduk ve dürüstçe söyleyebilirim ki, öndeki çalışmayı BDD'ye koymak projeyi kurtardı. Etki alanı karmaşıklığı ile BDD'nin yararları arasında güçlü bir ilişki gördüm.

Bir şeyi engellememe izin verin: karmaşık iş kurallarını test etmek zordur. Asıl soru, bir değişiklik yaptığınızda tüm çılgın senaryoları denemek ve hatırlamak mı istiyorsunuz, yoksa spesifikliği kırdığınızda size bildirmek için bu güvenlik ağını mı istiyorsunuz? Başlangıç ​​zamanını harca ve tüm senaryoları hazırla, onları bir yere yaz ve en sonunda onlar için tüm testleri yaz.

Ve daha sonra geri döndüğünüzde, bazı şeyleri anlamaya çalışırken, bu test edilebilir özelliğe sahip olmak hayat kurtarıcıdır.


1

BDD, TDD'ye dayanan bir geliştirme sürecidir (Test Odaklı Gelişme) İşte TDD'nin kişisel deneyimimden elde ettiği artı ve eksileri:

  • TDD, kapsamınızın iyi tanımlanmasını sağlar. Bu şekilde, önce test durumlarınızı tasarlarsınız. Böylece yazmanız gereken kod parçası için bir beklenti belirleyin.
  • TDD, kodunuzu korumanın bir yoludur. Basit bir işlev yazdığınızı varsayalım ve daha sonra bu aynı işlevde bazı karmaşık anahtarlama koşullarını ekleyin. Yarın, bir başkası bu işlevi değiştirmek istiyorsa, test senaryosuna başvurabilir. İşlevinizi değiştirmek istiyorsa, test vakasını da (çoğu zaman) değiştirmek zorunda kalır. Bu, yazdıklarınızın arkasında bir sebep olduğunu anlamasını sağlar.
  • TDD daha hızlı bir yazılım geliştirilmesine izin verir. Kodlama yaparken her birimiz bu sorunla karşılaşırdık. Bir fikirle başlıyoruz. Ve yavaşça izini kaybedersin. Bazı senaryoları ele almak için istenmeyen kod parçaları koyuyoruz. TDD'de beklentileri önceden belirlediniz. Böylece, kendinizi hedeften çok uzaklarda dolaşmanızı engellersiniz.
  • TDD, proje çevrimiçi olmadan önce olası hataları yakalamanızı sağlar. Bunun esas olarak yazılı sınavların kalitesi ile ilgisi var.

Eksileri:

  • İlk başta, TDD biraz zor olabilir. Birçok insan, gelişmeyi yönlendiren bir test durumu kavramını anlamamaktadır.
  • TDD, bazen bakım konusunda büyük çabalara neden olabilir. Bunun istenmeyen veya anlamsız test durumlarıyla ilgisi var.
  • TDD bir tutam tuzla alınmalıdır. Hiçbir geliştirici başkası tarafından yazılmış bir sınavda zaman geçirmekten hoşlanmaz. Test cihazının anlamının şifresini çözmek bazen büyük bir baş ağrısına neden olabilir.

900.000'den fazla kod satırı olan bir proje üzerinde çalışıyorum. Ve hala BDD'yi takip ediyorum. Göz önünde bulundurmanız gereken en önemli şey, yalnızca test durumlarından kaynaklanabilecek olası hataların sayısıdır. Çizgiden birkaç yıl sonra, BDD tarafından yemin edeceksiniz!


2
BDD ve TDD arasındaki farklar ve DDD kısmının geldiği yer hakkında daha fazla ayrıntı vermelisiniz.
Benjamin Gruenbaum

1
@ BenjaminGruenbaum İdeal olarak, BDD ve TDD arasında bir fark yoktur. Doğru takip edildiğinde BDD, TDD ile aynıdır! Bu yüzden cevabın bir parçası olarak farkı ortaya çıkarmak için bir sebep görmedim. Öneriniz için teşekkürler!
Ricketyship

1
"TDD daha hızlı bir yazılım geliştirilmesine izin veriyor." Bunu doğrulayan herhangi bir çalışma var mıydı? Sadece merak. Ayrıca hızlanmanın doğrusal olmadığını da söyleyebilirim.
Den

2
@AlexandreMartins Hah, kesinlikle! Hepsi iyi IMO gibi davranmaktan ziyade düşük kaliteli testlere ve senaryolara sahip olabileceğinizi kabul etmek çok daha önemlidir.
Lunivore

2
@Lunivore Evet, BDD / TDD durumunda bu beni rahatsız ediyor. Test vakalarının güçlü olması gerekir. Ne yazık ki, geliştirme topluluğunda, test vakaları olduğu sürece, sorun değil! Bir keresinde bir sql deyimi kullanarak bir tablonun içine yerleştirilmiş bir satırın olduğu ve bir sonraki adımda da iddia edilen bir test vakası gördüm! Geliştirici kehanet işlevselliğini test etmeye mi çalışıyor?
Ricketyship
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.