Java Modeling Language
The Java Modeling Language (JML) is a specification language for Java programs, using Hoare style pre- and postconditions and invariants, that follows the design by contract paradigm. Specifications are written as Java annotation comments to the source files, which hence can be compiled with any Java compiler. Various verification tools, such as a runtime assertion checker and the Extended Static Checker (ESC/Java) aid development. Overview. JML is a behavioural interface specification language for Java modules. JML provides semantics to formally describe the behavior of a Java module, preventing ambiguity with regard to the module designers' intentions . JML inherits ideas from Eiffel, Larch and the Refinement Calculus, with the goal of providing rigorous formal semantics while still being accessible to any Java programmer. Various tools are available that make use of JML's behavioral specifications. Because specifications can be written as annotations in Java program files, or stored in separate specification files, Java modules with JML specifications can be compiled unchanged with any Java compiler. Syntax. JML specifications are added to Java code in the form of annotations in comments. Java comments are interpreted as JML annotations when they begin with an @ sign. That is, comments of  the form or Basic JML syntax provides the following keywords Basic JML also provides the following expressions as well as standard Java syntax for logical and, or, and not. JML annotations also have access to Java objects, object methods and operators that are within the scope of the method being annotated and that have appropriate visibility. These are combined to provide formal specifications of the properties of classes, fields and methods. For example, an annotated example of a simple banking class may look like public class BankingExample Full documentation of JML syntax is available in the JML Reference Manual. Tool  support. A variety of tools provide functionality based on JML annotations. The Iowa State JML tools provide an assertion checking compiler codice_27 which converts JML annotations into runtime assertions, a documentation generator codice_28 which produces Javadoc documentation augmented with extra information from JML annotations, and a unit test generator codice_29 which generates JUnit test code from JML annotations. Independent groups are working on tools that make use of JML annotations. These include: