I. Introduction
It has been about forty years since the concept of “software engineering” was coined in 1968 as a response to “software crisis” that emerged in 1960s. According to software engineering theory, the life cycle of a software can be divided into an iterating process of design, implementation, test and configuration. One of the most important software engineering techniques is Software Modeling, which plays a key role in a software development process including software design and analysis, software implementation and component reuse. To facilitate the interaction among software model designers, the Object Management Group (OMG) has proposed a standard software modeling language, named UML (Unified Modeling Language). The language specification of UML has undergone several modifications and recently has been evolved to Version 2.0, i.e., UML 2.0 [1]. Many commercial software modeling applications have been developed to support UML, such as Rational Rose, Visual Paradigm, ArgoUML and RSA (Rational Software Architect).