Davranış Odaklı Geliştirme (DOG), Test Odaklı Geliştirme(TOG)’den evirilen bir yazılım geliştirme yaklaşımıdır. Ortak bir dilde yazılmış olmasıyla farklılık gösterir ki bu da teknik ve teknik olmayan ekipler ile paydaşlar arasındaki iletişimi geliştirir. Her iki geliştirme yaklaşımında da testler koddan önce yazılır; fakat Davranış Odaklı Geliştirme’de testler daha kullanıcı odaklı ve sistemin davranışına dayanmaktadır.
DOG ’yi Neden Seçmeliyiz?
TOG, iş sahibi, kullanılan Birim Test çerçevesine aşina olduğu ve teknik yetenekleri güçlü olduğu(her zaman böyle değildir) müddetçe tatmin edici bir şekilde çalışır. Bu şartlar altında DOG avantaja sahiptir çünkü testler paydaşların da bildiği, örneğin İngilizce gibi ortak bir dilde yazılır. Daha açık olması, minimum miktarda mesleki argo kullanarak etkili iletişime erişim sağlaması, DOG kullanmanın muhtemelen en büyük avantajıdır. Teknik ve teknik olmayan ekipler arasında yüksek verimlilikle çalışılabilmesi için iş birliğini mümkün kılar.
DOG ’nin Özellikleri
Yukarıda bahsedildiği gibi DOG testlerinin ortak bir dilde yazılıyor olması avantajı, uygulamanın nasıl davranacağına ilişkin ayrıntıların herkes tarafından kolayca anlaşılabilir olmasıdır. Örneğin, sistemin davranışını açıklamak için testler, ihtiyaçların gerçek zamanlı örnekleri kullanılarak yazılabilir.
DOG Uygulamaya Başlamadan Önce Gerekli Olanlar
- Gereksinimler somut örneklerle tanımlanabilen kullanıcı hikâyelerine dönüştürülmelidir.
- Her örneğin yalnızca bir tane testinden ziyade uygun bir kullanıcı senaryosu olmalıdır.
- ‘rol-feature-reason’ matrisi ve ‘given-when-then’ formülü anlaşılmalıdır.
- Bir sınıfın Birim Testi’ni yazmaktan ziyade bir sınıfın davranışının tanımlamalarını (specification) yazmanın gerekli olduğunun farkındalığı.
‘Given-When-Then’ Formülü DOG Örneği
Bir kullanıcı hikâyesi için DOG testleri örnek şablonu aşağıdaki gibidir:
Given → Verilen kesin bir senaryo
When → Ne zaman eylemin gerçekleşeceği
Then → O zaman sonuç bu olmalı
Pratik bir örnek şöyle olabilir:
Verilen kullanıcı forma henüz hiç veri girmedi
Ne zaman ‘gönder’ butonuna basıldığında
O zaman uygun doğrulama mesajı gösterilmeli
‘Role-Feature-Reason’ Matrisi
Bu şablon DOG’ de de kullanıcı hikâyesi yaratmada yardımcı olması için kullanılır. Şöyle tanımlanır:
- Olarak
- İstiyorum
- Böylece
Böyle bir kullanıcı hikâyesine örnek şu verilebilir:Bir perakende müşteri olarak, elektronik olarak satın aldığım bir ürünü 14 gün içerisinde iade etmek istiyorum, böylece geri ödeme alabilirim.
DOG Araçları
Cucumber
DOG’yi destekleyen bir test çerçevesidir. Cucumber’da DOG tanımlamaları (specifications) Gherkin dili kullanılarak sade, basit bir İngilizce ile yazılır. Diğer bir deyişle Gherkin Cucumber’ın anladığı bir dildir. Gherkin, kullanılan uygulamanın davranışını yansıtır ve Cucumber bu davranışların testlerini oluşturur. Cucumber, Ruby ile geliştirilen, farklı teknolojiler üzerinde çalışabilen bir çerçevedir.
Specflow
Specflow, Ruby on Rails kullanılarak Cucumber’den evirilmiştir ve ağırlıklı olarak .Net projelerinde kullanılmaktadır. Specflow da Gherkin dilini kullanır.
DOG Kullanmanın Bazı Faydaları
Eğer DOG’yi uygulamayı planlıyorsanız, işte yazılım ekibinize birkaç faydası:
- Artık ‘test’ i değil; ‘davranış’ ı tanımlıyorsunuz.
- Geliştiriciler, testçiler ve ürün sahipleri arasında daha iyi bir iletişim.
- DOG basit bir dil kullandığından öğrenme eğrisi daha kısa olacaktır.
- Doğası gereği teknik olmadığı için daha geniş bir izleyici kitlesine erişebilir.
- Davranışsal yaklaşım ile daha geliştirme başlamadan önce kabul kriterleri tanımlanır.
DOG’nin Bazı Dezavantajları
En iyi geliştirme yaklaşımlarının bile görünmez tehlikeleri olabilir ve DOG de bir istisna değil. İşte o tehlikelerden bazıları:
- DOG’de çalışmak için önceden TOG deneyimi gereklidir.
- DOG, Waterfall yaklaşımı ile uyumlu değildir.
- Gereksinimler doğru belirtilmemişse DOG etkili olmayabilir.
- DOG kullanan testçilerin yeterli teknik beceriye sahip olmaları gerekir.
Özet
DOG, iş sahibinin gözünden bakarak kodu geliştirmemize, test etmemize ve düşünmemize olanak sağlar. Sadece ‘işlevsellikleri’ geliştirmekten ziyade ‘gerçek zamanlı örnekleri’ geliştiren bir anlayışa sahip olmamızı gerekir. Siz de deneyin!
Kaynak: https://blog.testlodge.com/what-is-bdd/
Çeviren: Ayşenur Yılmaz