Proceedings of the 34th Hawaii International Conference on System Sciences - 2001 How to Make Apples from Oranges in UML Petri Selonen, Kai Koskimies and Markku Sakkinen1 Tampere University of Technology Software Systems Laboratory P.O. Box 553 FIN-33101 Tampere, Finland +358 3 365 3889 {pselonen, kk}@cs.tut.fi, [email protected] Abstract Unified Modeling Language (UML) provides various diagram types for describing a system from different perspectives or abstraction levels. Hence, various UML models of the same system are dependent and strongly overlapping. This paper discusses various general approaches and viewpoints of model transformations in UML. The possible source and target diagram types are analyzed and categories are given for different transformations. It is argued that such transformations should be defined in terms of the UML metamodel, rather than on the level of the actual diagrams. A detailed example of a transformation operation from sequence diagrams into class diagrams is presented to illustrate such operations. It is concluded that the transformation operations can automate a substantial part in both forward and reverse engineering. These operations can be used, for example, for model checking, merging, slicing, and synthesis. So far there exists relatively modest tool support exploiting the logical dependencies of UML models. Some systems (e.g. Rational Rose) maintain, for instance, method lists across class diagrams and sequence diagrams: adding a call of a new method in a sequence diagram automatically causes the corresponding updating of the class symbol in a class diagram. Another example is the transformation between sequence diagrams and collaboration diagrams, also supported by Rational Rose. However, there is no comprehensive framework that would support such mechanisms throughout all diagram types in a systematic way. Model2 Model1 Model3 1. Introduction System UML [12,13,15] has become an industrial standard for the presentation of various design artifacts in objectoriented software development. UML provides different diagram types supporting the development process from requirements specification to implementation. The models presented by different diagrams view a system from different perspectives or from different abstraction levels. Hence, the various UML models of the same system are not independent specifications but strongly overlapping: they depend on each other in many ways. For example, changes in one model may imply changes in another, and a large portion of one model may be synthesized on the basis of another model. This is illustrated in Figure 1. 1 Figure 1. Different UML models describe overlapping parts of the same system and are therefore dependent of each other. In this paper we study the relationships of different diagram types in UML, and transformation operations that are based on those relationships. A transformation operation takes a UML diagram as its operand (the source diagram), and produces another diagram of another type as its result (the target diagram). We consider such transformation operations as an essential part of a UML- Currently at the University of Jyväskylä, Finland. 0-7695-0981-9/01 $10.00 (c) 2001 IEEE 1 Proceedings of the 34th Hawaii International Conference on System Sciences - 2001 based software design environment. The transformation operations can be used for example in the following ways: Model checking. Are two diagrams consistent with each other? It is much easier to find inconsistencies between two diagrams of the same type than between two diagrams of different types. If the diagrams are of different types, transformation operations can be first applied to obtain two diagrams of the same type, which are then compared for consistency. the role of the UML metamodel in the transformation operations in Section 2. We argue that the transformation operations described in this paper can be used as a basis of tool support in any UML-based CASE environment. The expected benefits of this approach are the following: - Model merging. Add the information contained in one diagram to another diagram. Merging the modeling information of two diagrams is much easier when the diagrams are of the same type. If the diagrams are of different types, transformation operations can be first applied to obtain two diagrams of the same type, which are then merged. Model slicing. Create a partial view of a diagram showing only a particular aspect. Often the aspect can be presented in the form of another diagram (of some other type). For example, one may want to see a dynamic slice of a static diagram. The diagram representing the slicing criterion (for example, a dynamic diagram) can be first transformed into the type of the target diagram (for example, a static diagram). An intersection of the two diagrams of the same type then shows the desired slice. - - Model synthesis. Produce a diagram on the basis of an existing diagram of another type. This is the most straightforward usage of transformation operations. Such synthesis can be useful for two purposes: to obtain automatically an initial form of a diagram needed in a subsequent phase of the software development process, or to obtain a different view of the information contained by a diagram. The latter may be used just as a transient view on a model, rather than as a persistent design artifact. Although we speak about diagrams in this paper, it should be noted that the UML makes a clear distinction between the visual presentation, i.e., the diagrams, and their underlying models. In principle, the models corresponding to the different diagram types are not separate, but they all belong to the same system model, which is an instance of the UML metamodel. Many things that are "transformed" on the diagram level can thus be considered to be shared between the different models on the model level. For instance, in the transformation from sequence diagram to class diagram (Section 5), for each class there exists only one model element (metaobject), and this element is shared by the two diagrams. It would be shared also by any other diagrams where the same class appears. We will discuss - Models become easier and faster to create because they can be partly achieved as results of automated operations. Model synthesis can be exploited both in forward and reverse engineering. In the former, the abstraction level of the source diagram is same or higher than that of the target diagram. In the latter, the abstraction level of the source diagram is usually lower than that of the target diagram. Forward and reverse engineering aspects of UML models have been considered also in [1], but mostly with respect to code rather than to other UML models. We argue that internal forward and reverse engineering techniques between different UML models are equally important. Models become more consistent and correct because they are either produced or updated automatically, or checked against each other exploiting the transformation operations. Models become easier to understand, because model operations can be used to achieve different views of the models, either from different viewpoints or on different abstraction levels. Tool support can be made more customizable, because transformation operations can be used in user-defined scripts. Transformation operations support incremental development: a diagram can be (automatically) augmented with the information given by another diagram, the result can be further developed manually, and used then to augment the other diagram type etc. Note that some of the usage scenarios rely on the existence of operations that produce a union or intersection of two diagrams of the same type. Although such basic diagram operations are not trivial (and indeed not even sensible for certain diagram types), we will ignore them in this paper since the problems of such "set" operations are essentially different from transformation operations. In Section 3 we will present various general approaches for diagram transformations, with several examples. In Section 4 we will examine the transformations between particular diagram types in UML. In Section 5 a detailed case study of a particular transformation operation is presented, transformation of sequence diagrams into class diagrams. Related work is discussed in Section 6. Finally, some concluding remarks 0-7695-0981-9/01 $10.00 (c) 2001 IEEE 2 Proceedings of the 34th Hawaii International Conference on System Sciences - 2001 concerning the future directions of this research are presented. We assume the knowledge of UML throughout the paper. This work is part of ATOS project carried out under TEKES grant 40908/98. 2. Using the UML metamodel in transformation operations The architecture of the UML is based on a four-layer metamodel structure, which consists of the following layers: user objects, model, metamodel and metametamodel. The meta-metamodel layer is the infrastructure for a metamodeling architecture and it defines the language for specifying metamodels. The metamodel layer is an instance of the meta-metamodel and defines the language for specifying a model. In a sense, UML is used to describe itself, as is common with modeling languages. We use the metamodel to define our transform operation for several reasons. First, since UML is standardized, the metamodel describes all the relevant information a UML diagram and a model can contain. Secondly, while it is reasonable to assume that a practical UML modeling tool has its internal data model more or less based on the UML metamodel, they typically differ from each other. We transform the model information from a tool-specific data model into the standard UML metamodel form, perform the operation inside the metamodel layer and then transform the resulting model back to the tool-specific data model. This way we can make the core of our operation independent of a particular design tool. Finally, the implementation platform in our project, the Nokia TED, already supports a reasonably large subset of UML metamodel as a component library, thus allowing us to operate more easily directly with the tool data. We divide the transformation operation into three distinctive phases as illustrated in Figure 2. A B C View B D C Tool-Specific Layer Mapping Model A UML Metamodel Instance Layer Operations Figure 2. Phases of the transform operation First, we take the view of a sequence diagram and map that view to a sequence diagram metamodel instance. After converting the information inherent in the sequence diagram to the metamodel instance form, we then further map this collaboration metamodel instance to a form required by a class diagram. Here we use the Core/Backbone and Core/Relationships packages [12] in order to show the classes, their operations and relationships. Finally, this information is converted back to a tool-specific form. We will discuss these phases in more detail in Section 5. 3. Techniques for UML diagram transformation operations There can be several levels of confidence in a transformation operation. In the strictest form we require that the information in the target diagram is guaranteed to be correct, provided that the source diagram is correct. On the other hand, the most relaxed principle would be that there is no information in the target diagram that is in conflict with the source diagram; that is, the target diagram is free to present additional information as long as it is not invalidated by the source diagram. We call these principles the minimum principle and the maximum principle, respectively. The maximum principle is more appropriate in practice because it allows useful heuristics that produce the desired results usually although not always. We will present examples of such heuristics in Section 5. To find a mapping from one diagram type to another, two approaches can be used. In the push approach, each feature of the source diagram type is considered separately, and the implication of this feature in a target diagram is considered. The feature may be reflected in the target diagram as a single feature or as a pattern of features. In the pull approach, each feature of the target diagram type is considered separately, and possible reasons for the feature are sought from the source diagram. Again, the reason may be the appearance of a single source diagram feature or a pattern of features. Examples of both push and pull approaches will be given in the case study of Section 5. In some cases a transformation operation can preserve all the information in the source diagram. This is the case for diagram type pairs that represent different notations for the same modeling aspect. There is one such pair in UML: collaboration and sequence diagrams (there are some minor details that cannot be directly represented in both types). The existence of two different notations for the same thing can be regarded as a design flaw in UML, but on the other hand there are clear benefits of both notations. A 0-7695-0981-9/01 $10.00 (c) 2001 IEEE 3 Proceedings of the 34th Hawaii International Conference on System Sciences - 2001 transformation operation between sequence and collaboration diagrams can be useful, for example, for arranging the order of events in a collaboration diagram. The collaboration diagram can be first transformed into a sequence diagram where it is easy to edit the order of events (due to the vertical time axis), and then transformed back into a collaboration diagram. A basic transformation operation is defined as a function with signature trans: T1 → T2, where T1 and T2 are particular UML diagram types. However, it is sometimes more sensible to consider several source diagrams. This is particularly obvious in cases where a complete specification is derived from sample descriptions. UML indeed includes a rather strong provision for design-by-example: examples of interactions among a set of objects can be defined as sequence diagrams or collaboration diagrams. On the other hand, complete behavioral specifications of single objects can be given as statechart diagrams. There are several algorithms (e.g. [10], [16]) synthesizing statechart diagrams (or equivalent) from a set of sequence diagrams. Another example could be the synthesis of a class diagram on the basis of statechart diagrams: since a statechart diagram concerns usually a single class, the class diagram produced on the basis of a statechart diagram would be rather trivial. However, a more sensible class diagram can be produced on the basis of a set of statechart diagrams. Each statechart diagram gives rise to a class with the operations (or signals) implied by the events appearing in the diagram, and sending an event between the state machines of two classes yields an association between the classes. It is also sometimes sensible to consider incremental transformation with signature trans: T1xT2 → T2. In this case the transformation operation adds the information of a diagram of type T1 to an existing diagram of type T2, producing a new diagram of type T2. For example, the information contained by a sequence diagram can be merged with an existing statechart diagram using an incremental version of the statechart synthesis algorithm [10]. Similarly, the same information can be merged with an existing class diagram. Note that it is possible to take advantage of the existing diagram of type T2 in the interpretation of the diagram of type T1. For example, the existence of a composite relationship between two classes can be inferred from a sequence diagram using certain heuristics (see Section 5). However, an existing class diagram may show an aggregation relationship between these classes, thus invalidating the heuristic conclusion. UML provides two extension mechanisms that can be exploited in transformation operations to attach additional information to the diagrams: stereotypes and tagged values. Stereotypes are (possibly user-defined) new metamodel (sub)classes, while tagged values can be regarded as additional attributes of model elements. Such mechanisms are particularly useful when transforming diagrams in the reverse engineering direction, that is, from less abstract diagrams to more abstract diagrams. For example, it would be very difficult to generate more than a trivial use case diagram from an arbitrary class diagram. However, if classes are attached with a tagged value indicating the use case(s) this class participates in, and actor classes are marked with stereotype «actor», a sensible use case diagram can be generated. A similar example would be the generation of component diagrams from class diagrams: if the component a class belongs to is indicated as a tagged value in a class symbol, a sensible component diagram can be generated as a projection of the class diagram on components. Comment boxes are yet another way to present additional information in UML diagrams, but they may clutter up a diagram when used excessively. Hyperlinking is a mechanism that is not included in the actual UML but that would be useful in connection with the transformation operations. Although UML does not directly support hyperlinks, they can (and hopefully will) be introduced on the tool level. Hyperlinks provide yet another way to associate additional information to model elements, in this case as references to other model elements. Since hyperlinks are (almost) invisible in the UML diagrams, they do not clutter the diagrams even when heavily used. For example, hyperlinks could be used to indicate the origin of a certain model element in the target diagram, pointing to the element in the source diagram that was the "reason" for the element in the target diagram. This could be used as a primitive tracing mechanism in a software development process exploiting model transformations. Sometimes a useful transformation may require userdefined transformation rules. For example, there could be a variant of a transformation operation producing a class diagram from a single statechart diagram, assuming a particular class-based implementation scheme for state machines (e.g. the State design pattern [7]). Finally, it should be noted that the source code can be regarded as an ultimate model of a system. Although transformation operations from source code to different UML diagrams (that is, conventional reverse engineering) are beyond the scope of this paper, it is worth mentioning that the transformation operations discussed here are very useful when applied to diagrams produced automatically 0-7695-0981-9/01 $10.00 (c) 2001 IEEE 4 Proceedings of the 34th Hawaii International Conference on System Sciences - 2001 from source code. Just as an example, consider the following scenario: the source code of a system is instrumented so that when run, it generates a sequence of events that can be shown as a UML sequence diagram. This sequence diagram is transformed into a class diagram, showing that portion of the static structure model that is involved in a particular use case. 4. Survey of transformations between UML diagram types In this section we will briefly summarize meaningful transformation operations between different pairs of diagram types in UML. We will use the following shorthand names for the nine diagram types: UCD = use case diagram SED = sequence diagram CBD = collaboration diagram OBD = object diagram CLD = class diagram SCD = statechart diagram ACD = activity diagram DED = deployment diagram CMD = component diagram Weak transformation. The target diagram contains only small amount of information, but could be nevertheless exploited as a starting point for constructing a new diagram. We can unify the two pairs of diagram types that have full transformation between them, i.e., SED with CBD and SCD with ACD. This still leaves us 7 diagram types and thus 7 x 6 = 42 possible transformations. Figure 3 shows 9 meaningful and interesting transformations between diagram types (in addition to the full transformations), and 4 ones between diagram types and source code. The diagram types are arranged from left to right according to the order in which they are typically employed in a software development process, although this order should be seen here only as suggestive. (Indeed, the order is far from ambiguous. For example, class diagrams are often applied in early stages of the process as well.) Roughly speaking, the arrows going from left to right therefore represent forward engineering while the reverse arrows represent reverse engineering. SED In principle, there are 9 x 8 = 72 possible transformations between these types. We will show how we can restrict our consideration to a significantly smaller number of transformations. First, we divide the transformations into the following categories: DED SCD UCD CBD CLD Source ACD Full transformation. The target diagram contains (almost) the same information as the source diagram. This kind of transformation is possible only between semantically close diagram pairs, SED/CBD and SCD/ACD. Only minor information may be lost, like the links in a CBD. If there is a link exactly between objects exchanging messages, the links do not add any new information. Indeed, SED and CBD are not distinguished from each other in the UML metamodel. Strong transformation. The target diagram contains a significant amount of information and is close to a diagram that a person might have drawn by hand for the same part of the system model. Supported transformation. The transformation is useful when supported by additional information given as tagged values or stereotypes. Without such support the transformation becomes generally weak or even useless. OBD CMD full transformation strong transformation supported transformation weak transformation Figure 3. Transformations between UML diagram types We will briefly comment on the less obvious transformation operations: CLD → UCD: This supported transformation requires that the classes in the CLD are annotated with the use cases they participate in. OBD → CLD: This strong transformation represents a design-by-example case: the OBD is an instance of a CLD. Associations (and to some extent their multiplicities) can be inferred from the links in the OBD. 0-7695-0981-9/01 $10.00 (c) 2001 IEEE 5 Proceedings of the 34th Hawaii International Conference on System Sciences - 2001 SED → CLD: See Section 5. CLD → SED: This weak transformation generates a SED with a participant for each class in the CLD, with no events. This skeletal SED can be used as a pre-filled form for describing an interaction between instances of a particular subsystem, represented as a CLD. SED → SCD: This strong transformation applies state machine synthesis algorithms, e.g. [10]. SCD → SED: A collection of state machines can be run with a particular sequence of external stimuli, producing a trace that can be presented as a SED. SCD → CLD: There are two alternatives: user-defined rules can be applied for class-based implementation of state machines, or a static projection of the communication connections between the involved classes can be represented as a CLD. Both transformations are considered strong. CLD → DED: This supported transformation requires that the classes in the CLD are annotated with the nodes they belong to. CLD → CMD: This supported transformation requires that the classes in the CLD are annotated with the components they belong to. Figure 3 reveals the central role of sequence diagrams and class diagrams in the software development process. Provided that sequence diagrams can be constructed on the basis of the use cases, strong transformation operations support the engineering process up to the generation of code. In particular, the class diagram looks like the "pivot element" of UML here, but that is no surprise, of course. Many transformations can be performed as two-step compound transformations through the CLD, losing very little or no information. This pertains to all transformations involving UCD, as well as those to CMD and DED and those from OBD. From all possible transformations, only those from use case, component and deployment diagrams and those to object diagrams are thus completely missing from Figure 3. It looks obvious that such transformations would be desired only very rarely. One could expect there to be interesting direct transformations between use case diagrams (UCD) and those diagram types commonly used to model the behavior of use cases: ACD, CBD and SED. However, there is too little information in UCD for that purpose. This can be regarded as a clear flaw in UML [3, 4.3]. Additional direct transformations could be useful in some other cases. For instance, both the OBD and the CBD contain particular objects instead of classes, and thus some information can be lost when the transformation is made through the CLD. 5. Transforming sequence diagrams into class diagrams This section describes how a sequence diagram can be transformed to a class diagram inside the standard UML metamodel. We can divide this transformation operation into two phases by applying the push and pull approaches introduced in Section 3. First, we follow the minimum principle by using the push approach, so we try to translate the elements in a sequence diagram into a class diagram. At this stage, we map the classifier roles (participants) and messages of a sequence diagram to classes, associations and methods of a class diagram. Second, we follow the maximum principle by applying the pull approach. In this phase we use a collection of heuristic rules to generate interface hierarchies, composition relationships and multiplicities. Figure 4 shows an example of a sequence diagram. This diagram shows a simplified view of a simple application that reads the input given by an external user and then propagates this information to a collection of graphical elements. main : CApplication piechart : CChart barchar : CChart dialog : CDialog display : CWinManager getValue <<create>> okButton : CButton <<create>> cancelButton : CButton <<create>> input : CDatafield showDialog valueUpdated buttonPressed hideDialog <<destroy>> <<destroy>> <<destroy>> update update refresh setCaption refresh setCaption Figure 4. The sequence diagram to be transformed 1. The main application asks a dialog object to input a value from a user 0-7695-0981-9/01 $10.00 (c) 2001 IEEE 6 Proceedings of the 34th Hawaii International Conference on System Sciences - 2001 2. 3. 4. 5. The dialog object creates two buttons and an input field and asks to be shown by a window manager After the external user has given a value and pressed the OK button, the dialog object asks to be hidden by the window manager, destroys its contents and returns the input value to the main application object. The main application updates the two chart objects, which in turn ask themselves to be refreshed by window manager. Finally, the main application asks to be refreshed by the window manager. The UML metamodel, being object-based and highly non-redundant, does not localize the elements belonging to a conceptual diagram type to a single metamodel package. The elements explicitly shown in a sequence diagram, for example class names and stereotypes, are expected to reside outside the Collaborations metamodel. In general, if a practical tool were to support the UML metamodel as a whole, it would only accept (almost) complete models, which is not the case in the real world in fact, most of the practical UML tools do quite the opposite. Thus, for pragmatic reasons, we relax the requirements of the UML metamodel and assume that the necessary information can be obtained from the names of messages and classifier roles as defined in [12]. The transform operation is isolated, meaning that the only input the operation receives as an operand is the sequence diagram to be transformed, and the class diagram resulting from the operation is a new and independent one. In other words, the transform operation does not have any extra information about the system model readily available. Collaboration 1..* +interaction 1 ClassifierRole +sender +receiver AssociationRole +communication Connection Interaction 1 +connection * +message AssociationEnd Role Message * * +action Action Figure 5. A simplified metamodel for collaborations (modified from [13, p. 3-101]) A simplification of the structure of the collaboration metamodel is given in Figure 5, modified from [13]. It shows that a collaboration consists of one or more interactions. An interaction consists of one or more messages that are dispatched using an association role. An association role connects together two or more classifier roles using association end roles. There is an action linked with every message. Figure 6 shows simplification of the class diagram metamodel, which is adequate for generating classes and interfaces, their interrelationships, operations and their parameters. The transformation operation basically defines a mapping from a metamodel instance conforming to Figure 5 to a metamodel instance conforming to Figure 6. Details on how these underlying models are visualized are defined in [13]. +connection AssociationEnd Association 1 2..* * * * +specification Class +type 0..1 Classifier +owner 0..1 1 +type * +feature * Interface Parameter * +parameter Operation 0..1 Figure 6. A simplified metamodel for class diagrams. First, we must define which metamodel elements are available for the sequence diagram to be transformed. Figure 5 shows one example of the elements in a sequence diagram. In practice, we might not have association roles, association end roles and actions available, which is the case in many real-life design tools. In fact, the mentioned elements are actually a part of a collaboration diagram. We can, if necessary, also generate these possibly missing elements, but that is not needed in this particular transformation. Hence, we further simplify the collection of source elements to only include messages and classifier roles, their interrelationships and textual representations. On the other hand, if there does exist additional information concerning the sequence diagram, such as actions associated with messages, arguments associated with these actions and the types of these arguments, we can naturally take advantage of this extra information. We use the push approach and the minimum principle (Section 3) as follows: - - Generate a class for each classifier role with a distinctive class name. Transfer stereotypes, such as «actor» and «active» into the respective class. For each message, if there does not exist an association between the base classes of the sending and receiving classifier roles, generate the corresponding association ends and an association 0-7695-0981-9/01 $10.00 (c) 2001 IEEE 7 Proceedings of the 34th Hawaii International Conference on System Sciences - 2001 - - - - - - - - representing the communication connection for the message in question, and link these together. For each class receiving a message, if there does not already exist an operation with the same name, generate a new operation for the class. Mark the navigability of the association. If there are arguments attached to the message, generate new parameters for the operation with corresponding UML basic types and type expressions. Add this operation to the corresponding class if it does not already have an operation with the same name and signature. A message marked with a stereotype «create» or «destroy» is ignored here, but discussed later in this section. If the message is marked with a stereotype «signal» and there does not exist a signal with the same name, generate a new signal. Associate the corresponding class with this signal. If the message is marked with a stereotype «become», the sending and receiving classifier roles are equated (this rule assumes that an object cannot dynamically change its type). If the message has an object appearing in the sequence diagram as an argument, we add an association between the corresponding classes of the sending object and argument object, if there does not exist one already and the classes are not the same. If the message is a return message, containing only a return value of some type, we conclude the return type of the operation of the preceding message. The sequence diagram might contain possibly contradictory information, for example an active and a passive object of the same class. In this case, the result of the transformation operation is undefined. In addition to the basic transformation rules given above, we can also define more advanced heuristics that may suggest more elaborate constructs to the user. We give three examples of such rules: simple interface heuristics, broadcast heuristics and composition heuristics. These heuristics represent logical conditions that, when true, trigger further operations. The heuristics may be seen as "educated guesses" made by the system. The suggestions given by these kinds of rules are uncertain by nature, but plausible. Applying these heuristics can be seen as using the pull approach and maximum principle, where we try to use the dynamic information and call patterns contained by a sequence diagram to generate additional structural information that might otherwise be lost during the transformation operation. When the results obtained by using these heuristics support our intuition of the design, they support the correctness of the design. If not, these results can also focus our attention to possible mismatches and errors. These heuristics are mainly meant to be used in the design phase of software development to address views of the designers and give suggestions and hints. Next, we describe the three heuristics and also briefly explain how they are applied to the example sequence diagram given in Figure 4. If there exists a class Implementation, the Operations of Implementation are called by a set of Objects and the Sets of Operations called by Objects belonging to different classes are disjoint, Then generate an interface for each Set having the name of the Implementation with the character "I" propended and a sequence number appended, generate a Uses-association between corresponding classes and interfaces and an Implementsassociation from Implementation to every interface. Figure 7. Simple Interface heuristics. If different call patterns can be detected from sending classes to one receiving class, we can emphasize this by generating a set of interfaces which this receiving class implements. This can also be seen as a way to name or mark associations. In general, it might be desirable to generate named associations instead of unnamed ones, but finding a suitable name automatically is very unlikely to produce a reasonable result. Naming an association simply on the basis of the operations called is not really a feasible solution, so interface heuristics can be seen as one solution to this problem also. Should the designer choose not to include these interfaces in the resulting class diagram, these interfaces can still provide valuable information on the sets of operations different classes use to communicate with each other. In Figure 4, class CWinManager is accessed by the classes CApplication, CChart and CDialog. The two former classes use the operations refresh and setCaption, and the latter uses showDialog and hideDialog. Since these two sets of operations are disjoint, we generate two separate interfaces that CWinManager implements for these classes to use. If there exists an Operation belonging to a class Receiver, there are several instances of Receiver, there exists an instance of a class Sender and Sender makes a call action with Operation to every instance of Receiver, Then mark the multiplicity of the Receiver end of the association between Sender and Receiver with '*' (unlimited, many). Figure 8. Broadcast heuristics. If a broadcast message is detected, i.e. an object of one particular class sends a message to every instance of another class, then we can conclude that there exists a '*'multiplicity. 0-7695-0981-9/01 $10.00 (c) 2001 IEEE 8 Proceedings of the 34th Hawaii International Conference on System Sciences - 2001 In Figure 4, all objects of the class CChart (piechart, barchart) are accessed by a single object main of the class CApplication, and we conclude a many association from CApplication to CChart. If there exists an object Composite and an object Part, Part is created by Composite, Part is destroyed by Composite, and no other object than Composite sends messages to Part, Then set the kind of the association between Composite class and Part class to "composite". while CDialog uses the interface IWinManager1. The active CWinManager class implements these two interfaces. CChart <<interface>> IWinManager2 CApplication * update refresh setCaption <<interface>> IWinManager1 CDialog Figure 9. Composition heuristics. showDialog hideDialog getValue valueUpdated buttonPressed If we detect that there is an object whose lifetime is directly tied to the lifetime of another object and all the messages sent to this object are passed by the first one, then this hints to a composite relationship between these objects. In Figure 4, the objects of the classes CButton and CDatafield are created and destroyed by an object of the class CDialog, and they only communicate with that object, and we conclude a composition relation between these classes, CDialog being the composite and CButton and CDatafield being the parts. Other interesting heuristics that are being studied include: - - - Hierarchical interface heuristics for generating interface hierarchies. We can define a root interface class containing a common set of operations for several implementation classes and derive specialized interfaces used by different classes from this base interface. This kind of hierarchy can contain many levels. Generalization heuristics for detecting possible generalization relationships. This heuristics makes a stronger assumption than interface heuristics. We can apply, for example, Galois Lattices as in [8]. Heuristics to detect patterns or idioms. It is beyond the scope of this paper to further discuss these issues, but pattern recognition can be used to detect dynamic behavior that could be propagated to the static model. It should be noted that in a practical implementation the transformation operation should operate semiautomatically, so that the designer can guide the transformation process. For example, she or he could decide whether or not to apply the heuristic rules, give additional information where appropriate and so forth. In Figure 10, we show the result we obtain after the transform operation. We have the main class CApplication with association to CDialog and a many association to CChart. There is a composite relationship between CDialog and classes CButton and CDatafield. CApplication and CChart use the interface IWinManager2 CButton <<active>> CWinManager CDatafield Figure 10. A resulting class diagram. As we can see, by using the additional heuristics we can obtain a much richer class diagram that manages to preserve also non-obvious dynamical features. This might not be what the user actually had in mind when designing the system, in which case she or he can decide not to use those heuristics. In any case, this diagram can give a better insight of the system and even reveal features surprising to the designer. A plain minimum principle transformation would simply produce the classes, operations and simple associations. 6. Related work Research work related to single transformation operations between different diagram types has been carried out by several researchers. Issues on how to extract static model information from a set of scenarios are discussed by Nørmark [11] and Egyed [5]. Synthesizing UML statechart diagrams from a set of collaboration diagrams are discussed by Schönberger et al [16] and Khriss et al [9]. Synthesizing statechart diagrams from trace diagrams are discussed by Koskimies et al [10] and Systä [18]. Synthesizing class diagrams from object diagrams is discussed by Engels et al [6]. These sources go into detail on how to define individual transformation operations but each concentrate only on one particular operation type. Egyed [4,5] introduces a view integration framework with operations for mapping, transformation and differentiation as major activities in order to identify design mismatches using UML for system architecting. His work does not emphasize individual integration techniques but rather discusses how these activities can be used together. However, he does not discuss the different types of transformation operations in UML, their interrelationships and usage scenarios. Our work 0-7695-0981-9/01 $10.00 (c) 2001 IEEE 9 Proceedings of the 34th Hawaii International Conference on System Sciences - 2001 categorizes these operations and emphasizes the usage of the standard UML metamodel when defining them. 7. Concluding remarks We have shown that meaningful transformation operations can be defined between several pairs of diagram types in UML. When supported by appropriate tools, such operations can automate a substantial part of both forward and reverse engineering. We are currently implementing the transformation operations discussed here in an industrial software development environment, TED [19]. In particular, the transformation operation discussed in Section 5 has been implemented in this environment. Our approach raises other research issues as well. For example, it is extremely important that the synthesized diagrams have reasonable layout, because rearranging the layout can be a notable burden for a user. Current layout algorithms are intended for regular structures like graphs and trees, and work poorly for UML diagrams. In addition, large diagrams (generated e.g. from source files) need special mechanisms for collapsing parts of the diagram so that only a relevant abstraction layer is shown to the user at a time (e.g. [2]). These issues will be among the topics of our future research. Another research issue is the nature of the required tool support for the transformation operations. We are currently experimenting with the idea of using visual scripts, expressed as UML activity diagrams, to allow the user to control the execution of the transformation operations [14]. 8. References [1] G. Booch, J. Rumbaugh, and I. Jacobson, The Unified Modeling Language User Guide, Addison-Wesley, 1999. [2] F. Dosa, and K. Koskimies, "Tool-supported compression of UML class diagrams", In Proc. of UML'99, Springer-Verlag, 1999, pp. 172-187. [3] D.F. D’Souza, and A.C. Wills, Objects, Components, and Frameworks with UML : the Catalysis Approach, AddisonWesley, 1999. [4] A. Egyed, "Integrating Architectural Views in UML", Technical Report USCCSE-99-514, 1999. [7] E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Design Patterns - Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994. [8] R. Godin, and H. Mili, "Building and Maintaining AnalysisLevel Class Hierarchies Using Galois Lattices", In Proc. of OOPSLA'93, ACM 1993, pp. 394-410. [9] I. Khriss, M. Elkoutbi, and R. Keller, "Automating the Synthesis of UML Statechart Diagrams from Multiple Collaboration Diagrams", In Proc. of UML'98, Springer-Verlag, 1998, pp. 132-147. [10] K. Koskimies, T. Männistö, T. Systä, and J. Tuomi, "Automated support for modeling of OO software", IEEE Software, Jan/Feb 1998, pp. 87-94. [11] K. Nørmark, "Synthesis of Program Outlines from Scenarios in DYNAMO", Aalborg University, http://www.cs.auc.dk/~normark/dynamo.html, 1998. [12] OMG, The Unified Modeling Language Semantics v1.3, http://www.rational.com, 1999. [13] OMG, The Unified Modeling Language Notation Guide v1.3, http://www.rational.com, 1999. [14] J. Peltonen, "Visual Scripting for UML-Based Tools", unpublished manuscript, May 2000. [15] J. Rumbaugh, I. Jacobson, and G. Booch, The Unified Modeling Language Reference Manual, Addison-Wesley, 1999. [16] S. Schönberger, R. Keller, and I. Khriss, "Algorithmic Support for Transformations in Object-Oriented Software Development", Technical Report GELO-83, University of Montreal, 1998. [17] S. Schönberger, R. Keller, and I. Khriss, "Algorithmic Support for Model Transformation in Object-Oriented Software Development", In Theory and Practice of Object Systems (TAPOS), 2000. To appear. [18] T. Systä, Static and Dynamic Reverse Engineering Techniques for Java Software Systems, University of Tampere, PhD dissertation, 2000. [19] J. Wikman, "Evolution of a Distributed Repository-Based Architecture", NOSA '98, http://www.ide.hkr.se/~bosch/NOSA98/JohanWikman.pdf, 1998. [5] A. Egyed, "Automatically Detecting Modeling Mismatches between Heterogeneous Views", unpublished manuscript, 1999. [6] G. Engels, R. Heckel, G. Taentzer, and H. Ehrig, "A Combined Reference Model- and View-Based Approach to System Specification", International Journal of Engineering and Knowledge Engineering Vol.7 No.4, 1997, pp. 457-477. 0-7695-0981-9/01 $10.00 (c) 2001 IEEE 10
© Copyright 2024