Testing

Software will always do what 'it was designed to do'

But we need to validate that software will always do what 'we expect it to do'

This is where testing fits in.

Unit

Testing each component for accuracy of function


Integration

Test the new changes connect and interact with the dependencies


Acceptance

Criteria by which the end user validates the system or solution as fit for purpose


Performance

Load

Does the solution meet specification of metrics

Stress

By pushing the system with throughput we can learn the limitations and behaviour of the system as it fails

Soak

Testing the performance of a solution running an expected workload over an extended period of time to uncover failures. e.g. memory leaks, disk fills etc.


Smoke

Quick and basic tests to provide assurance that all major functions of the solution are functioning as expected. We can consider this a high level health check of operation


End to end

These are behavioural tests that focus on scenarios rather than tests. It does this by replicating user behaviour and verifying user workflows. They can be expensive to maintain and extend which is why it is normal to have fewer but broader end to end tests and more lower level tests