Non-functional Requirements in Software Engineering
Non-Functional Requirements are the constraints or the requirements imposed on the system. They specify the quality attribute of the software. Non-Functional Requirements deal with issues like scalability, maintainability, performance, portability, security, reliability, and many more. Non-Functional Requirements address vital issues of quality for software systems. If NFRs not addressed properly, the results can include:
- Users, clients, and developers are unsatisfied.
- Inconsistent software.
- Time and cost overrun to fix the software which was prepared without keeping NFRs in mind.
- Scalability
- Reliability
- Regulatory
- Maintainability
- Serviceability
- Utility
- Security
- Manageability
- Data integrity
- Capacity
- Regulatory
- Availability
- Usability
- Interoperability
- Environmental
These can can be classified as :
- Performance constraints –
Reliability, security, response time, etc. - Operating constraints –
These include physical constraints (size, weight), personnel availability, skill level considerations, system accessibility for maintenance, etc. - Interface constraints –
These describe how the system is to interface with its environment, users, and other systems. For example, user interfaces and their qualities (e.g., user-friendliness). - Economic constraints –
Immediate and/or long-term costs. - Lifecycle requirements – Quality of the design:
These measured in terms such as maintainability, enhance ability, portability.
Advantages of Non-Functional Requirement :
- They ensure the software system follows legal and adherence rules.
- They specify the quality attribute of the software.
- They ensure the reliability, availability, performance, and scalability of the software system
- They help in constructing the security policy of the software system.
- They ensure good user experience, ease of operating the software, and minimize the cost factor.
Disadvantages of Non-functional requirement :
- The nonfunctional requirement may affect the various high-level software subsystem.
- They generally increase the cost as they require special consideration during the software architecture/high-level design phase.
- It is difficult to change or alter non-functional requirements once you pass them to the architecture phase.