Behaviour Driven Development - BDD
Behaviour Driven Development (BDD)
Last updated
Was this helpful?
Behaviour Driven Development (BDD)
Last updated
Was this helpful?
BDD = Behavioral Driven Development
Teknik ve teknik olmayan kişiler(müşteri, iş analisti, yazılımcı) arasında ortak bir dil ile iletişim kurulması amaçlanır. 2009 yılında ortaya çıkmıştır. Aşağıdaki resimde de görüldüğü gibi TDD yaklaşımı üzerine basit syntax yapıları ile olayların tanımlandığı bir katman olarak düşünülebilir. TDD yaklaşımındaki gibi öncelikle test olayları yazılır, daha sonra programlama dili ile olaylar kodlanır.
BDD yaklaşımı; Unit Test, System Test, UI Test gibi farklı test seviyelerinde kullanılabilir.
Yazılımcı, test developer, iş analisti vb. arasında iletişimi güçlendirir.
Gherkin isminde basit bir dil kullanıldığı için öğrenilmesi kolaydır.
Programlama dili ile kod yazılmadan önce davranışlar yazıldığı için, geriye dönük dökümantasyon açısından yararlıdır. Davranışlarda değişiklik olduğunda testler çalışmaz, kodun düzeltilmesi gerekir.
Öncelik programlama dili ile yazılan test kodu değil, Gherkin ile yazılan davranışlardır.
Gherkin, BDD yaklaşımının uygulanabilmesi için bir yazım standardıdır. İş davranışlarını programlama dillerindeki gibi ayrıntılara girmeden basit, sade tanımlamanıza yardımcı olur. Yazılanlar ile otomatik testlerinizin dökümantasyonunun oluşturulması ve iskeletinin oluşturulması sağlanır.
70 adet dil desteği vardır. (Türkçe desteği de var.)
Aşağıda müşteri, yazılımcı ve iş analisti arasında geçen bir diyalog gösterilmiştir. 2. resimde Gherkin dili ile üçünün ortak bir dilden konuştuğu görülmüştür.
BDD yaklaşımını uygulayabilmek için bir tool seçmeniz gerekir. Araç sayesinde Gherkin dili ile yazılan kodlar C#, Java, Ruby vb. programlama diline dönüştürülür.
BDD tool'larından ilk geliştirileni ve en çok bilineni open source olan Cucumber'dir. Resmi olarak Java, Ruby, JS desteği bulunmaktadır. C#, Php, Go, Python gibi dillerde desteği bulunmadığı için farklı topluluklar/firmalar tarafından tool'lar geliştirilmiştir. SpecFlow, İsviçreli bir firma tarafından C# dili ile BDD yaklaşımını kullanabilmek için geliştirilmiş tool'dur. SpecFlow(open source) ve SpecFlow+(ücretli) olarak iki ürünü bulunmaktadır. SpecFlow+'da excelden veri okuma, gelişmiş raporlama gibi özellikler bulunmaktadır.
Farklı platformlar ve programlama dilleri için çeşitli BDD Araçları kullanılmaktadır. BDD yaklaşımında kullanılan tool'ların listesi aşağıdadır;
-VS Extension
SpecFlow for Visual Studio 2019
- NuGet Packages (SpecFlow için):
Specflow
Specflow Nunit
Specflow MsBuild.Generation (Kurulmazsa .feature dosyasını .cs 'ye çeviremediği için hata veriyor.)
- NuGet Packages (Selenium kullanılacak ise):
Selenium
Selenium Support
Selenium Chrome
- NuGet Packages (Diğer):
FluentAssertion
Birim testlerinde kullanılan Arrange/Act/Assert (AAA) yöntemi; Gherkin'de Given/When/Then (GWT) yöntemi kullanılır.
Her satır anahtar kelime ile başlar ve bir test adımını gösterir.
Dosya uzantıları .feature dır.
Örnek Gherkin Yazımı
Örnek: Generate edilmiş hali (C#)
Feature
Background
Scenario
Given
When
Then
And
But
Scenario Outline Examples
Given
Sistemin hazır hale getirildiği aşamadır.
When
Eylemin gerçekleştirildiği aşamadır.
Then
İşlem sonucunun incelendiği aşamadır.
@Tag
Testleri kategorilere ayırmak için kullanılır. (NUnit'deki Category gibi düşünülebilir)
AssemblyInfo.cs
içerisinde aşağıdaki tanımlama yapılarak paralel çalışacak test sayısı yazılır.
[BeforeTestRun] [AfterTestRun]
Tüm testler çalıştırılmadan önce ve çalıştırıldıktan sonra(NUnit [OneTimeSetUp],[OneTimeTearDown] gibi düşünülebilir)
[BeforeFeature] [AfterFeature]
Her feature çalıştırılmadan önce/sonra çalıştırılması (NUnit [SetUp], [TearDown] gibi düşünülebilir)
[BeforeScenario] or [Before] / [AfterScenario] or [After]
Her scenario çalıştırılmadan önce/sonra çalıştırılması
[BeforeStep] [AfterStep]
Her scenario adımının yürütülmesinden önce / sonra çalıştırılması