Change Risk Anti-Patterns (CRAP) คือ อะไร

พอดีผมได้ Review งานน้อง และดู Coverage Report ที่ได้ Generate จาก ReportGenerator แล้วในส่วน Risk Hotspots ตอนแรกมันจะมีแค่ตัว Cyclomatic complexity แต่ตอนนี้มีตัว Crap Score ขึ้นมาด้วย

มันเลยเป็นที่มา และสงสัยเลยเอามาเขียน Blog ครับ โดยสรุปสั้นๆก่อน

  • Cyclomatic complexity - Metric ที่ใช้วัดความซับซ้อนของของ Code เรา โดยถ้ามีเงื่อนไข (เช่น if, else, switch, for, while) จะยิ่งซับซ้อนขึ้น ค่ายิ่งน้อยยิ่งดีครับ
  • Crap Score - Metric ที่ใช้ประเมินความเสี่ยงของ Code หากมีการเปลี่ยนแปลงแก้ไข

Change Risk Anti-Patterns (CRAP)

จากความหมายสั้นๆไปแล้วมาดูความหมายเต็มๆกันครับ ว่า Change Risk Anti-Patterns (Crap) Metric ที่ใช้ประเมินความเสี่ยงของ Code หากมีการเปลี่ยนแปลงแก้ไข คิดค้นโดยคุณ Alberto Savoia / Bob Evans ซึ่งจะดูจากข้อมูล 2 ชุด ได้แก่

  • Cyclomatic complexity (CC) - วัดความซับซ้อนของ Code เรา
  • Code Coverage (coverage) - ว่า Code ที่เราสนใจ มีการเขียน Automated Test ครอบคลุมอยู่กี่เปอร์เซ็นต์
- สูตรการคำนวณของ CRAP
CRAP = CC² × (1 - coverage/100)³ + CC
- การตีความค่า CRAP

มันมีหลายเจ้าตั้งเกณฑ์ไว้ต่างกัน แต่เอาง่าย ยิ่งน้อย ยิ่งดี ครับ อย่างตัวอย่างนี้ เป็นเกณฑ์ + Recommend Action

CRAP ScoreDescriptionRecommend Action
0 - 30ยอมรับได้
30 - 60เริ่มอันตรายแล้วควรเขียน Test เพิ่ม หรือ Refactor Code
60 ขึ้นไปเสี่ยงสูงมากต้องรีบมาแก้ไขโดยการ Refactor Code
+ Test เพื่อลด Technical Debt ที่กำลังสะสม

Refactor Code - การแยกโค้ดยาวๆ ออกเป็นฟังก์ชันย่อยๆ หรือหลีกเลี่ยงการใช้ if/else ซ้อนกันหลายชั้น เป็นต้น

- Tools ที่มาช่วยวัดหละ

ถ้ามีคนทำของอยู่แล้วใช้ของเค้าสิ เช่น

ระหว่างที่ผม Research ไปพบว่าพวก Metric นี้ Idea ดีนะ

  • Code ที่ซับซ้อน - แต่ไม่มี Automated test คลุมอยู่เลย อันตราย และ Maintain ได้ยาก
  • แต่ Code ที่ซับซ้อน - มี Test ควบคุมอยู่ มันจะช่วยลดความเสี่ยงลงได้ แต่ต้อง Assert จริงๆนะ ล่าสุดผมไปเจอ Senior ไปปรับแล้ว Test พัง พี่แกเล่นใส่ Assert.IsTrue(True) อันนี้ก็ไม่ช่วยนะ
  • Automated test มันไม่ได้สมบูรณ์แบบ แต่มันช่วยให้เรามั่นใจขึ้นก่อนส่งมอบของ
  • Metric เป็นงานขึ้นหึง แต่มีคนเอามาใช้ ยิ่งในยุคของ AI Gen มีคนเอา CRAP มาช่วยวัด Code จาก AI + Technical Debt - ถ้าสนใจไปดู VDO ข้างล่างได้ แนะไว้แล้ว

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.