CIS 5470: Software Analysis
Fall 2026 • University of Pennsylvania
📋 Course Information
Instructor
Prof. Mayur Naik
📧 mhnaik@cis.upenn.edu
🕐 Office Hours: TBA
📍 Location: AGH 642
Teaching Assistants
Claire Wang
📧 cdwang@engineering.upenn.edu
🕐 Office Hours: By Appointment
Zain Aamer
📧 zaamer@engineering.upenn.edu
🕐 Office Hours: By Appointment
📅 Course Schedule
| Date | Topic | Lab Released | Due |
|---|---|---|---|
| Wed Aug 26 | Introduction to Software Analysis | Lab 1: Introduction to Software Analysis | - |
| Mon Aug 31 | Introduction to Software Analysis | - | - |
| Wed Sep 2 | The LLVM Framework | Lab 2: The LLVM Framework | - |
| Mon Sep 7 | No lecture (Labor Day) | - | - |
| Wed Sep 9 | Software Specifications | - | Lab 1 (Fri Sep 11) |
| Mon Sep 14 | Software Specifications | - | - |
| Wed Sep 16 | Random Testing | Lab 3: Random Testing | Lab 2 (Fri Sep 18) |
| Mon Sep 21 | Random Testing | - | - |
| Wed Sep 23 | Delta Debugging | - | - |
| Mon Sep 28 | Statistical Debugging | - | - |
| Wed Sep 30 | No lecture | - | - |
| - | Fall Break (Oct 1-4) | - | - |
| Mon Oct 5 | Delta Debugging | Lab 4: Delta Debugging | - |
| Wed Oct 7 | No lecture | - | Lab 3 (Fri Oct 9) |
| Mon Oct 12 | Statistical Debugging | Lab 5: Statistical Debugging | Lab 4 |
| Wed Oct 14 | Statistical Debugging | - | - |
| Mon Oct 19 | Dataflow Analysis I | Lab 6: Dataflow Analysis | - |
| Wed Oct 21 | No lecture | - | Lab 5 |
| Mon Oct 26 | Dataflow Analysis II | - | - |
| Wed Oct 28 | Pointer Analysis | Lab 7: Pointer Analysis | - |
| Mon Nov 2 | Pointer Analysis | - | Lab 6 |
| Wed Nov 4 | Constraint-Based Analysis | - | - |
| Mon Nov 9 | Constraint-Based Analysis | Lab 8: Constraint-Based Analysis | Lab 7 |
| Wed Nov 11 | Dynamic Symbolic Execution | - | - |
| Mon Nov 16 | Dynamic Symbolic Execution | - | Lab 8, Project Proposal |
| Wed Nov 18 | Automated Test Generation | - | - |
| Mon Nov 23 | Type Systems | - | - |
| - | Thanksgiving Break (Nov 26-29) | - | - |
| Mon Nov 30 | Type Systems | - | - |
| Wed Dec 2 | Final Exam | - | - |
| Mon Dec 7 | Project Presentations | - | Project Report |
Exact lab due dates/times are posted on Gradescope; most labs are due one week after being assigned (see Gradescope for exact times).
📚 Course Description
Your 500-line vibe-coded class project works perfectly. Google’s 100+ million line codebase? That’s a different universe.
At scale, software is complex, buggy, and insecure. Enter software analysis: a suite of techniques to automatically analyze code, uncover bugs, and ensure reliability. And this has real-world impact: when Google deploys to billions of devices, a single divide-by-zero error can drain millions of batteries worldwide – or worse, crash a warship or rocket’s propulsion system. Software analys tools are live: Meta’s Infer has prevented thousands of crashes has prevented thousands of crashes, while Google’s Tricoder fixes 5000+ bugs daily, to name a few.
This course provides a rigorous and hands-on introduction to the field of software analysis — a body of powerful techniques and tools for analyzing modern software, with applications to:
- 🐛 Systematically uncover insidious bugs
- 🔒 Prevent security vulnerabilities
- ⚙️ Automate testing and debugging
- ✅ Improve confidence in software behavior, even mathematically
⚠️ New: Starting this semester, we’ll also address the trillion-parameter elephant in the room: Large Language Models (LLMs). With LLMs writing more vibe-code than ever, it’s important to devise automatic ways of ensuring code doesn’t blow up in production. We’ll explore how LLMs can assist in software analysis tasks and their limitations. Our team is re-working the labs as we go, so bear with us!
Topics Covered
Dynamic Analysis
- Random testing & fuzzing
- Delta debugging
- Statistical debugging
- Runtime monitoring
Static Analysis
- Dataflow analysis
- Pointer analysis
- Type systems
- Constraint-based analysis
All topics include hands-on implementation using the LLVM compiler infrastructure. LLVM, created by Chris Lattner during his UIUC PhD, powers modern compiler technology. His work led to Clang, caught Apple’s attention, and enabled Swift’s development. Today LLVM underlies Apple’s toolchain, Google’s optimizations, and Meta’s production tools—making it ideal for understanding real-world analysis.
🎯 Learning Objectives
Upon completion of this course, you will be able to:
✓ Understand fundamental methods for analyzing, testing, and verifying software
✓ Analyze trade-offs between different techniques (scalability vs. precision)
✓ Implement analysis algorithms using LLVM
✓ Apply appropriate techniques to real-world problems
✓ Evaluate the effectiveness of different approaches
📋 Prerequisites
- CIS 240/CIT 595: Systems Programming (C/C++ required)
- CIS 120/CIT 594: Data Structures and Algorithms
- CIS 160/CIT 592: Mathematical Foundations
⚠️ Note: Labs involve substantial C++ programming with LLVM
📊 Grading
| Component | Weight |
|---|---|
| Labs (upto 9) | 54% |
| Quizzes | 3% |
| Group Project | 23% |
| Final Exam | 20% |
Late Policy: 6 late days total
📖 Resources
Textbooks
- No required textbook - All materials provided
- Recommended: Static Program Analysis (free online)
- Reference: Principles of Program Analysis (Nielson et al.)
Links
⚖️ Academic Integrity
All submitted work must be your own. You may discuss concepts, but code must be written independently.
AI Policy: ChatGPT/Copilot allowed for understanding concepts only - no direct code generation. Must disclose usage.
Violations → Failing grade + referral to OSC