Testing is the process of evaluating a system or its individual components with the intent to find whether it satisfies the specified requirements or not. It consists of executing a system in order to identify any gaps or errors. It can be defined as analyzing a software item to detect the differences between existing and required conditions.
Software Testing Process
Phase 1: test strategy and test plan
It is about describing the scope for testing for a project. The things to be defined in this phase are:
- The system to be tested
- Main features and functions of the project
- Non-functional requirements
- Test approach
- Key processes to follow
- Tools
- Documentation
- Test environment requirements
- Risks and dependencies
- Test schedule
- Approval workflows
- Entry and exit criteria
Phase 2: test design
After having a test strategy and plan, the next step is to create a test suite, which is a collection of test cases that are necessary to validate the system being built, against its original requirements.
Phase 3: test execution
Tests can be executed in many different ways. As a single System Integration Test, as User Acceptance Test phases, as part of Agile sprints, with exploratory tests, or using a test-driven development methodology. An adequate amount of software testing has to be done to ensure the system is relatively bug-free.
Phase 4: test closure
The exit criteria needs to be considered for marking the completion of the test cycle and the project’s readiness for release. Some general exit criteria may be:
- Requirements coverage testing by 100%
- Minimum percentage of test cases to be passed
- All critical defects fixed
A Test Summery and Defects Analysis can be done to provide statistics about the testing process.
Types of Testing
Manual Testing
The tester takes over the role of an end-user and tests the software to identify any unexpected behavior or bug. Some manual testing phases include unit and integration testing, system testing, and user acceptance testing. It also includes exploratory testing.
Automation Testing
The tester writes scripts and uses another software to test the product. Automation Testing is used to re-run the test scenarios that were performed manually, quickly, and repeatedly. It is also used to test the application from load, performance, and stress point of view.
Levels of Testing
There are two main levels of software testing: Functional and Non-functional Testing.
Functional Testing
The application is tested providing input, then the results are examined to confirm that they conform to the functionality it was intended for. Testing an application for functionality involves five steps:
- Determination of the functionality meant to be performed
- Creation of test data
- Determination of the expected output based on the test data
- Writing of test scenarios and execution of test cases
- Comparison of expected and actual results
Unit Testing
It is performed by developers on the individual pieces of source code assigned areas. The goal is to isolate each part of the program to show that individual parts are correct in terms of their functionality.
Integration Testing
It is the testing of combined parts of an application. It can be done in two ways: Bottom-up or Top-down.
System Testing
Like its name indicates, it tests the system as a whole. Once all the components are integrated, the application is tested thoroughly to verify it meets the functional specifications. It is tested in an environment that is very close to production.
Regression Testing
It is done to ensure that a change, such as a bug fix, hasn’t resulted in another fault being uncovered in the application.
Acceptance Testing
The QA team has a set of pre-written scenarios and test cases that will be used to test the application to make sure it meets the intended specifications and client’s requirements.
Alpha Testing
Unit testing, integration testing and system testing when combined together is known as alpha testing.
Beta Testing
A sample of the intended audience tests the application. It is also known as pre-release testing.
Non-functional Testing
It involves testing a software from the requirements which are nonfunctional in nature but important nevertheless.
Performance Testing
It is used to identify any bottlenecks or performance issues. It is a testing type in terms of the speed, capacity, stability and scalability aspects of the product.
Load Testing
It is about testing the behavior of a software when applying maximum load in terms of software accessing and manipulating large input data. It identifies the maximum capacity of software and its behavior at peak time.
Stress Testing
It is about testing the behavior of a software under abnormal conditions, like when taking away some resources, in order to identify breaking points.
Other kinds of testing levels are Usability Testing, Security Testing and Portability Testing.
Software Testing Roles
Test Lead/Manager
Responsible for:
- Defining the testing activities
- Test planning
- Check the team has the necessary resources to perform the testing activities
- Verify testing is going hand in hand with the development at all phases
- Prepare the status report of testing activities
- Interactions with customers
- Updating the project manager about the status of testing activities
Test Engineer / QA Testers
Responsible for:
- Understanding what needs to be tested
- Decide how it is going to be tested
- Inform the test lead about what resources will be required for the testing activities
- Develop test cases and prioritize testing activities
- Execute test cases and report defects, defining severity and priority for each defect
- Carry out regression testing
Software Test Environment Setup
- Setup of test server with support of needed applications
- Network setup
- Test PC setup for running the software product
- Provide bug reporting tools
- Create test data for testing environment
Test Case Design Techniques
- Boundary Value Analysis (BVA): based on testing at the boundaries between partitions.
- Decision Table Based Testing: for every function, a table is created to list down all types of combinations of inputs and its respective outputs.
- State Transition: the testing team provides both positive and negative input test values to evaluate the system behavior.
- Error guessing: the test analysts use their experience to guess potential problematic parts of the application and write test cases to expose those errors.
Defect Management Process
A defect management cycle contains 6 stages:
- Discovery of defect
- Defect categorization
- Fixing of defect by developers
- Verification by testers
- Defect closure
- Defect reports
References
TutorialsPoint. Software Testing Tutorial. Retrieved from: https://www.tutorialspoint.com/software_testing/index.htm
ReQtest. The A to Z Guide to the Software Testing Process. Retrieved from: https://reqtest.com/testing-blog/the-a-to-z-guide-to-the-software-testing-process/
TutorialsPoint. Software Testing – Types of Testing. Retrieved from: https://www.tutorialspoint.com/software_testing/software_testing_types.htm
TutorialsPoint. Software Testing – Levels. Retrieved from: https://www.tutorialspoint.com/software_testing/software_testing_levels.htm
International Software Test Institute. Software Testing Roles and Responsibilities. Retrieved from: https://www.test-institute.org/Software_Testing_Roles_And_Responsibilities.php
Guru99. Test Environment for Software Testing. Retrieved from: https://www.guru99.com/test-environment-software-testing.html#3
Guru99. Software Testing Techniques with Test Case Design Examples. Retrieved from: https://www.guru99.com/software-testing-techniques.html
Guru99. Defect Management Process in Software Testing (Bug Report Template). Retrieved from: https://www.guru99.com/defect-management-process.html#3