Table of Contents


Test pyramid

Testing techniques

Unit testing

Unit tests (aka. developer tests) are testing the correct behavior of individual parts of the source source code, e.g. classes, methods, functions or groups thereof. All not tested parts of the code are expected to work correctly.

The purpose of the unit tests is to feel confident that the code works correctly and didn't break anything (see youtube.com).

The test methods should follow the "Arrange Act Assert" pattern. The "Arrange" part sets up the test objects, "Act" performs the action to be tested and "Assert" checks that the result is correct. The sections should be separated by blank lines (see c2.com).

The whole test suite need to be fast so that it can be executed multiple times a day, at least before pushing it to the SCM.

Test-driven development

Measuring test coverage

Integration testing

Functional testing

Functional testing consists of five steps:

  1. Identify the expected functionality
  2. Create the input data for the tests
  3. Determine the expected output data
  4. Execute the test plan
  5. Compare the actual with the expected output

(see The Certified Quality Inspector Handbook, p. 197)

  • Smoke testing
  • Retesting
  • Regression testing
  • Gorilla testing
  • Sanity testing
  • Adhoc testing
  • Negative testing

Non-function requirements testing

Usability testing

Performance testing

User acceptance testing

Acceptance test-driven development (ATDD)

Alpha testing

Beta testing

Bug reports

A bug report should contain

  • A title with a descriptive one-line summary
  • Description of the observed result
  • Expected result
  • Steps to reproduce
  • Environment (OS, tools, version numbers)
  • Diagnostic information (logs, stacktraces, etc.)