Time: Tuesday and Thursday 5:00-6:20 pm
Location: General Academic Classroom Building (GACB) 105
Instructor: Christoph Csallner
Email: csallner@uta.edu
Office: Nedderman Hall (NH) 306
Office hours: Tuesday and Thursday 6:20-7:00 pm
Syllabus: syllabus.pdf
| 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.
"Microsoft began to place heavy emphasis on improving the security of its software.
Program-analysis tools have been key to the successes of these efforts,
allowing our engineers to detect and remove security vulnerabilities before products
are released. Today, Microsoft's engineering practices for security are formalized
in the Security Development Lifecycle, or SDL, which mandates application of
program-analysis tools and security-enhancing options."
[Steve Lipner, senior director of security engineering strategy in
Microsoft's Trustworthy Computing Group, in
CACM, Feb. 2009]
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.)
Reading list: reading.pdf
The Software-artifact Infrastructure Repository (SIR) contains different versions of several real-world programs with seeded bugs.