OCL is a programming language, so you will want to edit it, execute it and debug it.
Eclipse OCL supports entry of semantically checked OCL expressions
embedded within Ecore using the OCLinEcore editor
as complementary documents using the Complete OCL editor
interactive entry and evaluation using the Interactive OCL console.
programmatic entry and evaluation using the Java API
EMF supports entry of unchecked OCL
embedded within Ecore using the Sample Ecore Editor properties view
Eclipse UML supports entry of unchecked OCL
embedded within UML OpaqueExpressions using the UML Model Editor properties view
Papyrus supports entry of semantically checked OCL expressions
embedded within UML OpaqueExpressions using the Essential OCL editor
Eclipse OCL supports OCL execution
interactive entry and evaluation using the Interactive OCL console.
programmatic entry and evaluation using the Java API
EMF support for generated models enables OCL execution of
constraints, operation bodies and property initializers using the Java API
EMF support for dynamic models enables OCL execution of
constraints using the Validation Delegate API
operation bodies using the Invocation Delegate API
property initializers using the Setting Delegate API
queries using the Query Delegate API
All OCL execution is normally interpreted and starts from the OCL source text (Concrete Syntax). There is therefore a first time parsing overhead to create the compiled form (Abstract Syntax). The compiled form is cached to avoid repeated parsing costs.
Altenatively the direct Java code generator may be used as described in the Code Generator Tutorial.
Since OCL is used embedded in a larger environment, debugging is not easy to provide for OCL in isolation. The OCL debugger provides a variety of launch mechanisms that enable re-use of model element and/or constraint selections.
Alternatively the following approaches may be useful within other toosl
use the hover-text in the semantic editor to understand the expression types
use the quick-fixes in the semantic editor for possible corrections
if the same fix is suggested more than once, try restarting the editor
use the completion assist in the semantic editor for possible syntaxes
use intermediate invariants to check partial results
use the optional explanation messages for an invariant to provide a 'printf'
use the Interactive Xtext OCL console to practice a problematic expression on a model
Once again, since OCL is used embedded in a larger environment, testing is not easy to provide for OCL in isolation. The following approaches may be useful.
use the Interactive Xtext OCL console to practice sub-expressions of a problematic expression on a model
The Eclipse OCL development uses an extended JUnit framework that allows the Eclipse OCL code to be tested by assertions such as:
assertQueryInvalid(null, "let b : Boolean = null in true and b");
assertQueryResults(null, "Set{'b'}", "Set{'a', 'b', 'c'} - Set{'c', 'a'}");
(The null first argument may be a context object.)
See the org.eclipse.ocl.xtext.tests plugin for further details.