Follow @jack_ganssle

For novel ideas about building embedded systems (both hardware and firmware), join the 28,000+ engineers who subscribe to The Embedded Muse, a free biweekly newsletter. The Muse has no hype and no vendor PR. Click here to subscribe.

This month's (December 2018) giveaway is a piece of junk. Or rather, a battered and beaten "historical artifact." It's a Philco oscilloscope from 1946. The manual, including schematic, is here. I picked it up on eBay a few years ago, and while it's kind of cool, have no real use for the thing. It powers up and displays a distorted waveform, usually, but is pretty much good for nothing other than as a desk ornament. I wrote about this here. (The thing is so old I'd be afraid to leave it plugged in while unattended). Enter the contest here.

By Jack Ganssle

More on Requirements

Summary: What makes great requirements? A few simple rules serve as guidance.

Last week's article about "needing them stinkin' requirements" (http://www.eetimes.com/discussion/other/4206193/I-Desperately-Need-Stinkin-Requirements) generated quite a bit of response. I recommended Karl Wiegers' book "Software Requirements" as a great introduction to the art and science of gathering - and, as one poster noted - analyzing requirements.

But there is a five second "elevator talk" version. Some years ago, at a conference in Mexico, I attended a talk Steve Tockey's gave about requirements. He very ably and succinctly summed up the rules for requirements, which I'll paraphrase here:

 A requirement is a statement about the system that is unambiguous. There's only one way it can be interpreted, and the idea is expressed clearly so all of the stakeholders understand it.

 A requirement is binding. The customer is willing to pay for it, and will not accept the system without it.

 A requirement is testable. It's possible to show that the system either does or does not comply with the statement.

The last constraint shows how many so-called requirements are merely vague and useless statements that should be pruned from the requirements document. For instance, "the machine shall be fast" is not testable, and is therefore not a requirement. Neither is any unmeasurable statement about user-friendliness or maintainability.

An interesting corollary is that reliability is, at the very least, a difficult concept to wrap into the requirements since "bug-free" or any other proof-of-a-negative is hard or impossible to measure. In high-reliability applications it's common to measure the software engineering process itself, and to buttress the odds of correctness by using safe languages, avoiding unqualified SOUP, or even to use formal methods (actually, the latter is not a common practice, but is one that has gained some traction).

What do you think? Does your group do a good job eliciting and analyzing requirements?

Published July 27, 2007