Software Testing and its importance – A birds eye view
We all use different types of software in our day to day life to make our work easy. But what if a new software we are trying to use has a problem and is not able to serve our purpose? How do companies releasing software into the market ensure that their software will meet the user expectations and is free from the defects? This is where the software testing pitches in. Let's try to understand software testing from layman's perspective in this article.
In this age of Internet and Technology software has replaced many day to day manual jobs in all the walks of life. In this competitive market scenarios, companies cannot afford to release a badly built software which will attract the bad reviews from the customers and dent its reputation in the market. Be it a web software, a mobile software or a Windows software we expect it to work without any flaws. Hence before releasing a software into the market, a company makes all possible attempts to make sure that the software is free from bugs and is acceptable to the users. To achieve this the company employee specialized software testing professionals who are responsible for testing a software before it is released to the market. Most of the companies nowadays do not ignore the software testing and they may either have in-house software testing professionals or if it is a small company, they outsource it to the third party or the freelancers.
Again let me make it clear that this article aims to give a layman's view on software testing and is not intended for software testing professionals who want to upgrade their knowledge. It does not cover many details but just talks about some basic things about software testing.
What is Software Testing
But what exactly is software testing? Let us try to understand this. Software testing is checking and verifying the software for any defects, errors, malfunctions or unexpected behaviors which can cause user annoyance. Reason for these defects can be developers committing mistakes while writing the code or not taking into account different scenarios under which the application would be used by the user. Testing can be done both manually as well as through automation. Nowadays automation testing is becoming increasingly important in many organizations and it is slowly replacing the manual testing. But as such software testing is a very wide terminology, so let us try to understand at a broad level what are the different types of software testing done.
Types of Software Testing
There are broadly two categories of software testing.
- Functional testing - Functional testing means testing of the software from the user functionality point of view. Here a software tester verifies all the features and functionalities present in the application which an end user will use. Generally, these functionalities which an application is expected to provide to the users is documented in the software requirements specifications document. For example for an online shopping website, there are different use cases which an end user is expected to perform like login/register, searching for a product, viewing details of the product, adding the product to the basket, checkout, payment etc. So all these functionalities need to be thoroughly tested by the software testers before the website goes live to the market. Any problems in the functioning of the website may result in a user not able to complete the transaction. Similarly for the mobile applications also different features and functionalities need to be tested and verified from the end users perspective. It is important to note that in functional testing only the functionality of the application is tested. Functionality means what is the application supposed to do and what output it is supposed to give based on different inputs. Other things like the response of the application, its smoothness, whether it is fast or slow do not come under functional testing.
- Non-functional testing - In the non-functional testing, the main aim is not to test the functionality of the application but to test how well the functionality works. Sometimes a functionality might work but it may not be up to the mark as far as its speed and smoothness of working is concerned. Sometimes applications may hang, freeze or take too long to respond. All these problems will give a bad user experience. Hence in non-functional testing, different areas other than the functionality are tested. Non-functional testing makes sure that all the functionalities of the application are usable with a good degree of reliability. While functional testing tests what features are working or not working, non-functional testing tests how are the features working. Hence the quality of the functionality gets tested in non-functional testing. There are different types of non-functional testing as below.
- Compatibility testing – It is the type of non-functional testing where we test the application's compatibility with different devices, browsers, and operating systems. For example, a website is needed to be tested in different popular browsers like Chrome, Firefox, Internet Explorer etc as a part of compatibility testing. It has also to be tested on different operating systems like Windows, Linux, and Mac. Similarly, a mobile application needs to be tested on different mobile devices of different screen sizes, hardware configurations, and mobile platforms. So for a mobile application, we may need to test for its compatibility with Android, Apple ios, Windows phone etc if the application is designed to support all of them.
- Security testing – It is the type of non-functional testing which checks an application from the security perspective. It is mainly applicable for web-based applications. By security, we mean that the application should allow the users to log in after proper authentication with user id and password. Unauthorised access should not be allowed by the application. Security testing is also done to make sure that the application is robust in terms of attacks from the hackers and viruses.
- Performance testing – Performance testing is the most important type of nonfunctional testing. It checks how the application scores in terms of its response time and working under heavy user load. It also checks how frequently the software crashes or hangs while being used. Load testing and stress testing are two important types of performance testing. Load testing means how well an application works under heavy user load when a large number of users are using the application. On the other hand, stress testing checks how well an application works under limited hardware configurations like low memory, limited CPU power etc.
- Usability testing – In usability testing, the main aim is to check the user-friendliness and the presentation of the application to the user. Application layout and design should be such that it is easy for a new user to find the necessary options in the application and to navigate through the application. Also, there should not be any truncated texts, misaligned buttons and cut screens in the application. Background colors and fonts should be such that everything should be easily readable to the user. All this testing forms the part of usability testing.
So we see that user satisfaction while using the application will depend on how well the application meets the user need. Hence software testing is very important for the companies releasing the software and they cannot afford to release a buggy software to the market as it will impact their market share. Companies have to invest in proper software testing from the professional software testers if they want to have an edge over their rivals in the market.
As said earlier, this was a very broad overview of software testing and there are many more details of software testing which can be studied and understood.