Term Project Ideas
CS 5187 — Software Analysis · Monsoon 2026 · Dept. of CSE, IIT Guwahati
Proposal due Sun 20 Sep 2026 · do not start work before written approval.
These are only some project ideas — you are free to propose your own.
Submit the proposal on the project proposal form · one submission per team — the team leader fills the form, other members must not submit it again.
Proposal due Sun 20 Sep 2026 · do not start work before written approval.
These are only some project ideas — you are free to propose your own.
Submit the proposal on the project proposal form · one submission per team — the team leader fills the form, other members must not submit it again.
Start from the Problem line: if the problem does not
interest you, no amount of tooling will make the semester enjoyable. Then read one or two
of the linked papers — abstract and evaluation section first. If you cannot picture
what you would build after reading them, pick a different entry.
You are equally welcome to propose an idea that is not here at all;
the project rules apply either way.
A · Fuzzing & greybox testing Topic 2 · L14–L16
A1Automated fuzz-harness generation for a C library
- Problem
- No test driver ever calls most of the API The fuzzer works fine. Nothing calls most of the library’s functions, so that code is never tested.
- Example targets
- libarchive, libxml2, FFmpeg demuxers, OpenSSL, libpng, zlib-ng.
- Read
A2Making sanitizers cheap: decoupled sanitization
- Problem
- Bug detection is too slow to leave switched on The sanitizer would catch the bug. It slows every run down so much that you cannot afford to use it on all of them.
- Example targets
- Any OSS-Fuzz project with a heavy sanitizer cost — SQLite, FFmpeg, Wireshark dissectors.
- Read
A3Grammar-aware fuzzing for one structured format
- Problem
- Random inputs are rejected before they reach the code If the parser throws an input out, nothing behind the parser is ever tested. The inputs have to be valid first.
- Example targets
- SQLite / Postgres (SQL), V8 or SpiderMonkey (JS), FFmpeg (containers), Yosys / Verilator (HDL).
- Read
-
- Directed Grammar-Based Test GenerationFSE 2026 · arXiv 2508.01472
- Efficiently Detecting DBMS Bugs through Bottom-up Syntax-based SQL GenerationNDSS 2026
- Repair-Driven Greybox FuzzingISSTA 2026
- Godefroid, Kiezun, Levin. Grammar-based Whitebox FuzzingPLDI 2008
- Fuzzilli: Fuzzing for JavaScript JIT Compiler VulnerabilitiesNDSS 2023
- No Grammar, No Problem: Towards Fuzzing the Linux Kernel without System-Call DescriptionsNDSS 2023
A4Seed scheduling as a control problem
- Problem
- Which input should the fuzzer spend the next second on? A scheduling question. The hard part is showing your answer is better, because fuzzing results are noisy.
- Example targets
- FuzzBench-style benchmark for the measurement, one real project for the bug hunt.
- Read
-
- FOX: Coverage-guided Fuzzing as Online Stochastic ControlCCS 2024 · arXiv 2406.04517
- SimiFuzz: Seed–Worker Scheduling for Parallel Fuzzing via Contextual BanditsISSTA 2026
- Böhme, Pham, Roychoudhury. Coverage-based Greybox Fuzzing as Markov ChainCCS 2016
- Reinforcement Learning-based Hierarchical Seed Scheduling for Greybox FuzzingNDSS 2021
- Effective Seed Scheduling for Fuzzing with Graph Centrality AnalysisS&P 2022
- Regression Greybox FuzzingCCS 2021
B · Coverage, mutation & test adequacy Topic 2 · L13
B1Differential testing of coverage measurement tools
- Problem
- The tool that measures your testing is itself untested Everyone trusts coverage tools and nobody checks them. Run several on the same program: where they disagree, one is wrong.
- Example targets
- LLVM's
llvm-cov, GCC'sgcov, JaCoCo,coverage.py— all with live issue trackers. - Read
B2The equivalent-mutant problem, revisited with LLMs
- Problem
- Some mutants cannot be killed, and finding them is expensive A mutant that behaves exactly like the original wastes everyone’s time. Deciding which ones those are is undecidable in general.
- Example targets
- A mid-sized C/Java project with a strong existing test suite.
- Read
-
- Re-evaluating Detection of Equivalent Mutants Using LLMs: We Should Properly Measure How Far We AreISSTA 2026
- LLMutantKiller: Using Large Language Models to Generate Tests that Kill MutantsISSTA 2026
- Jia, Harman. An Analysis and Survey of the Development of Mutation TestingTSE 2011
- Large Language Models for Equivalent Mutant Detection: How Far Are We?ISSTA 2024
B3Do coverage and mutation scores predict LLM test-suite quality?
- Problem
- Does a high coverage score still mean a good test suite? Coverage was always a rough stand-in for finding faults. It may be a worse one when a model wrote the tests in order to maximise it.
- Example targets
- Defects4J-style real-fault sets; a real project's regression suite.
- Read
-
- Do Coverage and Mutation Scores of LLM-Generated Test Suites Correlate With Their Effectiveness? (Replicability Study)ISSTA 2026
- Less is More: On the Importance of Data Quality for Unit Test GenerationFSE 2025
- Mutation-Guided LLM-based Test Generation at MetaFSE 2025
- HITS: High-coverage LLM-based Unit Test Generation via Method SlicingASE 2024
C · Static analysis: dataflow, pointers, abstract interpretation Topics 3–4 · L17–L19, L21–L24
C1Make a pointer analysis scale
- Problem
- The analysis is too slow to finish on real code Precise pointer analysis is cubic. On a large program you either give up precision or find a way to spend it only where it pays.
- Example targets
- LLVM itself, Chromium components, SQLite, Redis.
- Read
-
- GPU-Accelerated Flow-Sensitive Pointer Analysis for C/C++ ProgramsFSE 2026
- JavaScript Pointer Analysis with Adaptive Heap AbstractionFSE 2026
- Formally Verified Binary-level Pointer AnalysisICSE 2025
- Steensgaard. Points-to Analysis in Almost Linear TimePOPL 1996
- Context Debloating for Object-Sensitive Pointer AnalysisASE 2021
- Module-Aware Context Sensitive Pointer AnalysisICSE 2025
C2Hunt the siblings of a known CVE with typestate analysis
- Problem
- A fixed bug tells you what to look for elsewhere A patch shows one wrong way to use an API. Turn it into a rule, then check whether the rest of the codebase breaks the same rule.
- Example targets
- OpenSSL, the Linux kernel's driver subsystems, FFmpeg — anywhere a CVE class recurs.
- Read
-
- VulPA: Detecting Semantically Recurring Vulnerabilities with Multi-Object Typestate AnalysisFSE 2025
- Accurate Identification of the Vulnerability-Introducing Commit based on Differential Analysis of Patching PatternsNDSS 2026
- Mystique: Automated Vulnerability Patch Porting with Semantic and Syntactic-Enhanced LLMFSE 2025
- Accurate and Efficient Recurring Vulnerability Detection for IoT FirmwareCCS 2024
- Recurring Vulnerability Detection: How Far Are We?FSE 2025
- Similar but Patched Code Considered HarmfulICSE 2025
C3Why do developers suppress static-analysis warnings?
- Problem
- Developers switch warnings off, sometimes wrongly Every large codebase is full of suppressions. Some of them hide a warning that was right.
- Example targets
- Chromium, LLVM, the Linux kernel — large, long-lived, heavily annotated.
- Read
-
- An Empirical Study of Suppressed Static Analysis WarningsFSE 2025
- Reducing False Positives in Static Bug Detection with LLMs: An Empirical Study in IndustryICSE 2026 · SEIP track
- When in Doubt Throw It out: Building on Confident Learning for Vulnerability DetectionICSE 2025
- FuzzSlice: Pruning False Positives in Static Analysis Warnings through Function-Level FuzzingICSE 2024
C4Neuro-symbolic static analysis
- Problem
- What should an analysis do when it cannot decide? A sound analysis gives up and reports everything. Use a model at exactly that point — and say plainly which guarantee you gave up.
- Example targets
- Smart contracts (small, high stakes) or C/C++ with indirect calls.
- Read
D · Constraint-based analysis & type systems Topics 5–6 · L25–L30, L32–L33
D1Write the analysis as rules, not as code
- Problem
- Writing an analysis as rules instead of as code In Datalog you state the rules and the engine works out the answer. Whether it still scales on real code is the open question.
- Example targets
- A large Java application (Doop-style), a C/C++ project via LLVM, or change-impact analysis across a microservice repository.
- Read
-
- Abeysinghe, Rompf. Flan: An Expressive and Efficient Datalog Compiler for Program AnalysisPOPL 2024
- Antoniadis et al. Universal Scalability in Declarative Program AnalysisarXiv 2025 · 2503.05945
- Gilray et al. Datalog with First-Class FactsarXiv 2024 · 2411.14330
- Datalog-Based Language-Agnostic Change Impact Analysis for MicroservicesICSE 2025
- Whaley, Lam. Cloning-Based Context-Sensitive Pointer Alias Analysis Using BDDsPLDI 2004
- Program Repair Guided by Datalog-Defined Static AnalysisFSE 2023
- Incremental Program Analysis in the Wild: An Empirical Study on Real-World Program ChangesASE 2025
D2Types as lightweight specifications: nullability and lifetimes
- Problem
- Annotations are missing, or they are lying Types like
@Nullableare checked on every build. Infer the missing ones, then look hard at any that disagree with the code. - Example targets
- A large unannotated Java codebase; Rust crates with hand-written lifetime annotations; a JVM application for the taint-tracking variant.
- Read
-
- A New Approach to Evaluating Nullability Inference ToolsFSE 2025
- Yuga: Automatically Detecting Lifetime Annotation Bugs in the Rust LanguageTSE 2024
- Dynamic Taint Tracking for Modern Java Virtual MachinesFSE 2025
- GenC2Rust: Towards Generating Generic Rust Code from CICSE 2025
- Practical Inference of Nullability TypesFSE 2023
E · Concurrency & data races Cross-cutting · no lecture
E1Lightweight static data-race detection for C
- Problem
- A dynamic detector only sees the schedule it happened to run A static detector sees every schedule and reports far too many. Cutting the false alarms is the contribution.
- Example targets
- Linux kernel subsystems, Redis, PostgreSQL background workers.
- Read
-
- Dacík, Vojnar. RacerF: Lightweight Static Data Race Detection for C CodearXiv 2025 · 2502.04905
- Reduce Dependence for Sound Concurrency Bug PredictionICSE 2025
- ROSCallBaX: Statically Detecting Inconsistencies In Callback Function Setup of Robotic SystemsFSE 2025
- Context-Sensitive and Directional Concurrency Fuzzing for Data-Race DetectionNDSS 2022
- SegFuzz: Segmentizing Thread Interleaving to Discover Kernel Concurrency Bugs through FuzzingS&P 2023
- A Comprehensive Study of Concurrency Bugs in the Linux KernelICSE 2026
E2Concurrency stress testing and litmus tests for a real runtime
- Problem
- The memory model already tells you which outcomes are legal So the oracle is free: observe an outcome the model forbids and you have found a compiler or runtime bug.
- Example targets
- JVM/Kotlin, Go's runtime, Rust's atomics, a JS engine's SharedArrayBuffer.
- Read
E3Slicing multi-threaded programs so the analysis fits
- Problem
- Cut the program down until the analysis finishes Whole-program concurrency analysis does not scale. Slice away everything that cannot affect the question you asked.
- Example targets
- Any large multithreaded C/C++ or Java system.
- Read
F · Symbolic execution & test generation Topics 7–8 · L34–L36, L38–L40
F1Symbolic execution for WebAssembly
- Problem
- WebAssembly is small enough to reason about symbolically Unlike native x86. The question worth asking is what a module can do to the host that runs it.
- Example targets
- Browser-embedded Wasm, wasmtime, WasmEdge, wasm2c toolchains.
- Read
-
- SymWeb: Feedback-Driven Context Exploration and Context-Aware Symbolic Execution for Browser-Embedded WebAssembly Vulnerability DetectionISSTA 2026 · details
- Execution-Aware Program Reduction for WebAssembly via Record and ReplayASE 2025
- Finding Bugs in WebAssembly Interface Type Binding GeneratorsASE 2025
- SeeWasm: An Efficient and Fully-Functional Symbolic Execution Engine for WebAssembly BinariesISSTA 2024
- WASMaker: Differential Testing of WebAssembly Runtimes via Semantic-Aware Binary GenerationISSTA 2024
F2Getting past the checks that stop symbolic execution
- Problem
- Symbolic execution gets stuck at checks it cannot solve Hashes, magic constants, opaque predicates. Let a model guess concrete values; the engine still checks them, so soundness stays put.
- Example targets
- Obfuscated binaries, malware unpackers, license checks, CTF-style crackmes for the benchmark.
- Read
-
- Defusing Logic Bombs in Symbolic Execution with LLM-Generated Ghost CodeISSTA 2026
- Large Language Models for Opaque Predicate ResolutionFSE 2026
- Solving String Split Constraints via Structural RelaxationISSTA 2026
- Empc: Effective Path Prioritization for Symbolic Execution with Path CoverS&P 2025
- Concrete Constraint Guided Symbolic ExecutionICSE 2024
F3Static analysis as a guide for assertion synthesis
- Problem
- A generated test that only checks for crashes proves little Work out what ought to be true at a program point, then write that down as an assertion.
- Example targets
- A Python or Java library with a weak existing suite.
- Read
-
- STARS: Static Analysis-guided Assertion Synthesis Using Large Language ModelsISSTA 2026
- CoverUp: Effective High Coverage Test Generation for PythonFSE 2025
- Flanagan, Leino. Houdini, an Annotation Assistant for ESC/JavaFME 2001
- TOGLL: Correct and Strong Test Oracle Generation with LLMsICSE 2025
- TOGA: A Neural Method for Test Oracle GenerationICSE 2022
G · LLM-assisted program analysis Topic 9 · L41
G1Multi-agent triage of static-analysis alarms
- Problem
- Scanners report far too much to be usable Filtering helps only if you can show what the filter threw away. One that quietly drops real bugs is worse than no filter.
- Example targets
- Output of CodeQL, Infer or clang-analyzer on a large C/Java project.
- Read
-
- Sifting the Noise: A Comparative Study of LLM Agents in Vulnerability False Positive FilteringISSTA 2026 · arXiv 2601.22952
- QASecClaw: A Multi-Agent LLM Approach for False Positive Reduction in Static Application Security TestingarXiv 2026 · 2605.01885
- SecureReviewer: Enhancing Large Language Models for Secure Code Review through Secure-Aware Fine-TuningICSE 2026
- FuzzSlice: Pruning False Positives in Static Analysis Warnings through Function-Level FuzzingICSE 2024
G2An agent with a fuzzer in the loop
- Problem
- Models guess well but prove nothing Fuzzers are the other way round. Let the model propose and the sanitizer decide — then compare at equal compute.
- Example targets
- Firmware images, IoT stacks, or a conventional C library with a large API surface.
- Read
-
- FirmAgent: Leveraging Fuzzing to Assist LLM Agents with IoT Firmware Vulnerability DiscoveryNDSS 2026
- Let the Trial Begin: A Mock-Court Approach to Vulnerability Detection using LLM-Based AgentsICSE 2026
- LLAMAFUZZ: Large Language Model Enhanced Greybox FuzzingarXiv 2024 · 2406.07714
- An LLM-Driven Fuzzing Framework for Detecting Logic Instruction Bugs in PLCsNDSS 2026
- Large Language Model guided Protocol FuzzingNDSS 2024
- LLMIF: Augmented Large Language Model for Fuzzing IoT DevicesS&P 2024
G3Making an agent explain itself symbolically
- Problem
- An agent saying “fixed it” is not evidence Make it hand you something you can check yourself: a path condition, an invariant, a failing input.
- Example targets
- Real issue-fix pairs from a large repository.
- Read
-
- AutoCodeSherpa: Symbolic Explanations in AI Coding AgentsISSTA 2026
- Evaluating and Improving Automated Repository-Level Rust Issue Resolution with LLM-based AgentsICSE 2026
- Teaching AI the “Why” and “How” of Software Vulnerability FixesFSE 2025
- RepairAgent: An Autonomous, LLM-Based Agent for Program RepairICSE 2025
G4Hallucinated dependencies as a defensive problem
- Problem
- Models invent package names that do not exist Anyone can register the invented name. That turns a mistake into an attack, and the defence is yours to build.
- Example targets
- PyPI, npm, crates.io namespaces.
- Read
G5A program knowledge graph for a coding agent
- Problem
- An agent reads files; it does not understand the program Call graphs, type hierarchies and data flow are exactly what a compiler front end already computes. Build that graph, serve it to the agent as a tool, and measure whether grounded answers beat retrieved text.
- Example targets
- LLVM or Clang libtooling for C/C++;
tree-sitterplus a call-graph pass for Python or Java; any repository large enough that the whole of it does not fit in a context window. - Read
-
- GraphCoder: Enhancing Repository-Level Code Completion via Coarse-to-fine Retrieval Based on Code Context GraphASE 2024
- RepoScope: Leveraging Call Chain-Aware Multi-View Context for Repository-Level Code GenerationICSE 2026
- RLCoder: Reinforcement Learning for Repository-Level Code CompletionICSE 2025
- One Size Does Not Fit All: Revisiting Code Context Engineering for Repository-Level Code GenerationFSE 2026
- RepoFuse: A Dual-Context Approach to Repository-Level Code Completion at Industrial ScaleFSE 2026
- CKGFuzzer: LLM-Based Fuzz Driver Generation Enhanced By Code Knowledge GraphICSE 2025 · companion
H · Supply-chain security Cross-cutting · no lecture
H1Catching a malicious package before it is installed
- Problem
- A dependency runs code on your machine before you ever call it An install script is code, and almost nobody reads it. Static and dynamic analysis of package contents is the defence; the hard part is precision, because the registry is mostly benign.
- Example targets
- npm and PyPI package tarballs; install hooks and post-install scripts; a malicious-package corpus such as Backstabber’s Knife Collection for ground truth.
- Read
-
- Practical Automated Detection of Malicious npm PackagesICSE 2022
- 1+1>2: Integrating Deep Code Behaviors with Metadata Features for Malicious PyPI Package DetectionASE 2024
- An Empirical Study of Malicious Code in PyPI EcosystemASE 2023
- ConfuGuard: Using Metadata to Detect Active and Stealthy Package Confusion Attacks Accurately and at ScaleICSE 2026
- Containing Malicious Package Updates in npm with a Lightweight Permission SystemICSE 2021
H2Does a vulnerability deep in the dependency tree actually reach you?
- Problem
- Most dependency alerts are about code you never call A CVE in a transitive dependency only matters if some path in your program reaches the vulnerable function. That is a reachability question, and reachability is what this course is about.
- Example targets
- npm or Maven dependency trees; an SBOM for a real application; GitHub advisory data as the vulnerability source.
- Read
-
- Demystifying the Vulnerability Propagation and Its Evolution via Dependency Trees in the npm EcosystemICSE 2022
- Propagation-Based Vulnerability Impact Assessment for Software Supply ChainsASE 2025
- What Are Weak Links in the npm Supply Chain?ICSE 2022 · SEIP
- Towards Predicting Multi-Vulnerability Attack Chains in Software Supply Chains from Software Bills of MaterialsFSE 2026
- Silent Vulnerable Dependency Alert Prediction with Vulnerability Key Aspect ExplanationICSE 2023