School of Computer Science

Recommending Adaptive Changes for Framework Evolution


[August 9th, 2010] Follow SemDiff on BitBucket:
[June 10th, 2010] SemDiff 2.3.1 is out:
  • Supports PPA 1.2.1, which supports Eclipse 3.6
  • SemDiff now supports Eclipse 3.6 and no longer work with Eclipse 3.5 hence the bump in the release number (release 2.3.0 was only available internally).
  • Previous version of SemDiff (Eclipse 3.5) is still available at:
[June 27th, 2010] SemDiff 2.2.1 is out:
  • Supports PPA 1.1.2, which includes many bug fixes and allows the multiple threads to access PPA.
  • Added a new detector, fielddiff, created by Luke Bayly. This means there is a new database schema and you need to update your database or preferably create a new one.
  • Refactored how PPA is used: PPA is now executed once per transaction when at least one plug-in requires a typed AST. This greatly improve performance when multiple detectors require PPA.
  • Added a Copy/Paste action in the Repositories View allowing easy sharing of repositories (similar to how CVS repositories can be copied/pasted in Eclipse).
  • Because PPA now better supports Java 5 constructs, SemDiff correctly handles transactions containing changes to annotations and enum types. Future versions will include finer grained details in StructDiff/CallDiff/FieldDiff with augmented handles.
  • This is likely the last release for Eclipse 3.5. Future releases will require Eclipse 3.6. Previous releases are no longer available through this website, but they can be requested by sending an email to Bart.
[January 8th, 2010] SemDiff 2.2.0 is out:
  • Requires Eclipse 3.5.
  • Supports PPA 1.1.1.
  • Supports submodules in cvs repositories (e.g., a path could be org.eclipse.jdt.junit4.runtime/src instead of org.eclipse.jdt.junit4.runtime)
  • Supports remote queries through JSON. See plug-in ca.mcgill.cs.swevo.semdiff.remote for more info.


In the course of a framework's evolution, changes ranging from a simple refactoring to a complete rearchitecture can break client programs. Finding suitable replacements for framework elements that were accessed by a client program and deleted as part of the framework's evolution can be a challenging task. SemDiff is a recommendation system that suggests adaptations to client programs by analyzing how a framework adapts to its own changes. SemDiff also provides a repository analysis framework that can be used by researchers to study the evolution of any software products developed with CVS or Subversion.


SemDiff's documentation is available on bitbucket. First-time users should consult the getting started tutorial and the FAQs.


System requirements: Eclipse 3.6 and Java 1.6. To create your own repositories, a minimum of 2 GB RAM is recommended and you will need to use HSQLDB (embedded in SemDiff) or PostreSQL. SemDiff has been tested on Linux and Windows.

SemDiff can be easily installed through the Eclipse's update mechanism. SemDiff is distributed under the terms of the GNU Lesser General Public License, version 3.

To install SemDiff:

  1. From the Eclipse menu bar, select Help | Software Updates...
  2. Select the tab "Available Software".
  3. Push on the Add Site... button.
  4. Enter, and click OK
  5. Select the SemDiff category and the two features (SemDiff and Partial Program Analysis for Java) in the list and click Install...
  6. Push Next.
  7. Select that you accept the terms of the license agreement, and click Finish.
  8. Restart your workspace.

Note: For some reasons, you may have to uncheck the option "Group items by category" to see SemDiff.


Original Paper:

Barthélémy Dagenais and Martin P. Robillard. Recommending Adaptive Changes for Framework Evolution. In Proceedings of the 30th ACM/IEEE International Conference on Software Engineering, pages 481-490, May 2008. [ACM SIGSOFT Distinguished Paper Award]. (pdf).


To fill a bug report or an enhancement request, please use the bitbucket issues tracker.


SemDiff was created by Barthélémy Dagenais for his Master's thesis while he was supervised by Martin Robillard.

Contact Information

Address questions, and comments to Barthélémy at bart at cs dot mcgill dot ca.

Valid XHTML 1.0 Transitional