SONAR is an open source quality management platform, dedicated to continuously analyze and measure source code quality.In short, it tells you how bad your code is and where to start fixng things cost-wise. The total code quality of the project very much depends on the number of code violations. But when does something promote as a violation? Is parentheses' padding a violation to you? Maybe declaring arguments as final?
Each Sonar profile defines a collection of rules - checks. The configuration of this profile can dramatically alter the final metrics so it would be better to stick with a profile for the entire lifecycle of a project in order for the metrics to be always relevant.
In the following screen the zero-drop after enabling the most unforgiving profile is obvious, rendering all previous metrics irrelevant.
rules compliance violations |
At milestone A the build was analyzed with an all-out Sonar profile including all the rules, checks and thresholds.
To create such a profile:
1. Log in to Sonar ,(ver. 2.6+), go to configuration and then Quality profiles on the top-left from the menu bar.
2. Click copy to make an exact copy of the default Sonar way configuration and name it as you wish e.g. Sonar complete.Click on Set as default. Next time sonar analyzes a project will use this new configuration.
3. Before triggering a build let's activate some more rules and checks.Click on the newly createdconfiguration to browse and activate the rules.
Select any on the three lists: Plugins, Severity, Status and click search to browse all the available rules.
To activate them all perform a Bulk change selecting Activate all from the select menu on the right , (highlighted with red on the screenshot).
The profile is now ready and we can either set it as default or associate it with specific projects.
Troubleshooting
Trying to run the maven sonar goal with the above profile activated i came accross the folowing two exceptions, (sonar and plugins were completely updated after a clean install):
Caused by: java.lang.NullPointerException at org.sonar.java.squid.check.ClassComplexityCheck.visitClass(ClassComplexityCheck.java:48)
Can not execute Sonar: Can not execute Checkstyle: cannot initialize module Header - property 'headerFile' is missing or invalid in module Header.
Solution
1. Edit the profile and deactivate all checks of the squid plugin. This is the one responsible for the exception
Caused by: java.lang.NullPointerException at org.sonar.java.squid.check.ClassComplexityCheck.visitClass(ClassComplexityCheck.java:48)
2. For the second one disable the following subset of rules:
PMD
- XPath rule template
Checkstyle
- Header
- Regexp
- Regexp Header
- Regexp Multiline
- Regexp Singleline
- Regexp Singleline Java
Thanks for this great article
ReplyDeleteExtreme Java
You are welcome :)
ReplyDeletefantastic article man , you have covered the topic really well with graphics and quotes. We are thinking to use Sonar for improving code quality or our project and your article certainly gives me some knowledge about it.
ReplyDeleteThanks
Javin
10 tips on debugging Java Program in eclipse
just +1 it , indeed it deserve :)
ReplyDelete