Czy SonarQube jest zamiennikiem Checkstyle, PMD, FindBugs?


105

Pracujemy nad projektem internetowym od podstaw i przyglądamy się następującym narzędziom do statycznej analizy kodu.

  • Konwencje (Checkstyle)
  • Złe praktyki (PMD)
  • Potencjalne błędy (FindBugs)

Projekt jest oparty na Maven. Zamiast używać do tego wielu narzędzi, szukałem jednego elastycznego rozwiązania i natrafiłem na SonarQube.

Czy to prawda, że ​​dzięki SonarQube możemy osiągnąć rezultaty z Checkstyle, PMD i Findbugs?

Odpowiedzi:


99

Sonar będzie domyślnie uruchamiał CheckStyle, FindBugs i PMD, a także kilka innych „wtyczek”, takich jak Cobertura (pokrycie kodu) dla projektów Java. Główną wartością dodaną jest jednak to, że przechowuje historię w bazie danych. Możesz wtedy zobaczyć trend . Czy poprawa bazy kodu lub robisz coś przeciwnego? Tylko narzędzie z pamięcią może ci to powiedzieć.

Powinieneś uruchomić Sonar w swoim systemie CI, aby mogły działać nawet rzeczy, których wykonanie zajmuje trochę czasu (takie jak CPD - wykrywacz pasty kopiującej). I będziesz miał swoją historię. Podczas gdy na przykład za pomocą wtyczki Eclipse wykryjesz naruszenia wcześniej - co jest świetne - ale będziesz skłonny uruchamiać ją rzadziej, jeśli zacznie to trwać zbyt długo, lub będziesz uruchamiać mniej „jakościowych wtyczek” (takich jak pomijanie CPD lub pomijanie analizy pokrycia kodu). I nie będziesz miał historii.

Ponadto Sonar generuje wizualne raporty w stylu „Dashboard”. Co czyni go bardzo łatwym do uchwycenia. Dzięki Sonar in Jenkins będziesz mógł pokazać programistom i swojemu kierownictwu efekty pracy wykonanej nad jakością kodu w ciągu ostatnich kilku tygodni i miesięcy.


Zgadzam się z tymi korzyściami w kontekście projektów terenów poprzemysłowych. Projekty typu greenfield z zasadami zero defektów nie potrzebują tej pamięci. Po prostu utrzymuj bazę kodu w czystości w 100% przez cały czas.
Christian Hujer

48

Sonar wykorzystuje te 3 narzędzia jako wtyczki i agreguje dane ze wszystkich trzech, dając wartość dodaną, pokazując wykresy itp. Z tych narzędzi. Są więc uzupełnieniem sonaru.


1
sonar yup wykorzystuje wszystkie trzy
frappuccino

27
chociaż było to prawdą do wersji 3.x, Sonar 4.x odchodzi od używania przynajmniej PMD i CheckStyle na rzecz własnego wewnętrznego analizatora Squid, ponieważ daje im większą swobodę w rozszerzaniu zestawu reguł i naprawianiu problemów, które zostały nękając te projekty przez jakiś czas. Na przykład wycofali już ponad 150 reguł PMD i ostatecznie całkowicie je usuną.
haylem

1
Ciekawy post na temat powodu, dla którego wycofali te zasady: sonarqube.org/… .
Jhack

33

Tak i nie. Oprócz innych odpowiedzi.

SonarQube jest obecnie na dobrej drodze do wycofania PMD, Checkstyle i Findbugs i wykorzystania własnej technologii do analizy kodu Java (zwanej SonarJava ). Robią to, ponieważ nie chcą tracić czasu na naprawianie, aktualizowanie (lub czekanie na to) tych bibliotek (np. Java 8), które na przykład korzystają z przestarzałych bibliotek.

Otrzymali także nowy zestaw wtyczek do Twojego osobistego IDE o nazwie SonarLint .


8

Sonar jest świetny, ale jeśli chcesz używać wspomnianych narzędzi osobno i nadal mieć ładne wykresy, możesz użyć wtyczki Analysis Collector jako części swojej kompilacji Jenkins CI. Niewielką zaletą tego jest to, że możesz sprawdzić konfigurację PMD / Findbugs / Checkstyle w swoim SCM i zintegrować ją z kompilacją Maven, zamiast polegać na oddzielnym serwerze Sonar.


5

Sonar to znacznie więcej niż same te narzędzia. Największą zaletą jest GUI, który pozwala łatwo skonfigurować wszystko. Statystyki, które oferuje, są bardzo szczegółowe (linie kodu itp.). Oferuje nawet świetne wsparcie dla pokrycia testów itp. :)

Tutaj możesz się dobrze przyjrzeć: http://nemo.sonarsource.org/


3

Nadal używałbym tych narzędzi oprócz sonaru, ponieważ mogą one zawieść kompilację mavena, gdy ktoś naruszy zasadę. Gdzie jako sonar jest bardziej retrospektywny.


3

... kilka lat później: nie, nie jest! SonarQube zakłada, że ​​będzie w stanie pokryć wszystkie reguły za pomocą własnego analizatora, ale nadal istnieją reguły z PMD lub CheckStyle, których nie obejmuje SonarQube. Zobacz na przykład: PMD ReturnFromFinallyBlock.


Wydaje się również, że brakuje naruszenia PMD: Czy użyć jawnego zakresu zamiast domyślnego poziomu prywatnego pakietu?
user7294900


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.