Types of Software Testing
The following is a work in progress. It reflects my half-baked sense of the common usage of the following terms.
Unit Tests
Test a really small part of the system in isolation.
- test a single method or function
- stub or mock-out all complex dependencies
- take a programmer's perspective (not an end-user's perspective)
Integration Tests
Test that individual parts work together. Do not cross network boundaries.
End-to-End Tests
Test that individual parts work together. Do cross network boundaries.
Smoke Tests
The simplest integration or end-to-end test. Does the system explode?
Functional Tests
Will it actually work when a user tries it? Take a user's perspective.
Regression Tests
Test whether a new feature introduces a bug.
Some Sources
Some of these sources are more authoritative than others are.
- StackOverflow: What is a unit test, integration test, smoke test, regression test?
- StackOverFlow: Unit tests vs functional tests
- Google Testing Blog: Test sizes
- Martin Fowler: Microservice Testing Strategies
- Software Testing Help: Types of software testing
- Testing Excellence: Types of software testing