While functional tests determine if the system does what it’s supposed to, non-functional tests determine how well the system performs the tasks it was designed to do. These tests validate the readiness of a system, or subsystems based on predefined criteria that are not generally covered in functional tests. Non-functional tests look deeper into the system to make sure both the hardware and software can handle heavy loads, can withstand hacking attempts, or even make sure all of the user documentation is thorough and useful to the end user. It also takes into consideration the expectations of the end user. This process verifies the readiness of the entire system and can have a great influence on your client’s satisfaction. During non-functional testing, the attributes verified are not specific to any one function, but rather the quality of the system as a whole. It helps to answer questions such as: “How fast does it respond?”, “How many people can login at once?”, “How quickly can a new user learn the application?”, or “Is it suitable from the perspective of the typical end user?”
While it’s easy for non-functional requirements to be vague, proper testing demands that requirements are very specific and reasonable. A stakeholder may want the system ‘to be fast’, but testers need criteria that are measurable. Non-functional requirements need to be specific, such as: ‘the system should respond within 2 seconds during a normal load and 5 seconds during a heavy load’, with the definitions of normal and heavy loads given as well. A system could easily meet all functional requirements but still not demonstrate appropriate behavior to an end user leading to loss of trust in the system or a lack of desire to use it. These tests are vital to ensuring that your customers don’t look to the competition.
Examples of non-functional testing types include security testing that validates the safety of customer information, performance testing that evaluates the application and processes under varied stressors, usability testing that assesses navigation and flow, or comparison testing that places your system up against its competitors for an in depth evaluation.