CS 5187 — Software Analysis
Schedule
Weeks 1–3: classes Mon / Tue / Wed. From Week 4 (18 Aug): classes Tue / Wed / Thu — Tue 4:00, Wed 3:00, Thu 2:00 PM in Room 5G4. The Thursday slot now carries regular lectures as well as the two quizzes and Industry Talk 2.
| Wk | Mon | Tue | Wed | Thu | Notes |
|---|---|---|---|---|---|
| 1 | Jul 27 · Mon-1 L1. Course intro & motivation | Jul 28 · Tue-1 L2. Static / dynamic / hybrid analysis | Jul 29 · Wed-1 L3. Vulnerability assessment & secure coding | — | Topic 1 |
| 2 | Aug 3 · Mon-2 L4. Soundness, completeness, undecidability | Aug 4 · Tue-2 L5. Precision, recall, F-measure | Aug 5 · Wed-2 L6. Program representation: AST, CFG, IRs | — | Topic 1 |
| 3 | Aug 10 · Mon-3 L7. Clang tutorial: libtooling & AST analysis | Aug 11 · Tue-3 L8. LLVM IR | Aug 12 · Wed-3 L9. LLVM IR (continued): CFGs & class hierarchy | — | Topic 1 HW 1 out |
| — | From Week 4 Classes move to Tuesday / Wednesday / Thursday (announced in L9, Wed 12 Aug). | ||||
| 4 | — | Aug 18 · Tue-4 L10. Specifications, safety & liveness | Aug 19 · Wed-4 L11. Invariants, coverage, mutation |
Aug 20 · Thu-4
L12. Fuzz testing intro & coverage-guided fuzzing
(two lectures combined)
|
Topic 1 → 2 HW 1 due Aug 21 |
| 5 | — | Aug 25 · Tue-5 L13. Grammar-based fuzzing | Aug 26 · Wed-5 L14. Concurrency testing |
Aug 27 · Thu-5
L15. Lattices, fixed points, worklist & MOP
(two lectures combined)
|
Topic 2 → 3 HW 2 out |
| 6 | — | Sep 1 · Tue-6 L16. Reaching definitions | Sep 2 · Wed-6 L17. Available expressions | Sep 3 · Thu-6 L18. Very busy expressions | Topic 3 |
| 7 | — | Sep 8 · Tue-7 L19. Live variables & DCE |
Sep 9 · Wed-7
L20–L21. Interval analysis; widening & abstract interpretation
(two lectures combined)
|
Sep 10 · Thu-7
Quiz 1
2:00–2:55 PM · Topics 1–3
|
Topic 3 HW 2 due Sep 11 Quiz 1 |
| — | Sep 13–20 Mid-Semester Examinations | ||||
| 8 | — |
Sep 22 · Tue-8
Industry Talk 1
Room 5G4 · 4:00–4:55 PM
|
Sep 23 · Wed-8
L22–L23
(two lectures combined)
|
Sep 24 · Thu-8 L24 | HW 3 out Project proposal due Sep 20 Industry Talk 1 |
| 9 | — | Sep 29 · Tue-9 L25 | Sep 30 · Wed-9 L26 | Oct 1 · Thu-9 L27 | |
| 10 | — | Oct 6 · Tue-10 L28 | Oct 7 · Wed-10 L29 | Oct 8 · Thu-10 L30 | HW 3 due Oct 9 Progress meeting 1 · Oct 5–9 |
| 11 | — | Oct 13 · Tue-11 L31 | Oct 14 · Wed-11 L32 |
Oct 15 · Thu-11
Industry Talk 2
Room 5G4 · 2:00–2:55 PM
|
HW 4 out Industry Talk 2 |
| 12 | — | — | Oct 21 · Wed-12 L33 | Oct 22 · Thu-12 L34 | No Tue class this week (institute calendar). |
| 13 | — | Oct 27 · Tue-13 L35 | Oct 28 · Wed-13 L36 | Oct 29 · Thu-13 L37 | HW 4 due Oct 30 Progress meeting 2 · Oct 26–30 |
| 14 | — |
Nov 3 · Tue-14
Industry Talk 3
Room 5G4 · 4:00–4:55 PM
|
Nov 4 · Wed-14
L38–L39
(two lectures combined)
|
Nov 5 · Thu-14
Quiz 2
2:00–2:55 PM · Topics 4–8
|
Progress meeting 3 · Nov 2–6 Industry Talk 3 Quiz 2 |
| 15 | — | Nov 10 · Tue-15 L40 |
Nov 11 · Wed-15
L41–L42
(two lectures combined) · last teaching day
|
Nov 12 · Thu-15 Student project presentations | Final presentation · Thu Nov 12 Paper + repo due Fri Nov 13, 23:59 IST |
| — | Nov 14–21 End-Semester Examinations | ||||
Syllabus
| # | Topic | Lectures | Count |
|---|---|---|---|
| 1 | Foundations & Program Representation (incl. Clang / LLVM IR, specifications, invariants & coverage) | L1–L11 | 11 |
| 2 | Testing (fuzzing, grammar-based, coverage-guided, concurrency) | L12–L14 | 3 |
| 3 | Dataflow Analysis | L15–L21 | 7 |
| 4 | Pointer Analysis | L22–L24 | 3 |
| 5 | Constraint-Based Analysis | L25–L28 | 4 |
| 6 | Type Systems | L29–L32 | 4 |
| 7 | Symbolic Execution | L33–L36 | 4 |
| 8 | Automated Test Generation | L37–L39 | 3 |
| 9 | LLM-Assisted Software Analysis | L40–L42 | 3 |
| — | Total | — | 42 |
Logistics
- Classroom
- Room 5G4, Core 5
- Lecture days
- Weeks 1–3: Mon / Tue / Wed · Week 4 onwards (from 18 Aug): Tue / Wed / Thu
- Lecture times
- Mon 5:00–5:55 PM · Tue 4:00–4:55 PM · Wed 3:00–3:55 PM · Thu 2:00–2:55 PM
- Thursday slot
- Now a regular lecture day. It also carries Quiz 1 (Thu 10 Sep), Industry Talk 2 (Thu 15 Oct), Quiz 2 (Thu 5 Nov) and the final project presentations (Thu 12 Nov).
- Office hours
- By appointment · email the instructor/TAs
- Discussion
- Microsoft Teams (CS 5187 channel) · course email list
- Handouts & slides
- Course Website
- Progress meetings
- Microsoft Teams (scheduled 1:1 or per group) or offline
- Prerequisites
- Data structures, C/C++ or Java, basic OS & compilers
Grading
- End-semester exam
- 30 %
- Mid-semester exam
- 25 %
- H/W assignments
- 10 %
- Quizzes (2)
- 10 % (5 % each)
- Term project
- 20 % (see Project for internal breakdown)
- Attendance
- 5 %
- Total
- 100 %
Quizzes (10 %)
- Quiz 1
- Thu 10 September 2026, 2:00–2:55 PM · covers Topics 1–3 (Foundations, Testing, Dataflow).
- Quiz 2
- Thu 5 November 2026, 2:00–2:55 PM · covers Topics 4–8 (Pointer, Constraint-based, Types, SymExec, Test generation).
Term Project (20 %)
You'll pick a widely-used open-source target, build or adapt a program-analysis tool from the course, and try to find real bugs that get accepted upstream. Outcome is a short paper in FSE format with a reproducible GitHub artifact.
- Implementation & results
- 50 % — Does the analyzer find real vulnerabilities and generate successful exploits or fixes?
Full marks on this component require a bug accepted by upstream maintainers.
- Progress meetings & final presentation
- 25 % — Can you present and explain your work? Evaluated across 3 progress meetings + the final presentation.
- Report (FSE format)
- 25 % — Is the work clearly described and illustrated?
Team & individual accountability
- Group size: TBA
- Each member must justify their contribution (a signed statement in the report plus commit history in the repo).
- At every progress meeting and at the final presentation, each member must be able to answer any question about any part of the project. “That was X's part” is not an acceptable answer.
Timeline
- Proposal submitted
- Immediately after the mid-semester exam · by Sun 20 Sep 2026 via Microsoft Teams.
- Proposal approved
- Within one week · do not start work before written approval.
- Progress meeting 1
- 5 – 9 Oct 2026 · scope firmed up, target OSS accessible, initial pipeline running. Book a slot on Teams.
- Progress meeting 2
- 26 – 30 Oct 2026 · first end-to-end results, first bug candidates, evaluation plan.
- Progress meeting 3
- 2 – 6 Nov 2026 · upstream reports/PRs filed, results consolidated, report draft.
- Final presentation
- Thu 12 Nov 2026 · 10–15 min per group + Q&A · open session on Teams.
- Paper + repo due
- Fri 13 Nov 2026, 23:59 IST · PDF + public GitHub repo + reproducibility instructions submitted via Teams before end-sem week.
Target open-source project
- Must be widely used — think Linux kernel Chromium/V8 FFmpeg OpenSSL SQLite Postgres Node.js CPython LLVM and similar. Popular runtimes, browsers, kernels, media libraries, cryptography libraries, and databases are on-scope.
- You cannot pick an obscure repo and simply point your tool at it. Rule of thumb: the project should have a large public user base and a functioning security / bug-triage process.
- Get the target on the proposal so I can green-light it before you invest time.
Deliverables
- Proposal (2 pages): problem, target OSS project, technique, plan, team & role split. Sent to the instructor by 20 Sep 2026.
- Paper in FSE format: motivation, technique, implementation, evaluation, related work, threats to validity. Use the ACM Primary Article Template (LaTeX
sigconf). PDF submitted with the artifact. - Public GitHub repo containing:
- Source code with a permissive license
README.mdwith build + run instructions, exact dependencies, and one-command reproduction of the headline result- Docker image or CI workflow that reproduces the evaluation from scratch
- Bug reports / PRs / patches you filed upstream, linked with their state (open / acknowledged / merged)
What earns full marks on the “implementation” component
- Your tool finds at least one real, previously-unknown bug in the target project and
- The bug report / patch is accepted by upstream maintainers (merged PR, accepted CVE, or acknowledged advisory).
- Partial credit is available for high-quality tooling and reproducible evaluation even if no bug lands; the ceiling on this component is capped without an upstream-accepted finding.
Staff
- Instructor
- Bernard Nongpoh · bnongpoh@iitg.ac.in
- Teaching assistants
-
-
Shruti Yadav shruti.yadav@iitg.ac.in
-
Kunal Upadhyay k.upadhyay@iitg.ac.in
-
Rhythm Jamwal rhythm.jamwal@iitg.ac.in
-
Yatharth Sonteke y.sonteke@iitg.ac.in
-
Leisel Rangsuo Koireng leisel.koireng@iitg.ac.in
-
Policies
Collaboration. Discuss ideas freely; write up assignments individually. Cite any external references you consulted. Academic honesty. Standard institute rules apply. LLM use must be disclosed and cannot replace your own understanding of the material.