Test-Driven Development
& Refactoring Techniques
For Embedded Software Engineers
TDD and Refactoring provide many benefits to the embedded developer and the develpment team, including improved predictability, repeatability and reduced debugging time. Predicatbility is improved because TDD breaks programming into a series of small verifiable tests that can be used as a measure of progress. Each test is either passing or failing, giving an unambiguous indication of completeness. Tests are automated so there is not penalty for testing continuously, rather than just at the end of some milestone or activity.
Developign embedded software has many challenges, and the consequences of shipping bugs to the field can be costly in time, money and safety. These realities make it critical that only high quality code is shipped. Test Drive Development is one technique that can help to ship high quality code. TDD can help the embedded developer by:
- Providing repeatable test through the focus on automated tests
- Detect side effect defect within minutes of their introduction, eliminating unpredictable debug cycles
- Provide a test bed for independent of hardware, allowing progress early in the development cycle
This course also teaches the critical skill of refactoring. Refactoring is critical to embedded development because of the continual force of change. Requirements and hardware platforms are continually changing requiring software to be evelved. This inevitable change can turn a beautiful pieve of software into spaghetti very quickly.
You will learn the granular TDD approach to development using CppTestTools for unit testing and FitNesse for acceptance testing. You will experience the frequent and regular feedback and progress of letting tests drive the development and design. You will also see the documentation value of your tests and discover just how much faster you can go by writing tests!
In terms of programming, you'll how to write C++ code that is testable on your development machine and how to make the bulk of your code platform independent. In addition, the principles of good object-oriented design are emphasized throughout the course. You will learn how to keep your designs clean and simple by applying those design principles through refactorings that are verified by your tests. You will learn to incrementally transform complex and difficult modules into readable, well-structured, and well-designed code, while keeping them running at all times.
As you participate in our hands-on environment, you will learn how to approach design from the outside-in; one test case at a time, driving the system to better and simpler designs and architectures while it continues to pass all its tests. You will learn how unit tests and acceptance tests can be used to incrementally grow well-factored systems that are easy to maintain.
Objectives
By the end of this course, you will learn how to:
- Write dual target unit tests
- See the power and efficiency of unit testing
- Recognize poor code constructs
- Learn how to improve design in small safe steps
- Learn how to use CppTestTools and FitNesse
- Use of "intention" to drive object interface design
- Test-first programming of object clusters
- Use Mock objects and when to use them
- Refactor code when growing systems test-first
- Understand the role of Unit Tests
- Understand the role of Acceptance tests
- Write acceptance tests using Fitnesse
Detailed Outline
Prerequisites
- Familiar with C++ programming language
- Fed up with time wasted debugging
Length
Price
- $1650
- Price includes course notes and workbooks
Registration and Start Dates
To request an onsite or private course or for more information about registration and start dates, call 1-847-249-4209 or

Onsite Requirements
|