Reverse Engineering and Software Visualization Abstract: Modern software systems consist of tens of millions of lines of code, structured in thousands of files, modules, classes and functions, written by tens of programmers over many years. As requirements, programming team, programming style, and technologies change at a high pace, it is often the case that the original architecture of a large software system gets lost or corrupted during the lifetime of the system. Reverse engineering techniques can be used to help system architects recover the architecture of a given software system from its source code and compare this architecture with a set of requirements and/or quality metrics. Software visualization techniques complement reverse engineering techniques by enabling architects and developers to interactively and visually query, navigate and understand the huge information space targeted by reverse engineering techniques. In this course, we present several techniques and tools for reverse engineering and software visualization. We demonstrate our methods with concrete tools and applications from the reverse engineering and visual understanding of large C and C++ code bases, UML architectures, and CVS and Subversion code repositories.