Article Preview
TopIntroduction
The Unified Modeling Language (UML) is the de facto standard for system development, as it was developed and adopted by the Object Management Group (OMG-UML, 2009). It consists of several diagrammatic languages, each describing a different view of object-oriented software; a system model consists of a collection of such diagrams. The most important view of UML is the static/structural specification which describes a structural abstraction of the real world. This view is expressed by class diagrams, which consist of classes and their descriptors, associations among them, and constraints imposed on both classes and associations. Among the nine visual UML models, class diagrams appear to be the most clear, intuitive and well defined.
Dobing and Parsons (2006
) found that the Class Diagram view is the most frequently used (73%) in their examination of the usage of UML. It was found to be useful in clarifying technical understanding, and for maintaining software documentation. The major usage of UML class diagrams is to specify, visualize, and document systems’ static view. They also serve as a basis for generating implementation artifacts such as code skeleton (Martin, 2006) and database schemata (Blaha et al., 1994), as a means for knowledge representation such as specifying ontologies (Cranefield, 2001; Falkovych et al., 2003; Gasevic et al., 2004; Kabilan & Johannesson, 2004; Kogut, 2002; Timm & Gannod, 2005), and for defining meta-models of other programming, modeling, and specification languages.
Class diagrams are models written by people, and therefore, usually suffer from modeling problems like inconsistency, redundancy, and abstraction errors. Inexperienced designers tend to create erroneous models, but even experienced ones cannot anticipate the implication of a change on an overall model (Sunye et al., 2001). Indeed, Lange et al. (2006) show that model defects often remain undetected, even if practitioners check the model attentively. These problems are empowered when a model originates from different resources. Combined sources are usually overlapping, and the integration yields redundant inconsistent models (Ackermann & Turowski, 2006; Huzar et al., 2004). It is a common belief that such problems can best be solved at the level of models (Jackson & Rinard, 2004).
In view of the wide spread usage of UML class diagrams and the difficulties of producing high quality models, it is essential to equip UML CASE tools with reasoning capabilities for identifying problems within models (Berardi et al., 2005; Cadoli et al., 2004; Hartman, 2001; Jackson & Rinard, 2004). These capabilities can help in detecting design problems, identifying the reasons for these errors, suggesting possible solutions, and providing advice for design improvements (Unhelkar, 2005). The quality of models is especially important for the emerging Model Driven Engineering (MDE) approach, in which software is developed by repeated transformations of models (Stahl et al., 2006).