Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 16 Next »

NameToxicty Chart Plugin
Latest versionTrunk
Requires Sonar version3.0 or higher
LicenseGNU LGPL v3
DevelopersCezar Coca
Issue TrackerSONARPLUGINS/component/430621
Sourceshttps://svn.codehaus.org/sonar-plugins/trunk/toxicity-chart

Description / Features

This Sonar Plugin is an implementation of Toxicity Chart visualization technique presented by Erik Dörnenburg on his blog. This technique is very useful to quickly get an idea about the general quality of the large existing code base.

In a Toxicity Chart each bar represents a class and the height of the bar shows the toxicity score for that class.  The score is based on 11 rules (see Usage & Installation section) and different colours are used to represent each one. This makes it possible to easily spot not only how toxic a code base is, but also how the problems are distributed and what the preponderant "code smell" is. The classes that score zero points are left off the chart. The metrics are computed using the threshold value set for corresponding Checkstyle rule.

For example if the Method Length metric has a threshold of 30 and a class comprises three methods, one that is 25 lines, one that is 45 lines and another that is 60 lines long, then the score is calculated to be proportional to the length of the method in relation to the threshold and for the given scenario the class gets 1.5 + 2 = 3.5 points.

Axes of quality

All the metrics are computed using the approach presented above.

File Length

Total of points accumulated due to the violation of Checkstyle File Length rule. The possible associated technical debts are: Understandability, Maintainability and Single Responsibility Principle violation.

Method Length

Total of points accumulated due to the violation of Checkstyle Method Length rule. The possible associated technical debts are: Understandability, Maintainability and Single Responsibility Principle violation.

Cyclomatic Complexity

Total of points accumulated due to the violation of Checkstyle Cyclomatic Complexity rule. The possible associated technical debts are: Understandability, Maintainability and Testability.

Parameter Number

Total of points accumulated due to the violation of Checkstyle Parameter Number rule. The possible associated technical debts are: Understandability, Maintainability and Testability.

Boolean Expression Complexity

Total of points accumulated due to the violation of Checkstyle Boolean Expression Complexity rule. The possible associated technical debts are: Understandability, Maintainability and Testability.

Nested If Depth

Total of points accumulated due to the violation of Checkstyle Nested If Depth rule. The possible associated technical debts are: Understandability, Maintainability and Testability.

Nested Try Depth

Total of points accumulated due to the violation of Checkstyle Nested Try Depth rule. The possible associated technical debts are: Understandability, Maintainability and Testability.

Missing Switch Default

Total of points accumulated due to the violation of Checkstyle Missing Switch Default rule. The possible associated technical debt is: Correctness.

Class Fan Out Complexity

Total of points accumulated due to the violation of Checkstyle Class Fan out Complexity rule. The possible associated technical debts are: Understandability, Maintainability, Testability and High Coupling.

Class Data Abstraction Coupling

Total of points accumulated due to the violation of Checkstyle Class Data Abstraction Coupling rule. The possible associated technical debts are: Understandability, Maintainability, Testability and High Coupling.

Anon Inner Length

Total of points accumulated due to the violation of Checkstyle Anon Inner Length rule. The possible associated technical debt is: Maintainability.

Average value

Total of points accumulated due violation of all above rules divided by the number of classes that score more than one point.

Usage & Installation

  1. Copy the jar into /extensions/plugins/ directory
  2. Restart Sonar Web server
  3. Check on Quality Profile page if the below Checkstyle Rules are enabled and the threshold values are set appropriate
  4. Launch a new quality analysis and the metrics will be fed

The table below lists the Checkstyle rules that should be enabled in order to generate the Toxicity Chart. The threshold values are just suggestions and they can be modified to fit the desired Quality Profile.

 

Checkstyle RuleLevelThreshold
File Lengthfile500
Method Lengthmethod30
Cyclomatic Complexitymethod10
Parameter Numbermethod7
Boolean Expression Complexitystatement3
Nested If Depthstatement3
Nested Try Depthstatement2
Missing Switch Defaultstatement-
Class Fan Out Complexityclass30
Class Data Abstraction Couplingclass10
Anon Inner Lengthinner class35

 

If the number of classes that score more than one point is greater than 125, then the numbers on the X axis will overlap each other. In order to make the chart readable in this situation the Toxicity Chart threshold value can be changed in Configuration > General Settings > Toxicity Chart panel. The classes that have the score below the threshold value are left off the chart. The threshold value is not taken into account in toxicity metrics computing.

 

  • No labels