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 อีกแล้วนะครับ

สุดท้ายแล้วมันก็มีทางเลือกให้คุณว่าจะทำอย่างไร ?

  • ช่างมันเถอะ ทำ ๆ ไปให้มันทำงานได้ ไม่มีเวลาแล้ว
  • มาปรับปรุงให้มันดีขึ้น
  • ไม่ไหวแล้ว เขียนใหม่กันเถอะ
  • ให้คนอื่น หรือ จ้างบริษัทมาเขียนแทน
  • ออกดีกว่า

ถ้าเป็นคุณ คุณจะเลือกเส้นทางไหน ?