Fundamentals of Software Testing - Part I

September 9, 2022

Simply speaking, software testing is a process of checking the completeness and correctness of software with respect to the intent it was developed for.

There are two objectives - (a) to check whether the actual results match the expected results mentioned in the requirement definitions and (b) to ensure that the software is defect free.

Software testing can identify the defects and errors, commonly known as bugs, that creep in during the development phase. Ideally, it is good to identify such bugs early and eliminate them before the delivery of software. Properly tested software products ensure reliability, security and high performance which further result in time-saving, cost-effectiveness and customer satisfaction.

The Software Testing Life Cycle has six stages

  1. Requirement Analysis: During this phase QA team or test team studies the requirement from a testing point of view to identify the testable requirement. The QA team may interact with various stakeholders (Business Analyst, Client, Technical Leads etc.)
  2. Test Planning: Test Planning is when the entire testing strategy is defined. This is the most important phase of a software testing life cycle. 
  3. Test Designing: In this phase, the testing team creates detailed test cases. After the test cases are created, they are generally reviewed by the QA Lead.
  4. Test Environment Setup: The test environment defines the software and hardware conditions under which a product is tested. Setting up a correct test environment is one of the critical aspects of the testing process.
  5. Test Execution:  During this phase, the testers carry out the actual testing based on the test plans and test cases prepared. Bugs, if any, are reported to the development team for correction after which re-testing, if required, is done.
  6. Test Closure:  A test closure report describes the activities performed by the QA team.

A well defined objective is critical to meeting the desired outcome of testing. At each stage of the development lifecycle, this objective can be different. Let’s look into how testing differs at various stages.

  1. Unit Testing: A unit is the smallest testable part of any software. Unit testing is done to check whether the individual modules of the code are working properly. Unit testing is normally performed by the developer or a peer. In rare cases, it may be performed by a tester.
  2. Integration Testing: In Integration Testing, multiple individual units are combined and tested as a group. The focus of integration testing is to expose defects at the time of interaction between the components or units.
  3. System Testing: System testing means testing the system as a whole. All modules/components are integrated. The whole system is tested to ensure that it works as expected. System testing is done after the integration testing.
  4. User Acceptance Testing: UAT is performed by the intended end-user to verify and validate the functionality of the system before moving the application to production. The purpose of UAT is to validate end-to-end business flow.

There are broadly two types of testing - functional and non-functional. We shall cover this further in the next post.

Meanwhile, in case you would like to discuss how we can help enhance your testing operations, we would be happy to connect with you!

Let’s build something amazing together