Style
-
Define Code Conventions (Naming, spaces vs. tabs, etc.)
-
Re-use existing conventions!
-
Follow them!
-
Use tools to check them
Maven use:
-
Put in <reporting> section
Checkstyle
-
SQE NetBeans plugin (Use version from Kenai for 6.7 Support!)
-
Checkstyle Beans (may work better than SQE)
-
Also provides some Code quality checks
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.3</version>
<configuration>
<configLocation>checkstyle.xml</configLocation>
</configuration>
</plugin>
An example checkstyle.xml can be found at: http://wmsx.googlecode.com/hg/build-tools/src/main/resources/wmsx/checkstyle.xml
Checkstyle 4 vs 5
-
The checkstyle maven plugin until version 2.3 is based on checkstyle 4.
-
Current eclipse checkstyle plugins is based on checkstyle 5
-
both are incompatible (slight changes in checkstyle.xml)
Fix: Use newer checkstyle plugin. Problem: Not officially available yet! Must set plugin location!
...reporting...plugins...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.5-SNAPSHOT</version>
<configuration>
<configLocation>checkstyle.xml</configLocation>
</configuration>
</plugin>
...
<pluginRepositories>
<pluginRepository>
<id>apache-snapshots</id>
<name>Apache Snapshot repository</name>
<url>http://repository.apache.org/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
PMD
Common Programming checks for code style.
Yes, all the standard rules make sense!
Plugins available for Eclipse, Netbeans, Maven
-
SQE NetBeans plugin (Use version from Kenai for 6.7 Support!)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.4</version>
<configuration>
<linkXref>true</linkXref>
<targetJdk>1.5</targetJdk>
<sourceEncoding>utf-8</sourceEncoding>
<rulesets>
<ruleset>/rulesets/basic.xml</ruleset>
<ruleset>/rulesets/braces.xml</ruleset>
<ruleset>/rulesets/codesize.xml</ruleset>
<ruleset>/rulesets/clone.xml</ruleset>
<ruleset>/rulesets/design.xml</ruleset>
<ruleset>/rulesets/finalizers.xml</ruleset>
<ruleset>/rulesets/imports.xml</ruleset>
<ruleset>/rulesets/strings.xml</ruleset>
<ruleset>/rulesets/migrating_to_15.xml</ruleset>
<ruleset>/rulesets/optimizations.xml</ruleset>
<ruleset>/rulesets/sunsecure.xml</ruleset>
<ruleset>/rulesets/unusedcode.xml</ruleset>
</rulesets>
</configuration>
</plugin>
Findbugs
-
Another Software quality tool
-
Yes, the rules also make sense!
-
SQE NetBeans plugin (Use version from Kenai for 6.7 Support!)
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<threshold>Low</threshold>
<effort>Max</effort>
<omitVisitors>FindDeadLocalStores</omitVisitors>
</configuration>
</plugin>
NCSS
-
Non Commented Source Statements
-
Simplified: The number of ;
-
Better comparable than LOC (lines of code)
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>javancss-maven-plugin</artifactId>
<version>2.0-beta-2</version>
</plugin>
</plugins>
</reporting>