Davranış Güdümlü Geliştirme: Edebi Yazılım Geliştirme Jargonu

Bir bağlam verildiğinde, bir olay meydana gelirse, sistem belirli sayıda koşulu kontrol eder.

Belirli bir anlamlandırma yapısının sürekli bir etki yaratması için insanın merdaneli çamaşır makinesi veya modern bilgisayarlarımızdan biri gibi bir makine olması gerekirdi. Bu durumda, kodlanmış bir dizinin gözlemlenebilir davranış ürettiği görülebilir. Kodlama, somut işlemlerin akışını yönetiyorsa, bunun nedeni yalnızca sistemin bu amaç için düzenlenmiş olmasıdır. Öyleyse düşüncenin temsilin önünde kaybolması gibi, mesajın kodun önünde kaybolmasını engellemek için; kodun nasıl davranacağını önceden belirlemek gerekir.  Kodlamayı davranış güdümlü yapmak (BDD) ve süreci de davranışları ölçerek yönetmek hem anlam üreten bir fiil olacaktır hem de başarılı bir çıktı sağlayacaktır.

Davranış Güdümlü Geliştirme yöntemine geçmeden önce, davranış geliştirmeyi inceleyelim.

Davranış Kurgulamak

Ürün yöneticisi; yazılımdan belli davranışlar beklemeli ve geliştirme süreci beklenen sistem davranışları tarafından yönlendirilmelidir. Yazılım projesinin gereksinimlerini ve proje sahibinin isteklerini anlayarak, projenin geliştirme yönergesine uygun olarak kodlanacak davranışlar kurgulanmalıdır. Yazılım sisteminin beklediği sonucu üretecek kodun davranışını senaryoya aktarmadan önce, davranış kavramının kodlarının tahlil edilmesi elzemdir.

Davranışları analiz etmenin en etkili yolu; bir nörondaki bilgiyi başka bir nörona taşıyarak, alıcı nöronun gelen haberi ödül ya da tehdit olarak algılayarak, bir davranış çıktısı vermesini sağlayacak, haberci taşıyıcı nöronların etkileşimlerini incelemektir.  Ancak bu bizim sahip olduğumuz şartlarda mümkün değildir. Bu durumda aşağıda aktaracağım metotları uygulamak; davranışların nasıl tahlil edilmesi gerektiği hususunda ve davranış kurgulamada faydalı olacaktır.

  • Mevcut bir davranışı denetlemek: Mevcut bir modelin düzenli olarak incelenmesi ve güncellenmesi veya ilk kez bir model geliştirilmesi ile süregiden bir davranışın itici gücünü tespit edin. Davranış kurallarının kullanımını içeren sürekli döngü incelenerek, bu kuralların belirli bir yönünün nasıl çalıştığına bakılmalıdır.
  • Davranışın belirli bir alanının gözden geçirilmesi: Anlık olarak bu alanda neler olduğunu açıklamaya çalışın, bu yöntemin ne kadar iyi çalıştığını değerlendirin, iyileştirme geliştirme seçeneklerini üretin, ekip olarak üzerinde anlaşmaya varılan tekliflerin uygulanması için bir plan yapın.
  • Davranışın mevcut işleyişinin anlaşılması: Öncelikle yönergelerin uygulandığından emin olun. Modelin denetimini üstlenin. Modeli gözden geçirmek ve güncellemek için bir zaman çerçevesine sahip bir eylem planı hazırlayın. Eylem planını vurgulayın ve üzerinde çalışılması için gerekli zamanı ve fırsatı sağlayın.
  • Davranışın revizyonu: Davranış modelini anlayın. Davranışın anlamı vardır. Rastgele değildir. Bir amaca hizmet eder, hedefleri vardır. Davranış belirli bir bağlam içinde diğer ara yüzlerle ilişki içindedir. Bağlamı anlamak davranışı anlamayı beraberinde getirir.

Davranışı Kodlamak

Gereksinimler de birer davranıştır. Gereksinimlere göre geliştirilen yazılım; teknik ayrıntılardan ziyade kodun neden oluşturulması gerektiğine odaklanarak, beklenen davranış ve sonuçları verebilmelidir. Yazılımın göstermesi ve barındırmaması gereken davranışların belirlenmesi, söz konusu kod birimleri kapsamında elde edilen sonuçların, kodun diğer öğelerinin yan etkilerinden ayırt edilmesini mümkün kılar. Böylece yazılım kendi kendini doğrulayan hale gelir; bu kod parçacığı şunu yapar bunu yapmaz, şöyle yapması anlamlı iken bunu yapması hatadır gibi.

Davranışların a priori tanımlanması ve yöntemin formüle edilmesi; davranış tarzı olarak gereksinimi açıklamak için örneklerin kullanılmasına, hızlı ve anlaşılır bir şekilde geribildirim alınmasına, yükümlülüklerin netleştirilmesine ve yazılımın işlevselliğinin sorgulanmasına izin verir. Ayrıca ilgilenilen bir sonraki davranışta önceki davranışların taklitlerinin kullanımı, sistemi henüz kodlar yazılmadan olası bir yanlış varsayım nedeniyle doğacak başarısızlıktan kurtarmış olur.

Davranışı Sahnelemek

Davranışları yazılıma aktarmadan önce geliştirilen analizde cevaplanması gereken sorular vardır. Bu davranışı sergileyecek olan karakterin rolü nedir? Bu davranışın hikâyesi ne hakkındadır? Karakterin isteği nedir? Nasıl bir senaryo gerçekleşmektedir? Davranış güdümlü geliştirme bu sorulara, Agile yazılım geliştirmeden aldığı istenen davranış kavramının nasıl belirtilmesi gerektiğine dair kullanıcı hikayesindeki karakterin davranışının anlatılması için oluşturduğu yarı resmi format ile cevap verir. Aslında bu nesne yönelimli analiz, bir hikayedir ve Davranış Güdümlü Geliştirme (BDD) yöntemi, bir hikâye anlatıcılığıdır.

Hikâyeyi anlatmak için de yazılım ile insan arasında insan diline yakın bir dil ile senaryo yazma çerçevesi oluşturulur. Bu çerçeve dilin kendine ait bir sentaksı, anlatılan hikâyenin formata uygun şekli, üslubu ve akışı vardır.

Başlık:

Herhangi bir davranışın herhangi bir hikayesi

Anlatı:

”As a (X), I want (Y), so that (Z)”

”X olarak, Y istiyorum, böylece Z”

X hikayedeki roldür, Y bir eylem ya da özellik olabilir, bu durumda Z eylemin sonucu ya da özelliğin değeridir.

Örnek bir hikâye yazalım.

”Kullanıcı olarak,

Kredi kartı bilgilerim tutulsun istiyorum,

Böylece yeniden girmek zorunda kalmayacağım”

Ve Motor

Bu yapının en güzel ama en katı tarafı hikâye anlatıcıyı eylemin sonucunu, özelliğin değerini vermeye zorlamasıdır. Çünkü bu testin kabul kriteri hikayedeki davranıştır ve davranışın nedenselliğinin araştırılmak zorunda olması da Agile metodunun ticari yönünü yansıtır. Doğru davranışlar, hikâyenin kabul kriterlerinin karşılandığını gösterir.

Peki bu senaryo nasıl gerçekleşti?

Treatmentda, sahnede geçecek olaylar, olay esnasında aktörün davranışının tarifleri yazılarak analiz yapılır.

Senaryoyu yazarken de dikkat edeceğimiz 3 temel unsur var: Aktör, arzu, kader = Rol, ihtiyaç, sonuç.

Senaryo, önkoşul, olay ve sonuç halinde 3 parçadan oluşur ve şunu anlatmaktadır:

” Verilenlerle, bir olay olduğunda, bazı sonuçları kontrol et.”

Senaryonun yapısı:

Given A

When B

Then C

 A verileni,

 B’aldığı zaman

 C ver (öyleyse)

komutları kullanılarak oluşturulmalıdır.

Örnek Senaryo:

Sahne: Müşteri Ödeme Yapıyor

/Kullanıcının ödeme sayfasına geldiği düşünüldüğünde

/Kayıtlı kartını seçtiği zaman

/Kart bilgilerini otomatik doldur

Senaryolar, doğrudan kodla temsil edilecek kadar küçük yapılar olmalı ve test edilecek davranışı gerçekleştirecek bir evren oluşturmalıdır. Senaryolar kabul kriterleri karşılanarak tamamlandığında, birbirlerine uçtan uca işlevsel halde bağlı, çalışan bir yazılım çıkar.

Davranış güdümlü geliştirme yöntemi ile hikâye koşucu, hem sürekli geliştirme sürecindedir hem de baştan sona bir üretimin öznesi olmaktadır. Kullanılan sentaks ile yazılımcı ile projenin tarafları arasında anlaşılması kolay, basit bir dil kullanılarak yazılan düz yazı ile belirtilen ortak bir iletişim dili oluşmuş olur. Yazılımın davranışlarının ölçülebilir olması ve gerçek dünyadan kullanılan örneklerin işlenmesi, ortak bir anlayışın tasarlanmasına yardımcı olur. Nihayetinde ortak hedeflere ortak dil ile koşulduğunda, aynı hayaller kurulur.

Bir sonraki yazıda, .Net çerçevesinde Davranış Güdümlü Geliştirme uygulamalarını destekleyen SpecFlow framework’unu ve Gherkin anahtar kelimelerini inceleyeceğiz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir