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.
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.
1. Horizontal 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 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.
If the quality of code is not good.
If there is too much Technical Complexity
If the documentation is not done properly.
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.