| Date | Meet | Topics and Handouts | Readings | Learning portfolio | Activities / POTDs |
|---|---|---|---|---|---|
| Course overview and intro to software testing | |||||
| Mon 05/18
Add deadline 05/17 |
1 | 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 20-May-2026, 11:59pm) |
||
| 2 | Why Test?
Who cares? So what? Intro to Software TestingWhat 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 Some examples of why CWE Top 25 Most Dangerous Software Weaknesses |
What could go wrong?
(tldraw)
Activity: How do you test?
(no submission)
|
||
| Test automation and test frameworks | |||||
|
DIY: Set up test environment (JUnit)
Please try to set up the test environment (JUnit) before next 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. |
|||||
| Tue 05/19 | 3 | Test Automation
How do we test software automatically? What makes test automation hard? What are characteristics of good tests? |
AO-Ch3
Flaky tests |
Activity:
Test automation − GenericStack
(no submission)
|
|
| 4 | JUnit
One of the most commonly used test automation frameworks for Java |
JUnit 5 user guide | SUT: Calculator.java
CalculatorTest.java [sample solution]
(no submission)
Additional practice: JUnit – Hangman [sample solution]
(no submission)
POTD 1: JUnit (Due 05/19, 11:59pm EST) [sample solution] (require Java environment and JUnit) |
||
|
DIY: Set up test environment (Selenium)
Please try to set up the test environment (Selenium) before next 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?
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 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. |
|||||
| Wed 05/20 | 5 | Selenium
One of the most commonly used test automation frameworks for web apps |
POTD 2: Selenium
(Due 05/20, 11:59pm EST)
(this is an open-ended activity; no sample solution provided)
|
||
| 6 | More Selenium practice
Let's explore more features & have more experience testing web app |
Selenium documentation | |||
| Testing as central activity, TDD | |||||
| Thu 05/21 | 7 | Shift Testing Left,
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) |
Activity: Get started with TDD
(no submission)
|
|
| 8 | 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. |
K-Ch1 to Ch4 | POTD 3: TDD Tic-Tac-Toe
(Due 05/21, 11:59pm EST)
(this is an open-ended activity; no sample solution provided)
|
||
|
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. |
|||||
| Fri 05/22 | 9 |
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 | Activity: TDD web app
[sample solution]
(no submission)
Q&A: TDD learning module (if time allows) |
|
| 10 | 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. Please read on your own and bring questions to class. |
||||
| Mon 05/25: Memorial Day, no class (refer to UVA Summer Session Calendar) | |||||
| Test design, generation, execution, evaluation and analysis, and improvement | |||||
| Tue 05/26 | 11 | Faults−Errors−Failures,
and RIPR model
What aspects must be analyzed when designing tests and how do we analyze them? |
AO-Ch1, AO-Ch2.1 |
Learning portfolio:
TDD-module
due
05/26, 10:30am EST
(before class)
[05/28] TDD-module grades released. Please refer to Canvas/Announcement on 05/28. |
Activity: RIPR (findLast)
[sample solution] (no submission) POTD 4: RIPR[sample solution] (Due 05/26, 11:59pm EST) |
| 12 | Model Driven Test Design (MDTD)
How does testing fit in the software development process? What are testing activities? How do we work at a higher level of abstraction, using mathematical structures to design tests? |
AO-Ch2 | |||
| Input Space Partitioning (ISP) Testing | |||||
| Wed 05/27 | 13 | Coverage-based Test Design
How do we know if we have tested enough? Why coverage criteria? How should we design tests? Why don't we need all possible tests? How to design tests using coverage criteria? |
AO-Ch.5 | Activity:
Coverage-based test design
[sample solution] (no submission) |
|
| 14 | Input Space Partition (ISP) Testing
How do we design tests without having source code (of a program under test)? Is ISP black-box testing? |
AO-Ch6.1
An Industrial Study of Applying Input Space Partitioning to Test Financial Calculation Engines |
POTD 5: IDM
[sample solution] (Due 05/27, 11:59pm EST) |
||
| Thur 05/28 | 15 | ISP Coverage Criteria
Which ISP coverage criterion should we use? Why? How do we apply the criterion to derive tests? How many tests do we need? |
AO-Ch6.2, 6.3 | Activity: ISP coverage
[sample solution] (no submission) |
|
| 16 | Apply ISP to software artifacts
How do we apply ISP to design tests for traditional software? How do we ensure IDMs are appropriate to the domain application of the software under test? How to determine the quality of the tests we designed? What is the coverage level? Are there redundant tests? Are there infeasible tests? |
POTD 6: ISP — GenericStack
[sample solution] (Due 05/28, 11:59pm EST) |
|||
| Fri 05/29
Drop deadline 05/29 |
17 | Apply ISP 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. |
General Ideas for Web App Testing | Activity:
Web app testing with ISP
[sample solution, Selenium tests] (no submission) |
|
| 18 | Apply ISP to Web Apps
(wrap-up)
Check-in #1,
|
||||
| Graph-based Testing | |||||
| Mon 06/01 | 19 | Graph-based Testing
Structural Graph Coverage Criteria
One of the most commonly used coverage criteria |
AO-Ch7.1 AO-Ch7.2 |
Learning portfolio:
ISP-testing-module
due
06/01, 10:30am EST
(before class)
[06/03] ISP-testing-module grades released. Please refer to Canvas/Announcement on 06/03. |
worksheet–1
(no submission)
(no submission)
[sample solution] (Due 06/01, 11:59pm EST) |
| 20 | Structural Graph Coverage Criteria
How should we handle loops in graphs? Execute loop once, 0 time, many times? Derive Prime Paths (refer to worksheet−2) |
AO-Ch7.2 | |||
| Tue 06/02 | 21 | Control Flow Graph for Source Code
How do we create graph representation of the software under test? Examples: Improper CFGsHere are examples of improper/incorrect CFGs for program source code; these improperly/incorrect CFGs will *not* receive credits for the learning portolio. |
AO-Ch7.3.1 | worksheet
(no submission)
[sample solution] (no submission) |
|
| 22 | Apply Structural Graph Coverage to Source Code
Putting it all together and designing unit-level tests to satisfy structural graph coverage criteria. Let's analyze test paths and identify test cases that correspond to the execution flows of the test paths. |
POTD 8: Graph for source (numberOccurrences)
[sample solution] (Due 06/02, 11:59pm EST) |
|||
| Wed 06/03 | 23 | Apply Structural Graph Coverage to Source Code
More structural graph coverage criteria in action. |
Activity:
Graph for source (LCM)
[sample solution] (no submission) |
||
| 24 | Data Flow Graph Coverage Criteria
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.2 | POTD 9: Data flow coverage
(Due 06/03, 11:59pm EST) |
||
| Thur 06/04 | 25 | Apply Data flow Coverage to Source Code
Putting it all together and designing unit-level tests to satisfy data flow graph coverage criteria. Let's analyze test paths and identify test cases that correspond to the execution flows of the test paths. |
AO-Ch7.3.2 | POTD 10: Data flow for source (LCM)
(Due 06/04, 11:59pm EST) More practice: Data flow (numberOccurrences) [sample solution] (no submission, DIY or we can practice together in class if time allows) |
|
| 26 | Apply Data flow Coverage to Source Code
More data flow graph coverage criteria in action. |
||||
| Fri 06/05
Withdraw deadline 06/05 |
27 | 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? |
AO-Ch7.4 | Activity: Graph for design elements
(no submission) |
|
| 28 | Graph Coverage for Design Elements
(wrap-up)
Check-in #2,
|
||||
| Logic-based Testing | |||||
| Mon 06/08 | 29 | Logic-based Testing
Logic Coverage Criteria
How should we design tests based on semantic of the logic expressions? Will tests designed for equivalent predicates always be the same? |
AO-Ch8.1 | Learning portfolio: Graph-testing-module due 06/08, 10:30am EST (before class) | |
| 30 | 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 | POTD 11: Logic
(Due 06/08, 11:59pm EST) |
||
| Tue 06/09 | 31 | Active Clause Coverage Criteria (ACC)
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 |
AO-Ch8.1 | Activity: ACC
(no submission) |
|
| 32 |
Apply Logic Coverage 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.3 | POTD 12: Logic for source
(Due 06/09, 11:59pm EST) |
||
| Wed 06/10 | 33 | Apply Logic Coverage 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. |
AO-Ch8.3 | Activity: Logic for source
(no submission) |
|
| 34 | Logic-based testing for Source Code
(wrap-up)
Check-in #3,
|
||||
| Additional testing aspects and Course wrap-up | |||||
| Thur 06/11 | 35 | 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? |
Activity: Bypass testing
(no submission) |
||
| 36 | Managing the testing process Usability testing (in case you may be interested) |
||||
| Fri 06/12 | 37 | Last minutes Q&A, Office hours on demand
No lecture or new topic discussion; feel free to drop by to chat or discuss anything. |
|||
| 38 | Last minutes Q&A, Office hours on demand
No lecture or new topic discussion; feel free to drop by to chat or discuss anything. |
||||
| Sat 06/13 |
No final exam. No class meeting.
(please refer to the university UVA Summer Session Calendar) |
Learning portfolio: Logic-testing-module & final deliverables due 06/13, 10:30am EST (no late submission, no extension) | |||
CC-BY-NC-SA 4.0 license.