Dung (Donny) Nguyen

Senior Software Engineer

Types of Testing

Software testing is not a single activity — it is a family of techniques, each answering a different question about your application. Does the feature work? Is it fast enough? Is it secure? Is it easy to use? Understanding the types of testing helps you pick the right tool for the risk you are trying to manage. This article maps out the major categories and how they fit together.

Two Big Dimensions

Most testing types can be placed along two independent dimensions:

A single test can sit in several buckets at once — for example, an automated, black-box, functional API test.

Functional Testing

Functional testing checks that the system behaves according to its requirements. It focuses on what the software does.

By Level (the Testing Pyramid)

By Purpose

Non-Functional Testing

Non-functional testing measures how well the system performs rather than whether a feature exists. It targets qualities like speed, resilience, and safety.

By Approach: Black-Box vs. White-Box

By Execution: Manual vs. Automated

Specialized Testing Techniques

As teams mature, more targeted techniques help manage specific risks:

How the Types Fit Together

No single type is enough on its own. A robust strategy layers them:

Unit → Integration → System → End-to-End      (functional levels)
        +
Performance · Security · Usability · Accessibility   (non-functional)
        +
Smoke · Regression · Acceptance                (purpose-driven checks)

Use the Testing Pyramid to balance functional levels — many fast unit tests, fewer integration tests, and a small number of E2E tests — then add non-functional and specialized testing to cover the risks that matter most for your product.

Conclusion

The many types of testing exist because software can fail in many different ways. Functional testing confirms the software does the right thing; non-functional testing confirms it does so quickly, safely, and pleasantly. By understanding these categories — and combining them thoughtfully — you can build a testing strategy that catches the right problems at the right time, giving you the confidence to ship.