Despite the ease with which technical information can be found in the Internet, there remains something special about having a book in yours hands. You don't need to charge them, their surface doesn't reflect the light making them hard to read, you can make notes in them with a pencil or pen, and they still work even after you have dropped them!
Here in BugHunter central, we still enjoy flicking through our technical tombs, but with such a wide range of books on offer, it is hard to know what is worth buying and what should be left on the shelf. Furthermore, some of the texts are very expensive, costing upwards of 40€, so you don't want to give out your money unless it is worthwhile.
Below we list some of the books that we refer to when working and provide you with some guidance as to who the text is most appropriate for. And, you don't necessarily have to buy these books new. Take time to search the web for second-hand copies where you can often save considerable sums of money.
If you have a suggestion for a book we should review, or your opinion differs to ours, please feel free to contact us via inews@isystem.com and let us know.
Testing Embedded Software
Author: Bart Broekman and Edwin Notenboom
Publisher: Addison-Wesley
ISBN: 0321159861
Recommended readers: embedded software developers looking to implement testing; students who want to learn in depth how testing is implemented
Testing. We all know we should do it, that is saves us time, money and, above all, frustration. But somehow it just looks like a enormous task that is difficult to tackle. Regardless of what we plan to do, it never seems like enough or it remains unclear if that which we plan to undertake will actually be of benefit.
Broekman and Notenboom's book has a foreword from Dr. Grimm of the DaimlerChrysler group explaining that "several concepts from the book have already established a foothold" within their group. And, after reading this 300 page tomb, it is clear why.
Split into five parts plus appendices it clearly breaks down the topic of testing embedded software for the reader. Part I deals with general principles of structured testing and embedded systems, setting the groundwork for later sections. By the end, the reader has a good overview of how to approach testing of embedded systems, how to assess the risk associated with its use and how to characterise it. This last step helps to determine the actual test approach to take. Included are several references to industry standards that cover testing of safety critical systems, although non-safety critical systems are also covered with equal footing.
Part II looks in more detail at where test is built into the development process and how it is to be implemented. This includes discussions on activities within the V-Model, test planning, integrating unit tests into module development, as well as how a dedicated testing team should be constructed and function. Part III is a little more practical, providing examples of how to actually define the testing, potential methods and approaches, rounding off with an excellent chapter dedicated to checklists for use during that process. Of special note is the chapter on test design techniques, delivering useful insights on various test methods for a wide variety of test scenarios, from state-based systems through to evolutionary algorithms.
Parts IV and V were of less relevance during our reading, but look more at the use of (in part IV) tools and simulators in the preparation of a testing environment as well as (in part V) definitions of the roles within a testing organisation. This could be especially useful when defining new team roles or writing job descriptions.
The last part, part VI, is full of appendices. To be found here is background information on risk classification, statecharts and an example test plan. The book also include a well though out glossary of terms which is based upon that found in BS7925-1.
Testing, as a process, is dependent on many factors and each organisation needs to find the collection of tools and methods that best fits their needs. There are some references to various tools in the text, but the details are limited to a single example and lack any depth. Thus the reader is left to go through the hard work of choosing tools and software that meets their needs. However, having read the book, they will be significantly better prepared to define the criteria for those tools and software to make the best possible choices, allowing them to meet their, and their organisation's, needs.
Jenkins: The Definitive Guide
Author: John Ferguson Smart
Publisher: O'Reilly
ISBN: 9781449305352
Recommended readers: software developers looking to implement Continuous Integration (CI)
As always, O'Reilly delivers a competent overview of a technical subject, specifically Jenkins in this book. The books covers everything from installation through first steps right up to more complex topics such as automated testing; code quality; and distributed builds. We're still reading this but it is a great way to quickly get into Jenkins!
If I only changed the software, why is the phone on fire?
Author: Lisa Simone
Publisher: Newnes
ISBN: 9780750682183
Recommended readers: students; educators; software developers new to embedded systems
This book's title has intrigued us for some time as it epitomises the situation we have found ourselves in on many occasions. We're sure many of us can recall that a software fix in one area of an application caused something seemingly unrelated to go wrong elsewhere.
Lisa Simone takes a story-telling approach to conveying the challenges a team of embedded developers, working to bring products to market each day, have to deal with. Working at the fictional "Hudson Technologies", Oscar, Josie, Ravi and Li Mei reflect people I have worked with at various organisations. Each chapter is pre- and post-fixed with a real-life example of a software-based failure. The chapter in between sees our intrepid quartet tackle daily development challenges, such as code reviews, picking up other peoples poorly documented work and frustrations over coding standards whilst dealing with a debugging issue related to the real-life example provided.
During the chapter, the reader has the chance to access the same information as the team and thus attempt to discover where the problem lies. As an example, in chapter 4 the team has to open some old code running on a oven system that has been running fine for years...up until now that is. Such rare transient failures are difficult to emulate or contrive as part of a training course or programme of study. Hence the true value of this work really shines through for the reader.
Each chapter ends with a summary, collating the lessons-learned into an easily consumable overview that highlights the most important points. The value here is the learning that is offered because, by structuring the challenge in story form and ending with a summary, Lise Simone follows precisely the working format we all use daily to find, resolve and review bugs in the development process.
The storytelling itself will not propel this text into a best-seller list of literary works any time soon, but it does make this typically dry subject matter readable and comes across as realistic. Additionally, the challenges highlighted at Hudson Technologies are authentic and, by including code snippets and describing real debugging methods, there are chances to implement some of the discussion points using the tools one has available.
We feel that this sort of text would be ideal for new employees straight out of education, educators looking for practical examples for teaching plans and students looking to prepare for the world of work. Overall, we have no concern in recommending this book.