Designing system-level tests
At this point in the system development process, we will assume that our high-performance embedded device has been designed and constructed, and that an initial checkout of its basic functionality indicates everything appears to be working properly. It is time to subject the system prototype to a comprehensive set of tests to ensure it behaves as intended under all anticipated operating conditions, as well as in response to all forms of valid and invalid user input.
While this may seem straightforward, it is in fact a formidable challenge. As a simple example, consider a system that merely accepts as input a text string entered by the user. If the length of the string is not restricted, the universe of potential inputs is effectively infinite. It will never be possible to test all possible inputs the system might receive. Even for a simple system such as this, we must carefully decide what kinds of tests are needed and how much testing is enough.
...