Code Smell & Refactoring ตอนที่ 1
วันนี้ Stream Magento ทีม Code คุณภาพ จะมาแบ่งปันประสบการณ์พัฒนาระบบในเรื่อง Code Smell และ Refactoring เบื้องต้นเรามารู้จักความหมายของคำทั้งสองก่อน
ในการพัฒนาหรือการบำรุงรักษาซอฟแวร์นั้น สิ่งที่นักพัฒนาส่วนมากต้องการ :ความทนทานซอฟต์แวร์( robustness คือ เมื่อเกิดข้อผิดพลาดขึ้น เราจะยอมให้โปรแกรมทำงานต่อไป ), ใช้ง่าย-เรียบง่าย,นำกลับมาใช้ได้อีกครั้ง, ปรับเปลี่ยนได้ แต่ในการพัฒนาหรือการบำรุงรักษาซอฟแวร์นั้น นักพัฒนาส่วนมากจะมักพบคือ : ความเปราะบาง, ซับซ้อน, ไม่ยืดหยุ่น, และโค้ดอ่านไม่รู้เรื่อง ซึ่งทำให้ยากต่อการแก้ไข ยากต่อการนำมาใช้ใหม่ Code อ่านไม่ออกยุ่งเหยิง Code ซ้ำๆ Code ซับซ้อน ซึ่งมักเรียกว่า Legacy Code หรือ Spaghetti Code ใน Code เหล่านี้มี Code Smells มากมาย และผู้พัฒนาส่วนมากไม่รู้ว่า Code Smell คืออะไร
Code Smell คือ ลักษณะของ Code ที่ทำการพัฒนาขึ้นมา มีแนวโนมก่อปัญหาหรือข้อผิดพลาดที่อาจจะเกิดขึ้นได้ ซึ่งทำให้เวลาการพัฒนาล่าช้าเพิ่มอีก และมันสามารถเพิ่มความเสี่ยงให้เกิดปัญหาต่างๆ ในอนาคตได้ เช่น Code ในส่วนนั้นมีแนวโน้มเป็น Bug ในอนาคต หรือแม้กระทั่งทำให้ระบบล่มได้ แต่ก็มีกรณีที่ Code Smell อาจจะไม่ก่อให้เกิดความผิดพลาดเลยก็ได้ แต่มันสามารถใช้วัดคุณภาพของการออกแบบและคุณภาพของ Code ว่าอยู่ในระดับที่ไม่ดีนัก ซึ่งหมายถึง Code ยากต่อการแก้ไขและนำมาใช้ใหม่
Refactoring คือ การจัดองค์ประกอบและโครงสร้างภายในของซอฟแวร์ใหม่ โดยทำการปรับปรุงส่วนที่เป็น Code Smell หรือโครงสร้างของซอฟแวร์ให้มีความเป็นมาตรฐาน โดยที่การเปลี่ยนแปลงนั้น ไม่มีผลกระทบต่อผลลัพธ์เดิมของซอฟแวร์และการทำ refactoring ที่ดีและปลอดภัยนั้นมักทำร่วมกับการทำ Unit Testing Framework อย่างครอบคลุม ซึ่งจะการันตีได้ว่าผลลัพท์จะไม่ถูกเปลี่ยนแปลงไป
ซึ่งซอฟต์แวร์มีการพัฒนาไปนานๆ ก็มักจะมีการเพิ่มความซับซ้อน ซึ่งการทำ refactoring จะช่วยให้การออกแบบดีขึ้นและสามารถเข้าถึงปัญหาได้ง่ายกรณีที่ซอฟแวร์เกิดปัญหาขึ้น
แต่การทำ Refactoring ก็มีข้อจำกัดบางประการ ตัวอย่างปัญหาของการทำ Refactoring
– Refactoring ไม่สามารถแก้ไขได้ทุกปัญหา ต้องดูตามความเหมาะสมในการใช้
– Refactoring ถ้าเกี่ยวข้องกับ Database ควรระวัง
– Refactoring มีข้อจำกัดกับ Interface , Service หรือส่วนที่ Code ยุ่งจนเกินไป และเต็มไปด้วย bug ซึ่งจะไปกระทบกับหลายๆ ส่วน
– อย่าทำ Refactoring เมื่อใกล้เวลาส่งมอบงาน เพราะการทำค่อนข้างใช้เวลาพอสมควร
อย่างไรก็ตามหากเรารู้ว่า Code Smell มีลักษณะอย่างไร เราก็จะป้องกันการเกิด Code Smell ได้ตั้งแต่ต้น และการใช้ Unit Testing Framework ตั้งแต่ต้นก็จะสามารถ Refactoring ได้ง่ายและปลอดภัย
ในครั้งต่อ ๆ ไปเราจะมาพูดถึง Code Smell และ Refactoring ในแต่ละชนิด เครืองมือในการวิเคราะห์ และการทำงานของทีม Stream Magento
Stream Magento ทีม Code คุณภาพ