Apakah SonarQube Pengganti untuk Checkstyle, PMD, FindBugs?

105

Kami sedang mengerjakan proyek web dari awal dan melihat alat analisis kode statis berikut.

  • Konvensi (Gaya Periksa)
  • Praktik buruk (PMD)
  • Potensi bug (FindBugs)

Proyek ini dibangun di Maven. Alih-alih menggunakan beberapa alat untuk tujuan tersebut, saya melihat satu solusi fleksibel dan menemukan SonarQube.

Benarkah kita bisa mendapatkan hasil dari Checkstyle, PMD dan Findbugs dengan SonarQube?

Johnny
sumber

Jawaban:

99

Sonar akan menjalankan CheckStyle, FindBugs dan PMD, serta beberapa "plugin" lainnya seperti Cobertura (cakupan kode) secara default untuk proyek Java. Nilai tambah utama, bagaimanapun, adalah menyimpan sejarah dalam database. Anda kemudian bisa melihat trennya . Apakah Anda meningkatkan basis kode atau sebaliknya? Hanya alat dengan memori yang dapat memberi tahu Anda hal itu.

Anda harus menjalankan Sonar di sistem CI Anda sehingga hal-hal yang memerlukan waktu untuk dieksekusi (seperti CPD - detektor salin tempel) dapat berjalan. Dan Anda akan memiliki sejarah Anda. Sedangkan dengan plugin Eclipse, misalnya, Anda akan mendeteksi pelanggaran lebih cepat - yang bagus - tetapi Anda akan tergoda untuk lebih jarang menjalankannya jika mulai terlalu lama, atau menjalankan lebih sedikit "plugin berkualitas" (seperti melewatkan CPD atau melewatkan analisis cakupan kode). Dan Anda tidak akan memiliki sejarah.

Selain itu, Sonar menghasilkan laporan visual , gaya "Dasbor". Yang membuatnya sangat mudah dipahami. Dengan Sonar di Jenkins, Anda akan dapat menunjukkan kepada pengembang dan manajemen Anda efek pekerjaan yang dilakukan pada kualitas basis kode selama beberapa minggu dan bulan terakhir.

Olivier Gourment
sumber
Saya setuju dengan manfaat ini dalam konteks proyek lapangan coklat. Proyek Greenfield dengan kebijakan tanpa cacat tidak membutuhkan memori itu. Jaga agar basis kode Anda bersih 100% sepanjang waktu.
Christian Hujer
48

Sonar menggunakan 3 alat ini sebagai plugin dan mengumpulkan data dari ketiganya memberikan nilai tambah dengan menampilkan grafik dan semacamnya dari alat tersebut. Jadi mereka melengkapi sonar.

MeBigFatGuy
sumber
1
yup sonar menggunakan ketiga
frappuccino
27
sementara ini benar hingga versi 3.x, Sonar 4.x beralih dari menggunakan setidaknya PMD dan CheckStyle untuk mendukung penganalisis Squid internalnya sendiri, karena ini memberi mereka lebih banyak kebebasan untuk memperluas kumpulan aturan dan memperbaiki masalah yang telah terjadi. mengganggu proyek ini untuk sementara waktu. Misalnya, mereka telah menghentikan lebih dari 150 aturan PMD, dan pada akhirnya akan menghapusnya sepenuhnya.
haylem
1
Posting menarik tentang alasan mereka menghentikan aturan tersebut: sonarqube.org/… .
Jhack
33

Iya dan tidak. Selain jawaban lainnya.

SonarQube saat ini sedang dalam proses untuk menghentikan PMD, Checkstyle dan Findbugs dan menggunakan teknologinya sendiri untuk menganalisis kode Java (disebut SonarJava ). Mereka melakukannya, karena mereka tidak ingin menghabiskan waktu untuk memperbaiki, mengupgrade (atau menunggunya) library tersebut (misalnya untuk Java 8), yang misalnya menggunakan library yang sudah usang.

Mereka juga mendapat satu set plugin baru untuk IDE pribadi Anda yang disebut SonarLint .

keiki
sumber
8

Sonar sangat bagus, tetapi jika Anda ingin menggunakan alat yang disebutkan secara terpisah dan masih memiliki grafik yang bagus, Anda dapat menggunakan Plugin Analysis Collector sebagai bagian dari build Jenkins CI Anda. Sedikit keuntungan dari ini adalah Anda dapat memeriksa konfigurasi PMD / Findbugs / Checkstyle ke dalam SCM Anda dan mengintegrasikannya ke dalam build Maven Anda, daripada mengandalkan server Sonar terpisah.

artbristol
sumber
5

Sonar lebih dari sekadar alat-alat ini. Manfaat terbesar adalah gui, yang memungkinkan Anda mengonfigurasi apa pun dengan mudah. Statistik yang ditawarkannya sangat rinci (baris kode, dll.). Dan bahkan menawarkan dukungan hebat untuk cakupan tes dll :)

Di sini Anda dapat melihat baik-baik: http://nemo.sonarsource.org/

oers
sumber
3

Saya masih akan menggunakan alat ini selain sonar karena mereka dapat gagal membangun maven ketika seseorang melanggar aturan. Sedangkan sonar lebih bersifat retrospektif.

Usman Ismail
sumber
3

... beberapa tahun kemudian: tidak, tidak! SonarQube seharusnya dapat mencakup semua aturan dengan penganalisisnya sendiri, tetapi masih ada aturan dari PMD atau CheckStyle yang tidak dicakup oleh SonarQube. Lihat misalnya: PMD ReturnFromFinallyBlock.

deamon
sumber
Tampaknya juga kehilangan PMD Pelanggaran: Gunakan pelingkupan eksplisit sebagai ganti tingkat pribadi paket default?
pengguna7294900
Nggak. Aturan diberi nama berbeda, tetapi ada: Pernyataan langsung tidak boleh muncul di blok "akhirnya" dan visibilitas variabel Anggota harus ditentukan .
Petr Bodnár
2

Setidaknya sejak SonarQube 6.3+ tampaknya Findbugs (saat ini) tidak lagi didukung sebagai plugin. Sonarsource sedang mengerjakan penggantian aturan Findbugs dengan plugin Java-nya sendiri.

Mereka bahkan memiliki daftar untuk status penggantian setiap aturan di sini: http://dist.sonarsource.com/reports/coverage/findbugs.html

Markus
sumber