Beyond the Basics of SonarQube
Beyond the Basics of SonarQube
Beyond the Basics of SonarQube
SonarQube
Improve your
Java(Script) even
further
Johan Janssen (Info Support) @johanjanssen42
Agenda
SonarQube basic features
Analyzing data
Code review
Hunting bad design and architecture
Testing
Other languages
Plugins
Using SonarQube on existing projects
Tips / summary
Questions
Quality for thousands of years
Quality after years of improvements
Quality for 39 days
Bugs
Microsoft Applications: "about 10 - 20
defects per 1000 lines of code during in-
house testing,
and 0.5 defect per 1000 lines of code in
released product (Dave Moore 1992).“
Bugs
NASA's Spirit rover became unresponsive
on January 21, 2004, a few weeks after
landing on Mars. (Wikipedia)
- Bill Gates
Hunting bad design and architecture
Hunting bad design and architecture
Architectural constraints
Architectural constraints
Package tangle index
Package tangle index
Testing
Now manual execution of unit tests
mvn sonar:sonar
Coverage per test workspace
Integration testing
Integration testing
Add integration test coverage widget to
SonarQube
Download Jacoco agent
Configuration for Tomcat’s catalina.bat:
set JACOCO=-javaagent:$path$\lib\
jacocoagent.jar,
destfile=$resultpath$\jacoco.exec,
append=false,includes=com.dockerpi.*
set JAVA_OPTS=%JAVA_OPTS% %JACOCO%
Integration testing
Start Tomcat
Execute tests (manual, integration,
performance…)
Stop Tomcat and execute SonarQube
analysis
mvn clean install sonar:sonar
-
Dsonar.dynamicAnalysis=reuseReports
-Dsonar.jacoco.itReportPath=
$resultpath$\jacoco.exec
Unit and integration testing
combined
PMD rules for unit testing
PMD rules for unit testing
PMD rules for unit testing
Other languages
JavaScript
JavaScript
CSS
CSS
Web plugin
Plugins
Pitest plugin
Pitest plugin
Enable ‘Survived mutant’ rule in
SonarQube Quality Profile
Configure Pitest for instance with Maven
(see next slides)
Pitest plugin
Execute tests and send results to
SonarQube
mvn org.pitest:pitest-
maven:mutationCoverage
mvn sonar:sonar
-Dsonar.pitest.mode=reuseReport
Pitest plugin
Maven configuration inside the build/plugins
section
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>LATEST</version>
<configuration>
<inScopeClasses>
<param>com.example*</param>
</inScopeClasses>
<targetClasses>
<param>com.example*</param>
</targetClasses>
<outputFormats>
<outputFormat>XML</outputFormat>
</outputFormats>
</configuration>
Pitest plugin
Build breaker plugin
[INFO] [15:15:57.671] Executing post-job class
org.sonar.plugins.buildbreaker.AlertBreaker
[ERROR] [15:15:57.673] [BUILD BREAKER] Coverage < 80
[ERROR] [15:15:57.673] [BUILD BREAKER] Critical issues > 0
[ERROR] [15:15:57.673] [BUILD BREAKER] Major issues > 0
[ERROR] Alert thresholds have been hit (3 times).
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.169s
[INFO] Finished at: Sat Aug 30 15:15:57 CEST 2014
[INFO] Final Memory: 21M/234M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-
plugin:2.4:sonar (default-cli) on project DockerPiExample: Alert thresholds
have been hit (3 times)
(Eclipse) IDE integration
Supports incremental analyses (default)
Install plugin through Eclipse Marketplace
Configure SonarQube server:
o Window -> Preferences -> SonarQube -
> Servers
o Right click on your project in the Project
Explorer
o Configure -> Associate with SonarQube
Eclipse SonarQube Issues
Eclipse SonarQube Issues Editor
Eclipse SonarQube Web Browser
SCM Activity plugin
Build Stability plugin
Build Stability plugin
Tab metrics plugin
Mojo Bridge Plugin (Development)
Mojo Bridge Plugin (Development)
Leftovers
Libraries
Branches
mvn sonar:sonar -
Dsonar.branch=4.4
Exclusions
Ignore files
Ignore issues
Ignore duplications
Ignore code coverage
Example:
- Albert Einstein
Questions
Ask me!
SonarQube dev /user mailinglist
Sonarqube.org
Nemo example dashboard
SonarQube books
johan.janssen@infosupport.com
@johanjanssen42