Testing is often relied on to find all the critical defects in software. Unfortunately, the most common methods of functional (black-box) and structural (white-box) testing miss many of the problems latent in embedded real-time systems. Software defects due to stack overflows, timing anomalies, race conditions, and deadlock cannot generally be detected with traditional testing methods. This paper illustrates techniques which can be used to find these and other types of errors.