TDD'den BDD'ye Evrim
Davranış-Driven Development (BDD), kodun ne olduğu ve hangi paydaşların ihtiyaç duyduğu arasındaki bir boşluk olarak ortaya çıktı: sistemdeki davranışları tanımlamak ve doğrulamak için bu boşluğu test etmek için. TDD, koddaki doğrulamayı garanti ederken, genellikle kod ne kadara ihtiyaç duyduğu ve hangi paydaşların ihtiyacı olduğunu fark eder. BD köprüler bu boşluğu, sistemin bakış açılarını test etmek için bireysel işlevlerin tanımlanması ve doğrulanması için test etmek için yönlendirmeyi sağlar.
Onun özünde, BD, geliştiriciler arasında işbirliğini teşvik eden çevik bir metodolojidir, QA mühendisler, alan uzmanları ve ürün sahipleri. Sadece hataları yakalayan bir geri dönüşümlü dil kullanır - tüm tarafların da yanlış anlamaları azaltır ve anlamaları sağlar.Bu paylaşılan anlayış her özelliğin net, test edilebilir bir kabul kriteri ile inşa edilmesini sağlar.BD temelin üst kısmında BD, sadece böcekleri yakalamak için geri dönüşümlü bir geri bildirim döngüsü yaratır.
TDD ve BDDD
Test-Driven Development (TDD) basit, disiplinli bir döngü takip eder: [DDDDD:0] [DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD) [DDDDDDDDDDDDDDDDDDDDDDDDDDDD)) ve [DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD))))))))))))))))) basit bir kod ile test işlemi basit, basit, basit
Davranış-Driven Development (BDD) aynı kırmızı-yeşil-reksiyon döngüsü ödünç alır, ancak daha yüksek bir soyutlama seviyesinde uygulanır. Bir yöntem veya sınıf test etmek yerine, BD testleri bir özellik veya kullanıcı hikayesi ifade edilir.
- [FONT:0)[Dönemli[Dönemli)[Dönemli)
- [FONT:0)[FONT:0)[FONT=0)[FONT=0)
- [FONT:0) O zaman bazı sonuçlar (göpek davranış) sağlar.
Bu doğal-dil senaryoları özel dosyalarda depolanır ve aynı şekilde TDD ünitesi testleri gibi BD çerçeveleri otomatik olarak kullanabilir (Ruby, Java, JavaScript), Behave (Python), SpecFlow (.NET) veya JBehave (Java) Otomasyon adım senaryoları aynı şekilde otomatik olarak aynı şekilde otomatikleştirebilir. TDD ünitesi testleri yapar.
BDD'yi TDD'nin bir uzantısı olarak uygulama
BDD'yi mevcut TDD akışına entegre etmek, birim testlerini terk etmek anlamına gelmez. Bunun yerine, sistem son dereceleri iş gereksinimlerine karşı kullanan dışsal testlerin dış katmanını ekliyor.
1. Clear'ı Tanımlayın, Yapılı Scenarios
İlk adım, kullanıcı hikayelerini kelimelere kelimelerle çevirmektir:0)Gherkin senaryoları[DDD senaryosu, bir koncisede belirli bir davranışı tarif etmeli, belirsiz bir şekilde tanımlanmalıdır. Örneğin, bir giriş özelliği şunları içerebilir:
[FONT:0]Scenario: Geçerli kimliklerle başarılı giriş[DÜDÜT:1) Kullanıcı giriş sayfasında [DÜ:2) Kullanıcı geçerli bir kullanıcı ve şifreye girdiğinde
) O zaman kullanıcı panoya yönlendirilir
).
Her senaryo otomatik bir test haline gelir. senaryoları kısa ve odaklanmış tutmak önemlidir; karmaşık davranışlar farklı bir kural veya varyasyonu temsil eden her bir senaryoda kırılmalıdır.Use tags (e.g., [[ENFLT:0), [[Döneticileri yönetmek ve test süitlerini yönetmek için.
2. Stakeholders ile işbirliği
Geleneksel TDD'nin aksine, testlerin yalnızca geliştiriciler tarafından yazıldığı yer, BDD senaryoları işbirliği içinde yaratılır. INurFLT:0) Üç amigos) seanslar - bir geliştiriciyi, bir testçiyi ve bir ürün sahibini içeriyordu - takım gerçek dünya davranışını yakalayabildiğiniz senaryolar.Bu uygulama, takım, kodlama başlamadan önce “done” ne anlama geldiğini kabul eder.
3. Automate Scenarios ile BDD Tools
Bir kez senaryolar yazılır ve onaylanırsa, bir BDD çerçevesi kullanılarak otomatik edilirler.Her Gherkin adım (Notn/In/O zaman) bir kod işlevine göre aFLÜT:0) adım tanımı) Java ile Cucumber kullanarak:
@Given(“the user is on the login page”)
public void userOnLoginPage() {
driver.get(“https://example.com/login”);
}
Adım tanımları, test altında sistemle etkileşime girer - inşa hattının bir parçası olarak bu senaryoları takip eder veya başarısız olan davranışın kabul edilebilir olup olmadığı konusunda API çağrıları ile birlikte çalışır.BD framework, aynı şekilde TDD koşucuları aynı şekilde çalışır TDD koşucuları, her adımı geçti veya başarısız olarak yürütür.
4. Satisfy Her iki Katmanlı Satmak için Kod geliştirin
Otomatik senaryolar ile geliştiriciler TDD ile ünite seviyesinde devam ederler. İç mantık için birim testleri yazırlar ve BD kabul testlerini nihai geçiş / kapı olarak kullanırlar.
- BDD senaryosu çalıştırarak başlayın (çünkü uygulama yok).
- Gerekli en küçük işlevsellik parçası için bir birim testi yazın (TD kırmızı).
- Birim testini geçmek için uygulama kodu yazın (TDD yeşil).
- Her iki birimi ve kabul testlerini yeşil tutmak için kodu yeniden faktör.
- BDD senaryosu geçene kadar tekrarlayın.
Bu çift katmanlı yaklaşım hem iç doğruluğun (birey testleriyle sağlandığında) hem de dışsal davranışlar (BD senaryoları tarafından açıkça doğrulanmaktadır) sürekli olarak doğrulanmaktadır.
BD ve TDD'yi birleştirmek için Faydaları
BD ve TDD arasındaki sinerji, yazılım kalitesini ve takım verimliliğini artırmak için birkaç somut avantaj sağlar.
Geliştirilmiş İletişim ve Paylaşılan Anlayış
BD'nin bir ubiquitous dili kullanımı, geliştiricilerin, testcilerin ve iş paydaşlarının tüm yorumları yorumlayabildiği tek bir gerçek kaynağı yaratır. Gereksinimler artık statik belgelerde kapanmıyor veya e-posta ipliklerinde gömülüyorlar. Bunun yerine, kodla gelişen sürüm kontrollü özelliklerde yaşarlar.
İş Hedefleri ile Daha Yüksek Kalite Yazılım Aligned
BDD senaryoları gerçek iş değerinden kaynaklandığında, yazılımların beklenen sonuçları sağladığını doğrudan doğrulayın. TDD ünitesi testlerinin güvenlik ağı ile birlikte, ekipler kapsamlı bir kapsama ulaşır: birim testleri düşük seviyeli mantıkta regresyon yakalarken, BD testleri kullanıcı arayüzünde regresyonları yakalar.Bu çift kapsamazlık, aksi takdirde üretime kaçacaktır.
Misunderct'in erken tespiti
Uygulamadan önce senaryo yazmak, takım kenar vakalarını ve kabul kriterlerini derinden düşünmek için harekete geçti. Üç amigos seanslarında kod incelemesi veya -worse - salıverdikten sonra bu değişim-sol yaklaşımı dramatik bir şekilde hataların maliyetini azaltır.
Asla Stale
Otomatik BD senaryoları, her zaman güncel olarak çalıştırıldığı için, belge hemen değişikliği yansıtmıyor.
Geliştirilmiş Test Önceliği
BDD senaryoları yüksek değerli iş akışlarına odaklanır, bu doğal olarak kullanıcı hikayeleri için kabul kriteri haline gelir. Takımlar bu testleri sürekli bir bütünleme hattında hangi testlerin çalıştırılacağına karar verirken üst düzey birim testlerine öncelik verebilir.
Meydanlar ve En İyi Uygulamalar
BDD'yi TDD'nin uzantısı olarak kabul etmek, ortak zorluklarla ilgili farkındalık ve en iyi uygulamaların proaktif olarak kabul edilmesi, takımların takip edilmesine yardımcı olabilir.
Scenarios Clear ve Consistent
Sık sık bir konu şöyledir:0)scenario bloat[Döntilmiş 1) – çok büyük büyüyen veya kötü yazılmış bir adım açıklaması içeren dosyaların. senaryolar fiilose veya belirsiz olduğunda, iletişim araçları olarak değerini kaybederler: En iyi uygulamalar şunları içerir:
- Ortak kurulum adımlarını tekrarlamak için arka plan bölümlerini kullanın.
- Favor senaryosu, birden fazla veri noktası test etmek için örnek tablolarla özetliyor.
- [FONT:0) Vern[DÜDÜDÜDÜDÜDÜ:2)[Dönetici:0) Vern[Dönemli:0) ve [[Dönemli:2)[Dönemli:2)) Ne zaman ) eylemlerine odaklanmış adımlar, uygulama detaylarına odaklanmıyor.
- Tüm ekip tarafından özel dosyalar düzenli olarak yorum yapın.
Spec ve Kodlar arasında senkronizasyonu sağlamak
Kodbase geliştikçe, senaryolar, adım tanımları veya UI elementleri değişimi durumunda tarihten düşebilir. Aktif bakım olmadan, otomatik BDD süiti buna karşılaştırılabilir hale gelir.
- Kod olarak özel dosyaları tedavi edin: onları çekme isteklerine yorumlayın, kodla yeniden faktörlayın ve CI'de onları çalıştırın.
- Sayfa nesne modellerini veya hizmet nesne tabakalarını UI değişikliklerinden ayırmaya kullanın.
- Başarısız bir BD senaryonun sorunu çözülemeye kadar bir serbest bırakılması veya senaryonun kasıtlı bir değişikliği yansıtacak şekilde güncellendiği bir politika oluşturun.
Scenarios ve Unit Testleri arasındaki Emrahat
Takımlar bazen yüzlerce senaryo yazmada yeni, test birimlerinde test edilen ve üstteki BD senaryolarını takip etmelidirler.Her BD senaryosu, her olası kenar durumunda değil (aşağıdaki birçok hızlı, izole edilmiş bir birim testleri) ve üstteki küçük bir son BD senaryoları takip etmelidir.
Takım Eğitimi ve Dil Uyum
BDD kültürel bir değişim gerektirir: geliştiriciler, teknik olmayan paydaşların okuyabildiği bir dilde adım tanımlamaları yazmalıdır ve ürün sahipleri, belirli / zamanındaki gereklilikleri ifade etmeyi öğrenmelidir.İlk direniş ortaktır.Eğitim seanslarında yatırım yapmak, çiftleştirmek ve şablonlar yapmak, takımın uygulamayı benimsemesine yardımcı olur. Düzenli olarak, herkese değer katar ve herkesi meşgul tutmalıdır.
Alet ve Çerçeve Seçici
Örneğin, teknoloji yığını ve CI boru hattınızla iyi entegre eden bir BD çerçeve seçin.For example:
- [FONT:0)Cucumber (Java, Ruby, JavaScript, Kotlin)
- [FONT:0)[[FONT:0)
- [FONT=0)SpecFlow[[Dönemli:0)
- [FONT=0])))
Bu araçlar koşucular, raporlama ve popüler test çerçeveleri ile entegrasyon sağlar. Topluluğu desteklerini, belgelerini ve paydaşları için okunabilir raporları üretme yeteneği.
Pratik Örnek: BD ve TDD ile Özelliğe Giriş
Bütünlemeyi göstermek için, geçerli kimlikleri kabul etmek ve geçersiz olanları reddetmesi gereken bir giriş özelliği düşünün. Ekip iki BD senaryo yazar:
[FONT:0]Scenario: Başarılı Giriş[Dönetici][Dönetici giriş sayfasında [Dönetici:0) Kullanıcının geçerli kimlikleri gönderdiğinde
) O zaman kullanıcının, bir hata mesajına yönlendirildiği zaman [FLT: 5)
Bu senaryoları otomatikleştirmek, web arayüzünü kullanan adım tanımlarını gerektirir. Bu arada TDD seviyesinde, geliştirici kimlik doğrulama hizmeti için bir birim testleri yazar:
- Hizmetin geçerli kullanıcı/password kombinasyonu için bir token geri döndüğünü test edin.
- Hizmetin geçersiz kimlikler için bir istisna atmasını test edin.
- Boş kullanıcı adı, SQL enjeksiyonu girişimleri gibi sınır vakalarını test edin, vs.
BDD senaryoları tam bir yığın (UI + hizmet + veritabanı) doğruluyor, ancak ünite testleri izolasyonda temel mantığı doğrularken. Her iki test setleri CI boru hattında çalıştırılır; BDD senaryoları daha yavaştır, ancak özelliğin kullanıcı perspektifinden işe yaradığını sağlar.
BDD'yi CI/CD'ye entegre etmek
BD için TDD'nin etkili bir uzantısı olmak için, otomatik inşa ve dağıtım sürecinin bir parçası olmalıdır. Ortak modeller şunları içerir:
- BDD senaryolarını ünite testlerinden sonra özel bir aşamada çalıştırın. Bu, hızlı geri bildirimin engellenmesinden yavaş kabul testleri önler.
- Sadece sigara testleri (örneğin, ESFLT:3) her iş üzerinde kritik mutlu yolda koşmak ve serbest bırakmadan önce tam regresyon paketini çalıştırmak için etiketleri kullanın.
- BDD'den gelen doğru HTML raporları çalışır ve tüm takıma erişilebilir hale getirir. Bu şeffaflık, hangi senaryoların gerçek zamanlı olarak geçildiğini ve başarısız olduğunu görmelerine yardımcı olur.
- Instri senaryosu dağıtım sürecine başarısızlıklar: kritik bir senaryo başarısız olursa, bir sonraki çevreye promosyonu engelleyin.
Tools likeFLT:0)Cucumber Reports for Jenkins) veya SpecFlow / Behave'deki rapor jeneratörleri çoğu CI sunucularıyla iyi bir şekilde entegre eder.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Davranış-Driven Development, test-Driven Development'in bir uzantısı olarak uygulama, hem teknik olarak titiz ve iş odaklı bir gelişme süreci yaratır. TDD, kod düzeltmesini ve temiz mimarisi bir birim seviyesinde sağlarken, BDD, gerçek dünya davranışını doğrulamayı sağlayan eklenebilir özellikler geliştirir.
Başarılı bir kabul, işbirliği, tutarlı senaryo bakımı ve dengeli bir test stratejisine bağlılık gerektirir. İyi yapıldığında, BD + TDD sadece doğru çalışmıyor ancak aynı zamanda gerçekten kullanıcı ihtiyaçlarını karşılar - mühendislik sürecini iş ve teknoloji arasındaki bir ortaklık haline getirmek.