PMD

Zpracoval: Hung Duong Manh
Aktualizace: Matěj Rajtr
Vedoucí projektu, korektury, závěrečná revize: Pavel Herout
Datum poslední modifikace: 12.2.2015



Obsah:

Úvod - co je to PMD?

PMD je opensource program, který slouží k analýze zdrojových souborů napsaných v jazyce Java. Na ZČU se používá především jako nástroj pro kontrolu ve výuce základních programovacích praktik, ale je možno ho použít i pro jiné účely, např. odhalování bugů (prázdné try/catch příkazy) nebo hledání duplicitního kódu. Chyby odhalené pomocí PMD nejsou chyby v pravém slova smyslu, ale spíše chyby v kvalitě zdrojového kódu.

Instalace (Windows)

Instalace PMD je poměrně jednoduchá. Stačí pouze ze stránek PMD stáhnout archiv pmd-bin-X.X.X.zip a někam ho rozbalit. (X.X.X je číslo verze)

Stránky PMD - http://pmd.sourceforge.net

Spuštění

V příkazové řádce se přesuneme na místo, kam jsme rozbalili PMD a pak do složky bin.

pmd -d [zdrojovySoubor] -f [vystup] -R [pravidla]

kde

Příklad použití:

1) pmd -d Vlakna.java -f text -R mojepravidla.xml > vystup.txt (znak > společně s názvem souboru přesměruje výstup ze samotné konzole do tohoto souboru)
2) pmd -d c:\data\pmd\pmd\test-data\Unused1.java -f xml -R rulesets/unusedcode.xml

Nutné je použití přepínačů -d (directory - umístění zdrojového souboru), -f (output format - formát výstupu) a -R (rules - balík pravidel).

Poznámka k příkladům:
V prvním případě bude analyzován soubor Vlakna.java (nachází se ve stejné složce jako pmd.bat), výstup bude textový a použije se soubor s pravidly nazvanými mojepravidla.xml, který byl předtím nakopírován do složky bin. Soubor mojepravidla.xml je námi připravený soubor pravidel, který není přibalen s PMD.
V druhém příkladě bude výstup do xml formátu a bude použit přibalené soubor pravidel unusedcode.xml, které se nachází v souboru \lib\pmd-X.X.X.jar\rulesets

V případě, že bychom chtěli nějaké konkrétní pravidlo poupravit, tak si překopírujeme ze souboru pmd-X.X.X.jar daný soubor s pravidly a upravíme. Upravený soubor pravidel pak použijeme tak, že k němu uvedeme cestu v 3. parametru (viz první příklad).

Příklad:
Soubor pravidel /rulesets/naming.xml obsahuje pravidlo LongVariable. Toto pravidlo hledá deklarace názvy proměnných a pokud název proměnné je delší než určitá hodnota, tak oznámí porušení pravidla. Standardně je mezní hodnota nastavena jako 17, my bychom ale chtěli hodnotu navýšit. Skopírujeme si tedy z jaru soubor naming.xml do svého adresáře. Soubor naming.xml pak otevřeme v editoru a najdeme pravidlo LongVariable. XPath výraz vypadá takto:

//VariableDeclaratorId[string-length(@Image) > $minimum]

O pár řádků výše je pak tato řádka:

<property name="minimum" description="The variable length reporting threshold" value="17"/>

Přepíšeme tedy value="17" na value="20" a soubor uložíme. Upravený soubor pravidel pak použijeme takto:

pmd Soubor.java text cestaKUpravenémuSouboru/naming.xml

Princip fungování

PMD ze zdrojového souboru vytvoří Abstract Syntax Tree a ten pak každé pravidlo prochází a hledá chyby.

Vlastní pravidla v PMD rozšíření pro BlueJ:

PMD rozšíření (je myšlen standardní PMDExtension.jar stažený z webu PMD) bere v základu pouze pravidla uvedená v souboru PMDExtension.jar\rulesets\favorites.xml. Pokud chceme definovat své vlastní pravidlo, musíme napsat definici do .xml souboru. Buď si můžeme vytvořit nový .xml soubor, který bude obsahovat pouze naše nové pravidlo nebo ho můžeme připsat do nějakého .xml souboru se základními pravidly (např. basic.xml) a potom na něj uvést odkaz ze souboru favorites.xml.

Pokud bychom chtěli pouze použit nějaké již definované pravidlo, stačí do favorites.xml připsat odkaz, např:

<rule ref="rulesets/basic.xml/EmptyCatchBlock" message="Nepouzivejte prazdne bloky 'catch'"> </rule>