Software Testing Non-Functional Testing
Non-functional testing evaluates how well the software performs, rather than what it does. While functional tests check features, non-functional tests measure qualities like speed, reliability, usability, and security.
The Core Difference
FUNCTIONAL TESTING NON-FUNCTIONAL TESTING ────────────────── ────────────────────── "Does search work?" "How fast does search return results?" "Can a user upload files?" "Can 10,000 users upload files at once?" "Does checkout complete?" "Does checkout work after 3 days of uptime?" Tests FEATURES Tests QUALITY ATTRIBUTES
Types of Non-Functional Testing
Performance Testing
Measures how fast the software responds under various conditions. A website that takes 10 seconds to load loses most of its users before they see the content.
Tools: JMeter, Gatling, Locust, k6 Metrics: Response time, Throughput, Error rate
Load Testing
Checks the software's behaviour under expected peak user loads. For example, testing whether an online exam portal can handle 5,000 students logging in simultaneously during an exam schedule.
Normal Load: 100 users → Response: 200ms ✔ Expected Peak: 5,000 users → Response: 800ms ✔ Above Peak: 8,000 users → Response: 5000ms ✘ (too slow)
Stress Testing
Pushes the system beyond its normal limits to see where it breaks and how it recovers. The goal is to find the breaking point and ensure the software fails gracefully.
┌────────────────────────────────────────────────┐ │ Normal: 500 users → OK │ │ Stress: 5,000 users → Response slows │ │ Extreme: 50,000 users → System crashes │ │ Recovery: Traffic drops → Does system restart? │ └────────────────────────────────────────────────┘
Spike Testing
Tests the software's response to a sudden sharp increase in load. An e-commerce site may have 100 users all day and then 50,000 users the moment a flash sale starts. Spike testing checks whether the site survives that sudden jump.
Soak Testing (Endurance Testing)
Runs the software under normal load for an extended period — hours or days — to check for memory leaks, slowdowns, and resource exhaustion that only appear over time.
Usability Testing
Checks whether real users can use the software easily and without confusion. A tester observes real users completing tasks and notes where they struggle, hesitate, or make errors.
Usability Test Task: "Find the settings to change your notification preferences" User A: Found it in 12 seconds → Good User B: Took 3 minutes and gave up → Usability issue found
Security Testing
Checks the software for vulnerabilities that attackers could exploit. Security testing is covered in depth in a later topic.
Compatibility Testing
Verifies that the software works correctly across different operating systems, browsers, devices, and screen sizes.
Browser Matrix: ┌──────────┬─────────────┬──────────┬─────────┐ │ Chrome │ Firefox │ Safari │ Edge │ │ Windows │ Windows │ macOS │ Windows │ │ ✔ │ ✔ │ ✔ │ ✔ │ ├──────────┼─────────────┼──────────┼─────────┤ │ Chrome │ Firefox │ │ │ │ Android │ Android │ iOS │ │ │ ✔ │ ✔ │ ✔ │ │ └──────────┴─────────────┴──────────┴─────────┘
Reliability Testing
Checks how consistently the software performs over time without failure. A payment gateway that fails 1 in every 100 transactions has a reliability problem.
Accessibility Testing
Checks whether the software is usable by people with disabilities — including those who use screen readers, keyboard-only navigation, or high contrast modes.
Key Non-Functional Metrics
METRIC DESCRIPTION GOOD EXAMPLE ────── ─────────── ──────────── Response Time Time to respond to a request Under 200ms Throughput Requests handled per second 500 req/sec Error Rate % of failed requests Under 0.1% Uptime % of time system is online 99.9% Mean Time to Fail Avg time before a failure 30 days Mean Time to Recover Avg time to restore service 5 minutes
Why Non-Functional Testing Is Often Skipped (And Why That Is a Mistake)
Non-functional testing requires specialised tools and time, so project managers sometimes deprioritise it under schedule pressure. The result: software that works in development but crashes in production when real users arrive. A well-known example is e-commerce sites that go offline on peak sale days because load was never tested. Non-functional testing is not optional — it is what makes software production-ready.
