Types of Software Testing with Examples (2026 Complete Reference)
A complete taxonomy of software testing types — functional, non-functional, manual, automated, black-box, white-box — with a real example and tool recommendation for each.

Last updated: July 11, 2026 · 12 min read
Software testing is not one activity — it's a family of disciplines. This reference groups every major testing type by category, gives a one-line example, and points you to the tool of choice in 2026. Pair with our Manual Testing Complete Guide and Test Pyramid.
The four main buckets
- Functional — does the app do what the spec says?
- Non-functional — how well does it do it? (performance, security, usability)
- Structural / white-box — is the internal code correct?
- Change-related — do previous fixes still work? (regression, retesting)
Functional testing types
| Type | Example | Typical tool |
|---|---|---|
| Unit testing | Test calculateTax() in isolation | Jest, JUnit, pytest |
| Integration testing | API + DB layer end-to-end | REST Assured, Supertest |
| System testing | Whole checkout flow on staging | Playwright, Selenium |
| UAT | Business users validate a release | TestRail, Jira |
| Smoke testing | Post-deploy sanity of top-5 flows | Playwright + CI |
| Sanity testing | Hotfix spot-check | Manual |
| Regression testing | Re-run test pack after change | Playwright, Cypress, Selenium |
Non-functional testing types
| Type | Example | Typical tool |
|---|---|---|
| Performance testing | Response time under 500 users | k6, JMeter |
| Load testing | System behavior at expected peak | k6, Locust |
| Stress testing | Behavior beyond capacity | JMeter, Gatling |
| Security testing | OWASP Top 10 scan | ZAP, Burp Suite |
| Accessibility testing | WCAG 2.2 audit | axe-core, Lighthouse |
| Usability testing | Task success + time-on-task | Maze, UserTesting |
| Compatibility testing | Chrome / Safari / Edge parity | BrowserStack, Sauce Labs |
| Localization testing | de-DE currency + RTL layouts | Playwright + fixtures |
Structural (white-box) testing
- Statement coverage — every executable statement hit at least once.
- Branch coverage — every if/else path executed.
- Mutation testing — deliberately break code, verify tests catch it (Stryker, PIT).
- Path testing — every logical path through a function.
Black-box vs white-box vs grey-box
| Approach | Knowledge required | Typical tester |
|---|---|---|
| Black-box | Requirements only | Manual QA |
| White-box | Full source code | Developers, SDETs |
| Grey-box | APIs + partial internals | API testers, SDETs |
Exploratory & ad-hoc testing
Not scripted. Testers simultaneously learn, design tests, and execute — highly effective at finding bugs that scripted tests miss. See our deep dive on exploratory testing.
Continue your learning
How to pick the right test type — a decision matrix (2026)
The taxonomy is easy to memorise. Choosing which type to run for a given change is what separates a junior tester from a senior QA lead. Use this decision matrix on any pull request:
| Change type | Must-run test types | Nice-to-have |
|---|---|---|
| New UI component | Unit, component, visual regression, accessibility | Cross-browser E2E |
| New API endpoint | Unit, contract (Pact), integration, security (auth, IDOR) | Load, chaos |
| Refactor with no behaviour change | Full regression suite, mutation testing | Performance diff |
| Database migration | Migration rehearsal on prod-like data, rollback drill, integration | Data quality tests |
| Third-party integration swap | Contract, integration in a sandbox, feature-flag canary | Chaos test for provider outage |
| Copy / content change | Visual regression, i18n snapshot | Accessibility rerun |
Worked example: adding a Save-for-later button to an e-commerce cart
Which test types fire? A senior QA would spec at least:
- Unit — the reducer that adds an item to savedItems.
- Component — the button renders the right icon in the three cart states (empty, one item, over stock limit).
- Integration — POST /api/cart/save persists to the user session and deduplicates.
- End-to-end — add to cart, save, sign out, sign back in, item is still saved.
- Accessibility — button has an aria-label, is reachable by keyboard, and announces state change.
- Visual regression — cart layout unchanged on the four highest-traffic viewports.
- Analytics validation — a cart_item_saved event fires with the correct SKU.
Miss any one of those and something reaches production — usually the analytics event, which product managers discover three sprints later when the funnel report is empty.
Functional vs non-functional at a glance
- Functional answers does the feature do what it should? — unit, integration, system, UAT.
- Non-functional answers does it do it well enough? — performance, load, security, usability, accessibility, compatibility, reliability.
Every release should touch both categories. Teams that skip non-functional testing are the ones that make headlines for outages after a viral launch.