Cover price: US$49.99
I do not test embedded software. But, if I were given such a task, I would feel confident about succeeding if I could supplement my basic knowledge of software testing with this book. Broekman and Notenboom have included everything I might want from any software engineering text: comprehensive information about techniques, tools, process, and people. They have put together a clear, well-planned exposition of the discipline that goes beyond a survey. Their book gives readers the details they need to help them succeed with testing embedded software systems.
There are five primary sections and five appendices in the book. The sections introduce readers to the material and describe in detail how to conduct testing. The appendices provide examples that reflect key ideas from the other sections. In the following paragraphs, I will provide a brief synopsis of each section.
The first section is an Introduction that sets the context for the remainder of the book. In a four-page first chapter the authors clearly establish the aims of testing, define embedded systems, and identify their approach to testing embedded systems. They follow this with a description of TEmb, a method for assembling a test approach suitable for specific embedded systems, using generic elements. The approach is based on the four cornerstones of structural testing: Lifecycle, Techniques, Infrastructure, and Organization. These cornerstones are the subjects of subsequent sections.
Most testers are familiar with the V-model of development that promotes validation and verification at several levels of product development, from requirements though build and integration. The authors begin the Lifecycle section by exploring variations of this model that conform to an appropriate lifecycle for testing embedded systems. They then describe in detail the different types of testing required for embedded systems, focusing on three areas: master test planning, testing by developers, and testing by independent test teams.
The largest section in the book is the Techniques section, with six chapters offering a menu of best practices for the embedded systems tester. I especially liked the chapters on risk-based test strategy and safety analysis; many of the techniques in these chapters, such as the strategy matrix, are appropriate for any type of testing effort. Safety analysis is a key factor in testing embedded systems, but most texts on testing either ignore this concern or provide just a cursory overview. The authors also include a discussion of evolutionary (genetic) algorithms applied to testing, something I also have not seen in any other text.
The Infrastructure section offers advice on selecting the right tools and creating the proper structured test environment for embedded systems. It includes information on the types of environments required at different stages in the lifecycle. One chapter provides an overview of different types of tools and their use. The section concludes with a chapter on dealing with digital and analog signals.
As with any type of software development effort, people are the most important factor in testing embedded systems effectively, and the final section on Organization addresses people and organizational issues. The first chapter in this section carefully details the roles involved in embedded software testing and the skills required to fill them successfully. The next chapter takes on human issues, including ways for testers to improve their careers and professional status. Although the chapter is testing-specific, many of these ideas are applicable to other technical disciplines.
The examples in the appendices are not exhaustive, but offer information that can be particularly useful to embedded system testers. The first appendix describes an appropriate risk classification strategy for testing embedded systems. If you have not done any embedded systems testing, this is a must-read to get you started on the right track. The appendix I found most interesting describes the blueprint for an automated test suite. I have worked with automated testing tools for several years, implementing some simple test harnesses along the way. The authors' description of constructing an automated suite was right in line with my approach, and I learned some new things to add to my test suites.
If you are a quality professional who works on embedded software systems -- or who will work on such systems in the future -- I highly recommend this book. Any member of a development team working on embedded software systems will take away something useful from it. I hope that the next time I fly, the software controlling the airplane's systems has been tested by someone who took the advice in this book to heart.