Regression testing is the activity performed to make sure that previously working features will remain functional after the changes are made. Usually such testing includes executing all the tests available in the test suite. Depending on the size of the software and the testing performed, this can take significant amount of time, and it may also test parts of the system which haven't been changed.
There already are some techniques to optimize regression test runs such as test suite minimization, regression test selection or test prioritization. There also are a few tools which are able to perform this optimization, though their targets are usually a specific programming language and source code.
Model-driven software development is a methodology where all the information of the system are represented in models. These models are then used to generate the source code or other artifacts, such as tests or even documentation. In such development methodology the main artifact for regression testing is the model, not the source code.
Consider a system that uses models to generate test cases. Suppose the system and the models change. Based on the changes and the models, we need to be able to tell whether a test is needed to be rerun or not. So far most research effort has been conducted on optimizing source code based regression testing, therefore my aim is to design and implement a general method that is able to optimize regression test runs for different kinds of input domains.
To address the above requirements and challenges I have:
1. defined a generic model that is able to represent the regression test selection problem,
2. showed how existing optimization algorithms can be adapted to categorize and select tests for a given change,
3. developed a method in which the system and the test models are mapped to this general test optimization model.
To evaluate the method I have implemented an Eclipse-based prototype tool. The tool is capable of identifying the tests which may be used for regression testing and is able to select some of them to provide the maximal test coverage.
I have also conducted a case study in the context of the development of mobile robots.
To show the method is indeed generic and could work on a variety of inputs, I have designed a mapping between test models and a code coverage report.