Shift Left Non Functional Requirements Testing
Ritu Chowdhary
QC Director at Ubisoft | Bridging Quality, Strategy and AI Driven Automation
Non Functional Requirement (NFR) Testing has been always considered as narrow definition of Performance, Scalability, Security and Load testing. Ask Leadership about NFR testing and they will simply say, Oh! We are doing Performance and Security testing at the end.
Seriously, are you kidding me??
Shift Left is not a new idea. Even in the era of early 70s and 80s, programmers knew that it was better to start testing early. Just that there was no designated tester role at that time. Questioning and testing happened by the same people that wrote the code, and it happened all through the project. It was the new business opportunities with testing paradigm, productivity, cost saving and an unfortunate misunderstanding of the waterfall model that got us the independent testing teams and the time lag between dev and test we have today.
Consider software being constructed in agile way. The foundation is laid by a strong architectural discussion, and everything starts with a big bang Agile way. In any architecture, the Architects and Designers make design choices and decisions, be it in technology or the solutioning. And like real life every choice has consequences – positive or negative.
As a Tester we need to use our skills of hypothesis, virtualization, use simulation tools to provoke failures early. We need to ensure to provide our recommendations and insights for the design choices made and test the system early for probable failures.
Let’s talk about the few NFR parameters, understand them in simple manner and then we will see how and why they should be injected early in the cycle.
1. Reliability: The literal definition is the quality of being trustworthy or of performing consistently well. How reliable your system is designed?
2. Resiliency is the capability to recover from Failure. As a human being how, I recover from somebody who abuses me. For e.g. If my boss scolds me today and I bounce back and still stay passionate, I’m resilient. If I don’t turn up in office the next day, I’m not resilient. If I don’t turn up for a week or a month, I’m not available. Bend and break is not resilient, bend and bounce is resilient. Systems must be resilient and as testers we need to ensure they are.
3. Scalability is the property of a system to handle the growing capacity of work by adding resources to the system. Consider an example of building under construction.
4. Performance: how a system performs in terms of responsiveness and stability under a particular workload or increasing load.
5. Security testing: Open ports, weak user credentials, unsafe user privileges and unpatched applications are types of vulnerabilities that are prone be hacked.
Industry experts keep talking about a lot of theoretical and practical improvement about software quality. What we really need is early discovery of runtime architecture behaviors, which has the potential to fail under specific conditions. Focus on “Discover”, “Experimentation” an empirical approach. Lot of human element in it apart from technology perspective.
With the use of cloud-based containerized deployments, test environments can easily be scaled up temporarily to production like environments. Cloud platforms are having inherent features and tools available to monitor every user interaction across all touchpoints including IoT devices, every line of code, every path traversed, every database query, and the health of each component to ensure optimized application performance and flawless user experiences. This helps to identify bottlenecks and fix the issues in timely manner. Clouds also provide features to get immediate, correlated and contextual alerts to quickly resolve performance issues.
Modern infrastructure is already taking care of structural considerations, we need to think how we can involve early in the cycle and start giving the recommendations or provide insights to figure out the potential failures.
Shifting left is not only a term to be discussed in conversation but what is needed is teams working in an organized and optimized manner, involving everybody and using their skill to think how we are developing better products. Life would be more interesting when we are collaborating for a common goal to deliver.