Assessing the impact of API evolution

Assessing the impact of API evolution is the title of my master’s thesis on which I just graduated. It’s for the Master of Science in Software Engineering at the University of Amsterdam. The project is for the VU University Medical Center, for a brain image analysis package they develop. The program visualizes data from e.g. MRI scans and provides an interactive 3D view of the head. Doctors for instance use it to compare the situation before and after an operation.

My thesis proposes a technique that helps understanding how hard it is to upgrade a program to a newer version of a library. And what makes it hard exactly.

The brain image analysis program uses an old version of the Qt Framework to draw widgets and do its visualizations. The newest version has changed considerably. It’s hard but necessary to upgrade the program to use the newest version. One of the things that is not clear is which changes in Qt have an effect on the program and how big those changes are.

My thesis proposes a tool called LICIA that can find all references in the source code of the program to the library (Qt in this case). Those references are compared with a list of changes (this should be made by hand for now). The result is a spreadsheet that lists the exact code locations on which changes in the library have an effect.

The result can be used to make graphs and derive statistics: “of the 200 functions that have changed, only 20 are used in the program”. This is useful to decide how to migrate the program.

LICIA uses the Elsa parser to parse the C++ code. It supports inheritance: if a class has changed, its subclasses are assumed to be changed as well because of the Liskov substitution principle. In the experiment, precision is 81% and recall is 96%.

Another contribution is a list of refactorings that were found during the experiment. Part of the changes from Qt 2 to 3 can be seen as refactorings but they have no generally accepted names. I propose names for them.

The correct BiBTeX citation format (if anybody is going to read it haha) is as follows:

@mastersthesis{citeulike:7691136,
    author = {Witte, Taco C.},
    citeulike-article-id = {7691136},
    day = {6},
    month = {August},
    school = {University of Amsterdam},
    title = {Assessing the impact of API evolution},
    year = {2010}
}

See below for the source code of LICIA.

Continue reading