Nella programmazione web creare un’applicazione che funzioni non è sufficiente. Il miglioramento della qualità del codice, invece, è molto importante per la robustezza e il mantenimento del programma. In questa guida verrà illustrato come generare report di qualità del codice per un progetto Maven, ovvero il Maven Quality Code.
Maven offre l’opportunità di creare siti HTML che descrivono il proprio progetto. Per creare un sito progetto con Maven, digitare il comando mvn site. Una volta fatto, verrà aperto il file target/site/index.html,che consentirà di vedere il sito:
Il sito progetto generalmente, contiene informazioni tecniche riguardanti l’architettura del progetto (dipendenze, plugin, ecc.). Da qui sarà possibile arricchire i report generati dal Maven plug-in, come definiti nel file di configurazione del progetto.
Di seguito è riportato un estratto di un file pom.xml che può essere incorporato nel file di configurazione. Lo stesso codice è caratterizzato da un paio di plug-in indipendenti per l’analisi del codice e del reporting. Ognuno di questi costituisce una relazione specifica sul sito del progetto:
<build> <plugins> <plugin> <!-- The Failsafe Plugin is designed to run integration tests while the Surefire Plugin is designed to run unit tests. --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>2.19.1</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <reporting> <plugins> <plugin> <!-- The JXR Plugin generates a cross-reference of the project's sources. --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jxr-plugin</artifactId> <version>2.5</version> </plugin> <plugin> <!-- The Javadoc Plugin generates javadocs using the Javadoc tool. --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.10.3</version> <configuration> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </plugin> <plugin> <!-- The Surefire Report Plugin generates reports for unit and integration tests. --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-report-plugin</artifactId> <version>2.19.1</version> </plugin> <plugin> <!-- The Checkstyle Plugin generates a report regarding the code style used by the developers. --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> <version>2.17</version> </plugin> <plugin> <!-- The PMD plugin generates PMD and CPD reports using the PMD code analysis tool. --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> <version>3.6</version> <configuration> <skipEmptyReport>false</skipEmptyReport> <linkXref>true</linkXref> <minimumTokens>50</minimumTokens> <rulesets> <ruleset>rulesets/java/android.xml</ruleset> <ruleset>rulesets/java/basic.xml</ruleset> <ruleset>rulesets/java/braces.xml</ruleset> <ruleset>rulesets/java/clone.xml</ruleset> <ruleset>rulesets/java/codesize.xml</ruleset> <ruleset>rulesets/java/comments.xml</ruleset> <!-- <ruleset>rulesets/java/controversial.xml</ruleset> --> <ruleset>rulesets/java/coupling.xml</ruleset> <ruleset>rulesets/java/design.xml</ruleset> <ruleset>rulesets/java/empty.xml</ruleset> <ruleset>rulesets/java/finalizers.xml</ruleset> <ruleset>rulesets/java/imports.xml</ruleset> <ruleset>rulesets/java/j2ee.xml</ruleset> <ruleset>rulesets/java/javabeans.xml</ruleset> <ruleset>rulesets/java/junit.xml</ruleset> <ruleset>rulesets/java/logging-jakarta-commons.xml</ruleset> <ruleset>rulesets/java/logging-java.xml</ruleset> <ruleset>rulesets/java/migrating.xml</ruleset> <ruleset>rulesets/java/migrating_to_13.xml</ruleset> <ruleset>rulesets/java/migrating_to_14.xml</ruleset> <ruleset>rulesets/java/migrating_to_15.xml</ruleset> <ruleset>rulesets/java/migrating_to_junit4.xml</ruleset> <ruleset>rulesets/java/naming.xml</ruleset> <ruleset>rulesets/java/optimizations.xml</ruleset> <ruleset>rulesets/java/strictexception.xml</ruleset> <ruleset>rulesets/java/strings.xml</ruleset> <ruleset>rulesets/java/sunsecure.xml</ruleset> <ruleset>rulesets/java/typeresolution.xml</ruleset> <ruleset>rulesets/java/unnecessary.xml</ruleset> <ruleset>rulesets/java/unusedcode.xml</ruleset> </rulesets> </configuration> </plugin> <plugin> <!-- FindBugs Plugin looks for bugs in Java programs. It is based on the concept of bug patterns. --> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plugin</artifactId> <version>3.0.0</version> </plugin> </plugins> </reporting>
Nota Bene: Questo plug-in è dato come esempio. Per scoprire la lista completa dei plug-in disponibili cliccare qui: plug-in Maven.
Prima di generare il proprio sito progetto, è necessario eseguire un test unitario e integrativo per ogni nuovo plug-in che si desidera inserire. È possibile, ad esempio, utilizzare il comando mvn verify siteper per generare un sito progetto contenente i risultati dei test di unitario e di integrativo.
Per visualizzare un report in Maven basterà cliccare su Il mio Progetto, Documentazione progetto e Report Progetto (My Project > Project Documentation > Project Reports):
Questo report consente la visualizzazione del codice sorgente del progetto:
Questo consente di visualizzare una versione di riferimenti incrociati del codice sorgente, chiamato test source code.
Questo report consente di visualizzare la documentazione JavaDoc API:
Questo report contiene la documentazione del Test JavaDoc API.
Il report visualizza i risultati dell’ unit testing:
Questo riporta i risultati per l’integration testing.
Infine il checkstyle presenta la lista di tutte le violazioni delle regole di sintassi standard, in Java:
Le regole presenti dietro questi errori possono essere modificate attraverso una Custom Checkstyle Checker Configuration.
Questo report evidenzierà i blocchi di codice duplicati nel progetto:
Si consiglia di utilizzare il parametro
<minimumTokens>50</minimumTokens>
per impostare la lunghezza minima del codice.
Maven riporta costruzioni di codice insufficienti (che violano il PMD Ruleset attuale) e che possono, potenzialmente produrre errori:
È possibile utilizzare il parametro
<rulesets>
per definire il PMD Ruleset.
Maven crea un codice sorgente con la FindBugs Library. Questo report esteso elenca tutti i possibili errore del proprio codice:
SonarQube èuna piattaforma open source che consente di compilare le informazioni da vari report, valutando la qualità del codice e confrontando il proprio progetto con altri.
Foto: © Pixabay.