Time: Monday and Wednesday 4:00-5:20 pm
Location: GS 109 (in the Geoscience building)
Instructor: Christoph Csallner
Office hours: Monday and Wednesday 5:30-6:30 pm (in NH 306)
|Software is everywhere||Bad program behavior could be fatal|
|(Warsaw, Poland. Picture by rintakumpu)||(Not an actual crash. Picture by louder)|
Bad program behavior during production use can endanger the safety of users and become very expensive. To protect the user from bad program behavior, we would like to reason about programs and predict their behavior. Luckily, many techniques exist for reasoning about programs. The subset of automated techniques is commonly referred to as program analysis.
Program analysis is used in many real-world applications. Examples include compilers and virtual machines (e.g.: gcc, HotSpot JVM, .Net), integrated development environments (Eclipse, Visual Studio), automatic bug finding and verification (FindBugs, Static Driver Verifier, Spec#), program understanding and re-engineering (Agitar), embedded system development (AbsInt), etc.
Following is a tentative overview.Static analysis
Mauro Pezzè and Michal Young. Testing and Analysis: Process, Principles, and Techniques. John Wiley & Sons. April 2007.
We use selected papers from the literature for advanced material not covered by the textbook.
Kenneth H. Rosen. Discrete Mathematics and its Applications. McGraw-Hill. (This textbook explains the basic concepts of set, relation, function, graph, tree, etc.)
Michael Sipser. Introduction to the Theory of Computation. Course Technology. (This textbook provides a very readable introduction to automata, decidability, and complexity theory.)
Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools. Addison Wesley. (This is the classic compiler book. It gives a thorough introduction to basic program analysis concepts, including basic blocks, control flow graphs, and dataflow analyses.)
The Software-artifact Infrastructure Repository (SIR) contains different versions of several real-world programs with seeded bugs.