Phân tích code với SonarQube Scanner

Trong bài viết trước, mình đã hướng dẫn các bạn cách cài đặt SonarQube Scanner. Giờ là lúc, chúng ta sẽ thử sử dụng công cụ SonarQube Scanner này để phân tích code của chúng ta xem sao các bạn nhé!

Tạo mới user token

Để SonarQube Scanner có thể submit report tới SonarQube server, chúng ta cần sử dụng thông tin user token hoặc user password để authenticate với SonarQube server. Trong bài viết này, mình sẽ sử dụng một user token. Cách tạo mới user token như sau các bạn nhé!

Các bạn đăng nhập vào SonarQube, sau đó thì click vào biểu tượng user ở góc phải:

Chọn My Account, sau đó thì chọn Security.

Các bạn có thể generate mới một user token bằng cách nhập thông tin Token Name, sau đó thì nhấn nút Generate. Kết quả:

Các bạn cần copy token này và lưu ở đâu đó. Các bạn không thể xem lại token một khi đã tắt cửa sổ này.


Cấu hình project

Để làm ví dụ cho bài viết này, mình sẽ lấy project ví dụ trong bài viết Sử dụng JPA trong Spring MVC để làm ví dụ.

Các bạn lưu ý là vì SonarQube Scanner sẽ sử dụng byte code của các class Java để phân tích code Java nên các bạn cần chạy “mvn compile” trong project này để compile source code Java của chúng ta thành những tập tin class.

Mình đang chạy SonarQube ở địa chỉ: http://localhost:9000/ nên mình cũng không cần chỉnh sửa thông tin SonarQube server trong tập tin /conf/sonar-scanner.properties của SonarQube Scanner.

Để cấu hình project này với SonarQube Scanner, các bạn cần tạo mới một tập tin có tên là sonar-project.properties, nội dung của tập tin này cơ bản sẽ như sau:

Trong đó, các properties “sonar.projectkey”, “sonar.projectName”, “sonar.projectVersion” là những properties định nghĩa các thông tin về project của chúng ta. Các bạn lưu ý là property “sonar.projectKey” được dùng để identify các project khác nhau trong hệ thống SonarQube nên giá trị của property này phải không trùng với các project khác.

Property “sonar.sources” định nghĩa location của tập tin sonar-project.properties. Hiện tại mình để tập tin này trong thư mục project nên mình set giá trị của nó là “.”.

Property “sonar.java.binaries” như mình nói ở trên, sẽ định nghĩa đường dẫn tới các tập tin byte code của Java.


Phân tích code

Đến đây thì chúng ta có thể sử dụng SonarQube Scanner để scan code rồi.

Các bạn hãy mở Terminal trên macOS và Linux hoặc Console trên Window rồi đi tới thư mục của project spring-mvc-jpa.

Chúng ta chỉ cần gọi dòng lệnh sau:

với giá trị của tham số -Dsonar.login là user token mà chúng ta vừa tạo ở trên, thì SonarQube Scanner sẽ tự động scan project của chúng ta và phân tích code của nó.

Kết quả:

Lúc này, nếu các bạn refresh lại SonarQube system, các bạn sẽ thấy project của chúng ta được hiển thị ở đây:

Các bạn cần click bên trong project để xem chi tiết kết quả.

Như các bạn thấy, project của chúng ta có 2 bugs, 0 lỗ hổng, 1 code smells cần xem xét, phần Coverage liên quan tới Unit Test Coverage, 0 duplicate code và ngôn ngữ chúng ta đang sử dụng trong project này là XML và Java.

Các bạn có thể click vào tab Issues để review hết tất cả các issues mà project chúng ta đang có.

Phần bên trái, các bạn có thể filter các issue theo ý của mình. Mặc định thì SonarQube sẽ scan hết tất cả các ngôn ngữ mà chúng ta sử dụng trong project nên nếu các bạn chỉ muốn xem issue của code Java thôi thì có thể sử dụng filter theo Language. Ví dụ như sau:

Danh sách issues bây giờ sẽ chỉ hiển thị code Java. Các bạn có thể overview là với code Java, chúng ta có bao nhiêu issues, chia theo từng cấp độ Severity. Các bạn cũng có thể click vào từng Severity để filter tiếp nếu muốn.

Hiện tại project của chúng ta có 1 vấn đề Code Smells với Severity là MAJOR, các bạn có thể click vào nó để xem vấn đề là gì:

Rất chi tiết phải không các bạn?

Các bạn có thể click vào link “Why is this an issue?” ở mỗi issue để xem SonarQube detect issue này là do đâu, và cách fix cho nó.

5/5 - (1 bình chọn)

5 thoughts on “Phân tích code với SonarQube Scanner

  1. Hi bạn, có thể cho mình xem project folder structure được không? Mình muốn xem sonar-project.properties để ở đâu thì thích hợp.

Add Comment