Papers, Presentations, and Articles -- Synopsis -- Applying Agile and TDD to Embedded Software

Refactoring: Three Critical Skills - Agile Alliance Technical Conference

Here are the Slides from James Grenning's talk at the Agile Alliance Technical Conference, Raleigh, NC April 7, 2016.



-- Published April 07, 2016 -- More...

Manual Test is Unsustainable

This article provides a simple model that illustrates why companies should insist on having automate regression tests.

-- Published January 23, 2015 -- More...

The Physics of Test-Driven Development

This article describes one of the most direct benefits of applying Test-Driven Development to your code. If you are dong Debug Later Programming, you better read this.

-- Published June 07, 2008 -- More...

Business People Don’t Think They Care About Clean Code

Do business people care about clean code? They behave like they don’t. Well, they do and I can prove it using proof by contradiction. (From James Grenning's blog archives.)

-- Published February 01, 2013 -- More...

Agile Embedded Software Development

Embedded systems development can benefit from Agile software development. This paper and presentation tells you about why you should care, what problems Agile is designed to solve and what agile is. This topic has evolved over the years. I started presenting it in 2004 (or maybe earlier) at the Embedded Systems Conference.

-- Published September 22, 2011 -- More...

Test Driven Development for Embedded C

This paper describes the special challenges of using TDD in embedded software and how these challenges can be overcome to streamline embedded software development. It provides examples in C and is based on my book Test-Driven Development for Embedded C.

-- Published February 28, 2013 -- More...

Test-Driven Development For Embedded C++ Programmers

Test-Driven Development For Embedded C++ Programmers was written for the Embedded Systems Conference, and presented there several times since 2002. The slides are from Bob Martin and I co-presented and demonstrated TDD to a crowd of embedded engineers in San Jose, Ca.

-- Published August 09, 2004 -- More...

Agile Embedded Requirements, Estimation and Planning -- Iteration Zero

This paper is a guide for getting an Agile embedded development effort started.

-- Published September 16, 2013 -- More...

Mocking the Silicon

In the linked blog article, you can see how TDD can be done within one instruction of the hardware.



-- Published November 24, 2014 -- More...

TDD How-to: Get your Legacy C Into a Test Harness

You are getting started with TDD, but have existing code? You want to get some of your challenging C/C++ code under test? You have run into some apparent show stoppers? Don't give up! This article contains a step by step recipe to help get your code into a test harness. It also contains a series of C/C++ code problems that get in the way of unit testing. Each problem named comes with one or more suggested solutions. Also, many of the solutions provide links to articles with more detail.

Many of the problems described arise from trying to get embedded systems code that has only been compiled with the target hardware cross-compiler, to compile off-target. These problems are not unheard of for non-embedded C/C++, so any C/C++ programmer can get some insight into getting your legacy code under test using this approach. Test problems come from dependencies, so If you can relate the C/C++ specific advice to your language, there is something here for non-C programmers as well.

To help you get started, I've created a CppUTest Starter Kit on github that you can use to help get started. The started project describes how to setup your environment and has example tests, code, and mocks.



-- Published April 06, 2014 -- More...

Designing SOLID C - ACCU 2014 Slides

C does not have to be spaghetti code. It can be modular and flexible if you apply the SOLID design principles. In this tutorial, we look at applying Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation and Dependency Inversion principles to C. SOLID gives good guidance on modularity and coupling; these principles are not just for programmers with an OO language.

-- Published April 14, 2014 -- More...

Story Testing - Executable Use Cases - for Embedded Systems

Manual test processes are unsustainable in the complex environment of embedded software development. Tests can be written that take the place of use cases, that are automated and help keep the cost of retest near zero.


-- Published September 22, 2011 -- More...

Extreme Programming and Embedded Software Development

This article explores advantages Extreme Programming can provide to embedded software developers. The article also looks at some of the challenges of applying XP to embedded software development, and how to adapt them. This article was submitted and presented at then Embedded Systems Conference in 2002, 2003, 2004 while James Grenning was with Object Mentor.

-- Published March 01, 2004 -- More...

EDN Article - Test-Driven Development for Embedded C, Why Debug?

This article on TDD for Embedded C was feature in EDN magazine.

-- Published March 15, 2012 -- More...

Agile Singapore 2014 - You Can't be Great without Technical Excellence

Technical excellence is more than two week sprints, a burn-down chart and a daily stand-up meeting. The basic rules of Agile or Scrum are not an end in themselves, but rather a staring point based upon principles and practices that allow and encourage teams to adopt, adapt, and refine their craft. Unfortunately, it may seem to the technical people that agile is just another micro-management approach.

-- Published November 12, 2014 -- More...

Extra! Extra! TDD Doubles LOC and No One Cares!

TDD does not take longer. Read my archives article on the topic.

-- Published July 14, 2009 -- More...

Planning Poker Party

Planning poker is not the only game for estimating software development effort. About a year after writing the original paper on Planning Poker, Lowell Lindstrom suggested we try affinity grouping, something we learned back at Teradyne in the 1980s for gathering similar ideas. Since that time, I prefer the Planning Poker Party over Planning Poker for large batches of stories.

-- Published February 06, 2009 -- More...

Planning Poker - The Original Paper

Back in 2002, in American Fork, UT, James was facilitating and XP planning meeting. The meeting stalled with the two most senior people volleying the ideas back an forth, while the others got a virtual nap. As a engineer (and consultant), James had a problem to solve. Get the meeting on track. Planning poker was born.



-- Published August 15, 2002 -- More...

Beyond Planning Poker - Agile 2011

Planning poker has become very popular for Agile estimation. It probably taught in every Scrum Master class. Dozens of companies print and give away Planning Poker cards. In this Agile2011 Conference presentation James, the inventor of Planning Poker, looks at some of the history of planning poker, pokes some fun at the cargo cult following and shows that Planning Poker is not the only game in town.

-- Published August 09, 2011 -- More...

Progress Before Hardware

Progress Before Hardware shows how Test-Driven Development can help an embedded software effort get started before they have hardware to run their code on. I wish I knew this when I did not have hardware during the 80s and 90s.

-- Published January 26, 2004 -- More...

Agile Alliance Newsletter Vol 4

This Agile Alliance Newsletter has many interesting articles on Agile development, including several on

Agile applied to Embedded Software.

  • Dan Pierce --- Agile Embedded: The Ground Floor
  • Nancy Van Schooenderwoert --- “Transitioning To XP In Embedded Environments
  • James Grenning --- Progress Before Hardware
  • Bill Greene --- Using Agile Testing Methods To Validate Firmware


-- Published February 01, 2004 -- More...

Why are You Still Using C?

According to a poll on Embedded.com (a while ago now, though the results are much the same today), 68% of the respondents are using C for developing their embedded software. Why do embedded developers choose C over C++? Sure, there are some practical reasons to avoid C++, such as the availability of tools for your embedded processor. But another possibility is that embedded programmers do not know the advantages that an Object Oriented programming language can bring them. They may not know what the tradeoffs are when choosing to use C++ over C. This article describes some of the key reasons to use the OO features of C++ in your embedded applications and how to evaluate the cost tradeoffs.



-- Published March 26, 2003 -- More...

Launching Extreme Programming at a Process-Intensive Company - IEEE Paper

Launching Extreme Programming at a Process-Intensive Company was written for IEEE software and presented at an IEEE conference in 2001. This paper tells the story of how we got started, the resistance and bravery in changing from the accepted norms. In a big process company, documentation was always an issue. We managed to reduce the documentation, but it was an uphill battle. If big process is your world, this paper may help you see a way to a more Agile existence.

-- Published November 01, 2001 -- More...

Embedded Software Cycle Time Survey Results

These are the results of an on-going survey of how long an embedded engineers has to wait for an incremental build.

-- Published November 25, 2014 -- More...

Embedded Software Cycle Time Survey

This is an on-going survey of how long an embedded engineers have to wait for an incremental build.



-- Published November 25, 2014 -- More...

Test-Driven Development for Embedded C -- OOP Conference 2015, Munich

Here are my slides from OOP 2015, Munich.

-- Published January 27, 2015 -- More...

Technical Excellence - OOP Munich 2015

These are the slides form my Technical Excellence talk delivered at OOP Munich January 27, 2015.

-- Published January 27, 2015 -- More...

SOLID Design for Embedded C

Embedded Systems Conference, San Jose, CA, May 2012 Class ESC-231 By James W. Grenning The most common design pattern I’ve seen in C code is the function-call data-structure free-for-all. Not all C code is a mess, but it sure seems that there is a lot of it. It’s not easy, but C code does not have to be a mess. Good designs are modular, and the modules have high cohesion and loose coupling. We’ve heard those terms for years, but what do they mean?

-- Published May 01, 2012 -- More...

Test-Driving Next to the RTOS (using Micrium OS and FFF)

Here is a three article series about testing next to a real time operating system. These examples use Micrium OS II and the Fake Function Framework (FFF)
  • Unit testing RTOS dependent code – RTOS Test-Double Part 1
  • Unit testing RTOS dependent code – RTOS Test-Double Part 2
  • Unit testing RTOS dependent code – RTOS Test-Double Part 3


  • -- Published April 18, 2012 -- More...

    Code Coverage’s Mixed Message

    From the archives.

    -- Published February 24, 2012 -- More...

    Hiding Non-standard C Keywords for Off-Target Testing

    This article shows how to get code with non-standard C keywords to compile off the target compiler.

    -- Published February 21, 2012 -- More...

    #include Test Double

    This article describes how to deal with noon-portable header files.

    -- Published February 10, 2012 -- More...

    Mocking the asm directive with CppUMock

    See how to use CppUMock to mock 'asm' directives.

    -- Published June 03, 2011 -- More...

    Spying on Embedded asm directives

    See how to compile and test code off-target that embedded 'asm' directives.

    -- Published June 02, 2011 -- More...

    TDD Stepping Stones

    This article describes the purpose of small steps in Test-Driven Development.

    -- Published February 05, 2009 -- More...