Testing can be broadly divided in two main types.
1. Functional Testing
2. Non-Functional Testing
In this blog, we will learn about functional testing and non-functional testing and the difference between the two. It is one of the first things a tester needs to know, and these terminologies are the most used terms in day-to-day conversations in the life of a Quality Analyst.
Functional testing is where the tester tests the product on the features listed by the client that needs to be added, like the login feature, comment section, and mailing functionality.
Non-functional testing is primarily about the site's performance, speed, scalability, etc.
Functional testing is a type of testing in which the basic functionality, operations and actions of the application/software is tested based on the requirements provided by the client.
The objective of functional testing is to test each feature of an application by providing sufficient data and comparing the results. Functional testing is mainly concerned with the black box testing and it is unconcerned with the source code of the application.
Functional testing tests the software program for user interface, APIs, database, security, client/server connection, and many other features. Functional testing may be performed automatically or manually.
Types of Functional Testing
1. Smoke Testing
2. Sanity Testing
4. Regression Testing
Smoke Testing : Smoke testing is the testing in which the tester tests, the basic functionality of an application on an unstable build. Unless the Smoke test build passes the build is unstable and cannot be checked further. Once the smoke test build passes the build is stable and ready for further testing.
Sanity Testing : Sanity testing is the testing in which the tester tests, the functionality of an application on a stable build when a new feature is added. In this testing, testers will test some basic tests once a new build is received for the testing.
Re-Testing: Re-testing is executing failed test cases again to check if the problems are fixed in the latest version.
Regression Testing: Regression testing is done to check or verify that the recent code changes or modifications in the
software or any environment in the new build have not caused any damage or other side effects to the previously developed application.
This testing will ensure that the software is still working as per the requirements even after adding new features or changes.
Non-Functional testing is a type of testing in which the performance or usability and behavior of a software or application is tested under different circumstances. Non-functional testing is a software testing process that examines the non-functional attributes like productivity, compatibility, functionality, etc. of a software application.
The primary objective of non-functional testing is to assess the preparation of a system depending upon the non-functional conditions which are not covered by functional testing. An example of a non-functional testing is to check how many users would sign into a program at the same time. Non-functional testing is essential to keep the specifications as the topmost priority.
Types of Non-Functional Testing
1. Performance testing
2. Load testing
3. Stress testing
4. Volume testing
5. Security testing
6. Recovery testing
7. Compatibility testing
8. Usability testing
Performance testing: Performance testing is testing that is performed, to determine how fast some aspect of a system performs under a particular workload. It can serve different purposes like it can demonstrate that the system meets performance criteria. It can compare two systems to find which performs better. Or it can measure what part of the system or workload causes the system to perform badly.
This is typically done by:
Measuring response times
Locating failure points
Performance tests ensure software quality. They validate that it’s fast, scalable, stable, and reliable.
Load testing: A load test is usually conducted to understand the behavior of the application under a specific expected load. Load testing is performed to determine a system’s behavior under both normal and at peak conditions. It helps to identify the maximum operating capacity of an application as well as any bottlenecks and determine which element is causing degradation. E.g., If the number of users is increased then how much CPU, memory will be consumed, what is the network and bandwidth response time.
Stress testing: It involves testing beyond normal operational capacity, often to a breaking point, in order to observe the results. It is a form of testing that is used to determine the stability of a given system. It put greater emphasis on robustness, availability, and error handling under a heavy load, rather than on what would be considered correct behavior under normal circumstances. The goals of such tests may be to ensure the software does not crash in conditions of insufficient computational resources (such as memory or disk space).
Volume testing: Volume testing refers to testing a software application or the product with a certain amount of data. E.g., if we want to volume test our application with a specific database size, we need to expand our database to that size and then test the application’s performance on it.
Security testing: Security testing is basically to check that whether the application or the product is secured or not. Can anyone come tomorrow and hack the system or login the application without any authorization. It is a process to determine that an information system protects data and maintains functionality as intended.
Common security tests include:
Running these tests is important to developing a safe, stable system.
Recovery testing: Recovery testing is done in order to check how fast and better the application can recover after it has gone through any type of crash or hardware failure etc. Recovery testing is the forced failure of the software in a variety of ways to verify that recovery is properly performed. For example, when an application is receiving data from a network, unplug the connecting cable. After some time, plug the cable back in and analyze the application’s ability to continue receiving data from the point at which the network connection got disappeared. Restart the system while a browser has a definite number of sessions and check whether the browser can recover all of them or not.
Compatibility testing: Compatibility testing is basically the testing of the application, or the product built with the computing environment. It tests whether the application or the software product built is compatible with the hardware, operating system, database or other system software or not.
Usability testing: In usability testing basically the testers tests the ease with which the user interfaces can be used. It tests that whether the application or the product built is user-friendly or not.
Usability testing includes the following five components:
1. Learnability: How easy is it for users to accomplish basic tasks the first time they encounter the design?
2. Efficiency: How fast can experienced users accomplish tasks?
3. Memorability: When users return to the design after a period of not using it, does the user remember enough to use it effectively the next time, or does the user have to start over again learning everything?
4. Errors: How many errors do users make, how severe are these errors and how easily can they recover from the errors?
5. Satisfaction: How much does the user like using the system?
Functional Vs. Non-Functional Testing
Functional and non-functional Testing are two pillars of the testing family. Both are equally critical when it comes to meeting the end-users’ requirements. While Functional Testing looks at all the behavioral aspects of the application, non-functional Testing ensures the correct performance in a range of usage conditions.
Hope you find this blog useful. Thank you for reading.