The criticality of correct, complete, testable requirements is a fundamental tenet in software engineering. It can be difficult to specify the total behavior of a complex system because of the total number of possible uses of the system. Use cases are used to explore and elicit requirements and can help determine certain types of interaction to expect between the actors and the system. But use cases may not always combine to describe complete and consistent behavior. Once use cases are used to explore the problem and for front end domain analysis, other techniques can then be used to fully specify the solution strategy. In this paper, I explain one approach that has worked well in our embedded system project: sequence enumeration.

Sequence enumeration is a way of specifying stimuli and responses of an embedded system. It considers all permutations of input stimuli. Sequence enumerations consist of a list of prior stimuli and current stimuli, as well as a response for that particular stimuli, given the prior history. Equivalent histories are used to map certain responses. This technique maps directly to a state machine implementation. The strength of sequence enumerations is that the technique requires the developer to consider the obscure sequences that are usually overlooked.