At some point in the integration and testing of a software system, software which
conducts real world input and output will have to be tested.Such real world input and output may be to files, to communication devices, or to a user interface.
One way of testing real world input and output is to redirect it to the test driver. Many operating systems (both host and target) provide facilities for redirecting input and output. For example, on a UNIX system a `pipe' could be used to connect between software under test and a test driver. Other operating systems have similar facilities.
It is usually good practice to design software so that it is capable of redirecting input and output, even if such redirection will never be required in use. The benefits in ease of testing will soon offset any implementation costs.
This still leaves the actual physical input and output in the target environment to be tested. simulate inputs to and collect outputs from software under test in the target environment. The real target input and output devices are used.