AbstractSeveral important aspects of software systems can be expressed as dependencies between their components. A special class of dependencies concentrates on the program text and captures the technical structure and behavior of the target system. The central characteristic making such program dependencies valuable in software engineering environments is that they can be automatically extracted from the program by applying well-known methods of programming language implementation. We present a model of program dependencies by considering them as relations between program elements. Moreover, we show how dependency relations form the basis of producing a graph-like hypertextual representation of programs for a programming environment. Having a general and well-defined model of program dependencies as a foundation makes it easier to systematically construct and integrate language-based tools. As an example application, we present a hypertextual tool which is founded on our relational dependency model and which can be used to maintain programs written in the programming language C.
Categories and Subject Descriptors: G.2.2 [Discrete Mathematics]: Graph Theory; D.2.2 [Software Engineering]: Tools and Techniques; D.2.5 [Software Engineering]: Testing and Debugging; H.5.1 [Information Interfaces and Presentation]: Multimedia Information Systems
Additional Key Words and Phrases: program dependencies, hypertext, software maintenance, reverse engineering
Selected references
- Brenda S. Baker. A theory of parameterized pattern matching: Algorithms and applications (extended abstract). In Proceedings of the Twenty-Fifth Annual ACM Symposium on the Theory of Computing, pages 71-80, San Diego, California, 16-18 May 1993.
- Yih-Farn Chen, Michael Y. Nishimoto, and C. V. Ramamoorthy. The C information abstraction system. IEEE Transactions on Software Engineering, 16(3):325-334, March 1990.
- S. Faustle, Mariagrazia Fugini, and E. Damiani. Retrieval of reusable components using functional similarity. Software -- Practice and Experience, 26(5):491-530, May 1996.
- Robert Godin and Hafedh Mili. Building and maintaining analysis-level class hierarchies using Galois lattices. In Andreas Paepcke, editor, Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA), Eighth Annual Conference, pages 394-410, Washington, DC, USA, 26 September1-- October 1983. SIGPLAN Notices, 28(10), October 1993.
- Donald E. Knuth. Semantics of context-free languages. Mathematical Systems Theory, 2(2):127-145, 1968.
- Thomas J. McCabe. A complexity measure. IEEE Transactions on Software Engineering, 2(4):308-320, December 1976.
- Mark Moriconi and Dwight F. Hare. The PegaSys system: Pictures as formal documentation of large programs. ACM Transactions on Programming Languages and Systems, 8(4):524-546, October 1986.
- Kasper Østerbye. Literate Smalltalk programming using hypertext. IEEE Transactions on Software Engineering, 21(2):138-145, February 1995.
- Santanu Paul and Atul Prakash. A query algebra for program databases. IEEE Transactions on Software Engineering, 22(3):202-217, March 1996.
- Andy Podgurski and Lori A. Clarke. A formal model of program dependences and its implications for software testing, debugging, and maintenance. IEEE Transactions on Software Engineering, 16(9):965-979, September 1990.
- Mark Weiser. Program slicing. IEEE Transactions on Software Engineering, 10(4):352-357, July 1984.
- Norman Wilde and Ross Huitt. Maintenance support for object-oriented programs. IEEE Transactions on Software Engineering, 18(12):1038-1044, December 1992.
- Wuu Yang. Identifying syntactic differences between two programs. Software -- Practice and Experience, 21(7):739-755, July 1991.