เขียนโค้ดแอนดรอยด์ให้มีคุณภาพยังไง?SonarQube ช่วยคุณได้

iMint
3 min readJun 20, 2019

--

การเขียนโค้ดให้ออกมาได้โดยโปรแกรมที่มีประสิทธิภาพ และเจอ bug น้อยที่สุด คือการเขียนโค้ดที่มีแบบแผน โดยแบ่งออกได้ดังนี้

  • code pattern เป็นการเขียนโค้ดตามแบบแผนทั้งทีม เพื่อให้ง่ายต่อการจัดการโดยกำหนดหลักการในการเขียนขึ้นแต่ละโปรเจค เช่นการกำหนดการประกาศตัวแปร และการกำหนดการเขียนแบบไหน (design pattern) อาทิ MVC, MVP, MVVM เป็นต้น
  • code quality เป็นการตรวจสอบโค้ดว่ามีประสิทธิภาพขนาดไหน เขียนออกมาดีหรือไม่ ซึ่งในที่นี้เราจะพูดถึงเครื่องมือช่วยตรวจสอบโค้ด sonarqube เป็นหลัก
  • code review เป็นการรีวิวโค้ด เครื่องมือที่ช่วยให้คนในทีมเข้าใจโค้ดของแต่ละคน พร้อมกับดูว่าโค้ดที่จะเอาไปรวมกับคนอื่นเขียนได้หรือไม่ เช่น gitlab จะมีเครื่องมือ merge request ที่จะส่ง request ให้คนในทีมดูก่อนที่จะทำการรวมโค้ดนั่นเอง
  • unit test เป็นการเขียนเทสที่จะช่วยลดบัคที่เกิดจากการเขียนโค้ดของเรา

คุณภาพโค้ด ( code quality )

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

เครื่องมือที่ช่วยในการตรวจสอบโค้ดแบบอัตโนมัติก็คือ SonarQube และ SonarLint ซึ่งจะใช้ควบคู่กัน

  • SonarLint เป็นเครื่องมือที่ช่วยตรวจสอบโค้ดว่าเขียนเป็นไปตามมาตรฐานหรือไม่ และให้คำแนะนำให้แก้ไขให้เป็นไปตามรูปแบบมาตรฐาน
  • SonarQube ตรวจสอบข้อผิดพลาด(Bugs) ค้นหาโค้ดที่แย่และซับซ้อน(Code Smells) ค้นหาช่องโหว่ต่างๆ (Vulnerabilities) และประมวลผลเป็นเปอร์เซ็นต์ให้เห็นในรูปแบบ report นอกจากนี้ยังรองรับการตรวจสอบภาษามากกว่า 25 ภาษาเช่น Java, Kotlin, PHP, C#, Python, Swift, C/C++, Javascript เป็นต้น

ติดตั้ง SonarLint

ใน android studio จะมีให้เพิ่ม plugin สำหรับ SonarLint ซึ่งสามารถเพิ่มได้โดยคลิกที่ Android Studio (File > Settings บนวินโดว์)> Preferences > Plugin จากนั้นพิมพ์ในช่องค้นหาว่า sonarlint และทำการ install

มาลองดูผลจากการติดตั้ง SonarLint ซึ่งตัวนี้จะช่วยตรวจสอบว่าโค้ดเราควรเขียนยังไงดังรูป

จะเห็นว่าจากเดิมโค้ดเป็น loop for ตัว sonarlint ก็แนะนำให้เราใช้ loop while แทน เป็นต้น จะเห็นว่ามันเจ๋งมาก และฉลาดสุดๆ ซึ่งเราสามารถดูกดการใช้ หรือมาตราฐานของโค้ดที่ควรจะเป็นเพิ่มเติมได้ที่

https://rules.sonarsource.com/kotlin

ติดตั้ง SonarQube

การติดตั้ง SonarQube ที่เป็น open source สามารถตั้งเครื่องให้เป็น server เองโดยไม่เสียเงินทำได้ดังนี้

  • ทำการดาวน์โหลด source code server จากเว็ป https://www.sonarqube.org/downloads/ . โดยเลือกเป็นแบบ SonarQube Community Edition
  • จากนั้นทำการ unzip แล้วทำการ copy ไฟล์ไปวางที่
#Mac OS
/opt/sonarqube
#Windows OS
c:/sonarqube
  • ทำการรัน SonarQube ให้เป็น server ด้วยคำสั่ง
#Mac OS
$cd Opt/sonarqube/bin/macosx-universal-64/
$./sonar.sh start#Windows OS
$c:/sonarqube/bin/windows-x86–64/StartSonar.bat
  • ไปที่ลิงค์เพื่อเช็คเซอร์เวอร์ http://localhost:9000
  • ทำการ login ด้วย
    username : admin
    password : admin
  • คลิกสร้างโปรเจคที่เราจะทำการ scanner project นั่นๆ

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

ติดตั้ง SonarScanner

SonarScanner จะทำการสแกนโค้ดของเราทั้งหมด ใน Mac OS จะใช้ brew เป็นตัวช่วยติดตั้งเพื่อให้ง่ายต่อการ set path ทำได้ดังนี้

  • ทำการลง brew ก่อนจากนั้นทำการลง sonar scanner ด้วยคำสั่ง
$ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null$brew install sonar-scanner
  • ในส่วนของ Windows OS จะทำการดาวน์โหลด และทำการแตกไฟล์ นำไฟล์ไปว่างไว้ที่ c:/sonar-scanner แล้วทำการ set path environment
https://www.addictivetips.com/windows-tips/set-path-environment-variables-in-windows-10/
  • ทำการสร้างไฟล์ sonar-project.properties ไว้ที่ข้างนอกสุดของโฟเดอร์โปรเจค

จากนั้นทำการเพิ่มโค้ดลงไปในไฟล์ sonar-project.properties โดยใส่คีย์โปรเจคที่เราได้สร้างไว้ และชื่อโปรเจคที่สร้างขึ้น นอกจากนี้ต้องใส่ path ที่เก็บ source ของเราให้ถูกต้องในที่นี้เก็บไว้ที่ app/src/main

 sonar.projectKey=YOUR_KEY
sonar.projectName=YOUR_PROJECT_NAME
sonar.projectVersion=1.0
sonar.sources=app/src/main
sonar.host.url=http://localhost:9000
sonar.sourceEncoding=UTF-8
  • ทำการรันคำสั่ง sonar-scanner ใน terminal ของโปรเจคเรา
$sonar-scanner
  • เปิดดูที่ลิงค์ http://localhost:9000 เพื่อดูรายงานผลจากการสแกนโค้ด

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

ของแถม

การลง sonar scanner ลงครั้งเดียวสามารถนำไปใช้ได้กับอีกหลายภาษาได้เลยซึ่งมีประโยชน์มากๆ ผู้เขียนได้นำไปลองกับ react native หรือว่าภาษา javascript ก็สามารถสแกนได้เช่นกัน แล้วพบกันใหม่ในบทความหน้า

--

--