Functional, Nonfunctional, Smoke, Sanity, Regression, and Retesting
Early in a QA career, these terms can be confusing. They often appear together but serve different purposes. Understand them as testing goals in real team work rather than interview vocabulary.
Functional testing
Functional testing checks whether a system does what requirements specify: login works, orders are created, emails are sent, and calculations are correct. Its central question is whether system behavior is implemented correctly.
- →Functional testing relies on requirements and business logic.
- →It checks the correctness of actions and results.
Nonfunctional testing
Nonfunctional testing evaluates how the system performs its work: performance, security, usability, stability, compatibility, accessibility, and other qualities. A journey can be functionally correct yet difficult, slow, or unsafe, creating nonfunctional concerns.
- →Functional correctness alone does not guarantee quality.
- →Nonfunctional risks can be business-critical.
Smoke testing
Smoke testing is a short, quick check that a build is operational and key features work at a basic level. Teams often smoke-test a new build before deciding whether to proceed with deeper testing.
- →Smoke testing asks whether the build is suitable for further testing.
- →It usually covers the most critical user paths.
Sanity testing
Sanity testing quickly checks a specific area after changes. After a cart-discount fix, QA might focus on the changed area rather than the whole product. Its scope is narrower than regression and it commonly follows focused changes.
- →Sanity testing is a focused check that changed behavior is reasonable.
- →It helps after bug fixes and localized improvements.
Regression testing
Regression testing checks whether changes broke previously working behavior. It becomes increasingly important as products grow in complexity. It may be manual or automated, full or partial. Integration-heavy systems particularly need it because changes in one area can unexpectedly break another.
- →Regression protects previously working functionality.
- →Select its scope according to risk and defect history.
Retesting
Retesting verifies a particular defect after its fix. Regression checks surrounding effects, while retesting checks whether the original problem was resolved. Teams often perform them together, but their purposes differ.
- →Retesting verifies a specific fix.
- →Regression checks side effects of changes.
How this works in practice
After a new build, a team may smoke-test first, perform sanity checks on changed functionality, retest fixed defects, and run regression before release or after major updates. Nonfunctional checks, such as performance or security testing, may run alongside these.
- →One release can include several testing types.
- →Focus on the purpose of each check.
Conclusion
Ask which goal you are addressing: functional correctness, quality characteristics, build viability, a specific fix, or effects on existing behavior. A clear purpose makes choosing the terminology and approach easier.