QA–QC Arena – Software Testing Home for beginners and experts

Software Testing Principles

Sr. No.
Software Testing Principles
Testing shows presence of Defects
Testing can show that defects are present, but cannot prove that there are no defects. Testing reduces the probability of undiscovered defects remaining in the software but, even if no defects are found, it is not a proof of correctness.
Exhaustive Testing is impossible
Testing everything (all combination of input values and preconditions) is not feasible except for trivial cases. Instead of Exhaustive Testing, we can use risks & priorities to focus testing efforts.
Exhaustive Testing – A Test approach in which the test suite comprises all combination of input values and preconditions.
Early Testing
Testing activities should start as early as possible in the software or system development life cycle and should be focused on defined objectives.
Defect Clustering

A small number of modules contain most of the defects discovered during pre-release testing or show the most operational failures.
Pesticide Paradox
If the same tests are repeated over and over again, eventually the same set of test cases will no longer find any new bugs. To overcome this Pesticide Paradox, the test cases need to be regularly reviewed and revised, and new and different tests need to be written to exercise different parts of the software or system to potentially find more defects.
Testing is context dependent
Testing is done differently in different contexts. For example, safety-critical software is tested differently from an e-commerce site.
Absence of errors fallacy
Finding and fixing defects does not help if the system built is unusable and does not fulfill the user’s needs and expectations.

Error – Defect – Failure

Error (Mistake) A human action that produces an incorrect result.

Defects (Bugs, Fault) – A flaw in a component or system that can cause the component or system to fail to perform its required function.

Failure – Deviation of the component or system from its expected delivery, service or results.

Fundamentals of Software Testing

Software Testing:
Software Testing is a process consisting of all life cycle activities; both static and dynamic, concerned with planning, preparation and evaluation of software products and related work products to determine that they satisfy specified requirements, to demonstrate that they are fit for purpose and to detect defects.
Testing is a process of executing a program with the intent of finding an error.
Testing is a process of trying to discover every conceivable fault or weakness in the work product.

It is impossible to test every single combination and permutation of data inputs and interfaces that cause a system to react. The most practical means of testing is to determine the ways in which the system is most likely to be used.

Need of Software Testing:
  • To make sure that the product is as per the specifications.
  • To detect defects & reduce the risk of problem occurring in production.
  • To provide an indication of software’s reliability & quality.
  • To help in modifying features to make it more usable & friendly.

Causes of Software Defects:
  • Programming errors / Poorly documented code
  • Miscommunication / No communication
  • Changing Requirements
  • Errors in the Specification, Design and Implementation
  • Software complexity
  • Time pressure
  • Environmental conditions
  • Ego problem

Role of a Software Tester:
Role of a Software Tester is to find the defects & make sure that as early as possible they get fixed.
At every point of time Tester has to prove the Developer is wrong (along with this approach tester can easily find every conceivable fault in software).

Skills required by a Software Tester:
  • Good communication skills
  • Good observation skills
  • People handling skills
  • Good grasping power
  • Patience
  • Creativity in terms of identifying problematic areas