Software Testing is the process of evaluating and verifying that a software product or application does what it is supposed to do. The benefits of testing include preventing bugs, reducing development costs and improving performance.
There are four main levels of testing:
- Unit Testing: Validating that each software unit performs as expected. A unit is the smallest testable component of an application. In an object-oriented environment, this is usually at the class level, and the minimal unit tests include the constructors and destructors.
- Integration Testing: Ensuring that software components or functions operate together. Normally the former is considered a better practice since it allows interface issues to be located more quickly and fixed.
- System Testing: System testing tests a completely integrated system to verify that the system meets its requirements.
- Acceptance Testing: This includes one of the next types:
- User acceptance testing
- Operational acceptance testing
- Contractual and regulatory acceptance testing
- Alpha and beta testing
While we are testing software, we have to assume different roles, so the job can be done correctly:
- Manager: The manager is the responsible of defining the testing activities, check the team has the necessary resources to perform the testing activities, prepare the status report of testing activities, interact with clients.
- Test Engineer: The test engineer has to understand what needs to be tested. Also, he decides the way it is tested, informs the test leader about what resources will be required for the testing activities, and many more.
- 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
To test the software, there are different techniques, here I write some of them:
- Boundary Value Analysis (BVA)
- Decision Table Based Testing
- State Transition
- Error guessing