What is non-functional testing?

Non-functional testing deals with the testing of non-functional properties of a software like load, Stress, Endurance of a software product etc.
We have already understood the concept of functional testing. In this article, will try to understand non-functional testing with the help of some simple scenarios.
Why non-functional testing is important?

Suppose we have one online grocery buying site are. We are done with all the functional testing of the software and have validated that all the modules are working fine (for suppose). We immediately deployed it without taking care of non-functional aspects. We can face the following problems if we do this.
1. Since we have not taken care of the load this website can handle, maybe not more than 15 user will be able to log into this website at the same time
2. Since we have not taken care of performance testing, the website may become slow which may lead to serious usability issues.
So, to ensure this type of problem does not occur after deployment, we do non- functional testing.
What are its different types?
Non-functional can be categorized into following types:
1. Performance Testing
2. Load Testing
3. Stress Testing
4. Usability Testing
5. Security Testing
6. Portability Testing
How are all testing type differentiated?
We will discuss about each one of them in details:
1. Performance testing:
Performance testing is done to ensure that the software that has been developed is stable and robust. It also takes care of the speed with which a user can access and view the content of that software.
Suppose a website cannot handle more than 20 visitors per second. It crashes every time more number of visitors visit the site. In this case, we can say that the website has very poor performance. To avoid these issues, we do performance testing.
We can go through the software and analyze which part of it the user uses the most. Pattern and type of users can be helpful while doing performance testing.
3. Stress testing:
What if a website gets flooded with large number of requests and the site is not able to handle all those requests at the same time? The website will crash right?
To avoid these kind of crashes, we do stress testing so that even during such critical conditions, site should remain robust and work without any disruption.
In stress testing, the application is tested with large number of request(peak value is reached ).i.e. large number of request are sent as input for testing purpose and checked if application is working fine or not. This is done to validate if application will work fine after deployment. This testing is also known as spike testing.
4. Load testing:

Load testing is a testing in which we test performance of application under the load of large number of users. You might get confused with Stress testing and load testing.
Yes both are somewhat same. In stress testing, we check performance of application under large number of user in limited period of time. But in load testing, we only take care of number of users.
We do not take care of time while doing load testing. (Time here specifies response time i.e. the time in which you send some request or query to the site and get your result).
5. Usability testing:
Usability testing basically points to “How well the user is able to use the software”. Here we validate some common functions like:
1. If all the links in a page are working fine or not and is pointing to correct navigated page.
2. If the texts are readable or not.
3. If the speed to access it is minimum or not.
4. If the ease of access is commendable or not.
In broader aspect, Usability testing is most important part of testing and deals entirely with better user experience.
6. Security testing:

Security testing deals with security of content of a website or the entire application itself.
All the applications that we use today has some secured content that may be a threat if exposed to unauthorized users. Issues like ethical hacking, injections have become common nowadays.
To prevent such issues, we do security testing. Security testing in itself is a broad category. We will discuss about it in details in next article.
7. Portability testing:
We have developed a software which works well in one environment but in another environment it is not working .Sounds a small issue but can have a big impact on the application itself.
Portability testing deals with testing the software if it works well in all the environments.