หยุดวงจร Code-Test-Bug-Fix

ช่วงนี้ทีมที่กำลังโค้ชอยู่เกิดแรงกดดันมหาศาลจากการที่เพิ่ม feature แล้วเกิดผลกระทบที่เรียกว่า side-effect จนถึงขั้นไม่ได้สามารถ launch ได้ตามกำหนด ต้นเหตุสำคัญคือวงจรอุบาทว์ที่ชื่อว่า

Code-Test-Bug-Fix

ผมทดลองเดินถามใครต่อใครว่าได้ยินชื่อวงจรนี้แล้วรู้สึกอย่างไร คนส่วนใหญ่ได้ยินก็บอกว่า มันเรื่องธรรมดานี่นา ไม่เห็นจะแปลกตรงไหน ผมไม่ได้ถามต่อว่าชอบมั้ย แต่คิดว่าร้อยทั้งร้อยคงตอบว่า “ไม่”

ถ้าไม่แล้วทำไมคนส่วนใหญ่จึงยังคงทนอยู๋กับมันได้นะ? คงเป็นเพราะพวกเขายังไม่รู้ว่า พวกเราไม่จำเป็นต้อง “ทน” พูดแล้วก็คิดถึงโฆษณาธนาคารแห่งหนึ่งที่บอกว่า “เราไม่ต้องจ่ายค่าธรรมเนียมโอนก็ได้” ซึ่งถ้ามองย้อนกลับไปสิบปี มันคงเป็นเรื่องที่ฟังเหมือนเป็นไปไม่ได้แน่ๆ

มาว่าเรื่องวงจนนี้กันหน่อยดีกว่า เผื่อคนที่ไม่ได้เป็น developer/tester จะได้เข้าใจมัน เป็นธรรมดาที่เมื่อเราทำซอฟแวร์ feature ต่างๆ มันคงไม่ได้เพิ่มมาได้เอง แต่เราต้องเขียนโค้ดเพิ่มเข้าไป นี่คือ Code พอเราทำเสร็จ เราก็ต้องการตรวจสอบว่ามันทำงานถูกต้องหรือไม่ เราจึงทำการ Test แต่ก็อีกนั่นแหละ ไม่เคยมีใครทำถูกเลย ไม่รู้ทำไม เพราะไร้ฝีมือ เพราะไม่ใส่ใจ เพราะดีไซน์ผิด เพราะๆๆๆ ไม่รู้จบ แต่ก็ปฏิเสธไม่ได้ว่า มันไม่ถูก เรามักเรียกความผิดพลาดนี้ว่า Bug พอเจอความผิดพลาดมันก็ไปต่อไม่ได้ จนกว่า จะแก้ไขมันก่อน นั่นคือ Fix ซึ่งเป็นการเริ่มต้องวงจรนี้ซ้ำไปเรื่อยๆ ไม่รู้จบ จนกระทั่ง เวลา หรือ เงิน จะหมด ซึ่งไม่เคยสร้างซอฟแวร์ที่สมบูรณ์เลย

วิธีการหลุดจากวงจรอุบาทว์นี้คือ การคิดย้อนกลับ ซึ่งผมเรียกเป็นภาษาผมเองว่า “เดินถอยหลัง” หรือที่เรารู้จักกันดีในชื่อของ TDD (Test Driven Development) คือ

Test-Code-Refactor

กระบวนการนี้ เริ่มต้นจากการสร้าง test cases เสียก่อน คือ จะต้องมีกี่เคส ที่ซอฟแวร์เราจะต้องทำได้ แล้วจึงเขียนโค้ดที่ทำตามนั้นได้ เมื่อทำได้ทั้งหมด ก็ถือว่าโค้ดสมบูรณ์ หลังจากนั้นก็ทำการ refactor เพื่อให้โค้ดสะอาดพร้อมรับการเปลี่ยนแปลงใหม่ๆ โดยไม่ทำให้ค่าใช้จ่ายเพ่ิมสูงเกินไป

แล้ว Bug หายไปได้อย่างไร เพราะเราสร้าง test cases ก่อน แล้วจึงโค้ด เมื่อโค้ดครบตาม test cases เหล่านั้น จึงเป็นไปไม่ได้ที่กระบวนการ test จะเกิด bug ได้ ยกเว้น มี test cases ลับที่ไม่เคยเปิดเผย อันนี้ย่อมเป็น new feature หาใช่ bug ไม่ เพราะเมื่อไม่เคยเปิดเผย ย่อมไม่มีการ implement ย่อมไม่ใข่ bug (ถ้างง หาอ่านเรื่อง done != complete)

เทคนิคนี้เปรียบเสมือน เรารู้ข้อสอบก่อน สอบอย่างไรก็คงได้คะแนนเต็ม อย่างแน่นอน

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