This Software Testing tutorials series is written for beginners who are new to software testing. Whether you are student or working in another field, these articles will take you from beginner to pro level in a few weeks or less.
Learn software testing with this tutorial which covers each topic step by step with practical examples.
In simple terms, software testing is a process by which we test the software to find bugs. This is done to make sure that the software works in accordance with the technical and business requirements provided by the customer.
What is Software Testing?
Software testing is a process by which we evaluate the quality of the software to see whether it meets the user requirements as well as functional requirements, that are outlined in the Software Requirement Specification (SRS) document.
Organizations use dedicated teams that conduct software testing to ensure the quality of software before it is released to customers.
Software testing is an important phase in the Software Development Life Cycle (SDLC).
Software testing activities start from the requirement gathering phase itself. This will ensure that quality standards are met in all the phases of SDLC and improve the overall quality of the software.
Why is Software Testing Needed?
Mistakes are made by everyone. When a mistake is made during the development process, software testing helps to identify the defect/mistake during the testing phase. Testing also helps to fix/resolve it before the software is released to the end customer.
- Fixing defects after the software is delivered or released is expensive since rework adds additional cost to the project.
- An unstable product can also lead to customers adopting a competing product.
- Quality of the product plays an important role in the overall success of the company.
- Testing is a crucial phase that ensures companies maintain high quality standards.
Famous Examples of Software Bugs / Defects
- The Ariane 5 developed at a cost of $500 million was deliberately destroyed after just seconds into its first flight. This was the results of a software bug in the guidance system that led to an overflow error when it tried to convert the lateral velocity of the rocket from 64 bits to 16 bits. After the guidance system shutdown, the redundant unit also failed since it was using the same logic.
- Y2K Bug in 1999 cost the software industry billions of dollars. The bug was the result of storing year as two digits instead of four (storing 99 instead of 1999). When the year 2000 came around the software would store it as 00 and interpret it as 1900.
- Royal Bank of Scotland was fined 65 million pounds because of a glitch in their batch scheduling software which resulted in an outage for 6.5 million customers.
- NASA’s Mars Climate Orbiter costing $125 Million crashed into the Martian atmosphere, too low and too fast. The Orbiter needed inputs in metric units while it was provided data in non-metric units which resulted in the crash.
- NASA’s Mariner 1 spacecraft had to be destroyed about 5 minutes into the flight since it was going off course and the guidance system was unable to correct it. The failure was the result of a programmer missing a single superscript bar. The superscript bar was required to invoke a smoothing function. Without the bar, deviations in velocity that occurred normally was incorrectly interpreted as serious, by the program, which applied inappropriate corrections, which sent the spacecraft off course.
Benefits of Software Testing
Software defects costs the industry billions of dollars each years. In 2002 this cost was estimated to be around $59 billion by the National Institute of Standard Technology. One third of these costs can be reduced through better testing. Some of the benefits of testing are given below.
- Software testing helps to identify mistakes that are made in the development phase.
- It helps to retain customers trust and satisfaction in the product.
- Software testing ensures high standards of product quality are maintained.
- Software testing helps to reduce maintenance costs due to less or no issues in the delivered product.
- Software testing helps to identify issues as early as possible thereby reducing the cost of fixing it. The bugs or issues found during the later stages of the SDLC are usually considered expensive to fix.
- Software testing helps to gain customer confidence and gains more revenue for the company.
Brief Overview of Types of Software Testing
There are different types of software testing. We can classify software testing primarily into 2 categories, black box testing and white box testing.
- Black box testing – is a type of testing that is done to check the functionality and if the software meets the user requirements. The most important aspect of Black Box testing is that the tester does not know how the software works internally. They are only concerned with what the software does. Black box testing is usually done by qualified software testers. Black box testing can be further classified into function testing, user acceptance testing, regression testing, system testing, end to end testing, GUI testing, stress testing, performance testing, load testing etc.
- White box testing – In White box testing, the tester is aware of how the software is implemented / coded and they test the logic in the code. It is usually carried out by developers and they test the logic used in the code. It is also known as Glass box testing. Here, the developers executes tests that check the logic implemented in the code to make sure it is working fine and it gives the desired results. Unit testing comes under white box testing. White box testing is usually carried out before the software is released to software testers for black box testing.
- Functional Testing – focuses on outputs to make sure it meets the requirements given by the customer. Functional testing is carried out manually or by using any automation tool depending up on the budget and requirement.
- User acceptance testing – is carried out by end users before the software is released to the market to make sure it meets all the requirements mentioned in the specification document. User acceptance testing is usually conducted by someone from the client side and therefore it is done mostly from the client office in a real time environment after the testing is performed by software testers.
- Regression testing – is a very important type of testing that is carried out after a change or fix is made to the software. Usually, software testers perform regression testing after the developer has fixed a bug to make sure all the existing functionalities are working correctly. Many big companies use automation tools to carry out regression testing so that it can save time and money.
- End to End testing – is similar to system testing where the software is tested to make sure every area related to software is working correctly. For example, here the software testers create an environment that is similar to the real time environment. They then make sure the software is interacting with the database, with other applications, environments and systems and verify the end result.
- Graphical User Interface (GUI) testing – is a type of testing in which the software tester checks the look and feel of the application to make sure it meets the regular standard. For example, here, the software testers will test the measurement of the text box, length and width of it, logos, radio buttons etc. to make sure they meet the regular market standards or the standards specified by the customer.
- Performance testing – is a type of testing in which the testers will test the performance of the software to make sure it meets the industry standards. Load and Stress testing comes under performance testing and usually automation tools like Load Runner is used for testing performance.
Roles and Responsibilities of a Tester
A software tester plays an important role in the success of a project. The roles and responsibilities of a software tester may vary from company to company but in most cases it includes the following:
- Going through the System Requirement Specification (SRS) document and understanding the requirement.
- Preparing testing estimation.
- Preparing the test plan or understanding the test plan prepared by the test manager/test lead.
- Preparing test cases based on the specification document.
- Prepare test data before the testing phase.
- Testing the software and finding defects.
- Reporting defects in such a way that it is easy for the developer to understand and fix it.
- Re-testing the defects that are fixed and perform regression testing before the software is ready to ship.
- Provide inputs to improve the SDLC process.
- Provide support to the customer for testing the software.
- Take part in the implementation process.
- Provide support after the implementation is done in maintenance updates / fixes.
As the importance of software testing and quality assurance is rising steadily, companies all over the world are ready to invest money on resources and hence there is a huge growth in the demand for software testers.