Ferret is a software exploration tool. Ferret has sometimes been described as "Eclipse Search on steroids."
Ferret is an Eclipse view that provides a structured display of information describing how one or more program elements are situated in the context of the system.
This context is computed automatically as the program elements are selected in the IDE (label 1), and is structured as answers to a set of conceptual queries about those elements. These conceptual queries are intended to closely match the types of questions developers actually want to answer.
Ferret's conceptual queries include and build-on the standard queries supported by Eclipse. These conceptual queries include queries such as:
- Where is this method called?
- What methods return objects of this type?
- Where are objects of this type instantiated?
- What interfaces define (or specify) this method?
- What implementations are there of this interface method?
- What are the other alternative implementations of this method in the hierarchy?
The conceptual queries are categorized by whether they involve declarations, are about inter-class or intra-class relations, or are hierarchical in nature.
The results of queries may be clustered by their different attributes (labels 2), as selected by the programmer. For example: the instantiators of a type (a class or the classes implementing an interface), which are typically methods, may be clustered into different groups identified by attributes such as their their containing type, their containing type's package (as shown above), their access protection (public, private, package, or default), or boolean attributes such as static vs non-static.
More notable is that Ferret's conceptual
queries can make use of different sources of program information,
such as the static relations embedded in the source code, the
dynamic runtime information recorded in a TPTP trace, and
plugin details as defined in plugin.xml
and MANIFEST.MF
.
Thus dynamic runtime information can be used to replace
some of the statically-derived relations, transforming the questions
above to "Where are objects of this type actually instantiated?"
or "Where is this method actually called?" Establishing
correspondances between elements from different sources of program
information may not be exact, tracked as the fidelity of the
correspondance and propagated through the queries.
The Ferret documentation ships with the plugin, and is also available online too.
For more background on Ferret, see the Publications below.
Kenyon was a research project to index Subversion repositories. It died a long time ago and the Kenyon binding has since been disabled. It's entirely possible that we could rewrite some of its support for JGit.
The Eclipse Testing and Profiling tools project (TPTP) was archived in May 2016 and the TPTP binding has since been disabled. Suggestions for tracing libraries with a nice API are appreciated!
Ferret is an Eclipse plug-in and requires Eclipse 4.6 (Neon) or later. To install, use the following update site:
http://manumitting.com/tools/eclipse/ferret/stable
To live on the bleeding edge, with the latest commits to master
,
use the following update site:
http://manumitting.com/tools/eclipse/ferret/LATEST
Ferret is made available under the Eclipse Public License v1.0.
B de Alwis, GC Murphy (2008). Answering Conceptual Queries with Ferret. In the Proceedings of the International Conference on Software Engineering (ICSE). Leipzig, Germany. doi:10.1145/1368088.1368092
B de Alwis, GC Murphy (2006). Using Visual Momentum to Explain Disorientation in the Eclipse IDE. In the Proceedings of the International Conference on Visual Languages and Human-Centric Computing. doi:10.1109/VLHCC.2006.49