Software can be usefully categorized by its commonalities: commonality in source code structure; commonality in usage of functionality; commonality in dynamic sequences of operations.  This project leverages a theoretical foundation called anti-unification to categorize structures in software and to determine their commonalities and differences.  Our work to-date has focused on syntactic structures, though the same ideas can be applied to other kinds of structure.


We have built six tools related to this project: Breakaway (for generalization tasks), Jigsaw (for source code reuse and integration), Guido (for categorization of examples), an integration between Jigsaw and Strathcona (for end-to-end reuse of relevant examples), a functionality pattern detector, and the Jigsaw higher-order anti-unification engine (for general similarity and differencing purposes, unpublished work).  None has been released publicly, though they could be made available to collaborators.


Strathcona/Jigsaw integration




Functionality pattern detection