Code Smell & Refactoring ตอนที่ 2
จากครั้งที่แล้ว เรารู้จักความหมายของ Code Smell และ Refactoring กันแล้วนะครับ
วันนี้ Stream Magento ทีม Code คุณภาพ  มาพูดถึง Code Smell ในแต่ละชนิดกันครับ หากเรารู้ว่า Code Smell มีลักษณะอย่างไร เราก็จะป้องกันการเกิด Code Smell ได้ตั้งแต่ต้น และสามารถรู้จุดที่จะ Refactoring ให้ Code มีคุณภาพได้ครับ และอย่างไรก็ตามการใช้ Unit Testing Framework ตั้งแต่ต้นก็จะสามารถ Refactoring ได้ง่ายและปลอดภัย

ในครั้งนี้เราจะมาเล่าเกี่ยวกับประเภทของ Code Smell กันก่อนนะครับ เพื่อให้เข้าใจในภาพกว้างก่อนที่จะรายละเอียด Code Smell มีการแบ่งประเภทไว้ใหญ่ๆ  5 ประเภท

1. Code Smell แบบบวมๆ(Bloaters)

pic-of-david-and-goliath

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

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

2. Code Smell แบบใช้ OO  แบบผิดๆ(Object-Orientation Abusers)

use-your-tools

วิธีการหรือแนวทางการเขียนโปรแกรม แม้จะมีหลากหลายแบบตามการใช้งาน แต่ก็ปฏิเสธไม่ได้ว่า การเขียนโปรแกรมเชิงวัตถุ ( Object-oriented programming, OOP) ได้รับความนิยมนำมาพัฒนาในงานธุรกิจเป็นอย่างมาก OOP คือรูปแบบการเขียนโปรแกรมคอมพิวเตอร์ ที่ให้ความสำคัญกับ วัตถุ ซึ่งสามารถนำมาประกอบกันและนำมาทำงานรวมกันได้ โดยการแลกเปลี่ยนข่าวสารเพื่อนำมาประมวลผลและส่งข่าวสารที่ได้ไปให้ วัตถุ อื่นๆที่เกี่ยวข้องเพื่อให้ทำงานต่อไป โดยหลักการ OO มีหลักการขั้นตอนที่เป็นที่ยอมรับกันในระดับสากล แต่ก็ไม่แปลกที่มีการละเมิดหลักการเหล่านั้น หรือการใช้งานแบบผิด เนื่องจากผู้เขียนเองไม่ทราบหลักการนั้นๆ หรือขี้เกียจ หรือสุดแท้แล้วแต่เหตุผล ดังนั้น Object-Orientation Abusers ก็คือ โปรแกรมที่ไม่สมบูรณ์ตามหลักการ หรือผิดหลักการการเขียนโปรแกรมเชิงวัตถุนั้นเองครับ

เนื้อหาชักจะมากเกินไป ครั้งนี้เอาไว้เพียงแค่นี้ก่อน ในครั้งต่อ ๆ ไปเราจะมาพูดถึง Code Smell 3 ประเภท  ที่เหลือนะครับ

Stream Magento ทีม Code คุณภาพ

Sources

  • Refactoring: Improving the Design of Existing Code – Martin Fowler
  • Mäntylä, M. V. and Lassenius, C. “Subjective Evaluation of Software Evolvability Using Code Smells: An Empirical Study”. Journal of Empirical Software Engineering, vol. 11, no. 3, 2006, pp. 395-431.