A reusable toolset for software dependency analysis
Abstract Software maintenance is costly because of the many complex inter-relationships in a large software system; an understanding of these program dependencies is fundamental to efficient software change. This paper describes a general purpose tool set that has been developed to capture and analyze software dependencies. The tools are designed to serve as reusable components. They may be used not only to aid programmers directly in understanding programs but also as a basis from which other specialized tools can be constructed. The tools use the concept of a dependency graph as a basic abstraction to simplify the understanding of software relationships. Definitional, calling, functional and data-flow dependencies are analyzed. An external dependency graph for each function is developed to encapsulate the effects of function calls. A prototype of the dependency analysis toolset has been implemented to analyze C language code and seems to be quite useful, although some design and efficiency deficiencies were encountered that would need to be corrected in any “industrial strength” version. Dependency queries can be used directly in designing and verifying software changes and also serve as a basis for other maintenance tools. For example, a graphic program browser was constructed in only one man-month, illustrating the use of the toolset as a reuseable component to build more sophisticated tools.