Non-Functional Requirements specify the quality attributes and characteristics that a system must possess. They describe how well a system should perform and behave, rather than what it should do.
Non-Functional Requirements generally include:
There is a wide range of attributes that describe the desired qualities and characteristics of a software system. Some of the most common attributes are:
- Performance: response time, throughput, reliability, scalability
- Security: authentication, authorization, confidentiality, integrity, JW token
- Usability: user interface design, accessibility
- Compatibility: hardware, software, network
- Maintainability: error handling, fault tolerance, ease of updates, error log management
- Compliance: industry standards, regulations
- Supportability: documentation, training.
Case Study: Online Shopping System
Here is an example of non-functional requirements for an online shopping system:
- Performance Requirements:
- Response time for the search and checkout process should not exceed 2 seconds
- The system should be able to handle a peak load of 1000 users concurrently
- Security Requirements:
- All customer data should be encrypted during storage and transmission
- User authentication should be provided to prevent unauthorized access to the system
- Usability Requirements:
- The user interface should be user-friendly and accessible to people with disabilities
- The system should provide clear error messages and guidelines for recovery
- Scalability Requirements:
- The system should be easily scalable to accommodate future growth
- The system should support adding new products, categories, and features without significant rework
- Availability Requirements:
- The system should be available 99.5% of the time
- The system should have disaster recovery mechanisms in place to minimize downtime.
Impact on Software Architecture:
Non-Functional Requirements have a significant impact on software architecture because they dictate the quality criteria that the system must meet, which in turn affects the design and implementation of the system. The following are some ways NFRs impact software architecture:
- Performance: NFRs related to performance, such as response time, scalability, and throughput, influence the design by dictating the need for optimization techniques and the use of specific technologies and design patterns
- Security: NFRs related to security, such as data privacy and authentication, impact the design by dictating the need for security features, such as encryption and access controls, and the use of secure communication protocols
- Usability: NFRs related to usability, such as user-friendliness and accessibility, impact the design by dictating the need for a user-centered design approach and the use of accessibility features, such as screen readers and keyboard navigation
- Scalability: NFRs related to scalability, such as the ability to handle increasing demand, impact the design by dictating the need for scalable infrastructure, such as load balancing and dynamic resource allocation
- Availability: NFRs related to availability, such as the need for high uptime, impact the design by dictating the need for redundancy and disaster recovery mechanisms, such as failover and backup systems.
Here are some of the latest trends in Non-Functional Requirements:
- DevOps and Continuous Integration/Continuous Deployment (CI/CD): The shift towards DevOps and CI/CD practices has led to an increased focus on NFRs, as they play a critical role in ensuring the reliability, security, and scalability of software systems
- Cloud Computing: The adoption of cloud computing has increased the importance of NFRs related to scalability, security, and availability. Companies are increasingly looking for cloud solutions that can handle large amounts of data and traffic, and provide high levels of security and availability
- Microservices: The microservices architecture pattern has become more popular, leading to an increased focus on NFRs such as performance, scalability, and security. This is because microservices require coordination between multiple components, and NFRs play a critical role in ensuring that these components work together effectively
- Artificial Intelligence and Machine Learning: The growing use of Artificial Intelligence (AI) and Machine Learning (ML) is increasing the importance of NFRs related to security and privacy, as well as performance, reliability, and scalability. AI and ML systems must be able to process large amounts of data quickly, and provide accurate results
- Internet of Things (IoT): The growth of IoT devices and the increasing amount of data generated by these devices is increasing the importance of NFRs related to scalability, security, and reliability. IoT systems must be able to handle large amounts of data and provide real-time responses, while also ensuring the privacy and security of the data.
In conclusion, Non-Functional Requirements play a critical role in shaping the software architecture and the final product, and they must be considered and addressed early in the development process.