Non-functional Testing
Software testing is mainly split into testing software features, or what the application “should do” (aka the functions), and checking non-functional requirements such as performance or usability.
What is non-functional testing?
The key difference between functional and non-functional testing is the fact that the latter is designed to test the software’s readiness by variables not considered during functional testing. Non-functional testing of a system evaluates characteristics of systems and software such as usability, performance efficiency, or security. Refer to ISO standard (ISO/IEC 25010) for classifying software product quality characteristics. Non-functional testing is the testing of “how well” the system behaves.
This is why functional and non-functional testing must be considered according to the priority of the testing process. Functional testing is the one that has priority in this process. However, contrary to common misconceptions, non-functional testing should often be performed at all test levels and done as early as possible. The late discovery of non-functional defects can be extremely dangerous for the success of a project.
Black-box techniques may be used to derive test conditions and test cases for non-functional testing. For example, boundary value analysis can be used to define the stress conditions for performance tests.
An integrated software testing process involves functional and non-functional testing, building extra confidence at each application layer. The thoroughness of non-functional testing can be measured through non-functional coverage. Non-functional coverage is the extent to which some type of non-functional element has been exercised by tests and is expressed as a percentage of the type(s) of the element being covered. For example, using traceability between tests and supported devices for a mobile application, the rate of devices that are addressed by compatibility testing can be calculated, potentially identifying coverage gaps.
When it comes to functional and non-functional testing, the test design and execution may involve special non-functional skills or knowledge, such as knowledge of the inherent weaknesses of a design or technology (e.g., security vulnerabilities associated with particular programming languages) or the specific user base (e.g., the personas of users of healthcare facility management systems).
Types of non-functional testing
Performance testing focuses on the ability of a component or system to respond to user or system inputs within a specified time and under specified conditions.
Usability Testing, also known as User Experience (UX) Testing, is a testing method for measuring how easy and user-friendly a software application is. A small set of target end-users use software applications to expose usability defects. Usability testing mainly focuses on the user’s ease of using the application, the flexibility of the application to handle controls, and the application’s ability to meet its objectives.
Load testing focuses on the ability of a system to handle increasing levels of anticipated realistic loads resulting from the transaction requests generated by several concurrent users or processes.
Stress testing focuses on the ability of a system or component to handle peak loads at or beyond the limits of its anticipated or specified workloads or with reduced availability of resources such as accessible computer capacity and available bandwidth.