CS 6304 Program Analysis and its Applications Fall 2015 Barbara G. Ryder This seminar course will explore both seminal and specialist papers in static and dynamic program analyses, with emphasis on use of these analyses in modern software tools. Special emphasis will be placed on tools for Java and JavaScript as examples of object-oriented languages and scripting languages with dynamic typing. Key application areas are testing, debugging, program understanding and performance diagnosis. The class sessions will vary with some introductory lectures followed by student-prepared presentations. Most of the material explored with be in research papers; all students will be expected to prepare an annotated bibliography which will be part of the final grade in the course. A draft reading list for the course will be published later in the summer. Suggested background for students taking the course includes (i) familiarity with compilation (i.e., internal representations of programs and code) and data structures (e.g., rooted directed graphs, abstract syntax trees); (ii) knowledge of the object-oriented programming paradigm. Some background in software engineering (i.e., testing techniques, debugging) will be helpful as well.