“Models that don’t execute are like cars without engines”.
Executable Models implement wrt 3GL the same paradigm that 3GL implemented through compilers or interpreters.
The model is the system, it’s not something you should maintain or keep aligned separately.
Executable models help reduce errors (at least of 10%, according to estimates), but most importantly they help to find the errors earlier in the development process, which is the actual critical advantage.
One of the critical issues is interoperability between modeling tools. A common metamodel for Executable UML must be defined, so that
The executable UML foundation is defined based on:
- definition of the executable subset of UML (taken the entire UML metamodel, a subset of it is selected and defined as executable)
- definition of execution semantics (defined using Executable UML itself)
- a base semantics (mainly based on FSM and other mathematic model)
An action language has been defined for foundational UML: it’s a Java-like syntax, with a dataflow underlying semantics (which grants more parallelism, …).
A few issues need to be addressed, as highlighted during the discussion session: educational issues (make learners approach executable UML as their basic interface with programming, instead of other lower-level languages); integration with existing code, libraries, distribution, and so on.
Disclaimer: This post is just a set of notes I took during the tutorial, it’s not meant to be complete or comprehensive, but I think it can provide a good understanding of the basic philosophy underlying Executable UML.