Functional and Non-Functional Testing
Basketly's search returns exactly the right products for "milk". Every result is correct. But it takes eleven seconds, a screen reader cannot find the search box, and on older iPhones the results overlap. Is search working? It does the right thing, badly. That gap is the difference between the two biggest families of testing.
The rule
Functional asks "what does it do?"; non-functional asks "how well?"
Functional testing checks behaviour against the requirements. Given this input, does the feature produce the right output? Searching "milk" lists milk; SAVE10 takes 10% off a ₹600 cart; a wrong password is refused.
Non-functional testing checks the qualities of that behaviour. The main ones:
| Quality | Basketly question |
|---|---|
| Performance | Do results appear within 1 second at peak? |
| Security | Can one customer see another's orders? |
| Usability | Can a first-time user check out without help? |
| Accessibility | Can someone using a screen reader or only a keyboard shop? |
| Compatibility | Does it work on the browsers, phones and screen sizes customers use? |
| Reliability | Does it keep working through a whole busy evening? |
Non-functional requirements are often left unwritten, so testers must ask for them: "fast" is not testable, but "results within 1 second for 95% of searches" is.
The shortcut
Read the check aloud and listen for its shape. If it says "it should do X", it is functional. If it says "it should do X within, for, on, safely or for everyone", a quality has crept in and it is non-functional.
"Searching 'rice' lists rice products"
Pure behaviour: what it does. Functional.
The trap is stopping after the functional checks pass. Customers leave slow, confusing or inaccessible apps even when every result is correct.
Drills
Answer fast — trust the rule.
"A wrong password shows an error and does not log in." What kind of test?
"Checkout works on Chrome, Firefox and Safari." What kind of test?
The requirement says "search must be fast". What should a tester do?
A screen reader user cannot find Basketly's Pay button. Which quality failed?
Remember
- Functional asks "what does it do?"; non-functional asks "how well?"
- Listen for within, for, on, safely or for everyone: that is a quality.
- Turn vague qualities into numbers before you test them.
