TDD, BDD, ATDD Nedir?
TDD(Test Driven Development) Nedir?
TDD(Test Odaklı Geliştirme), kodu test etmek ve bağımlılıkları koddan ayırmak için Birim Testleri yazarak yapılır.
Peki birim testi nedir?
Birim(Unit) Test: Yazılımı oluşturan birimlerin veya bileşenlerin birbirinden ayrı olarak test edildiği bir yazılım test türüdür. Birim testinin amacı, yazılım kodunun her biriminin beklendiği gibi çalıştığını doğrulamaktır. Birim testi genel olarak yazılımı geliştirenler tarafından yapılmaktadır.
Bu stratejide önemli olan kod yazılmadan önce testleri yazmaktır.
TDD Süreçleri:
- Belirtilen gereksinimlere göre yazılım geliştirici test senaryosu yazar.
- Bu test senaryoları gerçekleştirilir ve bir özelliğin geliştirilmesinden önce yazıldığı için başarısız olması beklenir.
- Geliştirme ekibi tarafından testin başarıyla geçmesi için kodlama yapılır.
- Bütün testlerin başarılı olması sağlanır.
- Kod tekrar gözden geçirilir ve düzenlenir. İyileştirme veya temizleme yapılır.
Burada bahsedilen kodu düzenleme süreci, kodun ana işlevini veya davranışını değiştirmeden sadece kodu iyileştirme veya temizleme sürecini ifade eder. Kod hata almayana kadar bu değiştirme ve düzenleme devam eder.
→ TDD geliştirme süreci agile süreçler ile hayatımıza girdi. Daha önce Waterfall modeli yönetim sürecinde aşamalar şu şekildeydi:
- Tasarımı yap
- Geliştirmeyi yaz
- Testi yap
→ Agile yazılım geliştirme yaklaşımında TDD adımları şu şekildedir:
- Tasarımı yap
- Testi yaz
- Geliştirmeyi yaz
- Testi yap
TDD’ nin Avantajları:
1- Bakım yükünü azaltmaktadır.
2- Testler koda olan güveni artırmaktadır.
3- TDD testlerle kodun sınırlarını belirlediği için hatalar sınırlandırılmış olur.
4- Yazılım geliştiriciler, TDD sürecine alıştıkça üretkenlikleri artmaktadır.
5- Kod, testler tarafından yönlendirildiği için anlaşılması kolay olmaktadır. Yani herhangi bir ekip üyesinin yokluğunda diğer ekip üyelerinin kod üzerinde kolayca çalışmasını sağlar.
BDD(Behavior Driven Development) Nedir?
BDD(Davranış Odaklı Geliştirme), Test Odaklı Geliştirmenin bir türevidir. Ancak testler, esas olarak sistem davranışına dayanmaktadır.
Test Odaklı geliştirme bazı koşulları ileri sürerken, Davranış Odaklı Geliştirme, sistemin davranışını açıklamak için gerçek gereksinimlerin gerçek zamanlı örnekleri kullanılarak düz metin olarak yazılır. Bu sayede yazılan bu metinler ile uygulamanın güncel bir dokümanının oluşması sağlanmış olur.
Bu yaklaşımda kabul kriterleri ve gereksinimler istenip ona göre test senaryoları yazılmalıdır.
Gherkin Dili — Cucumber Framework’ü ile Test senaryoları yazılırken Given, When, Then gibi komutlar kullanılır.
° Given: Belirli bir senaryo yazılır.
° When: Bir eylem gerçekleşir.
° Then: Çıktı sağlanır.
ATM’den para çekme için örnek oluşturacak olursak;
→ ATM’den para çekmek için Ana Gereksinimler:
1- ATM’nin ve kartın çalışır durumda olması
2- Bankamatikte para olması
CONTEXT
1- Hesap Bakiyesi 200₺ (Given)
2- Kart çalışır durumda (And)
3- ATM’de yeterli bakiye mevcut (And)
EVENT
1- Hesap sahibi 50₺ çekmek istiyor (When)
OUTCOMES
1- ATM 50₺ vermeli (Then)
2- Hesapta 150₺ kalmalı (And)
3- Kartı geri vermeli (Then)
Markdown Dili — Gauge Framework’ü ile ile Test senaryoları düz yazı olarak yazılır. Aslında formatlı bir biçimde düz yazı yazılmasına olanak sağlar. Böylelikle bir yazıyı daha sonradan HTML’ e dönüştürebilir biçimde hızlıca düzenleyebiliriz. .spec file’lar içerisine cümlecikler halinde testlerin yazılmasına olanak sağlar.
Ürün satın alma için örnek oluşturacak olursak:
“X”.spec file içerisine;
* “kubra.kilic” ve “123456” ile giriş yap
* “tablet” ürününü ara
* sepete “1” adet ekle
BDD’ nin Avantajları:
1- Teknik olmayan dil kullanımıyla daha geniş bir kitleye ulaşılmasına yardımcı olur.
2- Yazılım geliştiriciler, test uzmanları ve ürün sahipleri arasındaki iletişimi geliştirir.
3- Yazılımın davranışını tanımlarken daha üst bir soyutlama düzeyine geçersiniz ve böylece daha fazla iş fonksiyonu olan testler yazabilirsiniz.
4- Kabul kriterleri geliştirmeden önce oluşturulabilir.
ATDD(Acceptance Test Driven Development) Nedir?
ATDD(Kabul Testi Odaklı Geliştirme), kullanıcının bakış açısıyla tek bir kabul testi yazılır. Doğası gereği Davranış Odaklı Geliştirmeye benzer, ancak Kabul Testi Odaklı Geliştirme, esas olarak sistemin işlevsel davranışını tahmin etmeye odaklı, yazılımın gereksinimlerini karşılayan koda odaklanır.
BDD gibi, testler düz metin olarak yazılır, ancak yazma kabulüne odaklanır. Bu kabul testleri, kullanıcının bakış açısını temsil eder ve sistemin amaçlandığı gibi çalıştığını doğrular.
ATDD ile BDD arasındaki temel fark: BDD, özelliğin davranışına daha çok odaklanırken, ATDD doğru gereksinimleri yakalamaya odaklanır.
ATDD’ nin Avantajları:
1- Tüm ekip genelinde iletişimin iyi olmasını sağlar.
2- Gereksinimler, herhangi bir belirsizlik olmadan çok net bir şekilde analiz edilir.
3- Kabul testleri, yazılımın ulaşması gerektiği noktaya doğru yönlendirir ve bir kılavuz görevi görür.
TDD, BDD ve ATDD Arasındaki Farklar
- TDD daha tekniktir ve özelliğin uygulandığı aynı dilde yazılır. Örneğin Java ile uygulanıyorsa, JUnit testleri yazılır. BDD ve ATDD ise basit ingilizce dilinde metin olarak yazılır.
- TDD’ yi uygulamak için teknik bilgiye sahip olmamız gerekir. BDD ve ATDD ise herhangi bir teknik bilgi gerektirmez. BDD ve ATDD’ nin faydası, bu özelliği geliştirmeye hem teknik hem de teknik olmayan kişilerin katılabilmesidir.
- TDD yaklaşımı, bir özelliğin uygulanmasına odaklanır. BDD, özelliğin davranışına odaklanır. ATDD ise, gereksinimleri yakalamaya odaklanır.
- TDD geliştiğinden, iyi tasarım için alan sağlar ve gereksinimi karşılama yönüne odaklanır. BDD ve ATDD ise kullanıma uygun olan farklı bir yönüne odaklanır.
Kaynaklar