Non-functional Requirements in Software Engineering – GeeksforGeeks

INTRODUCTION:

Non-functional requirements in software engineering refer to the characteristics of a software system that are not related to specific functionality or behavior. They describe how the system should perform, rather than what it should do. Examples of non-functional requirements include:

  1. Performance: This includes requirements related to the speed, scalability, and responsiveness of the system. For example, a requirement that the system should be able to handle a certain number of concurrent users or process a certain amount of data within a specific time frame.
  2. Security: This includes requirements related to the protection of the system and its data from unauthorized access, as well as the ability to detect and recover from security breaches.
  3. Usability: This includes requirements related to the ease of use and understandability of the system for the end-users.
  4. Reliability: This includes requirements related to the system’s ability to function correctly and consistently under normal and abnormal conditions.
  5. Maintainability: This includes requirements related to the ease of maintaining the system, including testing, debugging, and modifying the system.
  6. Portability: This includes requirements related to the ability of the system to be easily transferred to different hardware or software environments.
  7. Compliance: This includes requirements related to adherence to laws, regulations, industry standards, or company policies.

Non-functional requirements are important because they can have a significant impact on the overall quality and success of a software system. They are often closely related to the system’s performance, security, and usability. They also help to ensure that the system is maintainable, portable, and compliant with relevant laws and regulations.

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.

Types of Non-functional Requirement :

  1. Scalability
  2. Reliability
  3. Regulatory
  4. Maintainability
  5. Serviceability
  6. Utility
  7. Security
  8. Manageability
  9. Data integrity
  10. Capacity
  11. Availability
  12. Usability
  13. Interoperability
  14. Environmental

These can be classified as :

  1. Performance constraints – Reliability, security, response time, etc.
  2. Operating constraints – These include physical constraints (size, weight), personnel availability, skill level considerations, system accessibility for maintenance, etc.
  3. 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).
  4. Economic constraints – Immediate and/or long-term costs.
  5. 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.
  • Improved system quality: By specifying non-functional requirements, engineers can ensure that the system will have desired characteristics such as performance, security, usability, reliability, maintainability, portability and compliance, which can improve the overall quality of the system.
  • Increased user satisfaction: By ensuring that the system has good usability and meets the user’s performance and security expectations, engineers can increase user satisfaction with the system.
  • Better alignment with business goals: By aligning non-functional requirements with the business goals, engineers can ensure that the system supports the overall objectives of the organization and meets the expectations of the stakeholders.
  • Reduced rework: By identifying and addressing non-functional requirements early on in the development process, engineers can reduce the likelihood of costly rework later on.
  • Improved system scalability and adaptability: By specifying non-functional requirements related to scalability and adaptability, engineers can ensure that the system can handle a growing number of users or changing business needs.
  • Improved compliance: By specifying non-functional requirements related to compliance, engineers can ensure that the system adheres to relevant laws, regulations, industry standards or company policies.
  • Better system maintenance: By specifying non-functional requirements related to maintainability, engineers can ensure that the system is easy to maintain, test and debug, which can save time and cost in the long run.

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.
  • Difficulty in identifying all the requirements: It can be difficult to identify all the non-functional requirements, especially when dealing with complex systems or new technologies.
  • Difficulty in predicting future requirements: It can be difficult to predict future non-functional requirements, which can result in the software becoming outdated or needing to be redesigned.
  • Difficulty in measuring and testing: Non-functional requirements can be difficult to measure and test, which can make it challenging to ensure that they have been met.
  • Time-consuming: Gathering and specifying non-functional requirements can be time-consuming, which can slow down the development process.
  • Costly: Identifying, specifying and implementing non-functional requirements can be costly, especially when involving multiple stakeholders.
  • Risk of changing requirements: Non-functional requirements may change over time, which can lead to confusion and require additional work to keep the project aligned with the updated requirements.
  • Conflicting requirements: Non-functional requirements may be in conflict with each other and it can be difficult to balance them and prioritize which one to implement.
  • Unforeseen requirements: Non-functional requirements may not be fully identified during the requirement gathering phase, and some requirements may only be discovered after the system has been deployed.

My Personal Notes

arrow_drop_up