Code Smell & Refactoring ตอนที่ 1 

วันนี้ Stream Magento ทีม Code คุณภาพ  จะมาแบ่งปันประสบการณ์พัฒนาระบบในเรื่อง Code Smell และ Refactoring  เบื้องต้นเรามารู้จักความหมายของคำทั้งสองก่อน

ในการพัฒนาหรือการบำรุงรักษาซอฟแวร์นั้น สิ่งที่นักพัฒนาส่วนมากต้องการ :ความทนทานซอฟต์แวร์( robustness คือ เมื่อเกิดข้อผิดพลาดขึ้น เราจะยอมให้โปรแกรมทำงานต่อไป ), ใช้ง่าย-เรียบง่าย,นำกลับมาใช้ได้อีกครั้ง, ปรับเปลี่ยนได้ แต่ในการพัฒนาหรือการบำรุงรักษาซอฟแวร์นั้น นักพัฒนาส่วนมากจะมักพบคือ : ความเปราะบาง, ซับซ้อน, ไม่ยืดหยุ่น, และโค้ดอ่านไม่รู้เรื่อง ซึ่งทำให้ยากต่อการแก้ไข ยากต่อการนำมาใช้ใหม่ Code อ่านไม่ออกยุ่งเหยิง Code ซ้ำๆ Code ซับซ้อน ซึ่งมักเรียกว่า Legacy Code หรือ Spaghetti Code ใน Code เหล่านี้มี Code Smells มากมาย และผู้พัฒนาส่วนมากไม่รู้ว่า Code Smell คืออะไร

when-and-why-your-code-starts-to-smell-bad-3-638

Code Smell คือ ลักษณะของ Code ที่ทำการพัฒนาขึ้นมา มีแนวโนมก่อปัญหาหรือข้อผิดพลาดที่อาจจะเกิดขึ้นได้ ซึ่งทำให้เวลาการพัฒนาล่าช้าเพิ่มอีก และมันสามารถเพิ่มความเสี่ยงให้เกิดปัญหาต่างๆ ในอนาคตได้ เช่น Code ในส่วนนั้นมีแนวโน้มเป็น Bug ในอนาคต หรือแม้กระทั่งทำให้ระบบล่มได้ แต่ก็มีกรณีที่ Code Smell อาจจะไม่ก่อให้เกิดความผิดพลาดเลยก็ได้ แต่มันสามารถใช้วัดคุณภาพของการออกแบบและคุณภาพของ Code ว่าอยู่ในระดับที่ไม่ดีนัก ซึ่งหมายถึง Code ยากต่อการแก้ไขและนำมาใช้ใหม่

architectural-refactoring-5-638

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 คุณภาพ