Program understanding plays an important role in nearly all software
related tasks. It is vital to the development, maintenance and reuse
activities. Program understanding is indispensable for improving the
quality of software development. Several development activities such as
code reviews, debugging and some testing approaches require programmers
to read and understand programs. Maintenance activities cannot be
performed without a deep and correct understanding of the component to
be maintained. Program understanding is vital to the reuse of code
components because they cannot be utilized without a clear understanding
of what they do. If a candidate reusable component needs to be modified,
an understanding how it is designed is also required. of This monograph
presents a- knowledge-based approach to the automation of program
understanding. This approach generates rigorous program documentation
mechanically by combining and building on strengths of a practical
program decomposition method, the axiomatic correctness notation, and
the knowledge- based analysis approaches. More specifically, this
approach documents programs by generating first order predicate logic
annotations of their loops. In this approach, loops are classified
according to their complexity levels. Based on this taxonomy, variations
on the basic analysis approach that best fit each of the different
classes are described. In general, mechanical annotation of loops is
performed by first decomposing them using data flow analysis. This
decomposition encapsulates interdependent statements in events, which
can be analyzed individually.