Complete Software Testing Hierarchy | Software Testing Levels |Different Testing Types with Details

Complete Software Testing Hierarchy

Software Testing Hierarchy
Please refer the below video on Complete Software Testing Hierarchy:

Retesting and Regression Testing


  • Testing the same functionality with different combination of input data is called retesting.
  • Retesting essentially means to test something again.
  • In simple words, Retesting is testing a specific bug after it was fixed. 
  • Retesting ensures that the issue has been fixed and is working as expected.
  • It is a planned testing with proper steps of verification
  • In some cases the entire module is required to be re-tested to ensure the quality of the module.

Why and when we perform Retesting

  • Retesting is used when there is any specific error or bug which needs to be verified.
  • It is used when the bug is rejected by the developers then the testing department tests whether that bug is actual or not.
  • It is also used to check the whole system to verify the final functionality.
  • It is used to test even the entire module or component in order to confirm the expected functionality.


  • Retesting ensures that the issue has been fixed and is working as expected.
  • It improves the quality of the application or product
  • It requires less time for verification because it’s limited to the specific issue or any particular feature.
  • If the tester has knowledge of the source code, it becomes very easy to find out which type of data can help in testing the application effectively.


  • It requires new build for verification of the defect.
  • Once the testing is started then only the test cases of retesting can be obtained and not before that.
  • The test cases for re-testing cannot be automated.

Regression Testing

  • If any changes are done in the existing build this test is conduct on the modified build to verify the changes are working correctly or not and because of this changes there are no side effect.
  • In Regression Test the change functionality + dependent functionality are tested .
  • The purpose of the regression testing is to find the bugs which may get introduced accidentally because of the new changes or modification.
  • This also ensures that the bugs found earlier are NOT creatable.
  • This helps in maintaining the quality of the product along with the new changes in the application.

When To use Regression Testing

  • Any new feature is added to an existing feature.
  • The codebase is fixed to solve defects.
  • Any bug is fixed
  • Changes in configuration.


  • It helps the team to identify the defects and eliminate them earlier in the software development life cycle.
  • It ensures continuity of business functions with any rapid change in the software.
  • Regression testing can be done by using the automation tools.
  • It helps us to make sure that any changes like bug fixes or any enhancements to the module or application have not impacted the existing tested code.


  • If regression testing is done without using automated tools then it can be very tedious and time consuming because here we execute the same set of test cases again and again.
  • Regression testing has to be performed for every small change in the code as even a small portion of code can create issues in the software.
  • It takes time to complete the tests and this slows down the agile velocity.
  • It's expensive and the cost is hard to justify. 

Re-testing vs Regression Testing:


Regression Testing

Retesting is about fixing specific defects that you've already found.

Regression testing is about searching for defects.

Retesting is done only for failed test cases.

Regression testing is performed for passed test cases.

Retesting is used to ensure the test cases which failed in last execution are fixed.

Regression testing is to ensure that changes have not affected the unchanged part of product. 

Verification of bugs are included in the retesting.

Verification of bugs are not included in the regression testing.

Retesting is of high priority so it’s done before the regression testing.

Regression testing can be done in parallel with retesting.

Retesting the test cases cannot be automated.

Regression testing test cases can be automated.

In case of retesting the testing is done in a planned way.

In case of regression testing the testing style is generic.

Test cases of retesting can be obtained only when the testing starts.

Test cases of regression testing can be obtained from the specification documents and bug reports

Please refer the below video on complete video on Retesting and Regression Testing:

What is Adhoc Testing? Difference between Adhoc testing and Exploratory Testing

 Adhoc Testing

  • When a software testing performed without proper planning and documentation, it is said to be Adhoc Testing.  
  • Ad hoc Testing is an informal or unstructured software testing type that aims to break the testing process in order to find possible defects.
  • Ad hoc testing is performed without a plan of action and any actions taken are not typically documented.
  • Ad Hoc Testing implies learning of the software before its testing.
  • Ad hoc Testing is done by executing the random scenarios and it is a form of negative testing which ensures the perfection of the testing.

Why do we do adhoc testing?

  • The main aim of ad hoc testing is to find any defects through random checking.
  • This can uncover very specific and interesting defects, which are easily missed when using other methods.
  • Ad hoc testing can be performed when there is limited time to do exhaustive testing and usually performed after the formal test execution. 
  • Ad hoc testing will be effective only if the tester has in-depth understanding about the System Under Test.


  • This method is very simple and can be performed without any training.
  • It can be used when time period is limited. 
  • This can uncover very specific and interesting defects, which are easily missed when using other methods.
  • This testing can be performed any time during Software Development Life Cycle Process (SDLC)


  • This method is not recommended, when more scientific methods are available.
  • The actual testing process is not documented since it does not follow a particular test case. 
  • It is difficult for the tests to regenerate an error in ad hoc testing.

Adhoc testing Vs Exploratory Testing

Adhoc Testing

Exploratory Testing

Ad Hoc Testing implies learning of the software before its testing.

Exploratory Testing, you learn and test the software simultaneously.

Documentation is not a basic need of this type of testing. The QA team always attends the testing without specific documentation.

Documentation is mandatory in Exploratory Testing. To assure the quality it’s necessary to documents the detail of the testing.

Ad hoc is about the perfection of the testing.

Exploratory Testing is more about the learning of the application.

Ad hoc Testing helps to find innovative ideas from the research.

It helps to develop the application.

Ad hoc is a technique of testing an application; this provides a significant role in the software Production.

This is an approach of testing that combines the learning test results and creates a new solution.


It mostly works on the business concerns and increases the knowledge about the application.


It categorizes the problems and compare them from the problems found in past. This helps to reduce the time consumption.

Adhoc testing is not important to execute by an expert software testing engineer.

This always needed to be done by expert.

It works on negative testing mostly.

This testing works on positive testing niche.

Please refer the below video on complete video on Adhoc testing:

What is Exploratory Testing?

Exploratory Testing?

  • Exploratory testing is an approach to software testing that is concisely described as simultaneous learning, test design and test execution. 
  • Exploratory testing allows you to think outside the box and come up with scenarios that might not be covered in a test case.
  • In simple word it is a type of software testing where Test cases are not created in advance but testers check system on the fly. 
  • It focuses on discovery and relies on the guidance of the individual tester to uncover defects that are not easily covered in the scope of other tests.
  • It doesn't restrict the tester to a predefined set of instructions.
  • This is a test approach that can be applied to any test technique, at any stage in the development process.

When should we do Exploratory Testing?

  • In many software cycles, an early iteration is required when teams don’t have much time to structure the tests. Exploratory testing is quite helpful in this scenario.
  • When testing mission-critical applications, exploratory testing ensures you don’t miss edge cases that lead to critical quality failures.
  • It is especially useful to find new test scenarios to enhance the test coverage.
  • It helps review the quality of a product from a user perspective. 

Advantages of Exploratory testing

  • It requires limited preparation, which allows you to save time and quickly jump to execution.
  • In Exploratory Testing, you can generate your own test scenarios on the fly, which will allow you to dive deeper into the functional aspects of the product.
  • This test is much less time-consuming.
  • It allows you to think outside the box and come up with scenarios that might not be covered in a test case.
  • This allows the tester to find defects that are beyond the scope of the listed scenarios.
  • This is an approach that is most useful when there are no or poor specifications and when time is severely limited.

Disadvantages of Exploratory testing

  • In exploratory testing, once testing is performed it is not reviewed.
  • Difficult to document each procedure.
  • It is difficult to reproduce the failure.
  • It is not easy to say which tests were already performed.
  • Limited by testers’ skills set.
  • Reporting is difficult without planned scripts.

Please refer the below video on complete video on Exploratory Testing:

What is Positive and Negative Testing?

Positive Testing

  • Positive Testing is a type of testing which is performed on a software application by providing the valid data as an input.
  • Positive testing is a type of software testing that is performed by assuming everything will be as expected.
  • It is performed with the assumption that only valid and relevant things will occur.
  • In this type, testing performed within the boundaries and this testing checks that the product /application is behaving as per the specification document with a valid set of test data.

Negative Testing

  • Negative testing is a method of testing an application or system that ensures that the plot of the application is according to the requirements and can handle the unwanted input and user behavior. 
  • It is also known as error path testing or failure. And it helps us to identify more bugs and enhance the quality of the software application under test .
  • Negative testing uses invalid input data, or undesired user behaviors, to check for unexpected system errors.
  • We can say that the negative testing is executing by keeping the negative point of view in simple terms.
Difference between positive testing and negative testing:

Positive Testing

Negative Testing

Positive Testing means testing the application or system with valid data.

Negative Testing means testing the application or system with invalid data.

It is always done to verify the known set of test conditions.

It is always done to break the project or product with unknown set of test conditions.

It ensures software is normal.

It ensures 100% defect free software.

It doesn’t cover all possible cases.

It covers all possible cases.

It can be performed by people having less knowledge.

It can be performed by professionals.

Positive testing is implemented only for the expected conditions.

Negative testing is implemented only for unexpected conditions.

It is less important as compare to negative testing.

It is more important as compare to positive testing.

Positive testing can be implemented on every application.

Negative testing can be implemented when the possibilities of unpredicted conditions.

Please refer the below video on complete video on Positive and Negative Testing:

Complete Article on Smoke and Sanity Testing

Smoke Testing:

  • Smoke test is also known as Build Verification Testing OR Build Acceptance Testing.
  • Smoke testing is the preliminary check of the software after a build and before a release.
  • It is a type of acceptance testing, provide an initial check that a new software build and its critical functionality are stable or not.
  • Smoke testing is a group of tests that are executed to verify if the critical functionalities of a particular build are working fine as expected or not.

How to do Smoke Testing:

  • The development team deploys the build in QA. We will need to perform setup steps.
  • Then the subsets of test cases are taken, and then testers run test cases on the build.
  • The QA team test the application against the critical functionalities. These series of test cases are designed to expose errors that are in build.
  • After the smoke test, we need to clean up. This might include stopping a server, deleting files, or emptying database tables. This could also be done before the initial setup step to ensure that the environment is clean before any tests are started.

Why We Perform Smoke Testing:

  • Smoke Testing is done whenever the new functionalities of the software are developed and integrated with the existing application.
  • It ensures that all critical functionalities are working correctly. 
  • It reveal simple failures but severe enough to , reject a prospective software release.
  • It helps to find issues in the early phase of testing.

Smoke Testing Example

A web page for insurance add a claim status page. Tester would apply smoke test to verify that the existing build works on fundamental level , such as user can login in or not and navigate to claim status page or not , and retrieve the status report of specific claim without the app crashing.  

Sanity Testing:

  • Sanity Testing is a subset of regression testing. 
  • After receiving the software build, sanity testing is the 1st test to ensure that the code changes introduced are working as expected.
  • If any defect found in test we can reject the build and stop the testing.
  • After Sanity test complete the status either Pass Or Fail has to be reported to the developers.
  • The test is conducted for very short period of time (15-30 min Max)

How to do Sanity Testing

  • Unlike other types of testing, sanity does not need a handful of techniques, You do not need to write test cases for sanity testing because you want to perform quick and speedy testing.
  • The first thing in Sanity Test is to identify the new functionalities, changes or any bug fixes.
  • Then we will check the newly implemented changes if they are working fine or not .
  • At Last we will randomly check a few related functionalities to see if they are also working as expected. 
  • If it all goes good, then the release can be passed for further testing or if any one functionality is not working as per requirement or got failed we can reject the build and stop the testing.

Why We Perform Sanity Testing

  • It is also known as Surface Level Testing, this must be done to quickly evaluate the quality of regressions made to the software.
  • Sanity is done to determine if new module additions to an existing software build are stable enough to pass to the next level of testing or not. 
  • If sanity test is pass we can continue further testing, if its fail we can reject the build and stop the testing so developers and fix the changes ASAP.

Sanity Testing Example

A web page for loan provider returns a 404 error for personal loan page. The developers fix the issue and submit the build for testing. The QA professional perform a sanity test to determine whether the basic functionality and navigation for that specific page is working as intended or not.   

Smoke Vs Sanity



Smoke Testing is performed to ascertain that the critical functionalities of the program are working fine.

Sanity testing is done at random to verify that each functionality is working as expected.

Smoke testing is usually documented and scripted.

Sanity testing is not documented and is unscripted.

Smoke Testing has a goal to verify “stability”.

Sanity Testing has a goal to verify “rationality”.

Testing is done by both developers or testers.

Sanity Testing is done by only testers.

Smoke testing is a subset of acceptance testing.

Sanity testing is a subset of Regression Testing.

This is a wide and High Level testing.

This is a wide and shallow testing.

It is a well elaborate and planned testing.

This is not a planned test and is done only when there is a shortage of time.

Smoke testing exercises the entire system from end to end.

Sanity testing exercises only the particular component of the entire system.

Please refer the below video on complete video on Smoke and Sanity Testing:

What is Error Guessing Testing Technique?

Error Guessing Testing

  • Testing is conducted by performing invalid operations and validate the error massage is displaying or not .
  • The Error massage should meaningful to understand.
  • It is a type of testing method in which prior experience in testing is used to uncover the defects in software. It is an experience based test technique in which the tester uses his/her past experience or intuition to gauge the problematic areas of a software application.

Error Guessing Testing example:

  • We need to test a program which read’s a file. What happen if the program gets a file which is empty OR  The file does not exist?
  • Enter blank space into text fields
  • Use max limits of files to be uploaded

Advantages of Error Guessing Testing

  • It uncovers those defects which would otherwise be not possible to find out, through formal testing. 
  • To expand the test coverage.
  • It does not follow any specific rules.

Disadvantages of Error Guessing Testing

  • Only experienced testers can perform this testing. You can’t get it done by freshers.
  • It also cannot guarantee that the software has reached the expected quality benchmark.

Please refer below video on Error Guessing Testing:

What is UI (user interface) testing?

What is UI (user interface) testing? 

  • UI Testing, also known as GUI ( Graphical User Interface)  Testing. 
  • Verify the page or window displayed or not.
  • Verifying the objects displayed in the page.
  • This usually means testing the visual elements on the application.

Why we do GUI testing?

  • GUI testing is helps to deliver high-quality and user-friendly software. In the end, you achieve a higher level of user engagement and satisfaction.
  • To ensure the images and other feature are user friendly or not.
  • To Ensure that user will use the application further or not.

What we verify as part of GUI testing 

  • In GUI we mainly test the visible design element like button, icon, text box etc…
  • We Check for the fonts are readable or not 
  • Check for the images. There clarity and  pixel size and position.
  • Check for the page if it is easy to understand as per customer point of view .
  • Check for the buttons and boxes are Proper not overlapped.
  • Check for grammar and spellings in page.
  • Testing of the error messages that are getting displayed.
  • Testing the different sections of the screen

Advantages of UI or GUI Testing

  • Helps validate the compliance of various icons and elements with their design specifications.
  • The sooner we can catch offending elements in our UI, the quicker they can be resolved.
  • Offers developers and testers ease of use and learning.
  • Efficiently reduces the number of risks towards the end of development life cycle.

What is Object Properties Testing?

  • Verify the Properties of an object in the page like enable , disable , color , x-y coordinates etc .
  • In this test, most likely, we need to check whether an object's property meets a specific condition or not. 

Object Properties Testing example:

  • In the yahoo or gmail inbox first page previous and 1st link should be disable , when go to next page previous and 1st link should get enable.
Please refer below video on GUI Testing:

Quality Assurance VS Quality Control

Quality Assurance VS Quality Control



QA is the process of managing for quality.

QC is used to the verify the quality of the output.


QA aims to prevent the defect.


QC aims to identify and fix the defect.


It is method to manage the quality verification.


It is a method to verify the quality validation.


It is preventing technique.


It is a corrective technique.


It is the process to create the deliverables.


It is the process to verify the deliverables.


QA -> SDLC process.


QC-> STLC Process.



Involvement of whole team.


Involvement of Testing Team

Perform before QC.


After QA


Please refer the below video on difference between QA and QC:

Difference between Verification and Validation

Verification Vs Validation:



Verification is the process of checking the documents (BRD, SRS), design, code and programs.

Testing and validation of actual product.




Are we building the product write? s/w meets the specification or not? Here we are checking whether we are developing right product or not.


Are we building the right product or not?  s/w meets the requirement or not? We check whether the developed module is right or not.


Static Testing

Dynamic Testing

Methods – Inspection, Reviews and walk through.

Methods - Unit, integration, system, Acceptance, black box, functional and non-functional testing.

QA comes under verification.

QC comes under validation.


QA involved

Tester involved with the help of QA


It comes first

It comes later


It finds the bug early in the development life cycle.

It finds the bugs that verification cannot catch.

Please refer the below video on difference between Verification and Validation:

Acceptance Testing And Its Levels

What is Acceptance Testing:

  • After testing is completed by tester before deploying the application into production business user will conduct testing to ensure the application is working as per there requirement or not called acceptance testing.
  • This is a type of testing done by users, customers, or other authorized entities to determine application/software needs and business processes.
  • Software testing where a system is tested for acceptability.

Advantages of Acceptance Testing 

  • Reduces the risk of defects being identified in production.
  • It increases the satisfaction of clients as they test application itself.
  • Increasing software robustness and usability.
  • Increase end-user happiness

Levels of Acceptance Testing

  • Alpha Test OR Pre UAT
  • Beta Test OR Post UAT

Alpha Test OR Pre UAT Testing

  • Alpha testing is conducted in the development company.
  • Alpha tests are carried out early in the development process by internal staff ,project manager teams up with the developer to define specific goals for alpha testing. 
  • Testing is conduct in test environment.
  • Testing is done by testers and quality analyst.
  • Testing is conduct for application and product.

Advantages of Alpha Testing or Pre UAT 

  •  It helps to uncover bugs that can pose a serious threat.
  •  It helps to deliver good quality software for beta testing
  •  During this testing, the real-time behavior of the users and the environment is imitated.

Beta Test OR Post UAT

  • Testing is conducted at customer location.
  • Beta testing is one of the final steps in your software development lifecycle (SDLC) before a product goes live.
  • Beta Testing is performed by real users of the software application in real environment.
  • Beta Testing allows a company to test post-launch infrastructure.

Advantages of Beta Testing or Post UAT 

  • Direct feedback from customers is a major advantage of Beta Testing.
  • Reduces product failure risk via customer validation.
  • Improves product quality via customer feedback.
Please refer below video for more detail on Acceptance Testing And Its Levels:

System Testing And Its Types

 What is System Testing?

  • System testing is testing conducted on a complete integrated system to evaluate the system's compliance with its specified requirements.
  • Testing is conducted by tester.
  • It is a black box testing.
  • This testing is conduct after the complete code is developed.
  • During system testing we will conduct both functional and non-functional testing

Types of System Testing

  • Functional Testing 
  • Non-Functional Testing

Advantages of System Testing 

  • It helps in getting maximum bugs before acceptance testing.
  • It ensure the application is validated as per customer requirement. ( SRS ,FRS)
  • It is the first testing level in which the whole system is under test from end to end.
  • This testing phase uses the test environment which is similar to the real business environment or production environment.

Functional Testing

These are black box testing techniques which test the functionality of the application.

  • Functional testing validate the application’s functionality is working as per requirement or not.
  • It Is a quality assurance process.
  • Functions are tested by feeding them input and examining the output.

Types of Functional Testing 

  • User Interface Testing
  • Object Properties Testing
  • Error Guessing Testing
  • Input Domain Testing
  • Database Testing
  • Calculation Testing
  • Link’s and URL’s Testing

Non-Functional Testing

  • In this type of testing we check non-functional aspects (performance, usability, reliability, etc) of a software application.
  • We test the characteristic and feature of an application.
  • Non Functional testing has a goal to validate the performance of the software.

Types of Non-Functional Testing 

  • Usability Testing 
  • Performance Testing 
  • Memory leakage Testing
  • Volume Testing
  • Compatibility Testing
  • Security Testing
  • Configuration Testing
  • Recovery Testing
  • Installation Testing
  • Compliance Testing

Please refer below video for more detail on System Testing And Its Types:

Integration Testing And Its Approaches

Integration Testing And Its Approaches 

What is Integration Testing:

  • Testing is conduct by integrating two or more component 
  • with in the same system or two different system are integrated.
  • It is a phase in software testing in which individual software modules are combined and tested as a group.
  • During the integration we verify the data communication    between the component.
  • We calculate the performance.(Time taken to complete the transaction)
  • We verify the function of the application.

Integration Testing Approaches:

  • Big - Bang Integration approach
  • Incremental Approach
  1. Top - Down Integration
  2. Bottom – Up Integration
  3. Mixed Or Sandwich integration 

1. Big – Bang Integration Approach

  • Testing is conducted on multiple component together.
  • All the units are tested together as one single combined unit.
  • This form of integration testing works well for smaller systems.

Limitations Faced in Big – Bang Integration Approach

  • In this approach Detailed testing is not possible if any defect is found it will take time or effort to analysis the defect. 
  • It is also difficult to find the root cause of a defect in this method.
  • Critical modules are not prioritized which could increase the overall risk.

2. Incremental Approach

  • In Incremental integration testing, the developers integrate the modules one by one using stubs or drivers to uncover the defects. This approach is known as incremental integration testing.
  •  Testing, in which components or systems are integrated and tested as long as all components or systems are integrated and tested completely.
Types of incremental  approach
  • Top - Down Integration:- Testing is conduct from main module to sub module. In this approach verify the data updated in main module is updated in sub module.  
  • Bottom – Up Integration:- Testing is conduct from sub module verify the data tested in sub module thus make sure that highest module is tested properly.
  • Mixed Or Sandwich integration:- It is combination of top-down and bottom-up integration. 

Stubs And Drivers

This are the temporary component which are used in place of sub module and main module 

Stubs :-  It is substitute for sub module in top - down integration approach.

Driver :- It is substitute for Main module in Bottom - up  integration approach.

Advantages of Integration Testing 

  •  It ensures that internal modules and components communicate properly.
  •  It performs regression testing on important connection points.
  •  It also helps to detect the issues related to the interface between modules.
  •  Integration testing helps to stimulate the interaction between various modules.
  •  It Covers multiple modules to provide broader test coverage.

Disadvantages of Integration Testing 

  • Difficult to perform – It is very difficult to perform as compared 
  • to system testing in which we can consider the application as a 
  • black box.
  • Time-consuming – It is very time-consuming and 
  • resource-intensive to test all the interfacing between the different connected modules.
  • Additional efforts – It requires the creation of stubs and drivers which if not created correctly can result in inadequate testing.

Please refer below video for more detail on Integration Testing And Its Approaches: