Aspects of software development besides programming, such as diagnosing bugs, testing, and debugging, comprise over 50% of the cost of software development. Modern technology has come a long way to aid programmers with these aspects. At the heart of this technology lies software analysis: a body of work that concerns discovering facts about a given program. Many diverse software analysis approaches exist, each with their own strengths and weaknesses. This course will cover a broad spectrum of these approaches, including dataflow analysis, constraint-based analysis, type systems, model checking, symbolic execution, and more. The course will teach the principles underlying these approaches as well as impart hands-on experience with applying them to automate testing, debugging, and finding bugs in complex real-world programs.
Students are expected to be very comfortable with 1) mathematical and logical reasoning (e.g. basics of set theory, boolean algebra, and probability), 2) programming in a high-level language like Java, and 3) shell scripting on Linux-like operating systems.
There is no required textbook; all relevant materials will be made available online. The following textbooks are recommended reading: Compilers: Principles, Techniques, and Tools (2nd Edition) by Alfred Aho, Monica Lam, Ravi Sethi, and Jeffrey Ullman. Principles of Program Analysis by Flemming Nielson, Hanne Nielson, and Chris Hankin. Types and Programming Languages by Benjamin Pierce.
Grades will be assigned as follows: A for scores >= 90%, B for scores 80%-89%, C for scores 70%-79%, D for scores 60%-69%, and F for scores < 60%. The instructor may relax this policy towards the end of the course (this will only improve your grade).
The grade will be computed based on the following components:
Proctored Midterm Exam 20% Proctored Final Exam 25% Take-Home Assignments 50% Class Participation 5%
Proctored Exams will be open book/notes and based on material from lectures. We will use Proctortrack through Verificient for proctoring. You can see technical requirements here: http://www.proctortrack.com/technical-requirements/
Take-Home Assignments will be of two kinds: Using a software analysis tool based on a technique taught in lectures, reporting your findings, and answering conceptual questions. Implementing a software analysis algorithm in Java using the Petablox program analysis framework. A VM image using Virtualbox will be provided for relevant assignments. Class Participation will be based on three aspects: participating in discussions on this Piazza forum, viewing the lessons on Udacity regularly, and answering the quizzes in those lessons correctly.
You can access your grades on T-Square. The regrade policy is as follows. You have two weeks after a given grade has been released to contest it. The grade will be considered final after two weeks. If the re-grading reveals issues that the TA had initially missed, the re-grading may result in a lower grade though this might rarely happen.
The policy for late assignments is as follows. An assignment that is turned in within two days past the regular deadline will get 50% of the original grade. Beyond that, you will not get any credit for the assignment. To be fair to all students, we have a very strict policy about extensions and make no exceptions to this rule. Besides, we have given ample time (at least a week) for each assignment. We will exercise prudence when deciding final grades (e.g., when a student has all good grades and only a single bad one). Therefore, please do not ask for deadline extensions. Likewise, we will release assignments no earlier than a week or two before they are due.
Students are expected to abide by the Georgia Tech Honor Code. Honest and ethical behavior is expected at all times. All incidents of suspected dishonesty will be reported to and handled by the office of student affairs.
Assignments must be done individually. Even if you are in a study group, you are not allowed to collaborate with other students or people outside the class on assignments. We take this very seriously and run a plagiarism detector on all assignments.