Agile Meetup

ศุกร์ที่ผ่านมามี Meetup เกี่ยวกับ Software Development ที่นี่ซึ่งก็มีเป็นกลุ่มเลย คล้ายๆกับ Opendream ในไทยที่มีจัด Meetup เล่าเรื่องเทคนิคต่างๆในการทำระบบอะไรซักอย่างขึ้นมา เมื่อวานเป็นครั้งที่สองที่ไป Meetup ของที่นี่ แต่ก็ยังไม่คุ้นเคยอยู่ดี (พูดง่ายๆ คือฟังยังไม่ค่อยออก ฮะๆ) แต่ก็พยายามจะสรุปประเด็นที่พอฟังได้มาจดไว้ก่อน

Meetup คราวนี้จัดที่บริษัท Odd-e ตอนแรกก็คิดว่าคล้ายๆ Opendream ก็คล้ายจริงๆ นั่นแหละเพียงแต่ว่าพื้นที่น้อยกว่ากันเยอะ และคนที่มาก็มากกว่ากันพอสมควร เรียกว่าแทบจะเข้ามาฟังกันไม่ได้เลยหละ เนื้อหาที่พูดมีให้โหวตกันก่อนหน้านั้นสุดท้ายแล้วมีสองเรื่องคือ Maintainability, Extensibility, Testability กับ ATDD and BDD

เรื่องแรก Maintainability, Extensibility, Testability พูดถึงวิธีที่คนพูดใช้ในการทำเรื่องพวกนี้ต่างๆ ส่วนใหญ่จะเน้นไปที่ Aspect-J ว่าเอามาใช้แยก logic การทำงานให้ชัดเจนอย่างไร ทดสอบง่ายอย่างไร และเอา function เข้าและออกง่ายอย่างไร และการแยกแบบนี้มีข้อดีอย่างไร เมื่อแยกส่วนแล้วจะทดสอบยังไร สำหรับคนที่สนใจ Aspect-J ก็คงเหมาะกับ Session นี้

เรื่องที่สอง ATDD & BDD ตอนแรกก็ไม่เข้าใจว่า ATDD (Acceptance Test Driven Development) คืออะไรและ BDD(Behavior Driven Development) แตกต่างจาก Functional Test ยังไงมา Session นี้ทำให้เข้าใจขึ้นเล็กน้อยเพราะส่วนตัวแล้วยังข้องใจกับการเอา BDD มาใช้อยู่พอสมควร

ปัญหาของคนที่พยายามดัน BDD ขึ้นมาคิดว่าเพราะคนที่กำหนด Spec และเขียน Test ทั้งหลายเช่น Tester/QA จริงๆแล้วไม่ได้เชี่ยวชาญการเขียนโปรแกรมเลย (อันนี้เห็นด้วยร้อยเปอร์เซ็นจากประสบการณ์ทำงานกับ QA มาสองปี) ดังนั้นเค้าก็เลยพยายามแก้ให้ Tester/QA ไปรับ Spec มาแล้วก็เขียน Spec ที่เป็นภาษาคนแต่ไม่มีรูปแบบให้อยู่ในรูปแบบที่กำหนด เพียงพอแก่การเอาไป Parse ได้โดยที่ไม่มีรูปแบบของ function หรือหน้าตาของ programming language เลยแม้แต่น้อยจากนั้น Programmer ทั้งหลายก็จะเอา Test spec ที่เป็นภาษาคนแต่มีรูปแบบเหล่านั้นมารันโดย BDD Framework ต่างๆ ที่สามารถ parse รูปแบบเหล่านั้นได้เพื่อเชื่อมกับ Code จริงๆ ที่ต้องทำขึ้นแต่ไม่ใช่ภาษาคน

เนื่องจาก BDD เป็นแค่รูปแบบของการเขียน Test แบบหนึ่งที่ทำให้คนอ่านง่ายขึ้นแต่มันยังไม่ได้ครอบคลุมถึงขั้นตอน เพราะงั้นจริงๆ แล้วอาจจะเป็น Programmer เขียนก็ได้ก็เลยเกิดเป็น ATDD ขึ้นมาซึ่งก็คือ process การทำงานที่จะเอา BDD มาใช้โดยเริ่มจากคนที่คิด Feature หรือ Business requirement คุยกับ Tester/QA ให้ Tester/QA แปลงภาษาคนจัดออกมาเป็นรูปแบบที่ BDD เลือกใช้แล้วก็ส่งต่อไปที่ Programmer เล่นปิงปองกันจน BDD ทั้งหมดผ่าน แล้วก็เอาไปคุยกับคนให้ Requirement

รูปแบบพวกนี้ก็ไม่ได้เป็นอะไรใหม่เลยเพียงแต่ปรับปรุงให้มัน automate มากขึ้นจากแต่เดิมที่ programmer เป็นคนเขียน test เกือบจะกลุ่มเดียวก็ส่งต่อให้ Tester/QA บ้างโดยที่ Tester/QA ก็ไม่จำเป็นต้องเรียนรู้การเขียนโปรแกรมมากนัก แค่เขียนให้อยู่ในรูปแบบที่ตกลงกัน เนื่องจากเลือก BDD Framework มาก็พอ แต่ปัญหาคือการทำแบบนี้เพื่อให้ Tester/QA ทำงานสะดวกขึ้นแต่มันไม่สะดวกกับ programmer ที่จะเขียนอะไรยาวๆ เลย และโดยเฉพาะ บริษัทที่มีแต่ programmer ด้วยแล้ว เขียน functional test ที่เป็นภาษา program อาจจะเร็วกว่า ซึ่งมีคนแย้งมาอีกนั่นแหละว่าถ้าต่อไปมี Tester/QA เข้ามาคนเหล่านี้ก็จะเข้ามาดู test ที่เขียนขึ้นมาก่อนหน้านั้นได้ง่าย เพราะงั้นจริงๆแล้วจะเลือกใช้อะไรพวกนี้ก็คงแล้วแต่สถานะการณ์และกำลังคนช่วงนั้นหละ ว่าจะเอื้อขนาดไหน (สถานการณ์ส่วนตัวไม่เอื้อมากให้ทำพวกนี้อาจจะเหนื่อยกว่าเดิมฮะๆ) ซึ่งถ้ามีเวลา เงินและจำนวนคนก็คิดว่าอยากจะลองดูอยู่เหมือนกัน

หลังจากจบ Meetup นี้ก็แยกไปกับ @visibletrap และ @scalopus ต่อซึ่งก็ไว้เขียนได้อีกบล๊อกเลยเกี่ยวกับการอยู่อาศัยที่สิงคโปร์ฮะๆ บล๊อกต่อไปก็คงเป็น Meetup อาทิตย์หน้า (ช่วงนี้ถี่จริงๆ) ซึ่งไม่รู้จะเกี่ยวกับ Test หนักเหมือนครั้งนี้อีกหรือป่าว แต่หวังว่าคนจะน้อยกว่านี้นะ

แถมท้ายภาพบรรยากาศ Meetup วันนั้นซักรูปหน่อย ที่เห็นด้านล่างนี่ยังมาไม่ครบนะ!

About llun

Just a programmer

, , , ,

  • http://twitter.com/visibletrap TAP

    เป็นข้อจำกัดของ syntax ภาษามั้งผมว่า

    • http://llun.in.th/ llun

      ใช่ พอมาดูฝั่ง javascript เลยรู้สึกว่า BDD เป็นแค่ข้อกำหนดที่มีเพื่อให้เขียน test แล้วอธิบายคนอื่นเข้าใจ

      แต่อย่างที่ดูมาวันศุกร์ตอนแรกคิดถึงเค้าทำ DSL ขึ้นมาใหม่เพื่อทำ BDD โดยเฉพาะเลยจริงๆ นะ

  • http://twitter.com/visibletrap TAP

    ที่บริษัทผมใช้ RSpec และ Jasmine ที่เป็น BDD framework เขีียน unit test นะ ประโยชน์ก็เพื่อให้ dev กันเอง อ่าน test กันง่ายขึ้นแหละ 

    ที่เห็นชัดๆ เลยก็ เวลาเราจะตั้งชื่อ test ถ้าเป็น unit test framework ทั่วไป ก็ต้องตั้งเป็น camel/snakecase พอจะอธิบายละเอียดหน่อยก็จะเริ่มอ่านยาก ถ้าใช้ tool 2 ตัวนี้มันตั้งเป็น free-text ได้อันนี้เป็นตัวอย่างนึง (อาจจะสั้นไปหน่อย) http://kerryb.github.com/iprug-rspec-presentation/#3

    • http://llun.in.th/ llun

      ดูของ RSpec มันอ่านง่ายกว่าเยอะจริงๆ (สั้นกว่าด้วย!) แฮะแต่พอมาเป็นของ Jasmine มันยังมีโครงของ programming ที่ต้องเขียนเป็น function อยู่เลยรู้สึกไม่ต่างกับเขียนด้วย unit test ตัวอื่นเท่าไหร่