This course introduces the basic concepts and techniques in software testing and bug finding. The first part of the course introduces testing theory and practical considerations. The second part introduces recently developed techniques for bug finding and improving software reliability. Learning the techniques in this course will likely increase the productivity of students as both developers and testers and introduce them to some research in software testing.

Course Information

Class meetings

TTh 2:00 PM-3:15 PM


Students should be comfortable in some programming language and have a good idea of basic data structures and algorithms

Required text

[ISBN/0521880386] Papers linked in schedule


30%Assignment(s) ((HW1 7% + HW2 7% + HW3 7% + CS4610 presentation OR CS563 10 of 12 reviews 9%))
20%Midterm Examination (30% for CS4610 students)
20%Project (only for CS563 students)
30%Final Examination (40% for CS4610 students)

Tentative Schedule

Topic 1: Overview of software testing

Introduction and Overview

Why test software

Model-driven test design

Test automation

Criteria based test design

Topic 1: Graph coverage

Overview of graph coverage

Graph coverage for source code

Graph coverage for design elements

Graph coverage for specifications and use cases

Topic 1: Logic coverage

Overview of logic coverage

Logic coverage of source code

Logic coverage of specifications and FSM

Topic 1: Input space partitioning and mutation testing

Input space partitioning

Mutation testing concepts

Mutation testing for source code

Topic 1: Symbolic Execution





Topic 1: Model Checking




Extra reading: author slides


Extra reading: lazy abstraction slides

Topic 1: Test Generation



CS563 project screencast display and Q/A