มารู้จัก SonarQube เครื่องมือ Clean Code ที่ช่วยลด Technical debt ระยะยาวกันเถอะ

Minchanok Sirapartkittitana
SRS Integration
Published in
3 min readNov 29, 2023

สวัสดีค่ะ วันนี้แฟร์จะมานำเสนอบทความของเครื่องมือที่จะช่วยพัฒนาการทำงานของ Application ตั้งแต่ต้นน้ำอย่าง “SonarQube” ให้รู้จักกันค่ะ หากเป็นผู้คนที่อยู่ในวงการไอทีอย่าง Programmer หรือ Developer Team คงจะคุ้นเคยกันอยู่แล้ว แต่หากว่ายังไม่รู้จัก วันนี้แฟร์อยากจะเล่าให้ฟังว่า การที่เราพัฒนา Code ที่ดีตั้งแต่เริ่มจะช่วยองค์กรในระยะยาวได้อย่างไรค่ะ

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

หากการเขียน Code มีข้อผิดพลาด ก็อาจทำให้ flow ทั้งหมดในการทำงานช้า เกิด bugs มีช่องโหว่ หรือเกิดการสะดุดใน Flow ทั้งหมดของการพัฒนา Application หรือ Features ใหม่ ๆ สำหรับองค์กรมา ซึ่งจะก่อให้เกิดผลกระทบทั้งในด้านการทำงานของทีมโดยรวม และส่งผลต่อการดำเนินการธุรกิจค่ะ เช่น Application ที่ควรจะปรับปรุงเสร็จภายในเวลา Downtime ที่ประกาศไว้เกิดเลื่อนขึ้นมา คงจะทำให้ User ไม่พอใจและพาลไปใช้บริการแอพอื่นแน่ ๆ เพราะเหตุนี้เอง ขั้นแรกของการพัฒนา Applications จากฝั่งทีม Developers จึงถือได้ว่าเป็นพื้นฐานแรกที่สำคัญมากและควรให้ความใส่ใจอย่างมากในการพัฒนา Applications ขึ้นมาค่ะ

นอกจากปัญหา Technical ที่อาจเกิดขึ้นจาก Human error ที่เกิดขึ้นจากการเขียน Code ที่ผิดพลาดนั้น (Bad Code) ยังมีอีกหนึ่งปัญหาที่เราเรียกกันว่า Technical debt นั่นก็คือ “การเขียนโค้ดโดยใช้วิธีลัดในอดีตที่ส่งผลมาถึงอนาคตทำให้คุณต้องแก้ไขอดีตของโค้ดนั้น” โดยสาเหตุอื่น ๆ อาจมาจากภาพด้านล่าง (Figure 1)

Figure 1 What causes technical debt?

ปัญหาที่ตามมาของ Technical debt นั้นแทบจะประเมินค่าไม่ได้เลยทีเดียวเนื่องจากทีม Dev ต้องคอยแก้ไขปัญหาที่เกิดจาก Code เดิมที่ทำผิดไว้โดยจะต้องทดสอบหลายครั้งเพื่อให้แน่ใจว่า Application หรือ Features ใหม่ ๆ ที่พัฒนาขึ้นจะทำงานได้ตามที่คาดไว้ และยังต้องศึกษาทำความเข้าใจเกี่ยวกับโค้ด “เก่า” ที่ “Dev คนเก่า” เคยเขียนไว้เมื่อหลายปีก่อน ด้วยเหตุนี้เองจึงได้มีการนำเครื่องมือ “Source code scan” เข้ามาช่วยในเรื่องของการพัฒนาโปรแกรม เพื่อให้เห็นภาพชัดเจนมากขึ้น แฟร์จะขอยกตัวอย่าง Case Study ขององค์กรที่ใช้ SonarQube ว่าหลังจากที่ได้มีการใช้ Tools เข้าไปใน Flow การทำงานใน Build & Test Stage (Figure 2) แล้ว ในระยะยาวส่งผลดีต่อองค์กรอย่างไรค่ะ

Figure 2 Developing with Sonar
Figure 3 Cisco Company

อ้างอิงจาก Sonarsource Customer Story — Cisco Cisco IT Engineer, Dhairya Sanghvi ได้กล่าวไว้ว่า ก่อนที่จะมี Tools SonarQube เคยมีปัญหาที่เกี่ยวข้องกับโค้ดมากมายที่เพิ่มขึ้นตามเวลาและทำให้มีการเสียค่าใช้จ่ายในการแก้ไขโค้ดเหล่านั้นเยอะมาก (Technical debt) โดยเกิดจากสาเหตุดังนี้:

  1. ขาดมาตรฐานของการเขียน Code ตั้งแต่ครั้งแรก เนื่องจากทำการตรวจสอบโค้ดและทำการวิเคราะห์ Code โดยรวมอย่างไม่เรียบร้อยและไม่เป็นระบบ รวมถึงไม่มีการตรวจสอบคุณภาพของ Code หลังจากการพัฒนาเสร็จและนำไปใช้ต่อ
  2. ไม่มีการเก็บรักษาข้อมูลหรือความเข้าใจชัดเจนเกี่ยวกับจำนวนของข้อบกพร่อง (Defect) ของ Code และไม่มีทางรับรู้ได้เลยว่าคุณภาพของ Code เปลี่ยนแปลงไปอย่างไรบ้างตลอดระยะเวลาการพัฒนา
  3. ระบบและกระบวนการที่ใช้สำหรับการตรวจสอบโค้ดไม่ได้มีมาตรฐาน เนื่องจากไม่มีเครื่องมือหรือกฎที่ใช้ในการทำ (Review process)

ซึ่งจากปัญหาที่บอกไว้ด้านบนเขากล่าวว่า Cisco IT ต้องการเปลี่ยนไปสู่เครื่องมือในการพัฒนาการเขียน Code ที่มีความสามารถในการรายงานคุณภาพของ Code ที่สามารถเข้าใจอย่างตรงกันได้ทั้งทีมพัฒนา ฝ่ายบริหาร หรืออื่น ๆ ที่เกี่ยวข้อง

SonarQube ช่วยตอบโจทย์ Cisco ในการพัฒนาการเขียน Code ได้อย่างไร?

จุดที่ทำให้ทีม Cisco IT มองว่า SonarQube นั้นเหมาะคือเรื่องการที่สามารถตอบโจทย์ที่ว่า ต้อง integrate กับ Jenkins ได้ดี ซึ่งโดยปัจจุบัน ทีม IT ของ Cisco ใช้ SonarQube ในการวิเคราะห์โค้ดมากกว่า 9 ล้านบรรทัด ในภาษา Java, PL/SQL และ C/C++ ใน 90 Applications โดยคาดหวังว่าจำนวนนี้จะเพิ่มขึ้นเป็น 150 ล้านบรรทัดซึ่งกระบวนการตรวจสอบ Software quality ได้รับการจัดการจากทางโดยทีมพัฒนาที่ตั้งอยู่ในสหรัฐอเมริกาและอินเดีย

ตามที่ Engineer ของ Cisco กล่าว, การนำ SonarQube มาใช้ใน Cisco IT ได้เป็นผลดีอย่างมากกับบริษัท (Three-fold business impact)

  1. Delivery excellence: มีการพัฒนา Application หรือ Features ต่าง ๆ ได้อย่างรวดเร็วมากขึ้น
  2. Engineering excellence: คุณภาพของ Code มีการพัฒนามากขึ้น
  3. Business value: ประหยัดต้นทุน (ทั้งแรงงานและเงิน) ในการแก้ไขปัญหาเกี่ยวกับ Code

โดยการย้ายการวิเคราะห์โค้ด (Code analysis) ไปยังขั้นตอนการ Develop และ Run Code นั้นเป็นประจำทุกวัน, Cisco IT ได้เพิ่มคุณภาพของโค้ดอย่างมีนัยสำคัญ ด้วย Flow การทำงานใหม่นี้การแก้ไข emergency bug ลดลงซึ่งนำไปสู่การประหยัดค่าใช้จ่ายสำหรับองค์กรอย่างมาก รวมไปถึง Defects หรือการเขียน Code ที่ผิดพลาดที่ถูกตรวจเจอในขั้นตอนแรกก็จะสามารถแก้ไขได้อย่างง่ายดายกว่าตรวจเจอหลังจากที่พัฒนาไปแล้ว โดยนอกจากประโยชน์ข้างต้นแล้ว ข้อดีต่อไปคือเรื่องของ Code Reviews ที่ทุกทีมได้ดำเนินการ Review Code ในที่เดียวกันโดยใช้เครื่องมือเดียวกัน SonarQube ช่วยประหยัดเวลาของทรัพยากรที่สำคัญ (Developer Team) ในการทบทวนโค้ด รวมถึงยังสามารถนำ rule sets ที่ทีมอื่นพัฒนาอื่น ๆ ที่เกี่ยวข้องมาใช้ได้ด้วยเช่นกันทำให้การเขียน Code มีมาตรฐานเดียวกัน (Good Code)

จาก Case Study ของ Cisco ทำให้เรารู้ว่าการที่มีกระบวนการพัฒนา Code ที่เรียกว่า Clean as you Code ตั้งแต่เริ่มของการพัฒนา Application จะช่วยลดความยุ่งยากของการทำงานในภายหลังรวมถึงลดปัญหาระยะยาว โดย SonarQube Tools นั้นตอบโจทย์ตั้งแต่ต้นจนจบในแง่ของการ Coding สำหรับทีมพัฒนา เพราะนอกจากจะช่วยตรวจสอบการเขียน Code โดยรวมแล้วนั้น ยังสามารถช่วยแนะนำได้ด้วยว่า Code ที่ควรจะเป็นคืออะไร (Features อื่น ๆ สามารถอ่านได้เพิ่มเติมที่ https://www.sonarsource.com/products/sonarqube)

ก็หวังว่าทุกคนที่ได้อ่านบทความนี้จะมีความเข้าใจมากขึ้นเกี่ยวกับ SonarQube นะคะ ถ้ามีข้อสงสัยอยากสอบถามเพิ่มเติมเกี่ยวกับเรื่องนี้ สามารถติดต่อ พวกเรา SRS Integration มาได้เลยนะคะ^^ หรือและถ้าสนใจบทความอื่นเพิ่มเติมก็สามารถติดตามได้ที่ https://www.facebook.com/SRSIntegration/

SRS Integration เรามีบริการที่จะช่วยให้การทำงานของท่านง่ายและปลอดภัยมากยิ่งขึ้นไม่ว่าจะเป็น

  • บริการติดตั้งซอฟต์แวร์ (SonarQube Installation)
  • บริการดูแล รับประกัน (SonarQube warranty and support)
  • จัดจำหน่ายซอฟต์แวร์ (SonarQube Reseller)
  • อบรมการใช้งานระบบ (SonarQube Administration Training)
  • เชื่อมต่อ SonarQube กับ CI/CD Automation tool เช่น Jenkins, GitLab (SonarQube Integration)
  • บริการให้คำปรึกษาทางด้าน DevOps และวางสร้างมาตรฐาน กระบวนการ CI/CD (DevOps Consulting and CI/CD Standard)

และหากสนใจ อยากรู้จัก SRS Integration ว่า Service ของเรามีอะไรบ้างสามารถคลิกได้ที่ link นี้ค่ะ https://www.srsi.co.th/ หรือสนใจทดสอบการใช้งานซอฟต์แวร์ SonarQube ติดต่อได้ที่ sales@srsi.co.th

Case Story Reference:

https://www.sonarsource.com/resources/cisco-it/

--

--