CSE 788.R12: Dynamic Analysis of Imperative and Object-Oriented Software, Spring 2008

Basic Information

Prerequisites

The prerequisite for this course is basic knowledge of C, C++, or Java.

Course Overview

The goal of this course is to introduce students to basic foundations and current advances in the area of dynamic (run-time) program analysis. Recent years have seen a great increase in the use of such analysis for performance optimization (e.g., generating profiling information), run-time checking (e.g., protecting against buffer overflows and stale memory references), and debugging (e.g., identifying the sources of memory leaks and race conditions). Dynamic analysis tools such as gprof, Purify, and Valgrind are used every day by thousands of programmers. In this course we will consider dynamic analyses for both imperative languages (e.g., C) and object-oriented languages (e.g., C++ and Java). The primary goals are (1) to provide entry-level knowledge of analysis techniques, and (2) to apply some of these techniques to real-world C, C++, or Java code. We will also consider a number of static (compile-time or link-time) analyses that are required for subsequent dynamic analysis (e.g., in order to decide what instrumentation to insert in the program code). The covered material will be useful for students working in compilers, systems, programming languages, and software engineering, as well as anyone interested in learning about state-of-the-art tools for software development.

Course Organization

The course will have the following parts:

Lectures by the Instructor

I will present an overview of some basic dynamic analyses and the related static analyses. The goal of these lectures is to establish some background for paper presentations and for the project. No previous knowledge of program analysis is expected.

Paper Presentations

For part of the quarter, students will present papers from our reading list. Typically, each student will present only one paper. The goal is to gain more experience understanding other people's work, as well as to develop and improve presentation skills. I will help with the harder papers. We will spend a fair amount of time on the foundational papers, in order to get a firm grasp on the basic techniques. Depending on the available time, we will also cover some more advanced topics.

Project

There will be several projects to choose from. The "default" project will be for analysis of Java, but depending on the student's preferences, the topic could instead be on analysis of C, C++, or even C# . We will use various popular analysis frameworks that allow the creation of instrumented code and the deployment of run-time analysis agents. Each student will implement a small dynamic analysis tool. I will have some pre-defined projects, but you will be free to define your own project if you want — especially if they are related to your research. Even though you cannot build a real tool in 10 weeks, we will try initial exploration of ideas that may be useful for your ongoing research, or for future publications. The scope of the default Java project should be enough for about half a paper; if anyone is interested, we can continue next quarter to make it a real paper submission.

Grading

Sometimes a student will present two related papers instead of one; in such cases, the grading scheme will be 70% (project) and 30% (papers).

Students with Disabilities

Any student who feels he or she may need an accommodation based on the impact of a disability should contact me privately to discuss his or her specific needs. Please contact the Office of Disability Services at (614) 292-3307, or visit 150 Pomerene Hall, to coordinate reasonable accommodations for students with documented disabilities.