Test Type Definitions

We use this to ... so that we can ...

Unit Test (UT)

  • Low-level, focusing on a small part of the software such as a Java class or Angular component together with associated collaborators

  • Usually written by developers or perhaps software engineers in test, using their regular IDEs and testing frameworks such as IntelliJ, JUnit, VS Code and JEST

  • Run faster than any other kind of test, allowing a suite of thousands of unit tests to be run in a few seconds

  • Very scalable

  • Automatable

  • The primary facilitating mechanism for refactoring

Integration Test (INT)

  • Determine if independently developed units of software work correctly when they are connected to each other.

  • Focusing on larger groups of collaborating Java classes or Angular components together with I/O dependencies such as databases or network connections.

  • I/O dependencies should not made at the expense of execution speed - for example a fast running in memory or local docker database can be leveraged over a hosted development database or a Contract Test to mock out an API endpoint

  • Usually written by developers or perhaps software engineers in test, using their regular IDEs and testing frameworks such as IntelliJ and junit or VS Code and jasmine.

  • Run fast allowing a suite of hundreds or thousands (depending on I/O dependencies) of integration tests to be run in a few seconds

  • Very scalable

  • Primary facilitating mechanism for refactoring

Contract Test (CT)

  • Similar to an integration test used specifically for the purpose of ensuring that a pair of applications will work correctly together by checking each application in isolation to ensure the messages it sends or receives conform to a shared understanding that is documented in a "contract”.

  • The network dependency is mocked by the contract broker so contract tests run fast

  • Usually written by developers or perhaps software engineers in test, using their regular IDEs and testing frameworks such as IntelliJ and junit or VS Code and jasmine.

  • Run fast allowing a suite of hundreds or thousands of contract tests to be run in a few seconds

  • Very scalable

  • Primary facilitating mechanism for refactoring interdependent services independently of one another

Exploratory Test

  • An exploratory test is one which emphasizes a rapid cycle of learning, test design, and test execution. Rather than trying to verify that the software conforms to a pre-written test script, an exploratory test explores the characteristics of the software, raising discoveries that will then be classified as reasonable behaviour or failures.

Acceptance Test (AT)

  • Testing based on story card acceptance criteria to enable the tester (manual) or developer (automated) to determine whether or not the software is ready for consumption by the customer.

  • Scoped to a particular story only

  • Performed from the customer perspective - usually a UI (eg browser or DISC terminal) or an API client (eg CTM integration)

  • Maximum context and value with respect to customer requirement - significant determining factor in confidence of story definition of done

  • Slower than integration test as a local service together with supporting out of process collaborating services are necessary to exercise the code

  • As such, these tests are harder to maintain and scale

System Test (ST)

  • Similar to an Acceptance Test but instead requires live versions of one or many deployed services in hosted environments, requiring test environment and network access

  • Teams currently need to wait overnight before test subject is deployed to NXI or NXQ

  • Exercises code paths through one or many services and dependent services

  • Usually written by developers or perhaps software engineers in test, using their regular IDEs and testing frameworks such as IntelliJ and junit or VS Code and jasmine.

  • Run duration is an order of magnitude slower and largely determined by the scope of the execution path through the dependent services. A single system test could take between one and several seconds to run.

End to End Test (E2E)

  • Confirming that full user journey processes can be completed throughout the entire value stream. E.g Establish customer, Create/amend/service or renew a policy and lodge and process a claim

  • Scoped to a customer value stream

  • Performed from the customer perspective - usually a UI (eg browser or DISC terminal) or an API client (eg CTM integration)

  • Maximum context and value with respect to customer requirement - significant determining factor in level of confidence of working software

  • Very slow to run - depending on scope of test, execution duration can minutes to tens of minutes

  • Hard to maintain

  • Does not scale

  • Depending on implementation, can be repurposed for load testing

  • Automated or Manual

Penetration Test (PEN)

  • Authorised simulated cyber attack on a computer system, performed to evaluate the security of the system.

  • Automated or Manual

Synthetic Test (SYN)

  • Method of understanding how our call centre agents and customers experience our applications by proactively testing public production environment endpoints and 3rd party APIs such as payment gateways.

  • Automated

References

Last updated