Loading

Testing Throughout the Software Life Cycle


With the constant evolution and advancement of software applications, the trends and competency of testing is also changing. Testers all around the world are now adopting new methodologies and techniques and are required to be more technical and process oriented. Moreover, their tasks are not just limited to finding bugs and defects in the system, but to perform testing throughout the software life cycle, from its commencement to its culmination. Unlike earlier, testing is no longer executed in isolation and consists of various activities that are highly dependent of software development activities. Additionally, it uses different life cycle models that allow in-depth testing of components as well as makes the process of testing easy.

Therefore, to explain the importance of testing throughout the software life cycle, following is a discussion that defines the levels, types, and other important aspects of testing.

Software Testing Life Cycle:

A life cycle can be defined as a sequence of changes that happen to any tangible or intangible thing to modify it from one form to another. It is merely a process, wherein a single component goes through level of changes to become a better version of itself. Similarly, Software Testing Life Cycle (STLC) is one of the most important process, wherein a software is tested rigorously and continuously through numerous techniques to get expected results as well as to improve the quality and the functionality of the software system. Furthermore, Software Testing Life Cycle (STLC) includes following stages, which help testers in the process testing.

  • Test Planning & Control.
  • Analysis & Design.
  • Implementation & Execution.
  • Evaluating Exit Criteria & Reporting.
  • Test Closure.

Software Development Models:

The various processes and methodologies that are selected for the development of the project depending on project’s main objective and goal, are known as software development models. These models are crucial for software testing, as the process carried out by the testers are largely depended on these models. The software development models specify the stages of a particular process and the order in which they will be carried out. Moreover, the selection of software development models has a great impact on the testing. It largely influences regression testing and helps determine the techniques that will be used for the process of testing. These model are mainly divided into two categories, which are:

  1. Sequential: These are one of the most common and classic form of development models, where the development is seen as flowing steadily downwards through the phases. Here, the process proceeds from one phase to another in a sequential manner only when one phase or stage is fully completed. Sequential development models are easy to maintain and simplify the process of testing. Two of the most common sequential models are:
    • Waterfall Model:
    • Also known as linear-sequential life cycle model, Waterfall is the most widely used software development model that is divided into separate phases. The process of development in this model flows from one phase to another, once the requirements and goals of the initial stage is achieved. In Waterfall Model, the outputs of one phase act as the input of another phase, which prevents overlapping of phases.

      Features of Waterfall Model:

      • One of the most popular development model.
      • Allows departmentalization and control.
      • Divided into separate phases: Requirement Analysis; System Design; Implementation; Testing; Deployment of System; Maintenance.
      • Illustrates the development process in a linear & sequential flow.
      • Well documented.
      • Rigidity of this model makes it extremely easy to manage.
      • Simple, easy to use and understand.
    • V-Model:
    • Termed as an extension of Waterfall, V model is another popular and widely used software development model that was mainly developed to overcome the issues encountered during the waterfall model. Also known as Verification and Validation Model, V-Model is highly disciplined and is based on the association of a testing phase for each corresponding development stage, that is, here testing is done simultaneously with the development process. The phases of this stage are mainly divided into two categories, which are:

      Verification Phase:

      • Requirement analysis.
      • System Design.
      • Architecture Design.
      • Module Design.

      Validation Phase:

      • Unit Testing.
      • Integration Testing.
      • System Testing.
      • User Acceptance Testing.
  2. Iterative-Incremental:
  3. Unlike sequential models, the iterative-incremental model is focused on simplified implementation of system requirements and iteratively enhancing the evolving version until the full system is implemented. Once the implementation is initiated, design modifications are made and new functional capabilities are added during each iteration, which helps in building a software that offers optimum user experience. The basic idea of this model is to develop a system one at a time, in small portions with the assistance of repeated cycles.

    • Agile:
    • A popular incremental and iterative model, agile development method follows a process wherein requirements and solutions evolve constantly through regular collaboration of self organizing and functioning teams. Within this development model, each step of development, such as requirements, analysis, design, and more are regularly monitored by the team, which helps them promote disciplined project management. This model is extremely flexible and quickly reacts to changes. Moreover, it allows changes according to the customer requirements.

    • Scrum:
    • A subset of agile, Scrum is mainly used by software engineers where the requirements are changing rapidly. It can easily manage complex software and product development, while easily accommodating changes. Divided into three categories- roles, artifacts, & time boxes, scrum fosters a self organizing cross functional team. Furthermore, it significantly increases productivity as well as team accountability.

Levels of Testing:

Once the various development models are decided and implemented, the team moves on to the levels of testing, where in the actual testing is conducted. These include various methodologies and techniques of testing, which help testers test various major and minor components of the software. The purpose here is to validate that the system performs and functions appropriately and delivers superior quality. The major levels of software testing are:

  • Component/Unit Testing:: Also known as program, component, and module testing, this is the first stage of software testing environment. Here, the smallest and most independent part of the source code, Unit is tested in isolation by developers to ensure that the code works and functions as designed and meet the specified requirements.
  • Component Integration Testing:: Performed after the culmination of component testing, component integration testing is focused on testing interactions between software component. It is mainly performed to expose defects in the interfaces and interactions between integrated components.
  • System Testing:: Executed after integration testing and before acceptance testing, system testing is the third level of software testing, where a complete and integrated software is tested by testers to evaluate software’s performance as well as its adherence to quality standards.
  • System Integration Testing:: This type of testing is performed in an integrated hardware and software environment to verify the behavior of the entire system. Here, the objective of testing is to verify the interactions between the modules of software, while validating its conformance with specified requirements in the Software Requirements Specifications & Software Design Document.
  • Acceptance Testing: In acceptance testing the system is tested for acceptability and accuracy. Here, the aim of testing is to evaluate the system’s compliance with business requirements and assess whether it is acceptable for delivery. This type of testing may occur at more than just a single level of software testing as it assess the system’s readiness for deployment and use.

Types of Tests:

Any discussion on Software Testing Life Cycle (STLC) is incomplete without mentioning the various types of tests that are performed during the process. The multifarious software test types are crucial as they focus on a particular test objective and perform testing on the basis of these objectives as well as the client’s requirements. Therefore, here are the three major types of tests:

  1. Black Box: One of the most common type of testing, black box testing is also known as behavioral testing. Applicable to higher level testing like acceptance testing and system testing, testers in this type of testing are unaware of the internal structure, design, or implementation of the item being tested. Here, the functionality of the system is tested as a whole. Black box testing is further divided into two categories:
    • Functional Testing: A quality assurance process, that tests the functionality as well as the features of the software. This type of black box testing technique bases its test cases on the specifications of the software under test.
    • Non-Functional Testing(Software Characterstics): This type of testing is used to test the non-functional aspects of the application such as its characteristics, performance, usability, reliability, compliance, etc. It is designed to test the readiness of the software as per non-functional parameters.
  2. White Box: Unlike in black box testing, here the testers are aware of the internal structure, design, and implementation of the software under test. Moreover, in white box testing programming and implementation knowledge are essential. The testers chooses inputs to exercise paths throughout the code and determines the appropriate and accurate outputs.
    • Structural Testing: Performed with the assistance of three testing techniques- statement coverage, branch coverage, & path coverage -structural testing is executed by developers. This white box testing is also known as clear box testing, glass box testing, code based testing, etc. and requires knowledge of code and implementation.
  3. Testing Related to Change: Another important type of software testing, here the tests are executed again and again by the testers to ensure that the system performs as per the stated requirements even after new changes or modifications are introduced in it. This is validated with the assistance of two testing techniques, which are:
    • Re-testing: It is used to test the same functionality of the system with the assistance of different data inputs, whenever new defects or issues are detected by the testers. Re-testing can also be termed as Confirmation testing, as it confirms that all the issue and discrepancies found in the system are resolved.
    • Regression: Regression Testing involves re-executing the same test case whenever the system is modified or new functionality is added into it. This type of software testing ensures that software performs appropriately after the introduction of new changes and modification in it.

Maintenance Testing:

Maintenance Testing is performed to identify various issues encountered by the user or client after the deployment of the software. Its main objective is to recognize and resolve equipment failures and problems, as well as to enhance the quality, performance, functionality of the deployed software. Moreover, it ensures that the functionality of the software remains the same even after the introduction of new changes and they do not cause any system breakdowns. In short, the testing done during system enhancement, change, and migration is known as maintenance testing. This can be performed at the system level, equipement level, or component level.

Features of Maintenance Testing:

  • Maintenance testing is performed when a change is implemented to the deployed software system or its environment.

  • It is triggered by:
    1. Modification: In the existing software.
    2. Migration: Change in system environment like OS version, database version, etc.
    3. Retirement: of older versions.
  • Extensive regression testing required.

Conclusion:

Software Testing Life Cycle (STLC) is an amalgamation of various activities and testing techniques, which work together to help developers and testers build a software application that is one of a kind. With the assistance of these testing levels, types, and methodologies a tester can effortlessly verify the effectiveness, efficiency, and quality of smallest components of the software and make sure that everything is in compliance with client’s requirements as well as organization’s rules and regulations. Moreover, by implementing testing throughout the software life cycle, one can develop a software with zero discrepancies and bugs.