Many software companies rely on software design models. Yet, these companies also have become disillusioned on the value of software modelling. Unlike other engineering disciplines, in which modelling has proven itself as an effective mechanism for dealing with complexity, software models have yet to reach that level of maturity. A key challenge is the evolution of models and or the designers’ inability to understand changes and how these changes impact the software design model. Changes have desired effects because they add or change features. However, they also have undesired side effects as they frequently introduce errors. In context of design models, these errors manifest themselves as inconsistencies.
This project explored how to detect and resolve inconsistencies if they are detectable through defined constraints. Inconsistencies typically arise due to the failure to propagate changes in design models completely and correctly. Resolving inconsistencies in software models is a complex task because the number of repair actions grows exponentially. To deal with this problem, the project contributed a method that copes with large numbers of repair alternatives by focusing on what caused an inconsistency and presenting repairs in a scalable repair tree. The cause is computed by examining the structure of the inconsistent constraint and its behaviour during validation. This allows us to identify where the constraint failed and why.
A key aspect of our method is that it treats inconsistencies as symptoms of errors rather than errors. Indeed, since an incorrect change to a model may cause multiple inconsistencies (or none if not observable), it is not useful for the engineer to identify the error by exploring the repairs of individual inconsistencies. Our method advocates exploring errors by increstigating combinations of inconsistencies. Our method thus allows inconsistencies to be explored and filtered in various dimensions. Another key aspect of our method is that it ought to be generic and not only be applicable to currently used modelling languages (such as the UML). We thus also applied the method to a range of modelling technologies from product lines engineering, mechatronics engineering, co-evolution of meta model and models, and decision making. In doing so, we evaluated not only the correctness and scalability on a particular domain but also its applicability for many domains.