Modern software development has become a so complicated process that a software design usually involves a large number of software developers from different fields. For example, the development of many modern web applications usually requires not only software programmers but also some other field experts such as network administrators, database gurus etc.. However, as an artifact in software development, models have a become an important communication tool between the different software developers from different fields. With the Unified Modeling Language becoming a standard graphic notation of software design, many software developers are using UML to design models at different levels of abstraction to exchange development ideas with other developers. However, when the UML models designed by the developers from different fields become so complicated, it is really hard for developers to manually find any inconsistencies among these models. Our utmost research goal is to build some automatic tools which relieve software developers' pain in finding inconsistencies/errors in software models. Our research works concentrate on the following aspects: