We use the following tools in our Java-based courses (not every course uses every tool):
  • Eclipse - the leading integrated development environment for Java, which supports the majority of the rest of these tools as plug-ins.
  • JML - the Java Modeling Language (and associated tools), a specification language for Java that enables Design by Contract and logical modeling of program behavior.
  • BONc - a parser and type checker for BON, the Business Object Notation. We often use BON instead of UML in our courses, primarily because it was originally designed for use with Design by Contract processes (and therefore has appropriate semantics) and has an easily-readable English-based textual notation.
  • Beetlz - a refinement checker for BON, which can compare Java source files with design documents for consistency.
  • ESC/Java2 - an extended static checker for JML-annotated Java, which identifies common programming errors and attempts to verify the Java code against its JML specifications.
  • Metrics - an Eclipse plug-in that measures several common software metrics on Eclipse projects, including line counts, McCabe cyclomatic complexity, etc.
  • CheckStyle - a static checker for Java source code that checks code layout/style issues, typically adherence to some coding standard. It is also available as an Eclipse plug-in.
  • PMD - a static checker for Java source code that detects several common programming problems. PMD integration exists for most Java IDEs, including Eclipse.
  • FindBugs - a static checker for Java bytecode that detects bug patterns, code idioms that are often a result of programming errors. FindBugs integration exists for most Java IDEs, including Eclipse.
  • JUnit - the first widely-adopted, and still most widely-used, unit testing framework for Java. JUnit is integrated into distributions of Eclipse that target Java development.
  • TestNG - another unit testing framework for Java, which has a number of features (related to parallelization of tests, lazy evaluation of test data, etc.) that JUnit does not. It is also available as an Eclipse plug-in.
  • EMMA - a code coverage tool for Java, which we and students use to evaluate the code coverage of their automated tests. It is also available as an Eclipse plugin, EclEmma.
  • log4j - a logging framework for Java, currently maintained by the Apache Software Foundation as part of the Logging Services Project. log4j pre-dates the Java logging framework, and is considered by many to be easier to work with.
  • AutoGradeMe - an Eclipse plug-in that collects the output of several of the static checkers listed above, and uses it to determine grades for Eclipse projects. We use this plug-in extensively when evaluating student work. Note that at present it still appears on the Web under its original name, AutoGrader.
  • Mobius Program Verification Environment - a distribution of Eclipse that integrates several of the above tools.

In addition, we use the following standard Java frameworks extensively: