*Understanding Software Systems Using Reverse Engineering Technologies: Research and Practice* _[[HausiMueller]], Department of Computer Science, University of Victoria_ ICSE-18 tutorial, 1996. *Abstract* The need for maintaining and improving software systems has risen dramatically over the past decade. Dealing with old software systems, which constitute billion-dollar assets to corporations and governments, has been recognized as a critical problem by industry, academia, and entrepreneurs. Studies indicate that 50-90% of the time spent in Re-engineering software systems is used to understand these systems. As a result, interest in software re-engineering technologies, and in particular technologies for understanding software, has exploded. Re-engineering involves capturing, preserving, and extending knowledge about software, analyzing and understanding software, and finally changing, improving, and evolving software. Reverse engineering approaches have been particularly useful in the re-engineering arena. Reverse engineering is the process of generating new information about software such as synthesizing abstractions and generating different views. This tutorial concentrates on the ProgramUnderstanding aspects of ReEngineering large, existing software systems. The primary purpose of the tutorial is to review the state-of-the-art of program understanding with particular focus on ReverseEngineering technologies in the context of SoftwareMaintenance and SoftwareEvolution. A secondary goal is to outline key research issues being pursued by various industrial and academic groups around the world. The tutorial is intended for practitioners and researchers with interest in re-ngineering, maintenance, and evolution of existing software systems. See http://www.rigi.csc.uvic.ca/UVicRevTut/UVicRevTut.html for the slides and references. ---- CategoryTutorial