The software life cycle:

flowchart TB
    id1(End user) --> id2(Requirements)
    id2(Requirements) --> id3(Objectives)
    id3(Objectives) --> id4(External specification)
    id4(External specification) --> id5(System design)
    id5(System Design) --> id6(Program Structure Design)
    id6(Program Structure Design) --> id7(Module Interface Specifications)
    id7(Module Interface Specifications) --> id8(Code)

The testing cycle should be based on the development cycle. In other words, you should be able to establish a one-to-one correspondence between development and testing processes. For instance:

  • The purpose of a module test is to find discrepancies between the program’s modules and their interface specifications.
  • The purpose of a function test is to show that a program does not match its external specifications.
  • The purpose of a system test is to show that the product is inconsistent with its original objectives

Function testing Function testing is a process of attempting to find discrepancies between the program and the external specification (e.g., a description of the program’s behavior from the end user perspective)

System testing System testing aims at comparing the system to its original objectives. It is a more high-level process compared to the function testing. The focus is on issues related to the external specification (interfaces, guis). Examples:

acceptance testing acceptance testing is the process of comparing the program to its initial requirements and the current needs of its end users

Test completion criteria When, exactly, we can stop testing a system? There is no way of knowing if the error just detected is the last one

  • stop when time and resources are expired
  • stop when a predefined arbitrary number of errors have been found (e.g., using industry-wise averages)
  • plot the number of errors found per unit time during the test phase and examining the shape of the curve