Agile Training Icon
Software Testing & QA Training Icon

Test Driven Development

3 Days Classroom Session
Classroom Registration
Group Rate:
(per registrant, 2 or more)
GSA Individual:
Private Onsite Package

This course can be tailored to your needs for private, onsite delivery at your location.

Request a Private Onsite Price Quote

Professional Credits


ASPE is an IIBA Endorsed Education Provider of business analysis training. Select Project Delivery courses offer IIBA continuing development units (CDU) in accordance with IIBA standards.


Select courses offer Leadership (PDU-L), Strategic (PDU-S) and Technical PMI professional development units that vary according to certification. Technical PDUs are available in the following types: ACP, PBA, PfMP, PMP/PgMP, RMP, and SP.


Developing software applications in today's complex environments requires enormous knowledge and wide-ranging skills. Building applications to ever changing requirements has become the norm. But how can we implement a quality application for ever changing requirements; one that can be extended and maintained? It necessitates a solid testing discipline throughout the software lifecycle. 

This course teaches participants how to build quality software through effective use of Test-Driven Development practices. Unit testing, test-first, and Refactoring practices lay the foundation for sustainable code quality and Agile development. Test quality helps drives quality design and code.

Participants will learn the skills and discipline of writing unit tests in a test-first approach, to create a "safety net of tests". They will learn how to write good unit tests, what unit tests should test, and why these tests are critical. They will also learn refactoring practices, and incremental development. Together, these skills allow developers and teams achieve the goal of building quality applications sustainably, with quality for the life of the code base.

How to write effective unit tests
Properties of effective unit tests
How to use mock objects to isolate the "system under test"
Effective Refactoring of the code base
Benefits of test-first and Test-Driven Development
Techniques for adoption of Test-Driven Development
How to use Acceptance Test, and Behavior-Driven Development to further advance Test-Driven Development
Upcoming Dates and Locations
All Live Online times are listed in Eastern Time Guaranteed To Run

There aren’t any public sessions currently scheduled for this course, but if you fill out the form below, we can tell you about how we can bring this course to you!

Course Outline

Module 1: Agile Overview

Test Driven Development is a key component of the Agile Software Development Methodology and of the overall DevOps movement. So it is helpful to have at a minimum a high level understanding of Agile practices and scrum ceremonies and TDD fits into the overall Agile, Scrum and DevOps landscape. Module 1 serves as a leveling exercise to ensure that team member are speaking the same language during upcoming labs and discussions.

1. What is Agile Software Development

  • DevOps Overview

  • The Agile Manifesto

  • Scrum vs Agile


2. Components of Agile

  • User Stories

  • Tasks

  • Bugs

  • Automated Builds

  • Automated Tests

  • Continuous Inspection

3. The Role of TDD in Agile Development

  • Automated Unit Tests

  • Automated Acceptance Tests

Lab: Explore the Board of an Agile Project

  • Kanban Board

  • User Stories

  • Tasks

  • Bugs

  • Work in Progress

  • Burndown Chart


Module 2: Unit Testing

Unit Testing is a critical component of Test Driven Development (TDD). Small units of code are tested throughout the development process, which isolates functionality to ensure that individual parts work correctly.

1. Unit Test Fundamentals

  • Reason to do Unit Testing

  • What to Test: Right BICEP

  • CORRECT Boundary Conditions

  • Properties of Good Tests

2. Frameworks

  • What is JUnit

  • JUnit Building Blocks

  • Test Cases

  • Test Suites

  • Examples

3. Agile Testing Strategy 

  • Agile Testing Quadrant

  • Automation Pyramid

  • Assertions

4. Test Attributes

  • Setup / TearDown

  • JUnit Lifecycle

  • System Under Test

  • Test lliDesign Strategy

  • Naming our Tests

  • Exceptions

Lab: Introduction to Unit Testing

  • IDE and Project Setup

  • Running our first Unit Test 

  • Explore Junit framework 

  • Test Attributes

  • Assert Statements


Module 3: Test Driven Development

Essential TDD techniques require developers write programs in short development cycles, and there are critical steps that must be taken. Tests are created before the code is written. Once the code passes testing, it is refactored to adhere to the most effective and acceptable standards.

1. TDD Rhythm

  • TDD Overview

  • Red, Green, Refactor

  • TDD Benefits

2. Sustainable TDD

  • Development without TD

  • Test Last

  • Test Last in Parallel

  • Test Driven Development

3. Supporting Practices

  • Collective Ownership

  • Continuous Integration

4. Eight Wastes of Software Development

  • Ripple effect of defects

  • Partially Done Work

  • Extra Features

  • Relearning

  • Handoffs

  • Task Switching

  • Delays

  • Defects

5. Test Automation

  • Automate, Automate, Automate

  • Automate Early and Often

  • Additional Topics Identified


Lab: Test Driven Development

  • Start Test Driven Development on our example App

  • Write unit test cases

  • Experience RED, Green, Refactor Process 


Module 4: Principles of Agile Development

TDD is directly influenced by design, so it will be a priority to take this into context during implementation. Considering design principles will enable teams to experiment with different approaches, and gear towards more functional programming.

  1. Design Principles Overview

  2. Coding Principles

  3. Isolation of the SUT

  4. Developing independently testable units

  5. Test doubles

  • Introducing test doubles

  • Stubs

  • Fakes

  • Mocks

Lab: Continue development on example App

  • Setting up Test doubles for our example app

  • Discuss and implement test dummy and test stubs


Module 5: Refactoring

Refactoring is another essential technique of TDD, and most software development teams are most likely doing some form of refactoring regularly. Refactoring can be used in a number of different workflows which will be explored in this module.

1. Why Refactor?

  • Red, Green, Refactor

  • Benefits

  • Development without TDD

2. Refactoring Methods

3. Refactoring Cycle

  • Reduce Local Variable Scope

  • Replace Temp with Query

  • Remove Dead Code

  • Extract Method

  • Remove Unnecessary Code

Lab: Continue or example project

  • Implement new test cases

  • TDD Cycle

  • Discuss and implement Refactoring Needs


Module 6: Pair Programming

Pair Programming is an effective way to improve code quality. In this module, we will discuss pairing and how it leads to better software design, and a lower cost of development.

1. Pair Programming

  • Pairing Setup

  • Results: Time

  • Results: Defects

  • How it works

2. Advantages of Pairing

  • Both Halves of the Brain

  • Focus

  • Reduce Interruptions

  • Reduce Resource Constraints

  • Multiple Monitors

  • Challenges


3. Pairing Techniques

  • Pair Rotation

  • Ping Pong Pairing

  • Promiscuous Pairs

  • Pair Stairs

  • Cross-Functional Pairing

Lab: Experience pair programming and continue developing our example app


Module 7: Acceptance Test Driven Development (ATDD) & Behavior-Driven Development (BDD

Acceptance Tests are an important form of functional specification, and Behavior Driven Development dictates what happens as an effect of these tests being run. In this Module, we will cover the difference between them, and how they are closely related.

1. Acceptance Testing

  • Acceptance Tests

  • Why Acceptance Tests?

  • Acceptance Test Execution

  • Who Writes Acceptance Tests

  • Pair Test Writing

2. Best Practices for Effective Testing

  • Keys to Good Acceptance Tests

  • Writing Acceptance Criteria

  • Acceptance Test Example

  • Acceptance Test-Driven Development (ATDD)

3. BDD vs. ATDD

  • Specification by Example

  • BDD Frameworks

  • BDD Examples

Lab: Experience ATDD and BDD

  • Experience ATDD or BDD and discuss impact to TDD


Module 8: Advanced TDD

In order to implement Unit Tests efficiently, it is critical that developers understand their properties.

1. TDD Solutions

  • Continuous Unit Testing

  • Collective Ownership

2. Advanced Unit Testing

  • Unit Testing Legacy Applications

  • Techniques for Legacy Code

  • External Dependencies

  • Mocking frameworks

  • Unit Testing the Database

3. Outside In vs Inside Out

Lab: Demonstration for Mocking/doubles with our example App

  • Working with database

  • Working with mocking frameworks

4. Test Strategy

  • Continues Integration

  • Batch Execution of TestCases

5. Unit Test Examples

  • More Tests

  • Algorithm

6. Advanced Refactoring

Lab: Demonstration for Mocking/doubles with our example App

  • Working with database

  • Working with mocking frameworks


Module 9: Simulation

Experience Agile development with test driven development and pair programming

Who should attend

Developers who want to learn how to enhance their design and development skills to build better quality applications. Participants should have a strong understanding of object-oriented development using C#, Java or equivalent language. This test driven development training course can be delivered in Java, C# or other language with prior arrangement.