Some will argue that Duplication is the worst coding sin because it perpetuates all the others. For instance, copying and pasting a block of code duplicates its Bugs and Potential Bugs, its Coding Standards Breaches, and so on. It's a meta-sin, if you will.
To help you detect and eliminate duplication, SonarQube uses its own copy/paste detection engine, which can detect duplications:
- Within a source file
- Across multiple files in a project
- Across modules of a project
- Across multiple projects
Looking For Duplications
Add the Duplications widget to your dashboard:
From there, you end up in the component viewer:
To display the source of a particular instance of a block, click on the file name.
Activating Cross Module and Cross Project Duplication Detection
By default, the scope of duplication detection is the project for standard projects and the module for multi-module projects. To detect duplications between the modules of your project and between the different projects analyzed on your SonarQube platform, log in as a a System administrator, go to Settings > General Settings > General > Duplications and set the Cross project duplication detection property to true. Then run another analysis on your projects. You also have the option of setting this at the project level: Configuration > General > Duplications.
- For technical reasons, cross module duplications will be be detected only after the second analysis of your project.
- Cross project duplication detection is automatically disabled when analyzing a project with the
- Always check for duplications in a file before modifying it. If there are any, either:
- Analyze those duplications and eliminate them by using inheritance or other suitable patterns (do this only if you have unit tests on the blocks to change)
- Do not forget to replicate your changes wherever it is necessary on the duplicated blocks
- Use the Issues and Technical Debt mechanisms to help you monitor the cost and and track the remediation of this sin by editing your Quality Profiles to include the Duplicated Blocks rule from the Common Sonar repository.
See the following blog post: Manage Duplicated Code with Sonar.