The difference fits in a single sentence: functional testing checks what the system does; non functional testing checks how it does it. If a "Pay" button charges the right amount, that is functional. If that same button responds in under a second while 5,000 people buy at once, that is non functional. A product can pass every functional test and still fall over on launch day because nobody measured the second part.
That is the expensive mistake. Teams fill out sheets of cases that verify business rules (functional) and take for granted that "it works." But working on the developer's machine, with a single user and clean data, is not the same as working in production with real load, slow networks, and users on a screen reader. This article separates the two axes and shows why you need both.
01 · the whatFunctional testing: it verifies behavior
A functional test confirms that a product feature does what its specification says. You give it an input, you expect a concrete output, and you compare. If the rule says "a cart with more than three products gets a 10 % discount," the test drops in four products and verifies that the total falls by that 10 %. It does not matter how long it took or how much memory it used: what matters is that the result is correct.
The international standard for software product quality, ISO/IEC 25010, groups this under functional suitability: that functions are complete, correct, and appropriate for the task [1]. In practice, almost everything a QA analyst writes as a "test case" with steps and an expected result is functional.
Functional answers a single question: given this, does the system return what it should?
Typical examples of functional tests:
- Login: valid credentials get you in; a wrong password shows the correct error.
- Validations: an email with no at sign is rejected; an empty required field blocks you from continuing.
- Business rules: tax is calculated by country; free shipping applies above a certain amount.
- End to end flows: register, confirm by email, sign in, and buy from start to finish.
02 · the howNon functional testing: it verifies quality of service
A non functional test does not ask whether the result is correct, but whether the system is good while it delivers that result: fast, stable, secure, usable, accessible. These are the qualities the user feels even without ever naming them. Nobody says "what great functional suitability"; people say "this flies" or "this crashes all the time."
ISO/IEC 25010 names these quality characteristics beyond the functional ones. Among those most used in QA [1]:
- Performance efficiency: response times, resource use, capacity under load.
- Security: confidentiality, integrity, authentication, resistance to attacks.
- Reliability: availability, fault tolerance, recoverability.
- Usability: how easy it is to learn and operate the product without frustration.
- Compatibility, maintainability, and portability: it coexists with other systems, it changes without breaking, it moves between environments.
Accessibility deserves its own line. A product can pass every functional test and still be unusable for someone navigating with a keyboard or a screen reader. The W3C's WCAG guidelines give verifiable criteria (color contrast, alternative text, visible focus, tab order) that turn "accessible" into something measurable rather than an opinion [3].
Functional tells you whether the product works. Non functional tells you whether it survives contact with real users.
They are harder to write. "The system must be fast" is not a test: it does not say how fast or under what load. A useful non functional test demands a number (an oracle): "95 % of checkout responses must take under 800 ms with 2,000 concurrent users." Without that threshold, there is no way to say whether it passed or failed, and that is why many teams skip them.
03 · togetherWhy you need both axes, not one
The mental trap is treating them as levels: "functional first and, if there is time left, non functional." They are not levels, they are independent axes. A product occupies a point on both at once. You can have perfect functionality and disastrous performance, or the reverse: something blazingly fast that miscalculates the tax.
Think of an ATM. Functional: it hands over the exact amount you asked for and updates your balance. Non functional: it does that operation in a few seconds, does not reveal your PIN, and keeps working even when hundreds of people use it on payday. If the functional axis fails, it gives you too much money or too little. If the non functional one fails, it takes five minutes, hangs at peak hour, or leaks your PIN. Neither failure is acceptable, and no amount of testing on one axis catches the failures of the other.
ISTQB, the reference certification body in software testing, explicitly classifies test types as functional, non functional, white box, and confirmation/regression, precisely so that a test plan covers both axes deliberately and not by accident [2].
A practical rule for telling which one you are facing: if the test can be described as "given X, the system must return Y," it is functional. If it is described with an adverb or a quality ("quickly," "securely," "without crashing," "accessibly"), it is non functional, and then you still need to attach a number to it.
The lesson for anyone building a product: passing every functional case is a necessary condition but not a sufficient one. The day your product grows, load, security, and accessibility stop being details and become what decides whether people stay or leave. Measure them before production does it for you.
Fuentes
- ISO/IEC 25010:2011, Systems and software engineering. Systems and software Quality Requirements and Evaluation (SQuaRE). System and software quality models. International Organization for Standardization (ISO). Defines the product quality model and its characteristics (functional suitability, performance efficiency, security, reliability, usability, among others).
- ISTQB, Certified Tester Foundation Level (CTFL) Syllabus, International Software Testing Qualifications Board. Classifies test types as functional, non functional, white box, and confirmation/regression.
- W3C, Web Content Accessibility Guidelines (WCAG) 2.1, World Wide Web Consortium. Recommendation with verifiable conformance criteria for web accessibility.