tdd vs bdd analyze differences with examples
Bu Eğitim Örneklerle TDD ile BDD Arasındaki Farkları Açıklar:
TDD veya Test Odaklı Geliştirme ve BDD veya Davranış Odaklı Geliştirme, iki yazılım geliştirme tekniğidir.
Bu ikisi arasındaki farka daha derinlemesine dalmadan önce, öncelikle bireysel olarak ne anlama geldiklerini ve nasıl kullanıldığını anlayalım.
Hadi başlayalım!!
c ++ ne için kullanılır
Ne öğreneceksin:
TDD nedir?
TDD, Test Driven Development anlamına gelir. Bu yazılım geliştirme tekniğinde, önce test senaryolarını oluşturuyoruz ve ardından bu test senaryolarının altında yatan kodu yazıyoruz. TDD bir geliştirme tekniği olmasına rağmen, otomasyon testi geliştirme için de kullanılabilir.
TDD'yi uygulayan ekipler, geliştirme için daha fazla zaman ayırır, ancak çok az hata bulma eğilimindedirler. TDD, iyileştirilmiş kod kalitesi ve daha yeniden kullanılabilir ve esnek kod sağlar.
TDD ayrıca yüksek test kapsamı yaklaşık% 90-100. TDD'yi takip eden geliştiriciler için en zor olan şey, kodu yazmadan önce test senaryolarını yazmaktır.
Önerilen Okuma => Mükemmel Test Durumları Yazmak İçin En İyi Kılavuz
TDD Süreci
TDD metodolojisi 6 adımlı çok basit bir süreci takip eder:
1) Bir test senaryosu yazın: Gereksinimlere bağlı olarak, otomatik bir test senaryosu yazın.
2) Tüm test senaryolarını çalıştırın: Şu anda geliştirilen kod üzerinde bu otomatik test senaryolarını çalıştırın.
3) Bu test senaryoları için kod geliştirin: Test senaryosu başarısız olursa, o test senaryosunun beklendiği gibi çalışmasını sağlamak için kodu yazın.
4) Test senaryolarını tekrar çalıştırın: Test senaryolarını tekrar çalıştırın ve şimdiye kadar geliştirilen tüm test senaryolarının uygulanıp uygulanmadığını kontrol edin.
5) Kodunuzu yeniden düzenleyin: Bu, isteğe bağlı bir adımdır. Ancak, kodunuzu daha okunaklı ve yeniden kullanılabilir hale getirmek için yeniden düzenlemeniz önemlidir.
6) Yeni test durumları için 1-5 arası adımları tekrarlayın: Tüm test senaryoları uygulanana kadar diğer test durumları için döngüyü tekrarlayın.
TDD'de Test Durumu Uygulaması Örneği
Kullanıcı adı ve şifre alanlarına ve bir gönder düğmesine sahip bir uygulama için bir oturum açma işlevi geliştirmemiz gerektiğini varsayalım.
Aşama 1: Bir test senaryosu oluşturun.
@Test Public void checkLogin(){ LoginPage.enterUserName('UserName'); LoginPage.enterPassword('Password'); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Adım 2: Bu test senaryosunu çalıştırın ve Giriş sayfasının tanımlı olmadığını ve enterUserName, enterPassword ve submit adlarına sahip hiçbir yöntem olmadığını belirten bir hata alacağız.
sdlc'de analiz aşaması nedir
Aşama 3: Bu test senaryosu için kod geliştirin. Kullanıcı adını ve şifreyi girecek ve doğru olduklarında bir ana sayfa nesnesi alacak temel kodu yazalım.
public class LoginPage{ String username; String password; //store username public void enterUserName(String username){ this.username = username; } //store password public void enterPassword(String password){ this.password = password; } //match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } } }
Adım4: Test senaryosunu tekrar çalıştırın ve ana sayfanın bir örneğini alacağız.
Adım 5: Gönderme yöntemindeki if koşulları doğru olmadığında doğru hata mesajlarını vermek için kodu yeniden düzenleyelim.
//match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } else{ System.out.println('Please provide correct password'); return; } } else{ System.out.println('Please provide correct username'); }
Adım6: Şimdi boş bir kullanıcı adı ve şifreyle yeni bir test durumu yazalım.
@Test Public void checkLogin(){ LoginPage.enterUserName(''); LoginPage.enterPassword(''); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Şimdi bu test senaryosunu çalıştırmayı denerseniz, başarısız olacaktır. Bu test durumu için 1'den 5'e kadar olan adımları tekrarlayın ve ardından boş kullanıcı adı ve şifre dizelerini işlemek için işlevselliği ekleyin.
BDD nedir?
BDD, Davranış Odaklı Geliştirme anlamına gelir. BDD, test senaryolarını yazmak yerine bir davranış yazarak başladığımız TDD'nin bir uzantısıdır. Daha sonra uygulamamızın davranışı gerçekleştirmesi için gerekli olan kodu geliştiriyoruz.
BDD yaklaşımında tanımlanan senaryo, geliştiricilerin, test uzmanlarının ve iş kullanıcılarının işbirliği yapmasını kolaylaştırır.
BDD, söz konusu olduğunda en iyi uygulama olarak kabul edilir. otomatik test çünkü kodun uygulanması hakkında düşünmeye değil, uygulamanın davranışına odaklanır.
Uygulamanın davranışı BDD'nin odak noktasını oluşturur ve geliştiricileri ve test edenleri müşterinin yerine koymaya zorlar.
BDD Süreci
BDD metodolojisine dahil olan süreç de 6 adımdan oluşur ve TDD'ninkine çok benzer.
1) Uygulamanın davranışını yazın: Bir uygulamanın davranışı, ürün sahibi veya iş analistleri veya QA'lar tarafından basit İngilizce benzeri bir dille yazılır.
2) Otomatik komut dosyalarını yazın: Bu basit İngilizce benzeri dil daha sonra programlama testlerine dönüştürülür.
3) İşlevsel kodu uygulayın: Davranışın altında yatan işlevsel kod daha sonra uygulanır.
4) Davranışın başarılı olup olmadığını kontrol edin: Davranışı çalıştırın ve başarılı olup olmadığına bakın. Başarılı olursa, sonraki davranışa geçin, aksi takdirde uygulama davranışına ulaşmak için işlevsel koddaki hataları düzeltin.
5) Kodu yeniden düzenleyin veya düzenleyin: Kodunuzu daha okunaklı ve yeniden kullanılabilir hale getirmek için yeniden düzenleyin veya düzenleyin.
6) Yeni davranış için 1-5 arasındaki adımları tekrarlayın: Uygulamanızda daha fazla davranış uygulamak için adımları tekrarlayın.
Ayrıca Oku => Test Uzmanları TDD, BDD ve ATDD Tekniklerine Nasıl Dahil Edilir?
BDD'de Davranış Uygulama Örneği
Kullanıcı adı ve şifre alanlarına ve bir gönder düğmesine sahip bir uygulama için bir oturum açma işlevi geliştirmemiz gerektiğini varsayalım.
youtube videolarını indirmek için ücretsiz uygulama
Aşama 1: Kullanıcı adı ve şifre girmek için uygulamanın davranışını yazın.
Scenario: Login check Given I am on the login page When I enter 'username' username And I enter 'Password' password And I click on the 'Login' button Then I am able to login successfully.
Adım 2: Bu davranış için otomatik test komut dosyasını aşağıda gösterildiği gibi yazın.
@RunWith(Cucumber.class) public class MyStepDefinitions { @Steps LoginPage loginPage; @Steps HomePage hp; @Given('^I am on the login page $') public void i_am_on_the_login_page(){ loginPage.gotoLoginPage(); } @When('^I enter '((^')*)' username$') public void i_enter_something_username(String username) { loginPage.enterUserName(username); } @When('^I enter '((^')*)' password$') public void i_enter_something_password(String password) { loginPage.enterPassword(password); } @When('^I click on the '((^')*)' button$') public void i_click_on_the_submit_button(String strArg1) { hp = loginPage.submit(); } @Then('^I am able to login successfully.$') public void i_am_able_to_login_successfully() { Assert.assertNotNull(hp); } }
Aşama 3: İşlevsel kodu uygulayın (Bu, TDD örnek adım 3'teki işlevsel koda benzer).
public class LoginPage{ String username = ''; String password = ''; //store username public void enterUserName(String username){ this.username = username; } //store password public void enterPassword(String password){ this.password = password; } //match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } } }
Adım4: Bu davranışı çalıştırın ve başarılı olup olmadığına bakın. Başarılı olursa, 5. adıma gidin, aksi takdirde işlevsel uygulamada hata ayıklayın ve ardından tekrar çalıştırın.
Adım 5: Uygulamanın yeniden düzenlenmesi isteğe bağlı bir adımdır ve bu durumda TDD örneği için 5. adımda gösterildiği gibi hata mesajlarını yazdırmak için gönderim yöntemindeki kodu yeniden düzenleyebiliriz.
//match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } else{ System.out.println('Please provide correct password'); return; } } else{ System.out.println('Please provide correct username'); }
Adım6: Farklı bir davranış yazın ve bu yeni davranış için 1'den 5'e kadar olan adımları izleyin.
Aşağıda gösterildiği gibi kullanıcı adını girmemekle ilgili bir hata alıp almadığımızı kontrol etmek için yeni bir davranış yazabiliriz:
Scenario: Login check Given I am on the login page And I click on the 'Login' button Then I get an error to enter username.
TDD Vs BDD - Anahtar Farklılıklar
TDD | BDD |
---|---|
API ve üçüncü taraf araçlarını içeren projeler için daha iyi bir yaklaşım olabilir. | Kullanıcı eylemleriyle yönlendirilen projeler için daha iyi bir yaklaşım olabilir. Örneğin: e-ticaret web sitesi, uygulama sistemi vb. |
Test Odaklı Geliştirme anlamına gelir. | Davranış Odaklı Geliştirme anlamına gelir. |
Süreç, bir test senaryosu yazarak başlar. | Süreç, beklenen davranışa göre bir senaryo yazarak başlar. |
TDD, işlevselliğin nasıl uygulandığına odaklanır. | BDD, son kullanıcı için bir uygulamanın davranışına odaklanır. |
Test senaryoları bir programlama dilinde yazılır. | Senaryolar, basit İngilizce formatında yazıldıkları için TDD'ye kıyasla daha okunabilirdir. |
Uygulama işlevlerinin, TDD'deki test durumlarını çok etkilemesindeki değişiklikler. | BDD senaryoları, işlevsellik değişikliklerinden fazla etkilenmez. |
İşbirliği yalnızca geliştiriciler arasında gereklidir. | Tüm paydaşlar arasında işbirliği gereklidir. |
TDD'yi destekleyen araçlardan bazıları şunlardır: JUnit, TestNG, NUnit, vb. | BDD'yi destekleyen araçlardan bazıları SpecFlow, Cucumber, MSpec, vs.'dir. |
TDD'deki testler sadece programlama bilgisine sahip kişiler tarafından anlaşılabilir, | BDD'deki testler, herhangi bir programlama bilgisi olmayanlar da dahil olmak üzere herhangi bir kişi tarafından anlaşılabilir. |
TDD, testlerinizde hata olma olasılığını azaltır. | Testlerdeki hataların izlenmesi TDD ile karşılaştırıldığında zordur. |
Sonuç
TDD Vs BDD arasında seçim yapmak çok zor olabilir. Bazıları BDD'nin böcekleri bulmak için daha iyi olduğunu iddia ederken, diğerleri sadece TDD'nin daha yüksek kod kapsamı sağladığını söyleyebilir.
Her iki yöntem de diğerinden daha iyi değil. Hangi metodolojinin kullanılacağına karar vermek kişiye ve proje ekibine bağlıdır.
Umarız bu makale TDD ve BDD ile ilgili şüphelerinizi gidermiştir!
Önerilen Kaynaklar
- 180+ Web Uygulama Testi Örneği Test Vakası (Örnek Kontrol Listesi)
- Manuel Test Durumlarını Otomasyon Komut Dosyalarına Nasıl Çevirebilirim? - Örnekle Adım Adım Kılavuz
- Test Örnekleri Mülakat Soruları: Senaryoya Dayalı Test Örnekleri Yazın
- Test Uzmanları TDD, BDD ve ATDD Tekniklerine Nasıl Dahil Edilir?
- Yazılım Testinde Test Kapsamı (Test Kapsamını En Üst Düzeye Çıkarma İpuçları)
- 8 En İyi Davranış Odaklı Geliştirme (BDD) Araçları ve Test Çerçeveleri
- Specflow Eğitimi: BDD Aracı için En İyi Kılavuz
- Test Örnekleri Nasıl Yazılır: Örneklerle Son Kılavuz