Behaviour Driven Development - BDD
Behaviour Driven Development (BDD)
1. Kaynaklar
2. BDD Nedir?
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.
BDD Avantajları
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.
3. Gherkin Nedir?
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.
4. BDD Tool'ları Nelerdir? (SpecFlow Nedir?)
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;
5. SpecFlow Kurulum
-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
6. Gherkin Dili Kullanımı
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#)
Gherkin'de Kullanılan Önemli Terimler
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)
Önemli Konular
Paralel Çalıştırma
AssemblyInfo.cs
içerisinde aşağıdaki tanımlama yapılarak paralel çalışacak test sayısı yazılır.
Hook Attributes
[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ı
Last updated