1. Software testing principles

Last modified by Tiina Silvonen on 2026/11/06 08:29

 

Software testing is an essential part of software development and quality assurance. Its purpose is to ensure that a system, product, or service works as expected and meets its defined requirements and user needs. Testing helps identify defects, deficiencies, and unexpected behaviour before they affect users or other systems. 

Testing should be planned as part of software development rather than treated as a separate activity performed only before release. The scope and methods of testing should be appropriate for the system, its risks, and the development model being used.

Goals of testing

The main goals of software testing are to:

  • Identify defects and problems. Find errors, deficiencies, and inconsistencies in the behaviour of the software.
  • Ensure quality. Verify that the software meets its defined requirements and works as expected.
  • Increase reliability. Build confidence that the software behaves consistently and reliably.
  • Reduce risks. Identify functional, security, performance, accessibility, and other quality issues before they cause problems for users or production services.
  • Support continuous improvement. Testing provides information that can be used to improve the software, its architecture, development practices, and testability.

These goals are based on the testing objectives defined in the original testing guideline. 

General principles

The following principles should guide testing:

  1. Plan testing early.
    Consider testing when requirements, user stories, and acceptance criteria are defined. Requirements should be clear enough that their implementation can be verified.
  2. Choose testing according to risk.
    Not every part of a system requires the same amount or type of testing. Pay particular attention to business-critical functionality, integrations, security-sensitive functionality, frequently used features, and areas where failures would have significant consequences.
  3. Test at appropriate levels.
    Testing can take place at different levels, including unit, integration, system, and acceptance testing. Different levels identify different kinds of problems and complement each other. 
  4. Consider both functional and non-functional quality.
    Testing should not only verify whether features work correctly. Depending on the system, testing should also consider qualities such as accessibility, performance, security, usability, and compatibility. 
  5. Automate where it provides value.
    Automation is particularly useful for tests that are repeated frequently, cover critical functionality, or would be time-consuming to execute manually. Automation should be maintainable and reliable, and its benefits should justify its implementation and maintenance costs. 
  6. Make testing repeatable.
    Tests should have clear preconditions, test data, steps, and expected results where appropriate. Defects should be documented so that they can be reproduced, corrected, and retested.
  7. Use suitable test environments and data.
    Testing should normally be performed in dedicated development, test, or QA environments rather than in production. Test data must be appropriate for the purpose of the test, and real personal data must not be used in test environments.
  8. Testing is a shared responsibility.
    Developers, product owners, testers, and other relevant stakeholders contribute to testing in different ways. Responsibilities should be agreed on within the project or team rather than assuming that quality is the responsibility of a separate tester