การเขียนโค้ดให้ออกมาได้โดยโปรแกรมที่มีประสิทธิภาพ และเจอ 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
- ทำการสร้างไฟล์ 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 ก็สามารถสแกนได้เช่นกัน แล้วพบกันใหม่ในบทความหน้า