Testing is often split into two broad families: functional and non-functional. Functional testing checks what the system does; non-functional testing checks how well it does it.
Functional Testing
Verifies features against requirements.
- Login works with valid credentials.
- A payment is processed correctly.
- Search returns the right results.
- Business rules are enforced.
Non-Functional Testing
Verifies quality attributes.
- Performance — speed under load.
- Security — resistance to attack.
- Usability — ease of use.
- Reliability, scalability, compatibility.
Why the distinction matters
A feature can be perfectly correct and still unacceptable — a checkout page that works but takes thirty seconds to load, or a login that works but exposes passwords. Functional testing alone would pass both. Non-functional testing exists to catch exactly these problems.
Conclusion
Functional testing asks "does it work?"; non-functional testing asks "is it good enough?". Together they give a complete picture of quality — correctness plus the attributes that make software genuinely usable in the real world.