SonarQube có phải là sự thay thế cho Checkstyle, PMD, FindBugs không?


105

Chúng tôi đang làm việc trên một dự án web từ đầu và đang xem xét các công cụ phân tích mã tĩnh sau đây.

  • Quy ước (Kiểu kiểm tra)
  • Các phương pháp không hợp lệ (PMD)
  • Các lỗi tiềm ẩn (FindBugs)

Dự án được xây dựng trên Maven. Thay vì sử dụng nhiều công cụ cho mục đích, tôi đang xem xét một giải pháp linh hoạt duy nhất và tìm thấy SonarQube.

Có đúng là chúng ta có thể đạt được kết quả từ Checkstyle, PMD và Findbugs với SonarQube không?

Câu trả lời:


99

Sonar sẽ chạy CheckStyle, FindBugs và PMD, cũng như một vài "plugin" khác như Cobertura (vùng phủ mã) theo mặc định cho các dự án Java. Tuy nhiên, giá trị gia tăng chính là nó lưu trữ lịch sử trong cơ sở dữ liệu. Sau đó, bạn có thể thấy xu hướng . Bạn đang cải thiện cơ sở mã hay bạn đang làm ngược lại? Chỉ một công cụ có bộ nhớ mới có thể cho bạn biết điều đó.

Bạn nên chạy Sonar trong hệ thống CI của mình để ngay cả những thứ cần một thời gian để thực thi (chẳng hạn như CPD - trình phát hiện dán sao chép) có thể chạy. Và bạn sẽ có lịch sử của mình. Trong khi với một plugin Eclipse, chẳng hạn, bạn sẽ phát hiện các vi phạm sớm hơn - điều này thật tuyệt - nhưng bạn sẽ bị cám dỗ để chạy nó ít thường xuyên hơn nếu nó bắt đầu mất quá nhiều thời gian hoặc chạy ít "plugin chất lượng hơn" (chẳng hạn như bỏ qua CPD hoặc bỏ qua phân tích vùng phủ mã). Và bạn sẽ không có lịch sử.

Ngoài ra, Sonar tạo báo cáo trực quan , kiểu "Trang tổng quan". Điều này làm cho nó rất dễ dàng để nắm bắt. Với Sonar trong Jenkins, bạn sẽ có thể cho các nhà phát triển và ban quản lý của bạn thấy ảnh hưởng của công việc đã được thực hiện đối với chất lượng của cơ sở mã trong vài tuần và tháng qua.


Tôi đồng ý với những lợi ích này trong bối cảnh của các dự án cánh đồng nâu. Các dự án Greenfield với chính sách không lỗi không cần bộ nhớ đó. Chỉ cần giữ cho cơ sở mã của bạn luôn sạch sẽ 100%.
Christian Hujer

48

Sonar sử dụng 3 công cụ này làm plugin và tổng hợp dữ liệu từ cả ba công cụ này để tạo ra giá trị cộng thêm bằng cách hiển thị đồ thị và những thứ tương tự từ các công cụ này. Vì vậy, chúng bổ sung cho sonar.


1
yup sonar sử dụng tất cả ba
Frappuccino

27
trong khi điều này đúng với phiên bản 3.x, Sonar 4.x đang chuyển từ sử dụng ít nhất PMD và CheckStyle để chuyển sang sử dụng bộ phân tích Mực nội bộ của riêng mình, vì nó cho phép họ tự do mở rộng bộ quy tắc và khắc phục các vấn đề đã gây khó khăn cho các dự án này trong một thời gian. Ví dụ: họ đã không dùng hơn 150 quy tắc PMD và cuối cùng sẽ xóa nó hoàn toàn.
haylem

1
Bài đăng thú vị về lý do họ không dùng các quy tắc đó: sonarqube.org/… .
Jhack

33

Có và không. Ngoài các câu trả lời khác.

SonarQube hiện đang trên đường ngừng sử dụng PMD, Checkstyle và Findbugs và sử dụng công nghệ của riêng họ để phân tích mã Java (được gọi là SonarJava ). Họ làm điều đó, vì họ không muốn tốn thời gian sửa chữa, nâng cấp (hoặc chờ đợi) những thư viện đó (ví dụ như Java 8), ví dụ như sử dụng các thư viện lỗi thời.

Họ cũng có một bộ plugin mới cho IDE cá nhân của bạn được gọi là SonarLint .


8

Sonar là tuyệt vời, nhưng nếu bạn muốn sử dụng các công cụ đã đề cập một cách riêng biệt và vẫn có đồ thị đẹp, bạn có thể sử dụng Plugin thu thập phân tích như một phần của bản dựng Jenkins CI của bạn. Một lợi thế nhỏ của điều này là bạn có thể kiểm tra cấu hình PMD / Findbugs / Checkstyle vào SCM của mình và tích hợp nó vào bản dựng Maven của bạn, thay vì dựa vào một máy chủ Sonar riêng biệt.


5

Sonar không chỉ đơn thuần là những công cụ này. Lợi ích lớn nhất là gui, cho phép bạn cấu hình mọi thứ một cách dễ dàng. Các số liệu thống kê mà nó cung cấp rất chi tiết (các dòng mã, v.v.). Và nó thậm chí còn cung cấp hỗ trợ tuyệt vời cho phạm vi kiểm tra, v.v. :)

Ở đây bạn có thể xem qua: http://nemo.sonarsource.org/


3

Tôi vẫn sẽ sử dụng những công cụ này ngoài sonar vì chúng có thể làm hỏng quá trình xây dựng maven khi ai đó vi phạm quy tắc. Trường hợp sonar là hồi cứu nhiều hơn.


3

... vài năm sau: không, không phải vậy! SonarQube giả sử có thể bao gồm tất cả các quy tắc bằng trình phân tích của riêng mình, nhưng vẫn có các quy tắc từ PMD hoặc CheckStyle không được SonarQube đề cập. Xem ví dụ: PMD ReturnFromFinallyBlock.


Có vẻ như nó cũng thiếu Vi phạm PMD: Sử dụng phạm vi rõ ràng thay vì mức riêng tư của gói mặc định?
user7294900


2

Ít nhất thì kể từ khi SonarQube 6.3+ có vẻ như Findbugs (hiện tại) không còn được hỗ trợ như một plugin nữa. Sonarsource đang nghiên cứu việc thay thế các quy tắc của Findbugs bằng plugin Java của riêng mình.

Họ thậm chí còn có một danh sách cho trạng thái thay thế của từng quy tắc tại đây: http://dist.sonarsource.com/reports/coverage/findbugs.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.