Programs are rarely self-contained in software environments. They depend
on other programs or shared subsystems like language run time and
operating system libraries for various functionalities. A change in one
of the external subsystems may affect the program and one or more other
external subsystems.
A method or system collects and propagates information about dependency
between logical abstractions within a binary file (e.g., basic block,
procedure, etc.), dependency between binary files, and dependency between
subsystems (e.g., programs, component libraries, system services, etc,)
In one example, such dependency information is exposed to a tool (e.g.,
test tool, software development tool, etc.) via an application
programming interface. A tool mines this information to manage testing,
determine risks of change, or manage software development. The tool may
also be integrated into the method or system.