If the aim of a software development project is to “deliver widget X to do task Y” then the aim of “functional testing” is to prove that widget X actually does task Y.
Simple ? Well, not really.
We are trapped by the same ambiguities that lead developers into error. Suppose the requirements specification says widget “X must do Y” but widget X actually does Y+Z? How do we evaluate Z? Is it necessary? Is it desirable? Does it have any other consequences the developer or the original stake-holder has not considered? Furthermore how well does Y match the Y that was specified by the original stake-holder?
Here you can being to see the importance of specifying requirements accurately. If you can't specify them accurately then how can you expect someone to deliver them accurately or for that matter test them accurately?
This sounds like common sense but it is much, much harder than anything else in the software development life cycle. See my Primer on Project Management for a discussion.
Alpha and Beta Testing
There are some commonly recognised milestones in the testing life cycle.
Typically these milestones are known as “alpha” and “beta”. There is no precise definition for what constitutes alpha and beta test but the following are offered as common examples of what is meant by these terms :
Alpha – enough functionality has been reasonably completed to enable the first round of (end-to-end) system testing to commence. At this point the interface might not be complete and the system may have many bugs.
Beta – the bulk of functionality and the interface has been completed and remaining work is aimed at improving performance, eliminating defects and completing cosmetic work. At this point many defects still remain but they are generally well understood.
Beta testing is often associated with the first end-user tests.
The product is sent out to prospective customers who have registered their interest in participating in trials of the software. Beta testing, however, needs to be well organised and controlled otherwise feedback will be fragmentary and inconclusive. Care must also be taken to ensure that a properly prepared prototype is delivered to end-users, otherwise they will be disappointed and time will be wasted.