Course Overview

Course Length: 
3 Days

Agile is a powerful and often misunderstood approach to developing software. One of the key technical practices is Test-Driven Development. TDD is a powerful engineering practice used to develop safer, more secure, and more robust embedded software. TDD produces an automated regression test suite that can be used to keep your production code clean for a long useful life. The test-suite is critical to allow evolving code to be refactored, allowing the design to be incrementally improved. In this 3-day course, attendees will learn the fundamentals of Test-Driven Development (TDD) and refactoring for embedded C and get an overview of the Agile planning practices.

Engineering Excellence with TDD

Test-Driven Development (TDD) is a powerful technique for building reliable software. This hands-on course teaches the best practices of TDD with a focus on the challenges unique to testing embedded software, such as concurrent hardware and software development, long download/reflashing times, in-target debugging, late integration and limited progress visibility.  Attendees will learn how TDD can be used to reduce defects, schedule risk and create a more flexible design.

Topics covered during this section include:

  • TDD and why you should use it
  • Adapting TDD to embedded software development
  • Using TDD and Collaborating Modules
  • Test Fakes, Stubs, Doubles, and Mocks
  • Test-Driving Next to the Silicon with Mocks
  • Refactoring
  • Working with Legacy C

Realistic Planning and Execution with Agile

Agile development is designed to help a team manage delivery of a system through iterative and incremental development. The Agile approach incorporates flexibility into the development process, acknowledging the dynamic nature of complex product development. Attendees will gain knowledge and understanding in planning and management practices of Agile development.

Topics covered during this section include:

  • What Problems Does Agile Solve?
  • Why Iterative and Incremental?
  • Planning Practices of Agile

This course is appropriate for:

  • Embedded software developers, technical leaders and managers.

Prerequisites:  Attendees should be experienced with the C programming language and have a general familiarity with embedded software development.

Explore this course:

Find out more:


The following summary covers the major course topics and may be modified at the instructor's discretion based on the needs and pace of the class.

Test-Driven Development

  • Why Test-Driven Development?
  • What is Test-Driven Development?
  • The Microcycle
  • Exercise

Adapting TDD to Embedded Software Development

  • Leveraging the Development System
  • Risks of Development System Unit Testing
  • Embedded TDD Cycle
  • Hardware/Platform Independence

TDD and Collaborating Modules

  • Separation of Responsibilities
  • Keeping Tests Clean
  • Tests as Detailed Documentation
  • Exercise

Test Fakes, Stubs, Doubles, Mocks

  • Spying on the Hardware
  • Faking the Time
  • Link-time Fake
  • Run-time Fake

Test-Driving Next to the Silicon with Mocks

  • The Problem Solved by Mock Objects
  • TDD One Instruction Away from the Hardware
  • Exercise


  • Critical Skills
  • Code Smells
  • Envisioning
  • Transforming
  • SOLID Design

Working with Legacy C

  • Legacy Code Mindset
  • Boy Scout Rule
  • Crash to Pass Algorithm
  • TDD and Bug Fixes
  • Exercise

Agile for Embedded Overview

  • What Problems Does Agile try to Solve?
  • What is Agile?
  • Why Iterative and Incremental?
  • Planning Practices of Agile

Wrap-up Discussion


"I am starting to use TDD to reap long-term results.  Had an eye-opener on the 3-day long course!" -Sumana B., Embedded Software Engineer, Stryker, 2018

"James has an amazing depth of practical knowledge and is very adept at conveying it." -Dave J., Embedded Software Engineer, 2018

"Great training - very practical for a variety of real world scenarios." -Nick Q., Embedded Software Engineer, 2018

"The most practical TDD course available.  Gives you enough information to get started independently." -Attendee, Embedded Software Engineer, 2018

"Great course combining hands on training with presentation material. I learned a lot about Agile for embedded systems!" -Attendee, Embedded Software Engineer, 2018


Related Courses

Find out More

Contact us now to find out more about this course or to enquire about an on-site training at your company.

Recording Policy

Barr Group's courses may not be audiotaped, videotaped, or photographed without consent from Barr Group's executive team.