In the Executable UML approach, the models are, in one sense, “source code” for the system. As such, they must be treated as configuration items just like conventional source code. Users will therefore wish to baseline and freeze versions and store these under formal configuration control. It must also be possible derive successor (child) versions.
Sometimes it will be required to derive two or more child versions to work on these independently. Such “branching” may be required for one of a number of reasons:
- While work on one branch (the “main line”) evolves the product towards its next major version, problems may be identified in the current production version in the field which must be addressed by “patches”. Such patches cannot be created in the context of the main line development since that will, at any given stage, include changes not yet ready for full release;
- Users may wish to continue semi-independent development tracks perhaps in different repositories or geographical locations where it is expected that the developments will have minimal impact on each other;
- Even when working in the same location on developments that have a larger cross-impact on each other, developers may wish to work independently for some without being encumbered by multi-user restrictions and then subsequently resolve the impact of this;
- Core models may be sent out to multiple customers who each adapt them for their particular environment.
In order to support these requirements, iUML has facilities to:
- Baseline and control multiple model versions and support the creation of branches;
- Determine the differences between model versions;
- Perform automated or semi-automated merging of branched models into a single target model;
- Integrate the built-in version management of iUML with external CM systems.
The features are fully described in a downloadable technical note.

