Hidden Dependencies in Open Source Systems

Revealer The goal of the project is to reveal hidden dependencies in open source software systems, i.e. dependencies that might be difficult to understand by developers while they implement changes in a software system. We implemented the Reveal tool  that allows programmers to automatically extract potential hidden dependencies.

Reveal uses dynamic analysis - it analyzes the execution traces of the test suite of the program. The output is a set of  of potential hidden dependencies.  The tool extends two existing tools: the Daikon invariant detector and Simplify theorem prover.

We implemented the tool based on the following idea: a potential hidden dependency exists between two methods f and g of a program if the following conditions are satisfied:
  1. there is a trace in which f ends before g starts, i.e. f is executed completely after g
  2. f and g belong to different classes
  3. postcondition(f) implies a portion of precondition(g)
We have inspected a 10% sample of the potential hidden dependencies returned by the Reveal tool and between 46% and 59% them are truly hidden dependencies, in the sense that  both methods share the same concept and a change request might propagate between them. In our work, call the relation created by conditions 1 and 2 Inter-Class Execute Completely After (IECA) relation. For more details, consult our paper published in the proceedings of ICSM 2010.

The following resources are available trough this site:
  • the data we used in the case study described in the ICSM paper where we analyzed JUnit, Drawlets and Apache FtpServer
    • the execution traces
    • the invariants produced by Daikon
    • the IECA relations
    • the potential hidden dependencies

©Radu Vanciu & Vąclav Rajlich