Refactoring เป็นวินัยที่นักพัฒนา software ที่ดีพึงกระทำ
เพื่อทำการปรับปรุงโครงสร้าง code ให้ดียิ่งขึ้น
โดยไม่ทำการเปลี่ยนแปลงพฤติกรรมการทำงาน
นั่นคือ
ถ้าทำงานถูกอย่างไร ก็ต้องถูกอย่างนั้น
ถ้าทำงานผิดอย่างไร ก็ต้องผิดอย่างนั้น (จะทำไปทำไม ?)
ปัญหาของการ refactor code คือ
เราจะมั่นใจได้อย่างไรว่า
หลังจากที่ทำการแก้ไขไปแล้ว การทำงานยังเหมือนเดิม ?
พฤติกรรมการทำงานยังเหมือนเดิม ?
ภายใต้เงื่อนไขที่เราสามารถกำหนดได้
คำตอบคือ ต้องทำการทดสอบนั่นเอง !!
ประเด็นหลักคือ code ของระบบที่เราต้องการ refactor นั่น
มีชุดการทดสอบหรือไม่ ?
ตอบได้เลยว่า ไม่มี !!
หนักกว่านั้น code ของเราสามารถเขียนชุดการทดสอบได้ง่ายหรือยาก ?
สิ่งต่าง ๆ เหล่านี้มันคือ ความท้ายทายอย่างยิ่งสำหรับนักพัฒนา
Code ต่าง ๆ ที่มีคุณลักษณะเช่นนี้มักจะถูกเรียกว่า Legacy Code
บ่อยครั้งนักพัฒนามักจะได้รับมอบหมายงานให้เข้าไปแก้ไข Legacy Code !!
เช่นหัวหน้าหรือ manager ไปรับงานมาจากไหนก็ไม่รู้
จากนั้นทำงานโยน Legacy code มาให้แก้ไข
ที่สำคัญ
ไม่มีใครรู้เลยว่า code เหล่านี้ทำงานจริง ๆ อย่างไร ?
ไม่มีใครรู็เลยว่า code เหล่านี้ทำงานกับระบบอื่น ๆ อย่างไร
มีเอกสารนะ แต่ไม่ตรงกับ code เลย
หรือมีแต่เหมือนไม่มีนั่นเอง พูดสวย ๆ หน่อยคือ มีแต่ไม่ครบ
คำถามคือ ทำอย่างไรดี ?
ระหว่างทำ กับ ทำ !!
ประเด็นที่น่าสนใจคือ
จะทำอย่างไร ให้คุณรู้ว่าระบบทำงานอย่างไร ?
จะเริ่มอย่างไรดี ?
คำตอบที่น่าสนใจ และ ต้องทำคือ สร้างชุดการทดสอบขึ้นมา
ไม่ว่าจะเป็น manual test หรือ automation test
แต่ขอให้มีหรือเกิดขึ้นมา
เพื่อให้เราเรียนรู้พฤติกรรมต่าง ๆ ของระบบ
แต่ถ้าต้องการให้สามารถทดสอบซ้ำได้
มันก็ต้องเป็น automation test นั่นเอง
แต่การสร้างก็ไม่ง่ายเลย
ถ้า code ของระบบมันผูกมัดกันอย่างรุนแรงแล้ว
ก็ต้องแยก หรือ isolate การทำงานส่วนต่าง ๆ ออกจากกันให้ได้
นั่นคือ code ของเรามันทดสอบได้ไหม (Testable code)
ถ้าไม่ นั่นมันคือความท้าทายอีกแล้ว (เยอะแยะไปหมด !!)
ดังนั้น
ถ้าคุณเพียงเพิ่มความสามารถเข้าไปใน code ที่ไม่มี test
มันอาจจะไม่ส่งผลกระทบมากเท่าไร
แต่ถ้าคุณต้องทำการ refactor code ที่ไม่มี test แล้ว
มันคงไม่มีอะไรที่ดีไปกว่า
การเขียน test อีกแล้วนะครับ
สุดท้ายแล้วมันก็มีทางเลือกให้คุณว่าจะทำอย่างไร ?
- ช่างมันเถอะ ทำ ๆ ไปให้มันทำงานได้ ไม่มีเวลาแล้ว
- มาปรับปรุงให้มันดีขึ้น
- ไม่ไหวแล้ว เขียนใหม่กันเถอะ
- ให้คนอื่น หรือ จ้างบริษัทมาเขียนแทน
- ออกดีกว่า
ถ้าเป็นคุณ คุณจะเลือกเส้นทางไหน ?