For the past nine months I have been working in the Cooperative Computing Lab at The University of Notre Dame. Our group produces software to assist other researchers develop distributed workflows and applications. My first project was to create portable workflow pacakges from existing scientific workflows.
The main techniques I used were static analysis and tree traversal. Once the entire tree of dependencies was uncovered, the linker creates a package containing all of the dependencies.