This chapter lists both papers and software related to this diploma thesis. For some of the work there is a detailed comparison in subsequent chapters.
This section lists tools, which perform runtime constraint checking on java programs, more or less similar to the tool developed in chapter .
JMSAssert ([MMS]) provides OCL support for java. Constraints are embedded into javadoc comments. The tool links into the JVM to make the constraints checked. This approach does not involve source code modification. This makes it easier to use, but also platform dependent (currently Windows only). It also requires just-in-time compilers to be switched off. Binaries are available at no cost.
Several approaches instrument java byte code to make constraints checked, such as Handshake ([DH98]) and jContractor ([KHB98]). Section discusses, whether the approach of source code instrumentation presented in this paper is adaptable to byte code instrumentation. Handshake uses separate text files with a non-standard syntax to express class invariants and pre/postconditions. jContractor implements constraints with dedicated java methods. Neither Handshake nor jContractor binaries are publicly available.
iContract ([RK98]) is a preprocessor for java. It instruments java source code to check constraints. It supports a subset of OCL. Constraints are embedded into javadoc comments. iContracts source code instrumentation is analyzed in detail in section . Binaries are available at no cost.
For some applications OCL is just too powerful. A simpler approach is demonstrated in [KSR00]. It implements a number of predefined constraint types, such as numeric range or ordering of arrays. For instance to have an attribute age constrained to positive values, one just adds a method getAgeMinValue() {return 0;}. Most OCL constraints used in the development of the OCL toolkit also could have been expressed with such simple means. Constrained classes must be valid JavaBeans. Also, the class must announce the modification of attributes manually to have the constraints reevaluated. KBeans is released under GPL. Additionally there is a GUI for simulating an object population and checking constraints against it.
Jass ([JASS]) is a preprocessor for java assertions developed at the University of Oldenburg ([DB99]). Apart from class invariants and method pre- and postconditions it provides check statements (like assert() in C++) and loop invariants and variants. Assertions are expressed in java, extended by universal and existential quantifiers. Section analyses the code instrumentation of Jass in detail. Jass is available under GPL.
The following table summarizes the tools introduced above. The last line shows the tool developed with this paper.
Constraint Source | Verification Method | Availability | |
JMSAssert | OCL in javadoc | links JVM | binary |
(platform dependent) | |||
Handshake | proprietary language | byte code instr. / | not |
proxy system library | available | ||
jContractor | java methods | byte code instr. / | not |
class loader | available | ||
iContract | OCL in javadoc | source code instr. | binary |
KBeans | predefined constraint | in special environment | GPL |
types / java methods | |||
Jass | java fragments in javadoc | source code instr. | GPL |
Dresden | OCL in javadoc | source code instr. | LGPL |
Toolkit | (reversible) |
This section lists work related to reverse engineering needed in chapter .
A powerful approach to reverse engineering has been developed at the MIT [JW99]. The tool Superwomble extracts an object model from java byte code. Object models are roughly a subset of UML class diagrams, featuring inheritance and object associations. An important challenge for the analysis is the detection of element types of container attributes. The tool performs this very efficiently, without requiring any additional help from the user. Thus, it complements the two approaches presented in this paper. A detailed comparison is provided in section .
JVision [OI] produces class diagrams from java source or byte code. It's easy to use and has nice auto-layout. But it does not handle associations in any way. Collection attributes are simply shown as attributes. Instead it analyses, which classes instantiate/use each other. This is not nearly as useful as associations.
Cybernetic Intelligence develops an OCL compiler ([CI]). The current prototype claims to support syntax checking only. Type checking is under development. Frontends are available for Select Enterprise and Rational Rose.
Elixir ([ET]) claims OCL support in it's CASE tool and its java IDE. The CASE tool provides an OCL text field only, without any syntax checking. For the IDE a plugin is provided to integrate iContract.
Several approaches implement OCL upon object repositories, such as USE [RG00] and ModelRun [BS]. The object repositories can be populated and animated visually, with OCL constraints continuesly being checked.
There is a universal code instrumentation toolkit ([CMA]) available for java. It parses java files into parse trees, preserving white space and comments. The parse tree can be modified and written back into the file. There are various applications for this, including tracing/profiling of program execution. The code instrumentation developed in this paper could probably be realized using this toolkit. However, the parser analyses the complete java file, thus is much more heavy-weight than the parser developed with this paper. There is a test version available at no cost, limited in the size of source programs it can handle.