ได้อ่านเอกสารเรื่อง Refactoring :: When Do i Start ? ของคุณ J. B. Rainsberger
แล้วคิดว่าน่าจะมีประโยชน์ จึงได้ทำการสรุปออกมา
โดยเน้นย้ำเรื่องของ refactoring คืออะไร
และอธิบายความแตกต่างระหว่าง refactoring กับ rewrite
ส่วนเรื่องอื่นๆ เอาไว้สรุปกันวันอื่น

เริ่มต้นอธิบายว่า Refactoring คืออะไร

คือการกระทำเพื่อปรับปรุงการออกแบบของ code ที่มีอยู่แล้ว
ถ้าไปดูความหมาย Refactoring จากคุณ Martin Folwer จะเขียนไว้ว่า
เป็นการเปลี่ยนแปลงโครงสร้างของ code โดยไม่เปลี่ยนแปลงพฤติกรรมการทำงาน

ซึ่งทางคุณ J. B. Rainsberger ได้อธิบายว่า มันจะขาดเรื่องของการปรับปรุงไป
นั่นหมายความว่า Refactoring มันควรจะหมายถึง วิธีการหรือการกระทำ
เพื่อแก้ไขปัญหาแบบเฉพาะเจาะจงใน code
โดยให้ความสำคัญกับการปรับปรุง code ให้ดีขึ้นด้วย
การปรับปรุงนั้นจะเป็นไปในแบบค่อยเป็นค่อยไป

ปัญหาที่จะทำการแก้ไขและปรับปรุงนั้น จะถูกเรียกว่า Code smell
ดังนั้นถ้าเราสามารถหา Code smell ได้ เราก็สามารถระบุปัญหา
และส่งผลให้สามารถทำการ Refactoring ได้อย่างถูกจุด
และสุดท้าย Code smell ก็จะค่อยๆ หายไปในที่สุด

ปล. ถ้าคุณหา Code smell ไม่ได้ การ Refactoring จะไม่เกิดผลอะไรเลย
เนื่องจากคุณต้องการปรับปรุงโครงสร้างของ code ให้ดีขึ้นกว่าเดิม

ดังนั้นมาดูกันว่า refactoring ทำกันอย่างไร และต่างจาก rewrite อย่างไร

1. ทำ refactoring เพื่อดูแลรักษณะพฤติกรรมการทำงานเดิมของระบบไว้
แต่ในการ rewrite นั้นอาจจะทำการแก้ไขหรือเปลี่ยนแปลงพฤติกรรมการทำงานของระบบ
ซึ่งมันเป็นวิธีการที่แย่มาก และอาจก่อให้เกิดเหตุการณ์ที่เลวร้ายอย่างมาก
จากการเปลี่ยนแปลงดังกล่าว

2. ทำ refactoring จะเริ่มจาก code ที่มีอยู่แล้ว และเราพยายามเปลี่ยนหรือทำให้ดีขึ้นตามความต้องการ
ส่วน rewrite นั้นอาจจะเกิดมาจากการไม่มี code อะไรเลย เพื่อนำมาแทนที่ระบบหนึ่งๆ ที่เราต้องการเลย

3. ทำ refactoring สามารถทำการปรับปรุง code ได้เรื่อยๆ โดยไม่เกี่ยวข้องหรือสัมพันธ์
กับการ deploy งานเลย เนื่องจากการทำ refactoring จะไม่ส่งผลต่อการ deploy งาน
เนื่องจากสามารถทำการ deploy งานในระหว่างที่กำหลัง refactoring code ได้เลย
ซึ่งต่างจากการ rewrite ที่เราไม่สามารถไปขัดจังหวะระหว่างการพัฒนาได้เลย
เนื่องจากเป็นการเขียน code ของระบบที่ใหญ่มาก จะต้องรอให้พัฒนาเสร็จก่อนเสมอ

4. ทำ refactoring จะออกแบบ up-front น้อยมากๆ  ทำการเปลี่ยนเมื่อมีความจำเป็นจริงๆ
และสามารถหยุดได้เมื่อคิดว่าเหมาะสมแล้ว ไม่ใช่ว่าต้องดีที่สุดนะ
ส่วนการ rewrite จะมีการพูดคุยเพื่อวางแผนกันแบบเยอะมากๆ มองในทุกส่วน
ใช้เวลาในการวางแผนเยอะ แล้วนำแผนที่ได้ไป coding ต่อ
จะหยุดก็ต่อเมื่อทุกๆ อย่างต้องเสร็จ

5. ทำ refactoring นั้น เราสามารถทำหรือดูแลได้ทั้งระบบเก่าและระบบใหม่ พร้อมๆ กันได้
ส่วน rewrite จะต้องสลับไปมาระหว่างการดูแลระบบเก่าที่ยังใช้งานอยู่
กับระบบใหม่ที่กำลังพัฒนา ซึ่งก่อให้เกิดปัญหาตามมามากมาย

น่าจะพอทำให้เห็นว่า Refactoring ต่างจาก Rewrite อย่างไรนะครับ
และลองกลับไปดูว่า สิ่งที่เราทำอยู่คือการ refactoring หรือ rewrite กันแน่

พอสรุปเสร็จทำให้นึกถึงบทความในส่วน Reference เลย

refactoring-vs-rewriting

 

Reference Website
Why refactoring code is almost always better than rewriting it