SonarQube – statyczna analiza kodu źródłowego


SonarQube – statyczna analiza kodu źródłowego

SonarQube to narzędzie do statycznej analizy kodu źródłowego które dla języka Java jest bezpłatne. Rozwiązanie to pozwala na systematyczny monitoring kodu źródłowego. To jakie informacje możemy zyskać stosując SonarQube to:

  • Bugs – wykrycie błędów,
  • Code Smells – sygnały dotyczące tego, że kod powinien być zrefaktoryzowany ze względu na złą implementację,
  • Vulnerabilities – podatność na różnego rodzaju ataki,
  • Test coverage – wskaźnik pokrycia kodu testami,
  • Duplications – wykrycie miejsc gdzie kod jest zduplikowany,
  • Complexity – złożoność cyklomatyczna kodu.

Całość tych danych daje ogólny obraz jakości kodu źródłowego. Ciekawą funkcjonalnością jest również wskaźnik długu technicznego który pozwala oszacować ile pracy należy włożyć w rozwiązanie zaistniałych problemów.

SonarQube w wersji 7.9.1 wspiera tylko Javę w wersji 11. Skorzystamy w artykule ze starszej wersji 4.3.3 ze względu na konieczność instalowania na VPS nowszej wersji Javy.Aby wystartować Sonara na domyślnym porcie 9000 należy wydać polecenie:

./sonarqube-4.3.3/bin/linux-x86-64# ./sonar.sh start

Status Sonara można zweryfikować wydając polecenie:

./sonarqube-4.3.3/bin/linux-x86-64# ./sonar.sh status

domyślnie skonfigurowaną bazą danych jest plikowa baza H2. Należy to zmienić na “wydajny” system RDBMS np. MySQL w pliku:

/sonarqube-4.3.3/conf# vim sonar.properties

Do projektu opartego na Mavenie należy dodać plugin:

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
		<plugin>
			<groupId>org.sonarsource.scanner.maven</groupId>
			<artifactId>sonar-maven-plugin</artifactId>
			<version>3.2</version>
		</plugin>
	</plugins>
</build>

oraz właściwości (z ang. properties):

<properties>
	<sonar.host.url>http://localhost:9000</sonar.host.url>
	<sonar.login>login</sonar.login>
	<sonar.sources>./src/main/java</sonar.sources>
	<sonar.language>java</sonar.language>
	<sonar.scm.provider>git</sonar.scm.provider>
</properties>

do wersji 5.2 sonara należy ponadto dodać informacje o dostępie do bazy danych:

<sonar.jdbc.url>
	jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8
</sonar.jdbc.url>
<sonar.jdbc.username>login</sonar.jdbc.username>
<sonar.jdbc.password>password</sonar.jdbc.password>

Jeśli zależy nam na pominięciu pewnych modułów Mavena podczas analizy to w każdym module który ma być pominięty należy dodać do pliku pom.xml wpis:

<properties>
    <sonar.skip>true</sonar.skip>
</properties>

Uruchomienie analizy statycznej, w katalogu projektu wydajemy polecenie:

mvn sonar:sonar

Przed wykonaniem kolejnej analizy należy wyczyścić katalog ./target:

mvn clean sonar:sonar

Otrzymujemy wynik polecenia:

ANALYSIS SUCCESSFUL, you can browse http://localhost:9000/dashboard/index/pl.javaleader:sonar-demo

Pod adresem http://localhost:9000 dostępne są wyniki analizy:

Dobrze opisana procedura konfiguracji Sonara jest na stronie dokumentacji: https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-maven/

Na GitHubie znajduje się przykładowy projekt poddany analizie za pomocą sonara, poniżej wyniki:


Leave a comment

Your email address will not be published.


*