Skip to content
Bugwise
Menu
Testing Fundamentals

Types of Testing

Smoke, sanity, regression, exploratory, usability, accessibility and more. A clear map of the testing types a manual tester meets, when each one is used, and how to pick the right one.

beginner Mobile & web
Short on time? Switch to the quick version.

It is 4:40 pm on a Thursday. A new buildBuildA specific compiled version of the app or website that is ready to be installed or tested.Open in glossary → of a food delivery app lands in your inbox with a short note: “Fixed the double-charge bug, updated the menu screen, added German. Release is Monday.” Your lead asks: “What’s the plan?”

You can’t just answer “I’ll test it”. Test what, and how? Check the build isn’t broken? Confirm the double-charge fix? Make sure the menu changes didn’t break the cart? Check the German texts fit? Each of those is a different type of testing, and each one answers a different question.

Functional vs non-functional: the first big split

Almost every testing type falls on one side (or both sides) of this line:

Functional testingNon-functional testing
QuestionWhat does it do?How well does it do it?
ChecksFeatures, rules, calculations, flowsSpeed, ease of use, accessibility, security, compatibility
Banking app exampleA $50 transfer leaves the account and arrives with the payeeThe transfer screen loads in under 2 seconds and works with VoiceOver

Functional testingFunctional testingTesting what the software does, checking features against their requirements.Open in glossary → checks behavior against the requirementsRequirementA statement of what the software must do or how well it must do it.Open in glossary →: tap “Add to cart” and the item is in the cart. Non-functional testingNon-functional testingTesting how well the software works, such as speed, security, usability and accessibility.Open in glossary → checks the qualities of that behavior: is it fast, clear, safe, and usable by everyone?

The quick map

Instead of memorizing a flat list, group the types by the question they answer. Here are the ones you will meet most as a manual tester.

1. Is this build worth testing?

2. Did the change work, and did it break anything?

3. Is it good for real people?

4. Does it survive real life on a device?

5. How do you test?

How to read the rest of this lesson

There are dozens of named testing types, and different books slice them differently. Instead of a flat list, we group them by the question they answer:

  1. Build health checks. Is this build even worth testing?
  2. Change-related testing. Did the fix work, and did anything else break?
  3. Quality attributes. Is it usable, inclusive, compatible, fast, safe and ready for every market?
  4. Life on a real device. Does it survive installs, updates and interruptions?
  5. Approaches and styles. How do you design and run the tests?

1. Build health checks

Smoke testing

Smoke testingSmoke testingA quick check of the most important features to decide if a build is stable enough to test further.Open in glossary → is a quick, shallow pass over the most important flows of a new build. The name comes from hardware: you switch on a new circuit board, and if smoke comes out, there is no point testing further.

  • When: every time a new build arrives, before any deeper testing. Usually 10 to 30 minutes.
  • Goal: decide “go” or “no-go”. If login is broken, there’s no point running 300 test cases.
  • Mobile example: install build 4.2.0 (311), open the app, log in, search for “pizza”, add one item, reach checkout.
  • Web example: the home page loads, search returns results, a product can be added to the cart, login works.

A smoke test is broad (it touches many areas) but shallow (it doesn’t dig into any of them). Many teams automate it so it runs on every build. See Regression and Smoke Suites for building one.

Sanity testing

Sanity testingSanity testingA quick, focused check that a specific fix or change works and nothing obvious around it broke.Open in glossary → is a quick, narrow check of one area after a small change, to decide whether it is sensible to continue with deeper testing.

  • When: after a small fix or tweak, often before a bigger regression run.
  • Mobile example: the tip calculation changed. You quickly check 0%, 10%, 15% and a custom tip, and that the total updates.
  • Web example: the currency formatter was patched. You check prices on the product, cart and checkout pages.

These two are the bread and butter of a manual tester’s week, and they are often confused.

Retesting (confirmation testing)

RetestingRetestingRunning the same test again to confirm that a reported bug is really fixed.Open in glossary → means repeating the exact steps from a bug report on the new build, to confirm the bug is really fixed. ISTQB calls it confirmation testing.

  • When: a developer marks a bug as fixed.
  • How: same steps, same test data, same type of device or browser as the original report. Then note the build you verified on. See the bug life cycle.
  • Example: BUG-207 said “Coupon SAVE10 applies twice on a quick double-click”. You double-click “Apply” on build 512 and check the total.

Regression testing

Regression testingRegression testingRe-running tests to check that new changes didn't break things that used to work.Open in glossary → means re-checking things that used to work, to catch unwanted side effects of new changes. A “regression” is a feature going backwards.

  • When: after any change, and always before a release. The bigger or riskier the change, the wider the regression run.
  • Example: a developer changed the shared price-formatting code to fix the coupon bug. Now the cart total, order history, receipts and push notification texts all need checking, because they use the same code.
RetestingRegression testing
QuestionIs this bug fixed?Did anything else break?
ScopeOne bug, exact stepsAreas that worked before
Planned in advance?Steps come from the bug reportUsually a maintained test suite
Good for automation?RarelyVery often

3. Quality attributes

These are mostly non-functional. Some have their own lessons on Bugwise, so here is the short version of each.

Usability testing

Usability testingUsability testingChecking how easy and pleasant the product is for real people to use.Open in glossary → checks how easy, clear and pleasant the product is for real people. Formal usability studies watch real users try tasks; testers do lighter usability checks every day by asking “would a normal person understand this?”.

  • Mobile example: five users try to reschedule a fitness class. Three can’t find the option, because it hides behind a long press.
  • Web example: shoppers hesitate on checkout because “Continue” and “Place order” look identical.

Accessibility testing

Accessibility testingAccessibility testingChecking that people with disabilities can use the product, for example with a screen reader.Open in glossary → checks that people with disabilities can use the product: blind users with a screen reader, people who can’t use a mouse, people with low vision or color blindness. It is usually measured against WCAGWCAGThe Web Content Accessibility Guidelines, the main international standard for accessibility.Open in glossary →.

  • Mobile example: with VoiceOver on, the “Transfer” button is read as just “button”.
  • Web example: you can’t reach the cookie banner’s “Accept” button with the Tab key, so keyboard users are stuck.

Deep dive: Accessibility basics.

Compatibility testing (cross-browser, cross-device)

Compatibility testingCompatibility testingChecking the product works across different devices, OS versions, browsers and screen sizes.Open in glossary → checks the product works across the browsers, devices, OS versions and screen sizes your users actually have. On the web this is called cross-browser testingCross-browser testingChecking a website works and looks right in different browsers and browser versions.Open in glossary →; on mobile, cross-device testing against a device matrixDevice matrixThe list of devices and OS versions a team tests on, chosen to represent real users.Open in glossary →.

  • Mobile example: the booking calendar is fine on iOS 18, but dates overlap on a small Android phone.
  • Web example: the date field works in Chrome but shows a plain text box in an older Safari.

Deep dives: Cross-browser testing, Device fragmentation, Responsive design testing.

Localization and internationalization testing

Two related ideas, often shortened to L10n and i18n (the numbers count the letters in between):

Testers check translations are present and correct, texts fit (German words are long), currencies and dates are formatted for the localeLocaleRegional settings that control language and formats for dates, numbers and currency.Open in glossary →, and Arabic or Hebrew layouts are mirrored. Deep dive: Localization and RTL.

  • Mobile example: in German, “Add to basket” becomes “In den Warenkorb legen” and gets cut off.
  • Web example: French users see “$1,299.00” instead of “1 299,00 €”.

Performance testing (and load and stress)

Performance testingPerformance testingChecking how fast, stable and responsive the software is under different loads.Open in glossary → checks speed and responsiveness. As a manual tester you notice slowness every day: a menu that takes 6 seconds on mobile data, a list that stutters when scrolling. Report it with numbers (device, network, seconds).

Two specialist forms are worth knowing by name:

  • Load testing: does the system cope with the expected number of users, for example Black Friday traffic?
  • Stress testing: what happens beyond that, and how does it fail and recover?

These need tools that simulate thousands of users, so they are usually done by performance engineers. Deep dive: Performance basics and Network conditions.

Security testing

Security testingSecurity testingChecking that data and features are protected from unauthorized access and attacks.Open in glossary → checks that data and accounts are protected from people who should not see or change them. Full penetration testing is a specialist job, but manual testers catch many security bugs with simple curiosity:

  • Mobile example: after logging out, pressing Back shows the account balance again.
  • Web example: changing /orders/1001 to /orders/1002 in the address bar shows another customer’s order.

Deep dive: Security basics.

4. Life on a real device

Installation and upgrade testing

Checks that the app installs cleanly, updates from older versions without losing data, and uninstalls properly. Upgrade testingUpgrade testingChecking that updating from an older app version keeps the user's data and settings working.Open in glossary → is the risky one: millions of users will update, and none of them want to lose their saved addresses or be logged out.

Deep dive: Install, update and uninstall.

Interruption testing

Checks how the app copes when something takes the user away mid-task: a phone call, an alarm, a notification, the screen locking, low battery, switching apps. See interruptionInterruptionAnything that takes the user away from the app mid-task: a call, an alarm, a notification, low battery.Open in glossary →.

  • Mobile example: a call arrives during card payment. After the call the app shows a blank screen and the order is lost.
  • Web example: the user switches tabs during a 3-D Secure check and comes back to “Session expired”.

Deep dives: Interruptions, Background and foreground.

5. Approaches and styles

These describe how you test rather than what you check. You can combine them with any type above.

Exploratory vs ad-hoc testing

Exploratory testingExploratory testingLearning, designing and running tests at the same time, guided by curiosity and a goal.Open in glossary → means learning the product, designing tests and running them at the same time. It is structured: you work to a goal (a charter, such as “Explore split-bill with odd amounts and people leaving the group”), in a time box (say 60 minutes), and you take notes of what you tried and found. See Exploratory Testing.

Ad-hoc testingAd hoc testingInformal testing with no plan or documentation, trying things to see what breaks.Open in glossary → is the informal cousin: unplanned, undocumented “let me try this” testing based on intuition. It finds bugs too, but nobody can repeat or review what you covered.

ExploratoryAd-hoc
GoalA written charterNone, just curiosity
TimeTime-boxed sessionWhenever
NotesYes, what was covered and foundUsually none
RepeatableMostlyNo

Positive vs negative testing

Beginners often write only positive tests. Real users mistype, paste, double-tap and lose signal, so most bugs hide on the negative side. See Writing test cases and the Text field page for practice.

Manual vs automated testing

Manual testing: a person runs the checks. Automated testing: scripts run them. Almost every type above can be done either way, but each suits some types better:

Often automatedUsually manual
Smoke tests on every buildExploratory testing
Large regression suitesUsability and look-and-feel
Load and stress testsNew features still changing
Running the same checks on 20 devicesInterruptions and real-world device quirks

More in What is software testing?.

Putting it together: a typical release

Here is how the types usually line up in a two-week release of a mobile app:

  1. Each new build: smoke test. If it fails, send it back.
  2. During the sprint: functional testing of new features with positive and negative tests, exploratory sessions, quick usability and accessibility checks, a few key devices or browsers.
  3. Each bug fix: retest, then a quick sanity or targeted regression around it.
  4. Release candidate: full regression, wider compatibility (the whole device or browser matrix), upgrade testing from the last versions, interruption checks on critical flows.
  5. Before big events or launches: load testing (specialists), localization for new markets, security review for new data flows.

To see where these activities sit in the bigger process, read SDLC and STLC.

Explore the map

Filter by what a type checks and when it is usually done. Open any card for a mobile and a web example, plus a link to the dedicated lesson where there is one.

The testing types map

Each group answers a different question. Filter the map, then open a card for when it is done and real examples.

What it checks

When in the release cycle

Showing 16 of 16 types.

Build health checks

Is this build even worth testing?

  • When: Every time a new build lands, before any deeper testing. Usually 10 to 30 minutes.

    Mobile example

    Install build 4.2.0 (311): app opens, you can log in, search a restaurant, add a dish and reach checkout.

    Web example

    The shop home page loads, search returns results, a product can be added to the cart, login works.

    New build arrives

Change-related testing

Did the fix work, and did anything else break?

Quality attributes

Is it usable, inclusive, fast, safe and ready for every market?

Life on a real device

Does it survive installs, updates and real-world interruptions?

Approaches and styles

How do you design and run the tests?

Practice: what would you run?

Real testing starts with a situation, not with a definition. Read each scenario and pick the type that fits best. There can be more than one useful answer in real life, so read the explanation for every option.

Scenario sorter: what would you run?

Pick the testing type that fits best. Every option has an explanation.

Score 0 / 12

Scenario 1 of 12 · Food delivery app

A new build arrives 10 minutes before the sprint demo. You need to know quickly whether it is safe to show it at all.

Exercise: plan a release

Your team is about to release version 5.2 of a food delivery app on iOS and Android, and the matching website. You have three days. Read the changelog and decide which testing types you would plan for each line before peeking at the suggested plan.

Release 5.2 changelog

  1. Fixed: BUG-482, app crashes when rotating the payment screen.
  2. New: “Schedule order for later” on the checkout screen.
  3. Changed: the shared price-formatting code (used by cart, receipts and emails).
  4. New: Italian language and euro prices for the launch in Italy.
  5. Changed: the local database for saved addresses was moved to a new format.
  6. Marketing will push a 50% discount on launch day.

For each line, write down at least one testing type and one concrete thing you would check.

  1. Retesting BUG-482 on the same device model, then a quick regression of payment in both orientations. See Orientation and screen sizes.
  2. Functional testing with positive and negative cases (past times, closing hours, time zones), an exploratory session, quick usability and accessibility checks of the time picker. See Date picker.
  3. Regression of every place that shows a price: cart, checkout, receipts, emails, order history.
  4. Localization: Italian texts fit, euro formatting (“12,50 €”), dates, and checking nothing is left untranslated.
  5. Upgrade testing: install 5.1, save addresses, update to 5.2, check addresses survive. Also a fresh install.
  6. Performance (load) testing by specialists for launch-day traffic; functional tests of the discount with coupon edge cases.

And on every new build during those three days: a smoke test first.

Choosing testing types for a build

0 of 10 checked

Check your understanding

Quick quiz

0/6 answered · 0 correct

  1. 1.A developer says BUG-207 is fixed. What do you do first?

  2. 2.Which statement best describes regression testing?

  3. 3.Which of these is a non-functional test?

  4. 4.How is exploratory testing different from ad-hoc testing?

  5. 5.Your team uses 'sanity test' to mean what another team calls a 'smoke test'. What is the best reaction?

  6. 6.Version 4.0 of an app changes how saved data is stored. Which type is most important to add?

Key takeaways

  • Each testing type answers a different question. Pick the mix based on what changed, how much time you have and what could hurt users most.
  • Functional testing checks what the app does; non-functional testing checks how well (speed, usability, accessibility, security, compatibility).
  • Smoke = broad and shallow on a new build; sanity = narrow check after a small change. Teams use these words inconsistently, so agree on a meaning.
  • Retesting confirms a specific fix; regression testing checks nothing else broke. You usually do both, in that order.
  • Exploratory testing is structured (charter, time box, notes); ad-hoc testing is informal.
  • Always mix positive and negative tests, and remember mobile-specific types: upgrade and interruption testing.
  • Load, stress and penetration testing are specialist areas, but manual testers spot and report the first signs.

Finished this page?Nice work, this page is complete!

Mark it as done to track your progress. It's saved in this browser, no account needed.

Its review cards are now in Bites ⚡
Esc

Type to search the whole site.