Let’s say you are working on a large code base, when you happen to make a change to a core interface and find yourself changing hundreds of dependent files. Unluckily, the changes are a bit too involved for a simple search and replace. What the authors propose is a method for automatically identifying the replacement pattern from a sample set of changed files, and then applying the pattern automatically throughout the code base.
Depending on your background, you may actually see the above scenario as an indication that some major refactoring is needed. If a small change causes many files to need to be changed, then obviously there must have been a bit too much copy and paste development at some point in the past. However, not all domains are suited to whole-scale refactoring. Device driver development on Linux, the domain chosen by the authors, is one such example. Distributed ownership of similar code implies that any change in internal libraries will have to be applied by numerous contributors.
The authors present a tool that, given a subset of files in pairs of pre-change and post-change files, will extract a generic abstract representation of the change that can then be replicated throughout the code base. Starting with a formal presentation of their algorithm, the authors describe their implementation and provide example runs against actual patches applied to the Linux source tree. They demonstrate the types of changes that their tool can successfully abstract and the types of changes where it fails. In summary, the paper presents a simple yet effective--albeit a bit dangerous--timesaving tool.