BDD (Behavior Driven Development) คืออะไร ?
BDD คืออะไร ?
BDD คือ รูปแบบการพัฒนาซอฟต์แวร์ที่มีการสร้าง test ขึ้นมาก่อนการ coding เหมือนกับ TDD ครับ เพียงแต่จะมีการบิดมุมมองเพื่อที่จะแก้ปัญหาของ TDD บางประการ ได้แก่
– ไม่สามารถตอบคำถามได้ว่าควรเริ่ม test จาก case ไหนก่อน?
– Tester สร้าง test case ไม่ถูก/ไม่ครอบคลุม/มากเกินความจำเป็น เนื่องจากไม่รู้ Behavior(พฤติกรรม) ของผู้ใช้- – ในการ test ครั้งหนึ่ง จะต้อง test ละเอียดขนาดไหน?1
– ชื่อ test case และ test script ของ TDD ยากแก่การเข้าใจ หากไม่ใช่ Tester/Programmer (เช่น stakeholders, PM, BA, SME) เพราะภาษาที่ใช้มีความสอดคล้องกับ User story น้อย
– และเมื่อเกิดความผิดพลาด จะเข้าใจยากว่าทำไมผลถึงออกมาผิดพลาด
Dan North ซึ่งเป็นคนมองเห็นปัญหาเหล่านี้ ได้พยายาม ปรับ TDD ให้ดีและเข้ากับ Agile มากยิ่งขึ้น (จนบางคนมองว่า BDD ก็คือ TDD done well หรือ TDD ที่ทำออกมาได้ดีนั่นเอง) เค้ามองว่าทำไมเราถึงไม่เอา Acceptance Testing ซึ่งเป็นสิ่งที่ลูกค้าเข้าใจง่ายๆ อยู่แล้ว มารวมกับ Unit Testing ซะหล่ะ!! เพราะ Acceptance Testing จะเป็นตัวบอกอยู่แล้วว่าควรจะ test แค่ไหนลูกค้าถึงจะพอใจ และยอมปล่อย release แรกออกไปได้
ตัวอย่างการเขียน BDD
โดย User story ข้างต้น จะมีความหมายดังนี้
- Storyเรื่องราวที่กำลังจะ test (อาจเขียนเป็น class)
- Scenarioคำอธิบายรวมๆ ของ test (method ที่กำลังจะ test)
- Givenค่าที่กำหนดให้ (ส่วนใหญ่เป็นการ mock data หรือการสร้างข้อมูลจำลอง)
- Whenเหตุการณ์หลักของ Scenario นั้น เช่น การที่ user กดบันทึก เป็นต้น
- Thenผลของ Scenario นั้น หรือ user ควรได้รับผลแบบไหน ซึ่งเราจะต้องทำการตรวจสอบ (Assert) ค่าว่าตรงตามที่ Scenario ได้กำหนดไว้หรือไม่
หากลองเอามาเขียนโค้ด ก็จะได้ประมาณนี้ (เขียนด้วย JBehave ซึ่งเป็น tool สำหรับทำ BDD ของ Java)
สำหรับสาย Front-end เราก็สามารถทำ BDD กับการเขียน JavaScriptได้เหมือนกันด้วย Jasmine รูปแบบของโค้ดจะมีหน้าตาประมาณนี้ครับ