Industrial software developers copy-and-modify pieces of source code between systems for several essential and disciplined reasons. Nevertheless, such non-preplanned reuse has long been noted as a risky proposition, due to the lack of support for the process, and the inability of developers to understand whether or not a given reuse task will be successful or not prior to investing significant time in attempting it.

This project seeks to rectify these issues by informing the developer about the presence of dependencies from the source code that they intend to reuse, and allowing them to investigate each one and decide how to treat it. Our approach has empirically been shown to reduce developers’ time to complete such tasks, to reduce the errors made, to reduce the time spent on infeasible tasks, and to improve their sense of control over their tasks. We are currently working on lightweight approaches to locate code for reuse, semi-automatic leveraging of associated test suites, empirical comparisons against preplanned approaches, and scaling the ideas to an architectural level.


We have implemented six tools related to this project: Skipper (by Soha Makady); Gilligan (by Reid Holmes); Reviver (by Mehrdad Nurolahzade); Jigsaw (by Rylan Cottrell); Reverb (by Mark McIntyre); and Strathcona (by Reid Holmes); as well as integrations of Jigsaw/Strathcona, Gillian/Skipper. and Gilligan with a tool by Martin Robillard.  None of these is publicly released, though they could be made available to collaborators.