วันพฤหัสบดีที่ 25 กันยายน พ.ศ. 2551

Process ที่เป็นอยู่

while (true) {
identify_and_fix_bottlenecks();
drink();
sleep();
notice_new_bottleneck();
}

This loop runs many times a day.

BDD with easyb

หลายสัปดาห์มาแล้วได้เรียนรู้เกี่ยวกับ BDD :: Behavior Driven Development ซึ่งฟังดูไปจะคล้ายๆ กับ TDD :: Test-Driven Developement แต่แตกต่างตรงที่

TDD คือ เขียน test -> coding -> Run Test -> Refactoring

แต่ BDD นั้นจะเป็นการทดสอบระบบงานให้เป็นไปตาม specification/requirement ไม่ได้ทำการทดสอบในระดับ unit test แต่การพัฒนานั้นสามารถใช้คู่กันได้อย่างปกติ [ BDD ไม่ได้มาทดแทน แต่มาช่วยทำให้ทั้งฝ่าย business และ developer เข้าใจกันมากขึ้น ]

TDD -> test
BDD -> spec

ฺBDD framework มีหลายตัวที่น่าสนใจเช่น
RSpec :: http://rspec.info/
JBehave :: http://jbehave.org/
easyb :: http://easyb.org/
JDave :: http://www.jdave.org/

framework ที่ผมสนใจคือ easyb เนื่องจากพัฒนาเพื่อใช้งานบน java platform และที่สำคัญสามารถใช้งานกับ groovy และ grails ได้ครับ

มาดูการใช้งานคร่าวๆ

ก่อนอื่นต้องเข้าใจ story และ specification
โดย story จะประกอบด้วย scenario ซึ่งใน scenario แต่ละตัวจะมี
- Given
- When
- Then

ตัวอย่างของ scenario
scenario "check username/password", {
given "user account already exists", {
}
when "user logins", {
}
then "should return a valid account", {
}
}

ใน { ... } นั้นสามารถแทรก code การทำงานในแต่ละส่วนเข้าไปเพื่อทดสอบได้

มาดูการ run easyb กัน
1. download easyb จาก http://easyb.org/download.html
2. extract และ run ตามนี้
java org.disco.easyb.BehaviorRunner MyStory.groovy

-> MyStory.groovy คือ story ที่เก็บ scenario ด้านบน โดยชื่อ file ต้องมี suffix เป็น Story

3. สามารถ generate report ได้ 2 แบบคือ
3.1 Text file
>>java org.disco.easyb.BehaviorRunner MyStory.groovy -txtstory mystory.txt

3.2 Xml file
>>java org.disco.easyb.BehaviorRunner MyStory.groovy -xmleasyb mystory.xml

ใน easyb version 1.0 จะสามารถ generate เป็น html ได้ครับ ต้องตั้งหน้าตั้งตารอคอยครับ

ถ้าต้องการใช้ใน grails สามารถใช้ plug-in มาช่วยได้ที่นี่ครับ EasyBTest

ใช้งานก็ง่ายดังนี้ครับ
การติดตั้ง
$grails install-plugin grails-easybtest-latest.zip

ทดสอบ run
$grails easyb-test


ส่วน BDD Framework ภาษาไทยก็มีนะครับ คือ TSpec

นี่ก็คือจุดเริ่มต้นในการศึกษาและใช้งาน BDD ครับ

Web Reference
http://www.grails66.com
http://easyb.org/
http://java.dzone.com/articles/is-easyb-easy
http://www.javaworld.com/javaworld/jw-09-2008/jw-09-easyb.html