Abstract | The software engineering community increasingly recognizes the importance and value of dynamic analysis for program understanding. A dynamic analysis runs a program and observes its execution. Dynamic analysis for program understanding produces output, or feeds into a subsequent analysis, that enables programming tasks or increases human understanding of the code; this transcends traditional dynamic analysis for testing or optimization. \par Dynamic analysis complements traditional static analyses, such as compilers and type checkers, that have similar goals. Once largely ignored by the research community due to unsoundness, of late there has been a flowering of research in this area. Often, a dynamic analysis is more precise and can better handle incomplete programs, programs written in multiple languages, and analysis of program environments, among other situations. \par This tutorial will explore the active new area of program analysis for program understanding and software engineering. It will cover theoretical background, implementation techniques, and applications, with particular focus on applications to practical programming tasks and on developing new applications. It will also present tools that you can use or build on in your practice or research, with the opportunity for hands-on experience, if there is interest. \par The tutorial format will encourage questions, discussion, and interaction, in order to enable participants to get the most out of it. |