Program Comprehension and Software Reengineering Dagstuhl Seminar, March 9th-13th, 1998 Hausi M¨ uller Thomas Reps Gregor Snelting University of Victoria University of Wisconsin Universit¨ at Braunschweig Canada USA Germany hausi@csr.uvic.ca reps@cs.wisc.edu snelting@ips.cs.tu-bs.de Analyzing old software systems has become an important topic in software technology. There are billions of lines of legacy code which constitute sub- stantial corporate assets. Legacy systems have been subject to countless modifications and enhancements and, hence, software entropy has typically increased steadily over the years. If these systems are not refurbished they might die of old age—and the knowledge embodied in these systems will be lost forever. As a first step in “software geriatrics” one usually tries to understand the old system using program understanding or program comprehension tech- niques. In a second step, one reconstructs abstract concepts (e.g., the system architecture, business rules) from the source code, the documentation, and corporate knowledge; this is called software reverse engineering. Given an ab- stract representation of the system, one can then re-implement the system. This forward engineering step ranges from fully automatic approaches to manual reimplementations including restructuring techniques, formal trans- formations, injecting component technologies, replacing old user interface or database technology. The process of moving from an old legacy system to a new implementation is called software reengineering. 1