Last modified on March 16th, 2021
The Non-functional requirements tell you how the system will run or work properly.
Functional vs Non Functional Requirements
|Functional Requirements||Non-Functional Requirements|
|What is it?||Verb||Attributes|
|End-result||Describe Product feature||Describe Product properties|
|Capturing||Captured in the use case.||Captured as a quality attribute.|
|Easy to capture||Hard to capture|
|What is the focus?||Focus on user requirement||Focus on the user’s expectations.|
|Objectives||Assists us to verify the functionality of the software.||Assists us to verify the performance of the software.|
|Type of Testing||Functional Testing
|Test Execution||Testing is done before non-functional testing.||Testing after the functional testing|
|Documentation||Describe what the product does?||Describes how the product works?|
The Non-functional requirements are the limitations on the functions available by the system which are limitations on timing, limitations on the development process and standards. On the whole system, Non-functional requirements are applied. These requirements are not applied individually to each function.
There are many nonfunctional requirements of the software depends on the kind of software. However, four examples of Non-functional requirements we are discussing here are usability, reliability, performance, supportability, and scalability.
Usability means that how easy the software performs the specific task.in other words, it shows the ability of the software to perform tasks. In usability, the software is used by specific consumers to achieve the specific objective with effectiveness, efficiency, and satisfaction.
The system should be so reliable that it would work for a long time without any problem and we can easily trust the system.
There are two terms related to the software reliability
Fault means a defect in the software like a bug in the code which can cause failure in the software.
Failure means that when the behavior of the software is not same as the specified one.
The system response time towards any task. In other words, performance is the speed or how effectively the software response to the given task. Performance can be tested by MIPS(millions of instructions per second).
Supportability (also known as serviceability) is the ability to install, configure and monitor the software. It is also used to identify the faults and debug the faults. It helps in the maintenance of the software by solving the problems and restoring it.
It’s about the capability of software such as if an application run in 2 seconds for 100 users would it be run also in 2 seconds with 200 users basically it’s called scalability. Suppose we have 3 servers and it serves 1000 users if we double the number of servers would we able to have 2000 user on it.
Types of Scalability
1. Horizontal Scalability
2. Vertical scalability
In horizontal scalability, we can increase performance for our work by connecting different software and hardware entities on a single unit. It is not expansive as vertical Scalability
In vertical scaling, additional resources are added to a single node. The node can then handle more work and provides additional capacities. Additional resources include more or faster CPUs, more memory or in case of virtualized instances, more physical shares of the underlying machine. Vertical scaling almost directly speeds up and expensive.
It’s about code quality how easy for someone else to read the code and maintain application by someone else and the code quality is not good it cannot maintain by someone other so during the process must keep in mind the application must be read or maintained by someone else instead of application maker.
It is one of the most important steps in which we must see the security by seeing which farm work we are using, application security infrastructure security, is the network we are using us secure is it behind the firewall.
Challenges of Non- functional requirements:
It is difficult to make a model of Non-functional requirements. It is also a difficult task to make a measurable requirement that we can measure how well it is meeting with what we want. It is not an easy task to put during development.
Software maintainability means that the software should remain in the original state as it was made and you can remove the error and update it easily. In maintainability, we learn from the past and improve the ability of the system this is also known as updating software.
The software maintainability is used to understand, repair or enhance. 75% of our cost is spending on maintainability of software so it is a very important step in software development. It also helps to identify the updating point in the software.
Software Maintainability Metrics Helps to Identify Problem Areas
The developer makes a maximum effort on the maintainability of the software. There is four type of maintenance performed for enhancements which are correcting, adapting, perfecting and preventing the software.
The software with the following feature will require more efforts on programming
- If the quality of code is not good.
- If there are defects in the source code
- If there is too much Technical Complexity
- If the systems are large
- If the documentation is not done properly.
Adding Automation for Quick and Accurate Measurement Results:
The software maintainability measurement is used to measure the effect done. There are many Programmed solutions that offer an accurate, objective way to measure each program. They supply measurement for reducing application complexity, improving quality, and moderating risk as an application is created, enhanced, or maintained. It determines which actions should be taken to decrease programming efforts or costs.
Comparison of Functional VS Non-functional Requirements
|Parameters||Functional Requirement||Non-Functional Requirement|
|What it is||Actual work to do||Attributes|
|Product Info||Product Features||Product Properties|
|Type of Testing||Functional Testing like System, Integration, API testing, etc.||Non-Functional Testing like Usability, Performance, Stress, Security testing, etc.|
|Test Execution||before non-functional testing.||After the functional testing|
|Objective||Helps us to verify the software functionality.||Helps us to verify the software performance.|
|Focus on||User requirement||User’s expectation.|
|Collection||In the form of use case.||In the form of a quality attributes.|
|Requirement||Compulsory to achieve||not Compulsory to achieve|
|Documentation||Describe what the product does||Describes how the product works|
|End-product||Product feature||Product properties|
Non-functional requirements(NFRs), Software Engineering SE