Open In App

Principles of software testing – Software Testing

Software testing is the process of executing a program to find the error. To make our software perform well it should be error-free. If testing is done successfully it will remove all the errors from the software. Software Testing is a process of evaluation of the software on the requirements gathered from system specifications and users. Software Testing is done at every phase level in Software Development Life Cycle(SDLC). It can also be done at a module level in the program code. Validation and Verification are two main things that are included in Software testing. also, Software Testing is very important otherwise the software bugs can be dangerous.

Principles of Software Testing

Principles of Software Testing

  1. Testing shows the presence of defects
  2. Exhaustive testing is not possible
  3. Early testing
  4. Defect clustering
  5. Pesticide paradox
  6. Testing is Context-Dependent
  7. Absence of Errors fallacy

1. Testing shows the Presence of Defects:

The goal of software testing is to make the software fail. Software testing reduces the presence of defects. Software testing talks about the presence of defects and doesn’t talk about the absence of defects. Software testing can ensure that defects are present but it can not prove that software is defect-free. Even multiple tests can never ensure that software is 100% bug-free. Testing can reduce the number of defects but not remove all defects.



2. Exhaustive Testing is not Possible:

It is the process of testing the functionality of the software in all possible inputs (valid or invalid) and pre-conditions is known as exhaustive testing. Exhaustive testing is impossible means the software can never test at every test case. It can test only some test cases and assume that the software is correct and it will produce the correct output in every test case. If the software will test every test case then it will take more cost, effort, etc., which is impractical.

3. Early Testing:

To find the defect in the software, early test activity shall be started. The defect detected in the early phases of SDLC will be very less expensive. For better performance of software, software testing will start at the initial phase i.e. testing will perform at the requirement analysis phase.



4. Defect Clustering:

In a project, a small number of modules can contain most of the defects. The Pareto Principle for software testing states that 80% of software defects come from 20% of modules.

5. Pesticide Paradox:

Repeating the same test cases, again and again, will not find new bugs. So it is necessary to review the test cases and add or update test cases to find new bugs.

6. Testing is Context-Dependent:

The testing approach depends on the context of the software developed. Different types of software need to perform different types of testing. For example, The testing of the e-commerce site is different from the testing of the Android application.

7. Absence of Errors Fallacy:

If a built software is 99% bug-free but does not follow the user requirement then it is unusable. It is not only necessary that software is 99% bug-free but it is also mandatory to fulfill all the customer requirements.

Types of Software Testing

  1. Unit Testing
  2. Integration Testing
  3. Regression Testing
  4. Smoke Testing
  5. System Testing
  6. Alpha Testing
  7. Beta Testing
  8. Performance Testing

1. Unit Testing

Unit tests are typically written by developers as they write the code for a given unit. They are usually written in the same programming language as the software and use a testing framework or library that provides the necessary tools for creating and running the tests. These frameworks often include assertion libraries, which allow developers to write test cases that check the output of a given unit against expected results. The tests are usually run automatically and continuously as part of the software build process, and the results are typically displayed in a test runner or a continuous integration tool.

Unit Testing has several benefits, including:

2. Integration Testing

Integration testing is a software testing method in which individual units or components of a software application are combined and tested as a group. The goal of integration testing is to validate that the interactions between the units or components of the software work as expected and that the software as a whole functions correctly.

Integration testing is typically performed after unit testing and before system testing. It is usually done by developers and test engineers, and it is usually carried out at the module level. Integration tests are typically automated and run frequently, as part of the software build process, to ensure that the software remains stable and free of defects over time.

Integration testing is done to verify that different components or modules of the software work together as expected and to identify and fix any issues that might arise due to interactions between the modules. These tests can include testing different combinations of inputs, testing how the software handles different types of data, and testing how the software handles different error conditions.

Integration Testing has several benefits, including:

3. Regression Testing

Regression testing is a software testing method in which previously developed and tested software is retested after it has been modified or changed. The goal of regression testing is to ensure that any changes to the software have not introduced new bugs or broken existing functionality. It is typically done to verify that changes such as bug fixes, new features, or updates to existing features have not affected the overall functionality of the software.

Regression testing is typically performed after unit testing and integration testing. It is usually done by developers and test engineers and it is usually carried out by re-running a suite of previously passed test cases. The test cases are chosen to cover the areas of the software that were affected by the changes and to ensure that the most critical functionality of the software is still working correctly. Regression testing is typically automated and run frequently, as part of the software build process, to ensure that the software remains stable and free of defects over time.

Regression Testing has several benefits, including:

4. Smoke Testing 

Smoke testing, also known as “Build Verification Testing” or “Build Acceptance Testing”, is a software testing method in which a minimal set of tests are run on a new build of a software application to determine if it is stable enough to proceed with further testing. The goal of smoke testing is to quickly identify and isolate major issues with the software build so that development can be halted if the build is found to be too unstable or unreliable.

Smoke testing is typically performed early in the software testing process, after the software has been built and before more extensive testing is done. It is usually done by developers and test engineers and it is usually carried out by running a small set of critical test cases that exercise the most important functionality of the software. Smoke tests are usually automated and can be run as part of the software build process.

Smoke Testing has several benefits, including:

5. System Testing

System testing is a software testing method in which an entire software system is tested as a whole, to ensure that it meets the requirements and specifications that it was designed for. The goal of system testing is to validate that the software system behaves as expected when it is used in its intended environment and that it meets all the requirements for functionality, performance, security, and usability.

System testing is typically performed after unit testing, integration testing, and regression testing. It is usually done by test engineers and it is usually carried out by running a set of test cases that cover all the functionality of the software. The test cases are chosen to cover the requirements and specifications of the software and to ensure that the software behaves correctly under different conditions and scenarios. System testing is typically automated and run frequently, as part of the software build process, to ensure that the software remains stable and free of defects over time.

System Testing has several benefits, including:


Article Tags :