Effective nonfunctional testing is often the forgotten testing task. It can be the elephant in the room that no one wants to talk about.
To start with, nonfunctional requirements (NFRs)—such as performance, reliability, installability, scalability, usability, security, availability, and so forth—are hard to quantify. Just as importantly, finding someone who has the depth and breadth of knowledge to define NFRs is usually a challenge.
In a traditional waterfall cycle, we may have some definitive NFRs in the system or requirements specification. In safety-critical systems, NFRs are much better defined, but for many commercial software development environments, NFRs remain elusive and tend to be a "late in the lifecycle" testing activity.
As organizations embrace agile, NFRs may be an even greater challenge—both functional and nonfunctional requirements must be considered and validated in each (short) sprint. Ideally, NFRs are a continuous focus during each sprint, instead of being left to the last one.
Here are some ways to better address NFRs in your agile development lifecycle.
Defining nonfunctional requirements:
For brand-new products, use analysis, experiments, and comparative testing, and collect or test user expectations.
For evolving products, use analytics tools to mine existing application and system data.
Documenting nonfunctional requirements:
In waterfall methodologies, NFRs are included in a separate document or category in the repository. But in agile, NFRs normally cut across several user stories, or even the entire system, sp require some special consideration.
Continuously testing both functional and nonfunctional characteristics across sprints is the key to delivering a minimum viable product.