- Jan 10. All students should have received an e-mail to join the Piazza.
Program analyses have long been the foundation in compilers and programmer productivity tools. In recent years, we have also seen a number of successes in applying advanced analysis techniques in industry for defect detection. For example, Microsoft uses and distributes its Static Driver Verifier—a compile-time tool for checking that Windows device drivers adhere to certain usage rules, and Airbus applies Astrée to its safety-critical flight control software.
This graduate seminar is designed to acquaint you with the fundamental ideas behind program analysis. The goal is to introduce you to both the theoretical underpinnings and practical implementations of static program analysis. Ultimately, you should come away with the ability to apply program analysis techniques to your own projects.
The course has two broad topics:
- Program Analysis Foundations
- Research Applications
The first part of this course focuses on foundational concepts in static program analysis, such as set constraints, dataflow, and abstract interpretation. We will take an approach that interleaves practical implementation experience with theoretical development.
The second part of the course covers special topics broadly drawn from current research in program analysis, including both static and dynamic techniques. Students will have opportunity to suggest topics of interest.
Students will also complete a final project to explore implementations of advanced abstract domains and to obtain experience in applying analysis techniques.
The prerequisites for this course are programming and mathematical experience. The ideal programming experience is an undergraduate compilers course (e.g., CSCI 4555). Projects will involve development in Scala—a often-used language for creating program analyzers. The ideal mathematical experience is familiarity with logic and programming language semantics (e.g., by having taken CSCI 5535). These prerequisites are not strict. However, your desire to be exposed to this material is very important.
Advanced undergraduates may consider taking this course after talking with the instructor.
You will be responsible for the following:
- Class Participation (10%). Participation includes both in-class and online discussion.
- Assignments (40%). There will be assignments.
- A Final Project (50%). In the second half of the course, your time will be spent on a final project. You will create a final project that explores, extends, or experiments with the ideas in the course.
- Reading. There will be required papers or book chapters to read.
Textbook and Resources
Textbook. Some of our readings will come from the following text:
- Flemming Nielson, Hanne Riis Nielson, and Chris Hankin. Principles of Program Analysis.
The following are other notes and draft texts on program analysis:
- Anders Møller and Michael I. Schwartzbach. Static Program Analysis.
- Xavier Rival. Static Analysis by Abstract Interpretation.
We will also make use of class notes and research papers as appropriate.
For background resources on programming language semantics, here are a few texts:
- Glynn Winskel. The Formal Semantics of Programming Languages. This book is the text for CSCI 5535 Fundamentals of Programming Languages.
- Robert Harper. Practical Foundations for Programming Languages.
- Benjamin C. Pierce. Types and Programming Languages [e-book via CU library]
Moodle. We will use Moodle for assignment submission. If you do not already have an account, please create one and join the course moodle. The instructor will provide the enrollment key.
Piazza. We will be using Piazza for online, outside-of-class discussion. Rather than emailing questions to the teaching staff, questions should be posted on Piazza. I encourage you to make class-wide posts whenever possible, but there is an option to send an instructor-private message. You also have the option of posting anonymously to the class.
Off-Campus Access. The CU library has instructions for off-campus access to certain online resources (e.g., ACM Digital Library).
- Language Website. The central point for Scala information.
- IntelliJ IDEA. You are welcome to use any code development environment, but the course staff will only support IntelliJ. There are many options, including support for Emacs, Eclipse, and NetBeans.
- Scala Style Guide. We will in general follow the Scala style guide.
- An Overview of the Scala Programming Language (2. Edition). This document is a technical overview that assumes background in object-oriented programming.
- The Scala Language Specification. This document is the most detailed specification of the language.
- We also strongly recommend that you get access to Programming in Scala, 2nd edition by Martin Odersky, Lex Spoon, and Bill Venners. This book is an extended tutorial for learning Scala by those directly involved in the language's development. Another useful Scala text: Atomic Scala by Bruce Eckel and Dianne Marsh.
Computing. For a Linux environment, the following are some resources:
- CS students can create a a CSEL account. CSEL has a lab in ECCS 128 and remote access servers with SSH (elra-01 through elra-04.cs.colorado.edu).
- ECEE students can create an ECES account.
You are welcome and encouraged to work together in learning the material. If you worked with someone on an assignment, or if your submission includes quotes from a book, a paper, or a web site, you should thank the source. Bottom line, feel free to use whatever resources that are available to you as long as you cite them in your submission.
We will go by the honor code set forth by the University:
All students of the University of Colorado at Boulder are responsible for knowing and adhering to the academic integrity policy of this institution. Violations of this policy may include: cheating, plagiarism, aid of academic dishonesty, fabrication, lying, bribery, and threatening behavior. All incidents of academic misconduct shall be reported to the Honor Code Council and those students who are found to be in violation of the academic integrity policy will be subject to both academic sanctions from the faculty member involved and non-academic sanctions given by the Honor Code Council (including but not limited to university probation, suspension, or expulsion).
We trust and expect everyone to behave in a civil and courteous manner.
Discrimination and Sexual Harassment
We will go by the policies set forth by the University:
The University of Colorado at Boulder policy on Discrimination and Harassment, the University of Colorado policy on Sexual Harassment and the University of Colorado policy on Amorous Relationships apply to all students, staff and faculty. Any student, staff or faculty member who believes s/he has been the subject of sexual harassment or discrimination or harassment based upon race, color, national origin, sex, age, disability, creed, religion, sexual orientation, or veteran status should contact the Office of Discrimination and Harassment (ODH) at 303-492-2127 or the Office of Judicial Affairs at 303-492-5550. Information about the ODH, the above referenced policies and the campus resources available to assist individuals regarding discrimination or harassment can be obtained at www.colorado.edu/odh.
We will make every effort to make special accommodations that are reasonable and fair to all students. Please note that we will accept requests for adjustments during the first four weeks of class.
We will go by the disability guidelines set forth by the University:
If you qualify for accommodations because of a disability, please submit to the course staff a letter from Disability Services within the first four weeks of class so that your needs can be reasonably addressed. Disability Services determines accommodations based on documented disabilities (303-492-8671, Willard 322).
If you have a temporary medical condition or injury, see these guidelines.
Disability Services' letters for students with disabilities indicate legally mandated reasonable accommodations.
Religious ObservancesWe will go by the policy for religious observances set forth by the University:
Campus policy regarding religious observances requires that faculty make every effort to deal reasonably and fairly with all students who, because of religious obligations, have conflicts with scheduled exams, assignments or required attendance. In this class, we will try to accommodate religious conflicts in a reasonable manner. Please check the exam dates and submit all requests for adjustments within the first four weeks of class.
See www.colorado.edu/policies/fac_relig.html for further details on the policy.