Build in Quality at Scale with Test-Driven Development

“Built-in Quality” is a core value of SAFe®.  It allows quicker delivery of business value. One of the key practices in realizing built-in quality is Test-Driven Development (TDD). This course teaches developers how to write behavior-focused unit tests and to develop incrementally using these tests.  It emphasizes how these tests reflect the system requirements. Refactoring legacy code and adding unit tests to that legacy code is also explored.  The course emphasizes hands-on practice in writing unit tests, creating mocks, and refactoring.    

TARGET AUDIENCE

Software developers in Java, C#, or C++ who want to learn to create quality code.

LEARNING OBJECTIVES

  • How to be "test-driven" 
  • How to write behavior focused unit tests 
  • When and how to use mock objects (test doubles)
  • How to refactor legacy code 

INSTRUCTOR

Ken Pugh, author of Lean-Agile Acceptance Test-Driven Development: Better Software Through Collaboration.

SAFe’s DESCRIPTION OF TDD

Built-in Quality is one of the four Core Values of SAFe. The Enterprise’s ability to deliver new functionality with the fastest sustainable lead time and to be able to react to rapidly changing business environments is dependent on Solution quality. But built-in quality is not unique to SAFe. Rather, it is a core principle of the Lean-Agile Mindset, where it helps avoid the cost of delays associated with recall, rework, and defect fixing.

Test-First is a philosophy that encourages teams to reason deeply about system behavior prior to implementing the code. This increases the productivity of coding and improves its fitness for use. It also creates a more comprehensive test strategy, whereby the understanding of system requirements is converted into a series of tests, typically prior to developing the code itself.

In Test-Driven Development (TDD), developers write an automated unit test first, run the test to observe the failure, and then write the minimum code necessary to pass the test. Primarily applicable at the code method or unit (technical) level, this ensures that a test exists and tends to prevent gold plating and feature creep of writing code that is more complex than necessary to meet the stated test case. This also helps requirements persist as automated tests and remain up to date.

The focus is on writing the unit test before writing the code, as described below:

1. Write the test first. Writing the test first ensures that the developer understands the required behavior of the new code.

2. Run the test, and watch it fail. Because there is yet no code to be tested, this may seem silly initially, but this accomplishes two useful objectives: It tests the test itself and any test harnesses that hold the test in place, and it illustrates how the system will fail if the code is incorrect.

3. Write the minimum amount of code that is necessary to pass the test. If the test fails, rework the code or the test as necessary until a module is created that routinely passes the test.

In XP, this practice was primarily designed to operate in the context of unit tests, which are developer-written tests (also code) that test the classes and methods that are used. These are a form of “white-box testing” because they test the internals of the system and the various code paths that may be executed. Pair work is used extensively as well; when two sets of eyes have seen the code and the tests, it’s probable that the module is of high quality. Even when not pairing, the test is “the first other set of eyes” that see the code. Developers note that they often refactor the code in order to pass the test as simply and elegantly as possible. This is quality at the source—one of the main reasons that SAFe relies on TDD.

SAFe References to Built-In Quality and Test-First

http://www.scaledagileframework.com/built-in-quality/

http://www.scaledagileframework.com/test-first/

OUTLINE

  • Introduction
    • How TDD helps with quality
    • Creating tests first
    • Running the framework
  • Unit test introduction
    • Naming tests
    • Trying out the framework
  • TDD Exercise
    • Organizing unit tests
    • An TDD exercise
  • Mocking (Test doubles)
    • When to use
    • How to create
    • A mocking exercise
    • Ways to minimize mocking
  • Refactoring
    • Common refactorings
    • A legacy code refactoring exercise
  • Your TDD
    • Large exercise in TDD

ATTENDEE MATERIALS

Workshop materials are provided at the start of the class

ROOM SETUP AND EQUIPMENT

One computer for every two students, loaded with necessary software. 

Flip chart and whiteboard for the instructor. 

A projector with screen. 

PREREQUISITES

Experience in C#, Java, or C++   

COURSE LENGTH

3 days

MAXIMUM

24 students

NOTES

Some of this description is reproduced with permission from Scaled Agile, Inc. Copyright © 2011-2017 Scaled Agile, Inc. All rights reserved.   SAFe and Scaled Agile Framework are registered trademarks of Scaled Agile, Inc.  

This course does not provide any certification related to Scaled Agile, Inc. or SAFe. 

PROVIDER

Ken Pugh, Inc.  732 Ninth Street #695, Durham, NC 27705.  

Course copyright © 2017 Ken Pugh

CONTACT

Leslie Killeen 919-490-6335

leslie@kenpugh.com