Fundamentals of Software Testing

Testing is the process of executing a program with the intent of finding errors.

What is Software Testing?

Software Testing is a process of verifying and validating that the program is performing correctly with no bugs. It is the process of analyzing the software for the purpose of finding the bugs. It also helps to identify the defects/flaws/errors that may appear in the application code which needs to be fixed. Testing not only means fixing the bug in the code but also to check whether the program is behaving according to the given specifications and testing strategies. There are various types of software testing strategies such as white box testing strategy, black box testing strategy etc.

Why Software Testing?

1. To deliver defect free product to the customers.

2. To assess the quality of the product.

3. To reach the customer expectations.

4. To learn about the reliability of the software.

Types of Testing:

There are 2 types of testing.
1. Manual Testing.
2. Automation Testing.

1) In Manual Testing, tester tests the application manually, if they find any defect, they report to the developers. Developers fix the defect, rebuild it and send back to testers. Testers retest to ensure that the defect is fixed and the application does not have any defects. This process repeats until all the defects are resolved.

2) In Automation testing, testing is done with the help of automated tools. The method or process being used to implement automation is called a test automation framework. Several frameworks have been implemented over the years by commercial vendors and testing organizations. Automation increases the speed of test execution and it helps increase the Test Coverage.

When can we perform Automation testing?

  • For High Risk or Business Critical test cases
  • Test cases that are executed repeatedly-It Increases our Test Coverage
  • Test Cases which are time-consuming-It increases speed & efficiency

Advantages of manual testing:

  • Low Cost
  • Decision-making
  • independent testing and minimal resources


  • Time consuming
  • Low reliable
  • Inaccuracy
  • No reusability
  • Inconsistency

Advantages of Automation testing:

  • Time saving
  • Fast &speed
  • Highly Reliable
  • Accuracy is high
  • Repeatability & Reusability
  • Consistent
  • Comprehensive


  • Expensive
  • Dependent
  • Minimal resources
  • High Maintenance
  • License issues

Testing- By Whom:
Developer-Develops the software (program level)
Testers- Tests the software (system level)
Users- Who will ultimately use the system (Production level)
Customers-who define the system (Acceptance level)
Quality: It is the level of Customer satisfaction. it is the level to which the customers need can be satisfied by the company/service provider.

Software Quality Approaches:

1. Quality Assurance.

2. Quality Control.

Quality Assurance (QA):

QA is planned and systematic way to evaluate the quality of the process used to produce a quality product.

The goal of a QA is to provide assurance that a product is meeting customer’s quality expectations.

QA deals with how to prevent bugs from occurring in a product being developed.

Software Quality Assurance Engineer’s main responsibility is to create and implement methods and standards to improve the development process.

QA is associated with activities like measuring the quality of the process used to develop a product, process improvement, and defect prevention.

It consists of auditing and reporting procedures related to development and testing.

Quality Control (QC):

QC in the software industry is evaluating software product, find the defects & suggest improvements.

QC implements the process established by QA.

The software tester is responsible for QC.

If required, personnel involved in QC have to carry out QA tasks as well.

Software Testing Principles:

There are seven principles of testing. They are as follows:

1) Testing shows the presence of defects: Testing can show the defects are present, but cannot prove that there are no defects. Even after testing the application or product thoroughly we cannot say that the product is 100% defect free. Testing always reduces the number of undiscovered defects remaining in the software but even if no defects are found, it is not a proof of correctness.

2) Exhaustive testing is impossible: Testing everything including all combinations of inputs and preconditions is not possible. So, instead of doing the exhaustive testing we can use risks and priorities are used to focus on business critical areas during testing.

3) Early testing: In the software development life cycle testing activities should start as early as possible and should be focused on defined objectives. Because defects found early are cheaper to fix.

4) Defect clustering: A small number of modules contains most of the defects discovered during pre-release testing or shows the most operational failures.

5) Pesticide paradox: If the same kinds of tests are repeated again and again, eventually the same set of test cases will no longer be able to find any new bugs. To overcome this Pesticide Paradox, it is really very important to review the test cases regularly and new and different tests need to be written to exercise different parts of the software or system to potentially find more defects.

6) Testing is context depending: Testing is basically context dependent. Different kinds of sites are tested differently. For example, safety-critical software is tested differently from an e-commerce site.

7) The absence of errors fallacy: If the system built is unusable and does not fulfill the user's needs and expectations then finding and fixing defects does not help.

Limitations of Testing:

Testing cannot be exhaustive

Selective testing cannot detect all errors

Testing itself may have bugs

It cannot prevent errors

Challenges in Testing:

Too many combinations of input to test

Not enough time to test properly

Difficulty in determining the expected result of each test

Rapidly changing requirements.