Thursday, August 7, 2008

Understanding the Non-Functional Requirements (NFR)

Requirements gathering is broadly classified into two categories namely functional requirements and non-functional requirements. Usually functional requirements concentrates mainly on business functionality of the proposed application and non-functional requirements mainly focuses on service level requirements. Business Analyst usually does the gathering of functional requirements and it is the role of the technical guy "Architect" who works along on gathering the non-functional requirements which would help during designing the system.

For developing an enterprise application, apart from gathering functional requirements we should also take care of various non-functional requirements (NFR) as well. These requirements are service-level requirements which should be discussed and worked with stack-holders during the Inception and Elaboration phases of a project to define quality service level measurements for each of the service-level requirements. While designing architecture, the following service-level requirements should be addressed:

• Performance
• Scalability
• Reliability
• Availability
• Extensibility
• Maintainability
• Manageability
• Security

Performance:

Performance requirements are usually measured as below.
• In terms of response time for a given screen transaction per user.
• In terms of transaction throughput, which is the number of transaction in a given time period, usually one second.
• For example, a particular screen transaction should have a response time of 2-5 seconds or a throughput of 50 transactions per second.

Scalability:

• It is the ability of a system to support the required quality of service when there is an increase in load without changing the system.
• To better understand scalability, we should know about what the system capacity is about. Capacity is usually the maximum number of processes or users that the system can handle still maintaining the quality of service.
• For example, during increase in load of the system, if the system meets the required performance of response time as five seconds, then the system is scalable. But if the system makes more than 5 seconds, then it denotes that system is not scalable.
• In other words, when the system is on its capacity and could not respond within the acceptable limits, it denotes that system has reached its maximum scalability. Thus to make the system scale, additional hardware should be done. Adding hardware can be done horizontally or vertically.
• Horizontal scaling means adding one more machine.
• Vertical scaling means adding additional processors, memory, disk space etc within the same machine. This type of scaling is much easier than horizontal scaling as adding processors, memory, and disk space does not impact the architecture of the system.


Reliability:

• It ensures the integrity and consistency of an application and all its transactions.
• When load increases, the system should still continue to process requests and handle requests as accurately as before the increase in load.
• If the system is not reliable during load increase, then it is not scalable.

Availability:

• It ensures the system/services are always accessible.
• Even if the components fail (reliability fails), the system will still be available due to the failover capabilities by having the components redundant.


Extensibility:

• It is the ability of a system to add new functionalities or modify existing functionality without impacting the existing functionality.
• You cannot measure extensibility when the system is deployed, but it shows up the first time you must extend the functionality of the system.
• You should consider the following when you create the architecture and design to help ensure extensibility: low coupling, interfaces, and encapsulation.

Maintainability:

• It is the ability to correct issues in the existing functionality without impacting other components of the system.
• You cannot measure extensibility when the system is deployed.
• When creating an architecture and design, you should consider the following to enhance the maintainability of a system: low coupling, modularity, and documentation.

Manageability:

• It is the ability to manage the system to ensure the continued health of a system with respect to scalability, reliability, availability, performance, and security.
• Your architecture must have the ability to monitor the system and allow for dynamic system configuration.

Security:

• It is the ability to ensure that the system cannot be compromised.
• Security includes not only issues of confidentiality and integrity, but also relates to Denial-of-Service (DoS) attacks that impact availability.
• Creating an architecture that is separated into functional components makes it easier to secure the system because you can build security zones around the components. If a component is compromised, then it is easier to contain the security violation to that component.

4 comments:

Unknown said...

Thats a great start. My wishes to take this forward successfully.

One question - How do we capture these NFR's as a tangible requirement. Manitaianbility and manageability for example is hard to quantify and capture as requirements.
-Rajan

Sat said...

Thanx Rajan.

Though few non-functional parameters are considered as virtual concepts, they become more tangible only during architecturing and design. For example, manageability will be captured as a measurable requirement only in a way in which how the system should support usage of health monitoring tools like site-scope monitors etc and whether the system should be highly available or can have downtime during monitoring etc? This will be useful during architecturing of the system to identify appropriate monitoring options and to decide on whether design should allow dynamic configurations as each option has its own pros and cons. Similarly maintainability can be captured as tangible in a way of identifying what kind of documents to be prepared, how loosely coupled architecturing should be provided as to maintain with ease.

Noble said...

Great Going Mate , Keep it up

Cheers
Noble

N.V.Prashanth said...

Thala... ingayum technical aa?? Kalakki podungha!