In order to analyze the static structure of Ada programs, the authors define program structure as a set of relations on software components (i.e., subsystems and modules). The relations within, imports, and uses make up the macroscopic program structure of a program. The within and imports relations represent nested and imported objects, respectively, while the uses relation is a subset of the imports relation (i.e., not all imported objects are necessarily used). The microscopic program structure is defined by the calls, reads, and writes relations, which represent procedure calls and references to read-only and read/write data, respectively. The three microscopic relations are subsets of the uses relation. The macroscopic relations are used to compute clusters (i.e., the strongly connected components of the modules/uses graph) and hierarchy levels (i.e., hierarchy-level numbers) of large Ada programs. The paper does not, however, present algorithms for these computations.
Macroscopic structural analysis can be used to detect violations of design principles. The information gathered in the microscopic analysis can be exploited in program optimizations. Both analysis techniques are particularly handy during the maintenance phase of a software project. The authors stress the need for graphics and levels of abstraction to present program structure effectively.
With the exception of a few typographical errors, the paper is presented adequately and is easy to read. It presents a particular characterization of the structure of Ada programs, but does not describe implementations of structure analysis tools that operate on the introduced relations. The paper is of interest to software tool developers and designers of software development environments.