Skip to Content

Blog Archives

Code Smell & Refactoring ตอนที่ 4

Code Smell & Refactoring ตอนที่ 3
จากครั้งที่แล้ว เรารู้จัก ประเภทของ Code Smells ไป 4 ประเภทแล้วนะครับ ในครั้งนี้เราจะมาเล่าเกี่ยวกับประเภทของ Code Smell ประเภทสุดท้ายกัน

5. Code Smell แบบน้ําพึ่งเรือเสือพึ่งป่า (Couplers)

 

sqs-and-loose-coupling-17-638

หลักการพื่้นฐานในการออกแบบส่วนประกอบของซอฟแวร์ ศัพท์ที่จำเป็นต้องทราบมีสองตัวคือ  Coupling และ Cohesion
Cohesion คือ เป็นการบอกถึงความสอดคล้องกัน นั้นหมายความว่า ใน Class หนึ่่งคลา่ส Method ในคลาสนั้นๆควรจะต้องทำงานให้มีความสอดคล้องกัน การทำงานต่างๆที่ควรจะเป็นไปในทางเดียวกัน
Coupling คือ ระดับความเกี่ยวข้อง หรือ พึ่งพากันของ Object ต่างๆในระบบ  หากระบบใดมีความเกี่ยวข้องกันของ Object ที่สูงก็จะทำให้ระบบนั้นมีความอิสระนั้นต่ำ
สรุปอย่างตรงมาตรงไป การออกแบบส่วนประกอบของซอฟแวร์ที่ดี ต้อง Strong cohesion , loosely coupling นั้นก็คือ  พยายามเขียนโปแกรมให้สัมพันธ์สอดคล้องกันภายในคลาสให้มากที่สุด และพยายามลดความสัมพันธ์ระหว่าง class ให้น้อยที่สุด
Code Smell แบบน้ําพึ่งเรือเสือพึ่งป่า (Couplers) ก็เช่นเดียวกัน  คือ ความเกี่ยวข้องกันของ Class ต่างๆในระบบมีความเกี่ยวข้องกันมากเกินไป อาจจะทำให้เวลาทำการย้าย หรือ แก้ไข ก็ทำได้ลำบาก และเมื่อทำการแก้ไขส่วนใดส่วนหนึ่งของระบบ ก็อาจจะไปกระทบกับส่วนอื่นๆ ที่เกี่ยวข้องครับ Class ไม่เป็นอิสระต่อกัน

 

Bad-code-smells

สรุปหัวข้อประเภทของ Code Smell 

สรุปหัวข้อประเภทของ Code Smell ที่จะพูดถึงรายละเอียดในครั้งหน้าครับ
1. Code Smell แบบบวมๆ(Bloaters)

  • Long Method
  • Large Class
  • Primitive Obsession
  • Long Parameter List
  • Data Clumps

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

  • Switch Statements
  • Temporary Field
  • Refused Bequest
  • Alternative Classes with Different Interfaces

3. Code Smell แบบเด็ดดอกไม้สะเทือนถึงดวงดาว (Change Preventers)

  • Divergent Change
  • Shotgun Surgery
  • Parallel Inheritance Hierarchies

4. Code Smell แบบเอาไว้ก่อน (Dispensables)

  • Comments
  • Duplicate Code
  • Lazy Class
  • Data Class
  • Dead Code
  • Speculative Generality

5. Code Smell แบบน้ําพึ่งเรือเสือพึ่งป่า (Couplers)

  • Feature Envy
  • Inappropriate Intimacy
  • Message Chains
  • Middle Man
  • Incomplete Library Class

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

 

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.
0 1 Continue Reading →

Code Smell & Refactoring ตอนที่ 2

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.
0 0 Continue Reading →

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายการใช้คุกกี้ และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

Allow All
Manage Consent Preferences
  • คุกกี้ที่จำเป็น
    Always Active

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้

  • คุกกี้เพื่อการวิเคราะห์

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

Save