Yaşayan Bir Organizma: Yazılım

[X] Driven Development

Öncelikle açık yüreklilikle itiraf etmeliyim ki, iç süreçlerimizde bir standart olarak “[X] Driven Development” yönelimlerine meyilli değiliz. Günümüzde bu yönelimlerin varlığı, standart olarak kabul edilme zorunluluğu, yararlılığı sürekli olarak tartışılıyor. Bizler de kendi içimizde bu tartışmaları haliyle gerçekleştiriyoruz. Evet, yazılımlarımızın alıp verdiği nefes herkes tarafından duyulacak şekle büründüğünde ortaya koyduğumuz bir kontrol mekanizmamız var, ama arka tarafta — üretim bandında — kalite standartlarımızı nasıl belirleyebiliriz? Ekip olarak son dönemlerde üzerinde fazlasıyla kafa yorduğumuz en büyük soru işaretinin bu olduğunu gönül rahatlığıyla ifade edebilirim.

Behavior-Driven Development (BDD)

Nam-ı diğer “Davranışa Dayalı/Davranış Yönelimli Geliştirme”.

Microsoft Windows Logosu (1985)

Yazılım davranışı nedir?

Nesne yönelimli programlama (Object Oriented Programming — OOP — ) kavramına aşina olanlar “Behavior” kavramını muhakkak duymuşlardır. Şöyle bir tanım içerisinde bu kavram kendisine yer bulur: “Sınıflar (class) genellikle özellik (property) ve davranışlardan (behavior) oluşur.” Bizler de yazılımlarımızı geliştirirken sınıflardan ve sınıf ailesine ait kavramlardan çoğunlukla yararlanırız. Bu şekilde uygulamalarımız ve kullanıcılar arasında etkileşimler sağlar, veri kaynaklarımızla iletişime geçeriz. Bir form uygulamasında butona basılma aksiyonu bir “davranış” iken, bir web uygulamasında metin alanına girilen değerin doğrulamadan geçirilmesi de bir yazılımsal “davranış”tır. Tam bu noktada BDD denilen kavram hayatımıza giriyor. Bu davranışların neden olacağı sonuç merkezli testler yönelimli yazılım gerçekleştirme. Yani “SENARYO” merkezli geliştirme.

Görsel Kaynağı: http://bhlpoug-2011.blogspot.com.tr/2012/11/what-is-difference-between-bdd-and-tdd.html

Test-Driven Development’tan bahsediyorsun!

Evet bundan bahsediyorum. TDD vs. BDD konseptini hiçbir zaman sindiremedim. Bence — ki bir çok görüş de bu şekilde — BDD aslında bir TDD. TDD’de araç ve gerecimizi test ederken, BDD’de bu araç ve gereçle gerçekleştireceğiniz eylemin senaryosunu test edersiniz. Ama yine TEST edersiniz. Yöntem farklı olsa da iki yönelim de aynı referans noktayı işaret eder.

BDD ile ne kazanırız?

En büyük kazanç, müşteri (bu bazen projenin analisti olur, bazen ise teknik olmayan gerçek bir müşteri) ile ortak bir dilde buluşmak olduğunu düşünüyorum. BDD yönteminde işler “Senaryo — Scenario — ” denilen anahtar kelime üzerinden yürüyor. İstenen davranışın senaryosu, ilgili kişi tarafından geliştiriciye iletiliyor ve iletilen bu senaryo geliştirici tarafından test fonksiyonlarına yükleniyor. Bahsi geçen senaryoların tabii ki bazı yapısal özellikleri mevcut. Bu yapısal özelliklere bir çok teknik makaleden ulaşmanız mümkün. En güzel özetleyen yerlerden bir tanesi yine Wikipedia. Müşterinizden bir takım boşlukları doldurmasını isteyebilirsiniz ya da serbest bir senaryo konseptini, BDD feature yapısına kendiniz çevirebilirsiniz. Örnek bir senaryoyu şu şekilde göstermek mümkün:

Specflow (.NET) & Behave (Python)

BDD’yi projelerimizde nasıl canlandırırız?

Bu yönelim için hemen hemen her programlama diline özgü kütüphaneler mevcut. .NET uygulamalarında kullanmak üzere Specflow, Python uygulamalarında ise Behave kütüphanesi bunlardan sadece ikisi. Vermiş olduğum Github linkinde de örnek olarak bir Python uygulaması seçtim. Bu proje üzerinden gerekli testlerinizi gerçekleştirebilirsiniz.

Gün Sonu

Yazımın girişinde de belirttiğim gibi henüz bu yönelimi tam anlamıyla içselleştirebilmiş ve kendi yazılım sürecimin standart bir parçası haline getirebilmiş değilim. Şu anda en temel hedeflerimden bir tanesi de bu. Bu yolda da edindiğim bazı tecrübeleri sizlere kısa da olsa aktarmak istedim. Umuyorum ki bu konuyu kendisine dert etmiş kimi meslektaşlarıma yardımcı olabilmişimdir. İlerleyen yazılarda daha temel ve teknik örneklerden de yararlanmayı planlamaktayım.

--

--

Engineering Manager (at) Hepsiburada. Former trainer & consultant. Tweets are mostly about tech and coding. https://superpeer.com/selcukusta

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Selçuk Usta

Selçuk Usta

Engineering Manager (at) Hepsiburada. Former trainer & consultant. Tweets are mostly about tech and coding. https://superpeer.com/selcukusta