Understanding Program Dependencies

This paper reports on an experiment in trying to understand an unfamiliar program of some complexity and to record the authors’ understanding of it. The goal was to simulate a practicing programmer in a program maintenance environment using the techniques of program design adapted to program understanding and documentation; that is, given a program, a specification and correctness proof were developed for the program. The approach points out the value of correctness proof ideas in guiding the discovery process. Toward this end, a variety of techniques were used: direct cognition for smaller parts, discovering and verifying loop invariants for larger program parts, and functions determined by additional analysis for larger program parts. An indeterminate bounded variable was introduced into the program documentation to summarize the effect of several program variables and simplify the proof of correctness. Basili90 Basili, Victor. “Viewing Maintenance as Reuse-Oriented Software Development.” IEEE Software 7, 1 (Jan. 1990), 19-25.

[1]  Meir M. Lehman,et al.  A Model of Large Program Development , 1976, IBM Syst. J..

[2]  Stephen S. Yau,et al.  Ripple effect analysis of software maintenance , 1978, COMPSAC.

[3]  Stuart I. Feldman,et al.  Make — a program for maintaining computer programs , 1979, Softw. Pract. Exp..

[4]  Mark Weiser,et al.  Programmers use slices when debugging , 1982, CACM.

[5]  Ruven E. Brooks,et al.  Towards a Theory of the Comprehension of Computer Programs , 1983, Int. J. Man Mach. Stud..

[6]  S S Yau Methodology for Software Maintenance. , 1984 .

[7]  Victor R. Basili,et al.  System Structure Analysis: Clustering with Data Bindings , 1985, IEEE Transactions on Software Engineering.

[8]  S D Fay,et al.  Help] I have to update an undocumented program , 1986 .

[9]  Elliot Soloway,et al.  Delocalized Plans and Program Comprehension , 1986, IEEE Software.

[10]  J. S. Collofello,et al.  A practical software maintenance environment , 1988, Proceedings. Conference on Software Maintenance, 1988..

[11]  Keith Gallagher,et al.  Using program decomposition to guide modifications , 1988, Proceedings. Conference on Software Maintenance, 1988..

[12]  Thomas A. Corbi,et al.  Program Understanding: Challenge for the 1990s , 1989, IBM Syst. J..

[13]  D. J. Robson,et al.  An approach to software maintenance education , 1989, Softw. Eng. J..

[14]  Norman Wilde,et al.  Dependency analysis tools: reusable components for software maintenance , 1989, Proceedings. Conference on Software Maintenance - 1989.

[15]  Timothy D. Korson,et al.  Software Maintenance Exercises for a Software Engineering Project Course , 1989 .

[16]  David W. Binkley,et al.  Interprocedural slicing using dependence graphs , 1990, TOPL.

[17]  Wayne R. Cowell,et al.  Tools to aid in discovering parallelism and localizing arithmetic in Fortran programs , 1990, Softw. Pract. Exp..