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

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

Embed Size (px)

Citation preview

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