One way to do this is to input random garbage to the protocol stack and hope that it
triggers an unexpected code path. Tools called "fuzzers" use this approach. The more intelligent approach is to input a sequence of messages which will move the state
machine into a known state, and then provide unexpected or random input at
each possible state. This approach gives you some guarantees about the extent
of the test coverage.
The list below includes software based robustness tests that are predesigned (meaning they are not test design
frameworks) and are not hardware based. Fuzzers and boxes will be covered in a separate section.