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?

Jasio
źródło

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.

Olivier Gourment
źródło
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.

MeBigFatGuy
źródło
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 .

keiki
źródło
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.

artbristol
źródło
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/

oferty
źródło
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.

Usman Ismail
źródło
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.

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

Cóż, przynajmniej od SonarQube 6.3+ wydaje się, że Findbugs nie jest (w tej chwili) już obsługiwany jako wtyczka. Sonarsource pracuje nad zastąpieniem reguł Findbugs własną wtyczką Java.

Mają nawet listę statusu zastąpienia każdej reguły tutaj: http://dist.sonarsource.com/reports/coverage/findbugs.html

Markus
źródło