Lesson 6 of 17 · 17 min read

Types of Testing

Learn functional vs non-functional testing, smoke vs sanity, regression vs retesting, exploratory and ad-hoc testing, plus non-functional basics.

Learning objectives

  • Differentiate between functional and non-functional testing
  • Compare smoke vs sanity testing and regression vs retesting
  • Explain exploratory, ad-hoc and monkey testing and when to use them
  • Describe the basics of performance, usability, security and compatibility testing

In the previous lesson you learned when testing happens (levels). This lesson covers what kind of testing is performed. Testing types are grouped by the objective of the test. Questions such as "What is the difference between smoke and sanity testing?" and "Regression vs retesting?" appear in almost every manual testing interview, so pay special attention to the comparison tables.

Functional vs Non-Functional Testing

AspectFunctional testingNon-functional testing
QuestionWhat does the system do?How well does the system do it?
Based onFunctional requirements and business rulesQuality attributes such as speed, security, usability
ExampleApplying a valid coupon reduces the cart total by 10%The cart page loads within 2 seconds for 10,000 concurrent users
ExecutionMostly manual or automated functional testsOften needs specialised tools (for example, JMeter for load)

Smoke Testing vs Sanity Testing

Smoke testing is a quick, broad check of the most critical functions to decide whether a new build is stable enough for detailed testing. The name comes from hardware testing: switch on the device and see if smoke comes out. Sanity testing is a quick, narrow and deep check of a specific feature or bug fix to confirm it works and is rational before spending effort on further testing.

Smoke testingSanity testing
Wide and shallow: covers all major features brieflyNarrow and deep: focuses on specific changed areas
Done on every new buildDone on a relatively stable build after minor changes or fixes
Checks build stability ("Is it testable?")Checks rationality of a change ("Does this fix make sense?")
Usually scripted and often automatedUsually unscripted
Example: app launches, login works, search returns results, checkout opensExample: after a fix to the coupon module, check coupon application and cart total only
Note on terminology

Some companies use "smoke" and "sanity" interchangeably. In an interview, give the standard distinction above, and add that terminology can vary between organisations.

Regression Testing vs Retesting

Retesting (also called confirmation testing) means re-running the exact test that failed, after the developer fixes the defect, to confirm the fix works. Regression testing means re-running previously passed tests on unchanged areas to make sure the new code or fix has not broken existing functionality.

RetestingRegression testing
Verifies a specific defect is fixedVerifies nothing else broke because of changes
Runs failed test casesRuns previously passed test cases
Planned per defectPlanned per build or release
Cannot usually be automated in advance, since it targets a new failureExcellent candidate for automation because it is repeated often
Example: verify "OTP not received" bug is fixedExample: after the OTP fix, re-check login, password reset and payment authentication

Exploratory, Ad-hoc and Monkey Testing

TypeDescriptionPlanning and documentation
Exploratory testingSimultaneous learning, test design and execution. The tester explores the app guided by a goal (a "charter"), such as "Explore the refund flow for partially cancelled bookings for 60 minutes".Time-boxed sessions with a charter; findings and notes are recorded
Ad-hoc testingInformal, unplanned testing without documentation, relying on the tester's experience and intuition to find defects quickly.No formal plan or test cases
Monkey testingRandom inputs, clicks and gestures to see if the application crashes. Can be done manually or with tools that generate random events on mobile apps.None; random by nature

Exploratory testing is especially valuable when requirements are thin, time is short, or you want to find defects that scripted test cases miss. It is a skilled, structured activity, not random clicking.

Non-Functional Testing Basics

Performance testing

Performance testing measures speed, responsiveness and stability under workload. Common sub-types:

  • Load testing: behaviour under expected user load, for example 20,000 users booking tickets at the same time.
  • Stress testing: behaviour beyond normal capacity to find the breaking point and check recovery.
  • Spike testing: sudden large increases in load, such as a flash sale starting at midnight.
  • Endurance (soak) testing: sustained load over many hours to detect memory leaks.
  • Volume testing: behaviour with large amounts of data, such as an account with 50,000 transactions.

Usability testing

Checks how easy and intuitive the application is for real users: clear labels, logical navigation, readable fonts, helpful error messages, and minimal steps to complete a task. Accessibility testing is related and ensures people with disabilities can use the app, for example with screen readers.

Security testing

Ensures that data and functions are protected from unauthorised access. Basic checks a manual tester can perform include:

  • Authentication: wrong passwords are rejected and accounts lock after repeated failures.
  • Authorisation: a normal user cannot open admin pages by changing the URL.
  • Session management: the session expires after inactivity and logout truly ends the session.
  • Data protection: sensitive data such as card numbers is masked on screen.
  • Input validation: fields reject script tags and SQL-like input.

Compatibility testing

Checks that the application works across browsers (Chrome, Firefox, Safari, Edge), operating systems, devices, screen sizes and network conditions. In India this often means testing on budget Android phones with smaller screens and slower networks, not only on the latest flagship devices.

Example: One release, many types

A new build of a food delivery app arrives. The tester runs a smoke test, retests three fixed bugs, runs a regression suite for ordering and payment, does a 45-minute exploratory session on the new "schedule order" feature, and checks it on four Android devices for compatibility.

Interview tip

When comparing two types, always give one realistic example for each. Examples prove you have understood the concept, not just memorised definitions.

Key takeaways

  • Functional testing checks what the system does; non-functional checks how well it does it
  • Smoke is wide and shallow for build stability; sanity is narrow and deep for specific changes
  • Retesting confirms a fix; regression ensures the fix broke nothing else
  • Exploratory testing is structured and time-boxed; ad-hoc and monkey testing are informal or random
  • Performance, usability, security and compatibility are core non-functional areas
✓ You're subscribed! Job alerts arrive daily at 9 AM.
Scroll to Top