EQ is an open source project distributed under the GNU GPL v 3.0 license. The bundled source code [SerlEqualsChecker.zip] is an Eclipse plugin project that can be directly imported using Eclipse's Project Import Wizard.
If you want to check out the code from SVN, then use:
svn co https://eqchecker.svn.sourceforge.net/svnroot/eqchecker/trunk/SerlEqualsChecker_v_1_3 eqchecker
EQ has been tested in four medium to large sized open source projects. The following are the reports and results generated by the tool:
In the error listings, each entry has two children representing classes participating in a violation. For reflexivity, symmetry, and transitivity violations, objects of the given two classes violate these properties. For other cases, the first child represents the class under analysis and the second child represents the class where the actual error has occurred with the given line number. In inter-procedural analyses, a class under analysis may call methods of the other classes resulting in a participation of more than one class in an error.
False Positives: The classification and the manual verification of the reported cases have been done using Bugzilla located at http://serl.clarkson.edu/bugzilla/. We have inspected all of the reported cases in the four projects and identified some false positives. The rate of false positives is reasonably low. They are caused due to the approximation of a non-standard function called on a field. The user manual discusses on how we can reduce such false positives iteratively.
False Negatives: The checker produces one Alloy model file per type hierarchy and checks for violations of equivalence in the type hierarchy. We have manually inspected all of the type hierarchies from Tomcat and Lucene, and randomly selected thirty type hierarchies each from JFreeChart and JDK for false negatives. There are a small number of cases when the checker gives up because its pattern detectors fail to identify any abstractions from the code. However, we did not find any false negatives for those cases that the checker reported as correct. That is, when the checker says that the equality in a type hierarchy is correct, the equals() implementations in that type hierarchy is indeed correct. The list of manually inspected type hierarchies with a summary of the inspection can be downloaded from here [FalseNegativeAnalysis.ods].
An access to Bugzilla can also be provided upon an email request to any team member. For interested individuals, the four benchmarks used in the project can also be provided upon request.
The PDF format of the following papers can be downloaded from here.
Copyright © 2010-2011 Chandan R. Rupakheti and Daqing Hou, SERL, Clarkson University, 8 Clarkson Avenue, Potsdam, NY 13699-5722, USA.