PMD
Das Werkzeug PMD analysiert den Quellcode. Nach Angaben der Entwickler ist PMD kein Akronym. Besonders hervorzuheben sind folgende Analysepunkte
- Cut and Paste Detector – Duplizierter Quellcode
- bläht den Quellcode auf
- erschwert die Wartung
- erhöht den Testaufwand
- Zuweisungen in Schleifenbedingungen
- Komplexitätsanalyse / Lose Kopplung (Law of Demeter)
- Umfangreiches, strukturiertes Regelwerk
- Erkennung von doppelten unäre Operationen (!!)
Für den Bereich Kommentare und Dokumentation ist PMD nicht geeignet (vergl. Checkstyle).
Integration
- IDE
- SVN Pre-Commit Hook
- Maven-Build (Ausführung und Erzeugen von Basisdaten)
- Jenkins (GUI und Grenze für ungültige Artefakte)
- DRY: Darstellung Cut and Paste Detector
False/Positive
False/Positives können auf folgende Weisen markiert werden
- Parametrisierung der Regeln
- Codestellen über Annotation oder Kommentare markieren
- Ausschluss von Projekten / Packages
Regelerweiterung
Es werden verschiedene Regelpakete / Module bereitgestellt.
- Java für JEE / Android
- https://pmd.github.io/pmd-5.4.1/pmd-java/rules/index.html
- nicht Java Code (z.B. JSF, JSP, JavaScript)
Des Weiteren sind eigene Erweiterungen möglich, wenn auch meistens nicht notwendig
- Java / Xpath
- http://pmd.sourceforge.net/pmd-4.3.0/howtowritearule.html
- http://pmd.sourceforge.net/pmd-4.3.0/xpathruletutorial.html
- https://pmd.github.io/latest/pmd-java/rules/index.html
Beispiel Blacklist für Regeln
<?xml version="1.0" encoding="UTF-8"?>
<ruleset xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
name="pmd-eclipse"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
<description>shoeso RuleSet</description>
<!-- Regeldefinition siehe https://pmd.github.io/latest/pmd-java/rules/index.html -->
<rule ref="rulesets/java/basic.xml">
<exclude name="AvoidUsingHardCodedIP"/>
<exclude name="CollapsibleIfStatements"/>
</rule>
<rule ref="rulesets/java/clone.xml">
</rule>
...
</ruleset>