Our area of research is software engineering, with an emphasis on software maintenance and software evolution. According to available data, these processes consume an overwhelming part of software engineering resources and therefore a better understanding may have a substantial impact on software productivity and quality. Software maintenance and evolution are based on repeated change in software, where each change typically affects only a part of software. We have been studying various aspects of these processes and employing theoretical modeling, implementation of software tools, and empirical validation in case studies.
Program comprehension is a prerequisite of maintenance and evolution.
We have been involved in this research in several different ways, with particular emphasis on location of concepts in the code. This research is motivated by the observation that evolution and maintenance requests are usually formulated in terms of the domain concepts, and the first step in the change is to find where these concepts are implemented. The particular approach we have been pursuing is the computer-assisted search of the abstract system dependence graph. Change propagation is also an important part of software change. The change starts with the programmer changing a software component.