CSC 635 Software Verification

Official Course Description

The development of modern software systems, like all engineered products, requires a rigorous and systematic testing phase before they can be considered suitable for deployment. In software engineering, however, testing occupies an especially prominent role, often constituting one of the largest investments of time, labor, and resources within the entire development lifecycle. The scale, heterogeneity, and continual evolution of contemporary software make the existence of defects not merely possible but fundamentally unavoidable. Engineers must therefore employ a spectrum of verification, validation, and testing strategies to identify, isolate, and mitigate these defects within the practical constraints of budget, schedule, and expected system reliability.

Software is ultimately a sequence of logical instructions that governs the temporal evolution of a computing system, transitioning from inputs through complex intermediate states to produce outputs. When faults exist, these instructions may drive the system through unintended states, yielding incorrect or even unsafe behavior. Importantly, the correctness of a software product cannot be guaranteed solely through abstract reasoning or logical consistency. True validation arises only through the interaction between the software and the underlying physical system on which it executes. This interaction is inherently unpredictable due to three persistent challenges: (1) intermediate computational states are only partially observable; (2) the space of possible inputs is effectively unbounded; and (3) operating environments introduce variability and disturbances that are difficult, if not impossible, to model completely.

This course examines the theoretical underpinnings and practical realities of ensuring software quality under these constraints. Students will explore the principles of verification and validation (V&V), the nature of software faults and failures, and the strategies used to detect, prevent, and reason about defects. Emphasis is placed on both static and dynamic testing techniques, test planning, inspections, debugging methods, and the evaluation of software behavior under realistic operational conditions. Case studies drawn from real-world failures and industry practices will illustrate how testing contributes not only to functional correctness but also to reliability, safety, and long-term maintainability.

Syllabus

Download syllabus (PDF)

Time and Place

Time and place details will be posted here.

Schedule

Week Topic Class 1 Class 2 Resources
1 Introduction to Software Engineering & Software Testing (Zoom) Mon: 01/12
2 Rev. Martin Luther King, Jr., Day: Holiday; No Class Mon: 01/19 - No Class
3 Foundations: Software Quality, Faults/Errors/Failures (Zoom) Mon: 01/26
4 Verification vs. Validation; V-Model (Onsite) Mon: 02/02
5
  • Static Testing: Inspections, Reviews, Checklists (Onsite)
  • Administrative Monday: Static Analysis Tools (Linting, Control Flow, Data Use) (Zoom)
Mon: 02/09 Tue: 02/10
6 Dynamic Testing: Test Levels (Unit, Integration, System, Acceptance) (Zoom) Mon: 02/16
7 Black-Box and White-Box Test Design Techniques (Onsite) Mon: 02/23
8 Test Case Design: Equivalence Partitioning & Boundary Value Analysis (Zoom) Mon: 03/02
9 Spring Break: No Class Mon: 03/09 - No Class
10 Test Planning: Requirements Traceability, Documentation (Zoom) Mon: 03/16
11 Debugging vs Testing: Strategies & Failure Analysis (Onsite) Mon: 03/23
12 Software Testability & Non-Functional Testing (Reliability, Performance) (Onsite) Mon: 03/30
13 Easter Monday: No Class Mon: 04/06 - No Class
14 Advanced Topics: IV&V, Cleanroom, Formal Methods (Overview) (Onsite) Mon: 04/13
15 Industry Practices: CI/CD Testing, Automated Testing Frameworks (Zoom) Mon: 04/20
16 Review Session & Applied Case Study Workshop (Onsite) Mon: 04/27
17 Take-Home Exam: Release & due dates will be announced during the Final Exam Period May 5-9 - Final

Additional Resources

Additional resources will be posted here.