The complexity of technical systems has been increasing for years and there is no foreseeable end to this. The crucial driver of innovation is software. Very powerful hardware in combination with complex software are the basis for trends such as IOT, autonomous driving, Smart Home and human-robot collaboration, to list just a few.
Today, software enables the realization of functionalities with a complexity that was never imaginable with electronics or mechanics alone.
However, this also increases the potential errors in a system. There is no such thing as guaranteed error-free software! A major reason for this is that it is not possible to test an industry relevant software system completely. This is due to the fact that the number of data and control flow paths that can be passed through a software system tends to be infinite. With this background, the following article introduces common test design techniques and evaluates their strengths and weaknesses.