TDD != Unit Testing (3)

วันนี้มีโอกาสคุยกับน้องบีม มีคำถามน่าสนใจว่า “เมื่อไหร่ควรใช้ TDD และเมื่อไหร่ไม่ควรใช้?” คุยกันจนครบชั่วโมงแล้วยังไม่ได้ข้อสรุป แต่ทำให้ระลึกถึงโพสเก่าที่เคยเขียนเกี่ยวกับ TDD และ Unit Testing เลยเอามาเขียนต่อเป็นภาคสาม
มาเริ่มกันที่คำก่อน TDD นั้นย่อมาจาก Test Driven Development เพราะมันมีคำว่า Test และยังต้องเขียน Test code ด้วย เลยทำให้หลายคนเข้าใจว่ามันเป็นการเทส เลยคิดต่อไปว่า งานบางอย่างมันไม่ต้องเทสเท่าไหร่ หรือเทสแมนนวลเอาก็ได้เพราะไม่ได้ใช้ระยะยาว อย่างพวก data migration หรือ ออก adhoc report อะไรทำนองนี้ แต่ถ้าเอาวิชาภาษาอังกฤษเบื้องต้นมาจับจะเข้าใจ ลองมาดูคำว่า history book มันเป็นหนังสือ หรือเป็นประวัติศาสตร์ล่ะ หรืออย่าง flash card มันเป็นแฟลช หรือเป็นการ์ด เพราะฉะนั้น TDD นี่มันเป็น Test หรือเป็น Development ไม่เถียงนะว่ามันมีเรื่อง test เข้ามาเกี่ยวด้วย เหมือน history book ก็เกี่ยวกับประวัติศาสตร์ และ flash card มันก็มี flash memory แต่ตัวจริงกับส่วนประกอบต้องแยกกันให้ออก

แล้วเรื่องนี้มันมาเกี่ยวกับคำถามตั้งต้นของเราอย่างไร? การทำความเข้าใจรากนั้นสำคัญเพราะจะทำให้เรารู้ว่าที่ถูกแล้วมันต้องเป็นเช่นไร ในเมื่อมันเป็นการพัฒนาไม่ใช่การเทสแล้ว มันก็จะมีคุณสมบัติเหมือนการพัฒนาซอฟแวร์ทั่วๆ ไปนั่นแหละ คือ ประกอบด้วยการ design, code, test, แล้วก็ deploy แต่มันกลับกันนิดหน่อยคือ แทนที่จะเรียงจากซ้ายไปขวา มัีนกลับเรียงจากขวามาซ้ายแล้ววนซ้ำเป็น deploy, test, code, design แต่เปลี่ยนไปใช้คำเรียกอีกอย่างว่า run, test, code, refactor (จำได้ว่าเคยทำ presentation เรื่องนี้ไปแล้ว ถ้าหาไม่เจอบอกมานะครับจะค้นให้)

เมื่อเรารู้ว่ามันเป็นการพัฒนา ไม่ใช่การเทสแล้ว และมีการเดินถอยหลังกับเปลี่ยนคำเรียก ตอนนี้ก็ง่ายขึ้นเพราะ เรารู้ว่าทางเลือกอื่นที่ไม่ใช่ TDD จะมีอะไรบ้าง ตัวอย่างเช่น waterfall, iterative, rapid prototyping, ฯลฯ แต่ละแบบก็มีข้อดีข้อเสียแตกต่างกันไป และตามแต่ ความชอบความถนัดของแต่ละคน

สุดท้ายผมขอยืมคำน้องบีมมาละกันว่า “TDD นั้นเป็นสไตล์ในการพัฒนา(ซอฟแวร์)” ถ้ามันเหมาะก็ใช้ ถ้าไม่เหมาะก็ไม่ใช้ครับ ไม่มีข้อจำกัดว่าต้องใช้จึงจะเป็นอไจล์ได้อะไรอย่างนั้นเลย

Link
TDD != Unit Testing
TDD != Unit Testing (2)

Advertisements

ใส่ความเห็น

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s