Software testing is an essential part of the Software development life cycle. By the testing, all types of errors in the program are found and solved. That is why it is a necessary part of Software development.
There are many types of Software testing depend on the development phase. But first, we will discuss the basics.
What is Software Testing?
Software testing is a process of executing a program or application with the intent of finding defects on software.
It is an activity to check whether the actual results match the expected results. But testing is not only a single activity, but it is also a planned process.
Software testing helps to identify missing requirements, errors, or defects in contrary to the actual requirements.
The Purpose of Software Testing
The purpose of Software Testing is to assure Quality. It provides the means and measures for testing all the aspects of a software solution to meet the requirements. It also provides overall quality of the intended solution.
The QA or Software Testing Team looks for flaws and weaknesses in the program. They are consists of a Test Lead/Manager and Test engineers/QA Testers.
A Test lead is responsible for:
- Defining the testing activities for subordinates – Testers or Test Engineers.
- All responsibilities of test planning.
- To check if the team has all the necessary resources to execute the testing activities.
- To check if testing is going hand in hand with the software development in all phases.
- Prepare the status report of testing activities.
- Required Interactions with customers.
- Keep updated the Project Manager regularly about the progress of testing activities.
Test Engineers are responsible for:
- To read all the documents and understand what needs to be tested.
- Based on the information procured in the above step, decide how it is to be tested.
- Inform the Test Lead about all the requirements for software testing.
- Develop test cases and prioritize testing activities.
- Execute all the test case and report defects, define severity and priority for each error.
- Carry out regression testing whenever changes are made to the code to fix defects.
Why is Testing Important?
Humans do make mistakes. We can ignore some of those mistakes, but we have to be cautious because some of the errors are expensive or dangerous. That’s why we need to check everything we produce because things can always go wrong.
Testing is necessary because a simple software bug could be expensive or even dangerous. App or Software bugs can potentially cause monetary and human loss if it is related to the banking system; health technology; aviation etc.
These reasons tell us why Software Testing is essential. It is vital to ensure the Quality of the product. And it is required to stay in business. A study conducted by the US agency NIST (The National Institute of Standards and Technology) in 2002 reports that software bugs cost the US economy $59.5 billion annually.
7 Testing Principles
There are seven testing principles which are universal for every software testing. We should always keep in mind these principles when testing software.
These principles are-
- Testing shows the presence of defects in the system
- Exhaustive testing is impossible
- Early testing is always required
- Defect Clustering
- Pesticide Paradox
- Testing is context-dependent
- The absence of errors is a fallacy
For Defect Clustering; A small number of modules contain most of the defects detected.
The Pesticide Paradox is if the same tests are repeated over & over again, eventually the same test cases will no longer find new bugs.
To evade this problem, the test cases needed to be regularly reviewed & revised, adding new and different test cases to help find more defects.
SDLC vs. STLC
There are several models for Software Testing.
- Waterfall Method:
Requirements- Design- Build- Test- Maintenance
Here, Testing is done within the SDLC.
- V-Model of Testing
SDLC: Requirement Analysis- Functional Specifications- High Level Designs- Detailed Designs/Program Specification- Code
STLC: Code- Unit Testing- Integration Testing- System Testing- User Acceptance Testing
Here, Testing is done as a sub-project of SDLC.
- Iterative Life Cycle:
Phase 1- Phase2- Phase3-.......
Every Phase will have its Requirements- Design- Build- Testing
There are numerous development life cycle models. In any model, testing should perform at all levels, from Requirements to maintenance.
STLC - Software Testing Life Cycle
STLC is defined as a sequence of activities conducted to perform Software Testing. To help to certify the software product it consists of a series of activities carried out methodologically.
Different stages in Software Test Life Cycle:
Requirement Analysis- Test Planning- Test Case Development- Environment Setup- Test Execution- Test Cycle Closure
Each of these stages has a definite Entry and Exit criteria.
Entry Criteria: The Entry Criteria gives the prerequisite items that must be completed before testing can begin.
Exit Criteria: The Exit Criteria defines the items that must be completed before testing can be concluded.
Here is the full stage details for the STLC process.
Requirement Analysis Activities:
- Identify types of tests to be performed
- Gather details about testing priorities and focus
- Prepare Requirement Traceability Matrix (RTM)
- Identify test environment details where testing is supposed to be carried out
- Automation feasibility analysis (if required)
Test Planning Activities:
- Preparation of test plan/strategy document for various types of testing
- Test tool selection
- Test effort estimation
- Resource planning and determining roles and responsibilities
- Training requirement
Test Case Development:
- Create test cases, automation scripts (if applicable)
- Review and baseline test cases and scripts
- Create test data (If Test Environment is available)
Test Environment Setup:
- Understand the required architecture, environment set-up and prepare hardware and software requirement list for the Test Environment
- Setup test Environment and test data
- Perform smoke test on the build
Test Execution Activities:
- Execute tests as per plan
- Document test results, and log defects for failed cases
- Map defects to test cases in RTM
- Retest the Defect fixes
- Track the defects to closure
Test Cycle Closure Activities:
- Evaluate cycle completion criteria based on Time, Test coverage, Cost, Software, Critical Business Objectives, Quality
- Prepare test metrics based on the above parameters.
- Document the learning out of the project
- Prepare Test closure report
- Qualitative and quantitative reporting of the quality of the work product to the customer
- Test result analysis to find out the defect distribution by type and severity
What is Manual Testing?
When a Tester manually executes test cases without using any automation tools, is called Manual Testing. Manual testing is an activity where the tester needs to be very patient, creative & open-minded.
Manual Testing is the most primitive and effective of all testing types. One of the Software Testing Fundamental is "100% Automation is not possible". So manual testing is important. A manual tester needs to think and act with an End User perspective.
Manual Testing Types
There are more than 150 types of software testing and not all Testing types are applicable to all projects. It all depends on the nature & scope of the project. Here are the most important parts of manual testing-
Unit testing is also called component testing. It is performed on a standalone module to check whether it is developed correctly.
System Testing & Acceptance Testing
This testing is concerned with the behavior of the whole system. It checks a complete end to end scenarios as the way a customer would use the system.
Acceptance testing is concerned with whether the system meets its requirements.
It can be done in 2 ways-
Alpha testing: Done by a small set of employees of the client
Beta testing: Done by a small set of customers
Individual modules are combined & tested as a group in this phase of testing. Also data transfer between different modules is tested thoroughly. The test is carried out by the testers.
In case of unavailability of a module, need to create a Stub & simulate the test with it. It is not the complete implementation of that module. Missing modules will be tested as and when they are available.
Smoke/ Sanity Testing
It is used to check critical functionalities of the system before it is accepted for major testing. Its goal is not to find defects but to check system health.
This testing is carried out to check modification in software has not caused unintended adverse side-effects
As the title says, this testing is concerned only with the non-functional requirements like performance, usability, load factor etc.
The goal of performance testing is to reduce the response time of the software.
Load testing checks the performance at different load (number of people accessing the system).
Testing is very important for the whole Software development process. Providing the best Software testing quality will define which is the best software development company out there.
Proper testing can give quality assurance of the software. To maintain good quality and give a proper service through software, there is no other way of Software testing. If you want to start your carrier as a Testing Engineer, try the online courses provided by the Guru. They are the best on this line.
Do you have any questions on Software testing? Let us know through the comment bellow.