Software based systems incrementally provide critical services to users. Mobile telephone systems, for example, are used in circumstances in which the malfunctioning may have disastrous consequences.
During the last years, software has been incorporated in devices used in daily life, such as audio and television. The diversity of systems in which software is incorporated is increasing. Thus, the software development process has to consider a variety of speci ¯cation techniques and models, incorporating also techniques from engineering sciences. In particular, the validation and veri¯cation processes have to be adapted to these new developments. For example, the testing based solely on the software speci¯cation is incomplete.
First, there is an implicit objective to verify that the program works correctly (as in the testing model of the 1957{1978, [GH88]).
Myers [Mye83] says that with the aim of demonstrating that a program does not fail, we can unconsciously select data that has a low probability of exposing faults. On the other hand, if the objective is to demonstrate that a program has faults, test data will have a higher probability of revealing them. In specification-based testing we select data for which the desired behavior for the system is defined. As stated by Boris Beizer [Bei95] testing should include both clean and dirty tests. Dirty tests are designed to \break" the software; clean tests are designed to demonstrate that software executes correctly. Specifications only provide clean tests.