Johan Janssen (Info Support) @johanjanssen42. SonarQube basic features Analyzing data Code review...

93
Beyond the basics of SonarQube Improve your Java(Script) even further Johan Janssen (Info Support) @johanjanssen42

Transcript of Johan Janssen (Info Support) @johanjanssen42. SonarQube basic features Analyzing data Code review...

Page 1: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Beyond the basics of SonarQube

Improve your Java(Script) even

furtherJohan Janssen (Info Support) @johanjanssen42

Page 2: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

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

Page 3: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Quality for thousands of years

Page 4: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Quality after years of improvements

Page 5: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Quality for 39 days

Page 6: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

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).“

Page 7: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Bugs NASA's Spirit rover became unresponsive

on January 21, 2004, a few weeks after landing on Mars. (Wikipedia)

In January 2009, Google's search engine erroneously notified users that every web site world wide was potentially malicious, including its own. (Wikipedia)

Page 8: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Find them as fast as possible

Page 9: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Why should I use SonarQube?

I’m told to use it. We need to achieve certain results (SIG…) I want to improve my coding standards

Page 10: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

SonarQube Platform to manage code quality Open source, possible to pay for support

and some plugins Since 2006; now they have 200 customers

and SonarQube is used in 15.000 organizations

Active community: support, plugins, books

Page 11: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

SonarQube

2013: 5 releases of SonarQube platform 130 releases of ecosystem products 75,000 downloads of SonarQube 13,000+ messages on mailing lists

Page 12: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

SonarQube architecture

Page 13: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

SonarQube basic features

Page 14: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.
Page 15: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Dashboard with ‘time changes’

Page 16: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Configure dashboards

Page 17: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Configure dashboards

Page 18: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.
Page 19: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.
Page 20: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Quality Gates

Page 21: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Notifications

Page 22: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Analysing data

Page 23: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Compare

Page 24: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Measures

Page 25: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Measure Filter as Bubble Chart

Page 26: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Filter Motion Chart

Page 27: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

What is good code?

Page 28: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Code review

Page 29: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Roles

Page 30: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Add code review

Page 31: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Why code reviews?

“We all need people who will give us feedback. That's how we improve.”

- Bill Gates

Page 32: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Hunting bad design and architecture

Page 33: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Hunting bad design and architecture

Page 34: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Architectural constraints

Page 35: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Architectural constraints

Page 36: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Package tangle index

Page 37: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Package tangle index

Page 38: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Testing

Page 39: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Now manual execution of unit tests

mvn clean installmvn sonar:sonar

mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install

-Dmaven.test.failure.ignore=truemvn sonar:sonar

Page 40: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Coverage per test

Page 41: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Coverage per test Configure the POM (see next slide) Activate profile to get coverage per test

informationmvn org.jacoco:jacoco-maven-

plugin:prepare-agent clean

install -Pcoverage-per-test Analyze the project

mvn sonar:sonar

Page 42: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.
Page 43: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Coverage per test workspace

Page 44: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Integration testing

Page 45: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  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%

Page 46: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Integration testing Start Tomcat Execute tests (manual, integration,

performance…) Stop Tomcat and execute SonarQube

analysismvn clean install sonar:sonar

-Dsonar.dynamicAnalysis=reuseReports

-Dsonar.jacoco.itReportPath=$resultpath$\jacoco.exec

Page 47: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Unit and integration testing combined

Page 48: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

PMD rules for unit testing

Page 49: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

PMD rules for unit testing

Page 50: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

PMD rules for unit testing

Page 51: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.
Page 52: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Other languages

Page 53: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

JavaScript

Page 54: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

JavaScript

Page 55: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

CSS

Page 56: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

CSS

Page 57: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Web plugin

Page 58: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Plugins

Page 59: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Pitest plugin

Page 60: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Pitest plugin Enable ‘Survived mutant’ rule in

SonarQube Quality Profile Configure Pitest for instance with Maven

(see next slides)

Page 61: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Pitest plugin Execute tests and send results to

SonarQubemvn org.pitest:pitest-maven:mutationCoveragemvn sonar:sonar

-Dsonar.pitest.mode=reuseReport

Page 62: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

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></plugin>

Page 63: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Pitest plugin

Page 64: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

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)

Page 65: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

(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

Page 66: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Eclipse SonarQube Issues

Page 67: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Eclipse SonarQube Issues Editor

Page 68: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Eclipse SonarQube Web Browser

Page 69: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

SCM Activity plugin

Page 70: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Build Stability plugin

Page 71: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Build Stability plugin

Page 72: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Tab metrics plugin

Page 73: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Mojo Bridge Plugin (Development)

Page 74: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Mojo Bridge Plugin (Development)

Page 75: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Leftovers

Page 76: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Libraries

Page 77: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Branches mvn sonar:sonar -Dsonar.branch=4.4

Page 78: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Exclusions

Ignore files Ignore issues Ignore duplications Ignore code coverage Example:mvn sonar:sonar -Dsonar.exclusions=

src/main/webapp/lib/*.js

Page 79: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Duplications across projects

Page 80: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Duplications across projects

Page 81: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Complexity

Page 82: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Technical debt pyramid

Page 83: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Using SonarQube on existing projects

Page 84: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Using SonarQube on existing projects

Page 85: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Using SonarQube on existing projects

Identity hotspots Use action plans Maybe use a less strict quality profile Add tasks/stories in the sprint to improve

quality Monitor quality of new code.

o Cutoff plugin

Page 86: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Hotspots

Page 87: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Planning issues

Page 88: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Issues

Page 89: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Tips for using SonarQube in a project

Create stories/tasks to improve the quality Perform manual code reviews Agree on a standard for items SonarQube

cannot check Fix items or mark them as false positive Use separate logins Settings/reviews are project specific

Page 90: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Tips for using SonarQube in a project

Options to use SonarQubeo Central server (commit AND nightly)o IDE plugin (for instance Eclipse plugin)o Local in your development environment

Check code quality before ‘To verify’ stepo First merge your code so it is up to date

Verifier should also verify the quality

Page 91: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.
Page 92: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Accept failure, but improve continuously

“Once we accept our limits, we go beyond them.”

- Albert Einstein

Page 93: Johan Janssen (Info Support) @johanjanssen42.  SonarQube basic features  Analyzing data  Code review  Hunting bad design and architecture  Testing.

Questions Ask me! SonarQube dev /user mailinglist Sonarqube.org Nemo example dashboard SonarQube books

[email protected]@johanjanssen42