BDD: Başlarken


9

BDD ile başlıyorum ve bu benim hikayem:

Feature: Months and days to days
    In order to see months and days as days
    As a date conversion fan
    I need a webpage where users can enter
    days and months and convert them to days.

Bazı şüphelerim var ...

Herhangi bir şeyi kodlamadan önce senaryolarımı yazmalı mıyım yoksa önce bir senaryo yazmalı ve sonra kod yazmalı, tekrar bir senaryo yazmalı ve sonra kod yazmalı mıyım ...?

Senaryolarımı daha önce yazmam gerekirse, adımlarım onaylanabilir mi ve üretim kodu hala yapılmıyor mu?

Kodumda ne zaman yeniden düzenleme yapmalıyım? Özellik yapıldıktan sonra veya her senaryo uygulamasından sonra?


"Adımlarım onaylanabilir ve üretim kodu hala yapılmıyor mu?" Ne anlama geliyor? Lütfen açıkla.
S.Lott

Yanıtlar:


12

Hikayeden, kendiniz kodladığınızı düşünüyorum.

Normalde BDD'nin amacı, özellikle iş ve geliştiriciler arasında sohbet sağlamaktır, böylece takım ortak bir anlayışa ulaştıklarından emin olabilir. Test kullanıcılarını da eklemeyi seviyoruz, çünkü senaryoları kaçırdığımızda fark edebiliyorlar.

Bunu kendi başınıza yapıyorsanız, lastik bir ördek alın ve ördeklere uygulamanızın davranışını açıklayın. Nasıl çalışması gerektiğine dair bazı örnekler verin. Bunlar sizin senaryolarınız olacak.

Başlangıç olarak, ben öneririm değil bu senaryoları otomatik hale. İsterseniz bunları yazabilirsiniz. Ördekle paylaştığınız iş sonuçlarının onları ifade etmek için doğru seviyede olduğunu unutmayın. Artık uygulamanın nasıl davrandığı hakkında bir fikriniz olmalı ve senaryoları manuel olarak çalıştırabilirsiniz. Henüz işe yaramayan her şeye bir böcek gibi davranmayı seviyorum . Ben var bazen otomasyonla başladı ama sistem çalışır, ben araçları ile tanıdık nasıl çok iyi biliyorum ve yalnızca UI iyi anlaşılmaktadır. O zaman bile, kodu yazarken sık sık biraz yeniden çalışmam gerekiyor.

Daha düşük bir seviyede, ördeğinize her sınıfın nasıl davranacağını söyleyin. Bazı örnekler veriniz. Lastik ördekler, teknik dili mükemmel bir şekilde anlayabilir. Artık birim seviyesinde BDD, yani birim testleri var. Kırmızı-yeşil-refactor döngüsü burada gerçekleşir. (Artık daha fazla yeniden düzenleme yapmaya gerek duymuyorum, çünkü sınıflarımın sorumluluklarını düşünüyorum, iş odaklı dilde ifade ediyorum ve yine de oldukça güzel bir şekilde düşme eğilimi gösteriyor. Bunu bir süredir yapıyorsunuz, eğer yaparsanız sorun değil.)

Çok fazla refactor etmeyin. Kodumuz hakkında hala geri bildirim almak istiyoruz, çünkü her zaman bilmediğimizi bilmediğimiz şeyler var . Mükemmellik burada düşmanınızdır. Yeterince iyi yapın, okunabilir yapın, sonra devam edin. Daha fazla değişiklik yapmak için mükemmel bir şey yapmanız gerekiyorsa, başka değişiklikler yaptığınızda bunu yapın.

Senaryolarınız hakkında iş paydaşlarınızdan geri bildirim alma fırsatınız varsa, ancak sizinle birlikte satılmıyorlarsa, senaryoları yazdıktan hemen sonra ve otomatikleştirmeden önce onlara gönderebilirsiniz. Kelimeleri eylemlerle ilişkilendirebilmeleri için kullanıcı arayüzünün bir maketini de göndermek isteyebilirsiniz. Bununla kodlamanın çok ötesine geçmeyin. Zaten yaptığınız şeyin yanlış olduğu varsayımıyla çalışın ve nasıl yapılacağını öğrenmek için geri bildirim almanız gerekir.

Son bir ipucu olarak, hikayeleri genellikle kullanıcının bakış açısından ifade etmeyin (senaryolar, evet, ancak hikayeler değil). Bunlar kullanıcı hikayeleri değil. Muhtemelen şöyle bir şey okumalıdır:

In order to attract people to my website
As @thom
I want users to easily convert months and days to days.

Zaten aradığınız daha yüksek seviye bir hedef var. Bu aynı zamanda ihtiyacınız olan yetenekleri belirlemenize de yardımcı olacaktır. Onunla iyi şanslar ve ekstra uzun yazı için özür dileriz.


1
'Lastik ördek' bölümü harika. Bunu düşünen tek kişi olduğumu sanıyordum!
NoChance

3

Herhangi bir şeyi kodlamadan önce senaryolarımı yazmalı mıyım yoksa önce bir senaryo yazmalı ve sonra kod yazmalı, tekrar bir senaryo yazmalı ve sonra kod yazmalı mıyım ...?

Her ikisi de işe yarayacak. Birini seçin.

Çok önemli değil.

Ne kadar çok senaryoya sahip olursanız, o kadar çok tasarım yapabilirsiniz.

Ne kadar çok senaryoya sahip olursanız, bir şeylerin yapılması o kadar uzun sürer.

Kodumda ne zaman yeniden düzenleme yapmalıyım? Özellik yapıldıktan sonra veya her senaryo uygulamasından sonra?

Hayır. Bir sonraki senaryoyu tasarlamak zorlaştığında yeniden düşünürsünüz .


Yeni bir soru sordum ... "Senaryolarımı daha önce yazsam ...". Lütfen bir göz atabilir misiniz? Çok teşekkür ederim.
thom

1
@ S.Lott İyi bir cevap ama bir kelime oyunu: kırmızı-yeşil-refactor döngüsünün kullanışlılığına dayanarak, her yeşil testten hemen sonra, BDD işlemi sırasında sürekli olarak yeniden düzenleme önerebilirim.
Rein Henrichs

@Rinrich Henrichs: Bir alternatif, bir hikaye için tüm testleri bitirmek için yeniden düzenlemenin kodlamanın kaçınılmaz ve kaçınılmaz bir parçası olduğunu belirtmek olacaktır. Harika bir tasarım bile tüm üsleri kapsayamaz. Bu yeniden düzenleme söz etmeye değmezdi. Ancak, güzel işaret. Bununla birlikte, öyküler arasında yeniden düzenleme yapmak, daha ciddi ve zaman alıcı bir işlemdir, çünkü özellik seti hikayelerin birikmesiyle gelişir.
S.Lott

3

Açıklayıcı fiiller kullanın

Feature: CONVERT Months and days to days

Hikayelerde tasarım kararları vermeyin ["Bir web sayfasına ihtiyacım var" tasarım kararıdır]

As a date conversion fan
I want to convert days and months into days

İş değeri hedeflerini hikayelerde kullanma

So that [some business reason]

Kodlamaya başlamadan önce mümkün olduğunca çok özellik ve hikaye yazın; hikayeler birbirlerini bilgilendirir , özellikleri etkiler ve tasarımı bilgilendirir.

Her hikayeden sonra refactor. Kırmızı-Yeşil-Elden Geçirme.


+1, İyi cevap. Peki dış, kabul-test döngüsü yerine iç, birim-test döngüsünün bir parçası olarak refactor için "BDD yolu" değil mi?
pdr

@pdr: demek istediğim bu, her hikayeden sonra yeniden düzenleme. BDD / TDD testleri, üniteden kabulüne kadar ölçeklendirilir, sadece bir döngü vardır (aklımda) ;-)
Steven A. Lowe

Neden bir web sayfasına ihtiyacım var? Teşekkürler!
thom

@thom: kullanıcı hikayeleri, nasıl uygulanacağını değil, kullanıcının ne yapmak istediğini ifade etmelidir. Başka bir deyişle, özellikler, hikayeler ve senaryolar gereksinimler ve işlevsel özelliklerdir. Resmin tamamını alana kadar tasarım kararları almayın. Bu (muhtemelen yapay) örnekte, genel olarak kullanıcının iş ihtiyaçları, bir web sayfasının en uygun çözüm olmayabileceğini gösterebilir - bir masaüstü widget'ı veya mobil uygulama, nasıl / ne zaman kullanmaları gerektiğine bağlı olarak daha iyi olabilir. Uygulama ayrıntıları hikayeleri karıştırır ve sizi çok yakında belirli bir tasarıma kilitleyebilir.
Steven A. Lowe
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.