CS3250 Software Testing

Please find our course syllabus and policies here

Fall 2026 — Schedule (Section 2)

Tentative class schedule (may be updated without prior notice)
All times on this page are in U.S. Eastern Time
Section 2 meets Tuesdays and Thursdays. Lecture content is adapted from Section 1. Assignment due dates remain unchanged; POTD due dates are adjusted to follow the corresponding Section 2 lecture. All listed assignment and POTD deadlines are at 1:00pm U.S. Eastern Time.
Note: AO-Ch x means chapter x in Ammann and Offutt text book
K-Ch x means chapter x in Koskela's Test Driven (This is recommended reading. You don't have to buy the book. Free trial available.)
Meet Date Topics and Handouts Readings Assignments Quizzes Activities / POTDs
Course overview and intro to software testing
1 Tue 08/25
Get Familiar with Our Course,
Let's Set Expectation

A bit about this course and how we shall work together

      DIY: complete the Let's start form

(please complete it by 4-Sep-2026, 1:00pm)

Activity: Get to know you

(no submission)

Activity: Check-in

(no submission)

  Thu 08/27 No class — instructor traveling
2 Tue 09/01
     

Activity: How do you test?

(no submission)

Activity: Rubber Duck Debugging

(no submission)

Test automation and test framework
DIY: Set up test environment (JUnit)

Please try to set up the test environment (JUnit) before class. The class discussion will be more effective and enjoyable if your environment is readily available.

https://junit.org/junit5/

You are recommended to use Eclipse; JUnit 5 comes with it. (Note: You may use any Java IDE or command line, and set up / set class path JUnit)

There are a number of good tutorials on how to set up (or use) JUnit 5, such as https://blog.codefx.org/libraries/junit-5-setup/ and https://www.eclipse.org/community/

If you do not already have Java on your machine, download and install it. JUnit 5 requires Java 8 or higher.

3 Thu 09/03
Part 2 (continued)
Intro to Software Testing

What is Software Testing? What are differences between testing and debugging? What are some testing categories? How mature is your testing?

AO-Ch1,
AO-Ch2.1
AO-Ch3

Flaky tests

An Empirical Analysis of Blind Tests

(recommended reading)

     
4 Tue 09/08
Add deadline 09/08
    Activity: Get started with JUnit

(no submission)
(require Java environment and JUnit)
[sample solution]

DIY: Set up test environment (Selenium)

Please try to set up the test environment (Selenium) before class. Class discussion will be more effective and enjoyable if your environment is readily available.

https://www.selenium.dev/

There are a number of good tutorials on how to set up and use Selenium.

You may follow Get started with Selenium to set up your test environment.

How do you know if your test environment works?
Try running the provided test template. You should see a web browser open and close. The test should pass.

Note: the templates were created for Mac. For Windows users, please verify the paths to your browser driver and attach .exe to your drivers


Chrome driver installation with Selenium

Thanks to Andrea Jerausek, a CS 3250 TA, for creating the installation tutorial (for Windows)


JUnit/Selenium setup and troubleshooting

Thanks to all the CS 3250 teaching teams for sharing their experience. Special thanks to Jonah Kim for creating detailed instructions on the installation.

If you are familiar with Gradle, Maven, Ant, or any dependency management tools/frameworks, and prefer to use them to set up your Selenium, please feel free to use them instead of manually setting up Selenium. We choose not to introduce them in class to minimize additional tools/frameworks/software that you need to deal with.

5 Thu 09/10
Selenium

One of the most commonly used test automation frameworks for web apps

    Activity (Junit): SUT: Calculator.java
CalculatorTest_template.java

(no submission)
(require Java environment and JUnit)
[sample solution]

Additional practice (Junit): JUnit – Hangman

(no submission)
(require Java environment and JUnit)
[sample solution]

Activity (Selenium): Selenium – Compute Project Grade

(no submission)
(require Java environment, JUnit, Selenium)
[sample solution]

Test design, generation, execution, evaluation and analysis, and improvement
6 Tue 09/15
Selenium

Let's explore more Selenium features

AO-Ch1,
AO-Ch2.1
    POTD 1: JUnit and Selenium
(Due 09/16, 1:00pm)

(require Java environment, JUnit, Selenium)

7 Thu 09/17
AO-Ch1,
AO-Ch2.1
AO-Ch2
    Activity: RIPR (findLast)

(no submission)
[sample solution]

More practice 1: RIPR

(no submission) 
[sample solution]

More practice 2: RIPR (countPositive)

(no submission)
[sample solution]

Activity: Model for testing

(no submission)

  Mon 09/21 Assignment deadline   Assignment 1: RIPR & test automation (due 09/21, 1:00pm)    
8 Tue 09/22
Part 1
Coverage-based Test Design in Action

Let's put the concept into action — invent our own coverage criterion, derive tests to satisfy the criterion, execute and evaluate our tests, and analyze the coverage level.

AO-Ch.5
    Activity: Coverage-based test design

(no submission)

Input Space Partitioning (ISP) Testing
9 Thu 09/24
Part 2 (continued)
Coverage-based Test Design in Action

Let's put the concept into action — invent our own coverage criterion, derive tests to satisfy the criterion, execute and evaluate our tests, and analyze the coverage level.

AO-Ch.5
AO-Ch6.1

Who said ISP can't be fun!!

ISP–Industrial Study (Freddie Mac)

(This is an example of how the concepts have been applied to industry; recommended reading)

 
Quiz 1 guide (RIPR & test automation)
 
10 Tue 09/29
AO-Ch6.2, 6.3
    POTD 2: ISP
(Due 09/30, 1:00pm)
Graph-based Testing
11 Thu 10/01
Part 2 (continued)
General Ideas: Web App Testing

(Read on your own; we'll discuss if needed so that we have more time to work on the activity)

ISP: Apply to Web Apps

Can we test web apps the same way we test traditional software? How should we test? What are web-specific features that must be taken into account when designing tests? Here is one way to test web apps systematically.

Graph-based Testing
Graph: Structural Coverage Criteria
  • Node
  • Edge
  • Edge-Pair

One of the most commonly used coverage criteria

AO-Ch7.1
AO-Ch7.2
    POTD 3: Structural graph coverage
(Due 10/02, 1:00pm)
  Tue 10/06 Fall reading days, no class (refer to UVA Academic Calendar)
  Wed 10/07 Assignment deadline   Assignment 2: ISP & test automation (due 10/07, 1:00pm)

(Note: This assignment may be time-consuming. Please plan and manage your time properly)

   
12 Thu 10/08
Graph: Structural Coverage Criteria
  • Complete Path
  • Prime Path

How should we handle loops in graphs? Execute loop once, 0 time, many times?

Control Flow Graph for source code

How do we create graph representation of the software under test?

Examples: Improper CFGs

Here are examples of improper/incorrect CFGs for program source code; these improperly/incorrectly constructed CFGs will *not* receive credit for the quiz, homework, and the final exam.

AO-Ch7.2
AO-Ch7.3.1
 
Quiz 2 guide (Coverage-based test design & ISP)
 
13 Tue 10/13
Drop deadline 10/13
Structural Graph Coverage: Apply to Source Code

Putting it all together and designing unit-level tests to satisfy structural graph coverage criteria. Let's derive test requirements, analyze test paths, and identify test cases corresponding to the execution flows of those paths.

Part 1
Graph: Data Flow Coverage Criteria
  • All-Defs
  • All-Uses
  • All-DU-Paths

One of the most important concepts for software analysis. How do we analyze data flow of a software artifact and integrate them into a graph model? How do we design tests to ensure that the program states / values are created and used correctly?

AO-Ch7.3.1
AO-Ch7.2
    POTD 4: Graph for source
(Due 10/14, 1:00pm)
14 Thu 10/15
Part 2 (continued)
Graph: Data Flow Coverage Criteria
  • All-Defs
  • All-Uses
  • All-DU-Paths

One of the most important concepts for software analysis. How do we analyze data flow of a software artifact and integrate them into a graph model? How do we design tests to ensure that the program states / values are created and used correctly?

Data flow Coverage: Apply to Source Code

Putting it all together and designing unit-level tests that satisfy data-flow coverage criteria. Let's derive def-clear du-paths (test requirements), analyze test paths, and identify test cases for those test paths to verify that the program states/values are created and used correctly.

AO-Ch7.2
AO-Ch7.3.2
    POTD 5: Data flow for source
(Due 10/16, 1:00pm)
  Mon 10/19 Assignment deadline   Assignment 3: Structural graph coverage & test automation (due 10/19, 1:00pm)

(Note: This assignment may be time-consuming. Please plan and manage your time properly)

   
Logic-based Testing
15 Tue 10/20
Withdraw deadline 10/20
Graph Coverage for Design Elements

Software usually consists of multiple components (or modules or subsystems) and there are data flow couplings between these components. How do we design tests beyond unit-level testing?

Part 1
Logic-based Testing
Logic: Coverage Criteria
  • Predicate
  • Clause
  • Combinatorial

How should we design tests based on semantic of the logic expressions? Will tests designed for equivalent predicates always be the same?

AO-Ch7.4
AO-Ch7.5
AO-Ch8.1
     
16 Thu 10/22
Part 2 (continued)
Logic-based Testing
Logic: Coverage Criteria
  • Predicate
  • Clause
  • Combinatorial

How should we design tests based on semantic of the logic expressions? Will tests designed for equivalent predicates always be the same?

Determination

A clause determines the value of its predicate when the other clauses have certain values. How do we know what values the other clauses should have? Under which condition(s) will the clause determine the predicate?

AO-Ch8.1
 
Quiz 3 guide (Graph: structural & data flow)
 
  Mon 10/26 Assignment deadline   Assignment 4: Data flow graph coverage & test automation (due 10/26, 1:00pm)

(Note: This assignment may be time-consuming. Please plan and manage your time properly)

   
17 Tue 10/27
Logic: Active Clause Coverage Criteria (ACC)
  • GACC
  • RACC
  • CACC

When some aspects are supposed to impact the behavior of a software under test, how should we design tests to check if they actually do impact?

ACC – A form of "Modified Condition Decision Coverage" (MCDC), required by the US Federal Aviation Administration (FAA) for safety critical avionics software

Part 1
Logic: Apply to Source Code

How do we identify test requirements according to logical expressions found in program source code? How should we derive tests to ensure proper evaluation of the expressions? How are reachability and controllability issues handled when applying logic coverage criteria?

AO-Ch8.1
AO-Ch8.3
    POTD 6: ACC
(Due 10/28, 1:00pm)
18 Thu 10/29
Part 2 (continued)
Logic: Apply to Source Code

How do we identify test requirements according to logical expressions found in program source code? How should we derive tests to ensure proper evaluation of the expressions? How are reachability and controllability issues handled when applying logic coverage criteria?

Logic: Apply to Source Code

Can we reuse tests when a software is refactored (or gets evolved)? How do we analyze? How much can we reuse? Some ideas toward regression testing.

Additional practice (condensed)
Logic: Apply to Source Code

More practice with logic-based testing for source code

AO-Ch8.3
    POTD 7: Logic for source
(Due 10/30, 1:00pm)
  Tue 11/03 No class
Syntax-based Testing
19 Thu 11/05
Syntax-based testing:
  • Grammar-based mutation

How to design tests based on the syntax of the software artifacts. How do we design valid and invalid test inputs using regular expressions and context free grammars?

Syntax: Apply to input space

Let's mutate the software artifact, apply grammar-based mutation testing to some simple real-world scenarios

AO-Ch9.1
 
Quiz 4 guide (Logic)
 
  Mon 11/09 Assignment deadline   Assignment 5: Logic & test automation (due 11/09, 1:00pm)    
20 Tue 11/10
Syntax-based testing:
  • Program-based mutation

Why do we need variations of the software under tests? Why mimic developers' common mistakes or difficult to detect faults. How to mimic the mistakes and encourage common test heuristics.

Part 1
Syntax: Apply to Source Code

Though mutation testing is the strongest coverage criterion, it is very expensive. What can we do to reduce the testing cost? How is it used in practice? Let's mutate the software artifact to create effective test requirements

AO-Ch9.2, 9.3
    POTD 8: Program mutation
(Due 11/11, 1:00pm)
21 Thu 11/12
Part 2 (continued)
Syntax: Apply to Source Code

Though mutation testing is the strongest coverage criterion, it is very expensive. What can we do to reduce the testing cost? How is it used in practice? Let's mutate the software artifact to create effective test requirements

Syntax: Apply to Source Code

More practice on mutation testing.

AO-Ch9.2, 9.3
    POTD 9: Program mutation
(Due 11/13, 1:00pm)
Coverage-based test design wrap-up and other aspects in software testing
22 Tue 11/17
Putting it all together

Which coverage criteria to use? How to decide? What to achieve? Pros and cons?

Part 1
Putting it all together

More practice and analysis

       
Testing as central activity, TDD
23 Thu 11/19
Part 2 (continued)
Putting it all together

More practice and analysis

Test-Driven Development (TDD)

Users always change their mind and software continues to evolve. How do we use testing as central activity to embrace evolutionary design? How do we use test harnesses as guideline in software development?

AO-Ch4,
K-Ch1 to Ch4,
TDD (wikipedia)
 
Quiz 5 guide (Syntax)
 
  Fri 11/20 Assignment deadline   Assignment 6: Syntax & test automation (due 11/20, 1:00pm)    
DIY: Set up test environment

Please try to set up the test environment before class. Please try to have your Selenium and web server working before next class. One free and easy set up web server that we will use in class is XAMPP. However, you may use any web server of your choice. If you choose to use another web server of your choice — Please make sure that you know how to deploy and access your web resources). Class discussion will be more effective and enjoyable if your environment is readily available.

24 Tue 11/24
TDD

More TDD practice. How do we use tests to guide the refactoring? We try to be productive with TDD, but when not to use TDD.

TDD web app

We have used TDD to build a standalone Java program. How do we use TDD to build a web app?

K-Ch1 to Ch4
    POTD 10: TDD web app
(Due 11/25, 1:00pm)

(require: Selenium, JUnit, Java environment, web server)

  Thu 11/26 Thanksgiving recess, no class (refer to UVA Academic Calendar)
25 Tue 12/01
Part 1
Test Doubles

What do we do if some parts of the software are unavailable but we need them to test another part? Using stubs, fakes, and mocks to simplify testing. What to mock, when to mock, and when not to mock.

       
Course wrap-up
26 Thu 12/03
Part 2 (continued)
Test Doubles

What do we do if some parts of the software are unavailable but we need them to test another part? Using stubs, fakes, and mocks to simplify testing. What to mock, when to mock, and when not to mock.

Bypass testing

Although client-side and server-side input validations can be used as double safeguard to prevent unacceptable users' entries, users can still bypass the validations. How should we design tests targeting the validations and web-specific constraints?

       
27 Tue 12/08
Course wrap-up and final exam guide

Q&A. No lecture or new topic discussion.

Last minutes Q&A, Office hours on demand

No lecture or new topic discussion; feel free to drop by to chat or discuss anything.

       
FE Tu 12/12 Final Exam: Saturday, December 12, 2026 9:00AM-12:00PM Room: TBD
Please refer to Course wrap-up and final exam guide for time and detail
(please refer to the university final exam schedule)

Copyright © 2026 Upsorn Praphamontripong
Released under the Creative Commons License CC-BY-NC-SA 4.0 license.
Last updated 2026-08-27
  Top