smoke testing 

smoke testing is a preliminary to further testing, intended to reveal simple failures severe enough to reject a prospective software release. In this case the smoke is metaphorical. A subset of test cases that cover the most important functionality of a component or system are selected and run, to ascertain if the most crucial functions of a program work correctly.


The purpose is to determine whether the application is so badly broken that further testing is unnecessary.


If the smoke test fails, it is impossible to conduct a sanity test. In contrast, the ideal sanity test exercises the smallest subset of application functions needed to determine whether the application logic is generally functional and correct (for example, an interest rate calculation for a financial application). 



  • Smoke testing originated in the hardware testing practice of turning on a new piece of hardware for the first time and considering it a success if it does not catch fire and smoke. In software industry, smoke testing is a shallow and wide approach whereby all areas of the application without getting into too deep, is tested.
  • A smoke test is scripted, either using a written set of tests or an automated test
  • A Smoke test is designed to touch every part of the application in a cursory way. It’s shallow and wide.
  • Smoke testing is conducted to ensure whether the most crucial functions of a program are working, but not bothering with finer details. (Such as build verification).
  • Smoke testing is normal health check up to a build of an application before taking it to testing in depth.


  • A sanity test is a narrow regression test that focuses on one or a few areas of functionality. Sanity testing is usually narrow and deep.
  • A sanity test is usually unscripted.
  • A Sanity test is used to determine a small section of the application is still working after a minor change.
  • Sanity testing is a cursory testing, it is performed whenever a cursory testing is sufficient to prove the application is functioning according to specifications. This level of testing is a subset of regression testing.
  • Sanity testing is to verify whether requirements are met or not, checking all features breadth-first.

Hope these points will help you to clearly understand the Smoke and sanity tests and will help to remove any confusion.

Exploratory Testing

The essence of exploratory testing is that you learn while you test, and you design your tests based on what you are learning.

  • One definition (Bach's) is “Any testing to the extent that the tester actively controls the design of the tests as those tests are performed and uses information gained while testing to design new and better tests.
  • Another definition (Bach/Kaner) is any testing process that involves simulteous learning, test design, and test execution.










End to end testing : is similar to system testing : involves testing of a complete application environment in a situation that mimics real-world use, such as interacting with a database, using network communications, or interacting with other hardware, applications, or systems if appropriate.


System testing


Checking Or testing the whole system so that it meets the functioanl & technical requriments is called System testing. 


For example : Say that ur working on some telecom project ... for 
Hardware interface u may need Bluetooth, Serial cable etc & for software interface u may need MS Outlook 98/2000/XP, Outlook Express 6 etc. This depends on the project . Checking for all this requirments is called system testing.
If working on some non telecom project u may r may not need these requirments. So testing these hardware & software requirments according to project is called system testing