There are no perfect techniques. Testing is a best effort activity.

Approaches

  1. Black box testing
    1. Covers as much specified behaviour as possible from software description
  2. White box testing
    1. Covers coded behaviour and is based on the code which reveals implementation errors

Black Box

  • Checks conformance with specifications
  • Scales up (different techniques at different granularity levels)
  • Depends on the specification notation and degree of detail
  • Does not tell us how much of the system is being tested
  • What if the software performed some unspecified, undesirable task?

White Box

  • Lets you be confident in test coverage
  • Is based on control or data flow coverage
  • Does not scale up (applicable at the unit level)
  • Cannot reveal missing functionality

Levels of Software Testing

  1. Unit Testing
    1. Test individual functionality in isolation
  2. Integration Testing
    1. Test the interface of related units
  3. System Testing
    1. Test the entire software system and evaluate the systems compliance with the specified Requirements

Effectiveness

  • The goal here is to find all bugs in a software. The state of the art way of testing is: Mutation Testing which should be used in conjunction with traditional testing techniques.