What is Regression Testing? A Practical Guide

What is Regression Testing? A Practical Guide

Learn what regression testing is, its types, and the step-by-step process to catch bugs early during code changes.

Nathan Vander Heyden
Nathan Vander Heyden
•
How-To Guides
•
Last updated: Aug 28, 2025
What is Regression Testing? A Practical Guide
Contents

    What is regression testing?

    Regression testing ensures that previously developed features or actions perform as expected after developers made changes to the code.

    The “changes in code” here may be bug fixes, new feature updates or even updates in UI elements that may have unintended side effects.

    Basically, regression testing is what you do to catch unintended consequences (in how a website or software app works) for the end users.

    For example...

    Open AI released GPT-5 on August 7, and users say it’s slower (even without the thinking mode), gets basic questions wrong, and doesn’t follow instructions.

    An X user even shared a math error, among many other instances where GPT-5 was wrong:

    A mobile screenshot of GPT-5 getting math problems wrong.

    To these, Sam Altman says their “autoswitcher (to change models) broke and was out of commission for a chunk of the day,” which made the model dumber:

    This example shows what can happen when regression testing wasn’t done (on parts of your website that may be affected by new changes) before it’s released to end users.

    Regression testing vs. new feature testing vs. retesting

    Regression testing is called many things, including what it’s not. Retesting is “fix verification” while regression testing is “holistic sanity check” to know if what is added doesn’t break something else.

    Here’s a clear overview of these different terms:

    CriteriaRegression testingNew feature testingRetesting
    GoalTo check existing functionality after code changes.To verify new features work as intended.To check that a previously failing bug has been fixed.
    ExampleAfter updating the checkout page, dev team verifies that cart and order confirmation flows still work.Developers test the flow of a new subscription feature (from the sign-up page to the payment page) before the feature is made public.The dev team re-runs a login test case that failed because of incorrect password validation logic and it went through.
    ScopeThe existing codebase was likely affected by recent changes.Focuses only on the new feature’s requirements.Focuses on debugging failed test cases and their dependencies.
    TriggerAny change to code, UI, config.A new feature is ready for QA.Bug fix deployed.

    Types of regression testing (and when to use them)

    There are six types of regression testing with different use cases based on scope, scale and change impact:

    1. Unit regression testing

    Unit regression testing focuses on small, isolated code changes that affect only one function or activity.

    This process tests individual components or modules impacted by the change in your codebase to isolate a specific functionality and verify that it still works correctly.

    For example, if a developer updates the discount calculation function without altering the checkout logic, they only need to verify that the discount feature operates as expected.

    This helps devs catch micro-regressions early to prevent escalation to larger problems.

    2. Partial regression testing

    Partial regression testing focuses on specific areas affected, not the whole app or website. It tests the modified module and dependent areas.

    For example, a developer modifies cart logic and tests only the cart and checkout modules. Afterall, only these existing features may have regressed due to the change in cart logic.

    3. Selective regression testing

    Selective regression testing targets a subset of pre-selected tests based on the most affected areas. This targets areas that get the most user traffic or have a history of breaking.

    For context, after an API update, a dev may test login, checkout and the search bar of an ecommerce website because these are business-critical flows that must not regress in functionality.

    4. Complete regression testing

    This is the time-consuming process where you test and optimize the entire website or software app.

    It’s usually done before rolling out a major update across your website (or all brands in a portfolio) to ascertain everything works as it should.

    5. Progressive regression testing

    This is when you test a new feature and existing functionality simultaneously to make sure a new code doesn’t affect the system.

    For context, you’re writing new test cases for a subscription feature during the same sprint it’s built. This integrates quality assurance into software development (instead of treating it in the final phase) to avoid “test debt.”

    6. Visual regression testing

    This helps developers catch unexpected UI/UX changes after updates in style or layout. For example, you ensure the homepage banner still displays correctly after a CSS overhaul.

    So, when should you perform regression testing?

    A rule of thumb is to start and complete regression testing anytime something changes. This may be:

    • After bug fixes (because fixing one issue can unintentionally trigger another).
    • Before releases (because the new rollouts may affect previous functionality, just as I cited in the GPT-5 scenario).
    • After a new feature rollout (self-explanatory).
    • Automated in CI/CD pipelines. Continuous integration/deployment means changes flow into production fast (sometimes multiple times a day). But with automated regression in CI/CD pipelines, you’ll catch breakages before code merges or deploys to protect uptime and reduce emergency rollbacks that may affect your dev and ops teams.
    • During manual QA and user acceptance testing: Not every regression is code-related; many are visual or usability regressions spotted by humans. The best way to report these issues is with Marker.io, with every bug report automatically sent to your integrated project management tool.
    A reporter finding a bug and reporting it via Marker.io feedback button and annotation tools

    How to perform regression testing (step-by-step)

    Every team needs a repeatable, testable process for regression testing. Prioritize your test efforts based on the potential impact and likelihood of failure in a specific part of your software or website.

    Here are tried and trusted regression testing techniques/approaches:

    Step 1: Identify what changed (code, UI, config, etc.)

    Identifying what changed helps you know which part of your system can regress to its former state.

    To do that, go through your Pull Request descriptions, commit log, or deployment notes to pinpoint exactly what changed: could be UI elements, logic, config, or updates in your database.

    This helps you know what to test because without it, you’re blind. It’s exactly why Marker.io was designed.

    Any team that uses Marker.io can see the actions a client (or user) took and the error they saw so your development team can understand why and troubleshoot the system more easily:

    Example of Marker.io session replay attached to an issue page

    The ease of reporting bugs and UI issues is why agencies and e-commerce brands like L'Oréal say it’s a “no brainer" to have Marker.io on their websites.

    Marker.io also includes details like the view port, browser version, and OS so the developer can understand if the bug is specific to an OS or browser or it can trigger on other devices.

    An example of detailed bug reports in Marker.io, complete with URL, browser, viewport, and more technical information

    Learn more about Marker.io features.

    Step 2: Impact analysis — what could break?

    This is where you recognize high risk areas based on the changes you want to make. It pushes you to ask “What depends on those changes?”

    For example, the checkout stage for an e-commerce website can lead to loss of revenue if the code breaks. Thinking about this helps you walk through the component graph or check architecture docs to predict what might break (not just what will change).

    To do this, use your Git repo’s dependency visualizer or static tools like Sourcegraph or CodeSee.

    These help you map which modules depend on the files that changed. You can then review related past bugs in those areas using Jira filters or Git commit messages.

    You can use this brief checklist when deciding if a test case or module is impacted:

    • Is the changed file imported in a shared component?
    • Have there been past bugs in this area?
    • Does this change affect critical user flows (checkout, login, dashboard)?
    • Are third-party libraries or APIs involved?
    • Do test cases already exist for this?

    If you check more than 2–3, mark it as “High Risk”.

    Since this change affects shared components (or high-risk workflows as the case may be), sync with your dev team.

    Confirm what might break and what definitely won’t before assigning the test or escalating the risk.

    Step 3: Choose test scope

    This is where you decide how much of the system you’ll test based on how big the change is and how far its effect might spread. The categories of test scope include:

    • Selective regression testing: Here, you’re testing only critical workflows, e.g. login, checkout, search. These are areas that get the most traffic or are known to break easily. Selective regression testing helps you protect high-impact areas without wasting time on unrelated test scripts.
    • Partial regression testing: Test the changed feature plus anything directly connected to it. This is because changes can affect dependent modules.
    • Complete regression testing: This is where you test everything in your regression suite. This is for big releases or large code changes that can cause issues anywhere. You can perform this comprehensive test before major launches or after large refactors to protect user experience.

    To decide which scope to use, look at your change logs, see the files/modules that were touched, map dependencies, and pick the scope that best works for your needs.

    Step 4: Run tests (manual + automated)

    Once you know what areas are impacted, run your regression pack for those flows. This could include automated tests for core journeys (via Cypress, Playwright, etc.) and manual checks for edge cases or browser issues.

    The manual QA check is where a tool like Marker.io shines. Once you install our widget on your website, your team (or client) can report issues like broken links, styling glitches, or SEO and accessibility concerns directly from the site.

    They can annotate their screenshot like this:

    Example of an issue reported in Marker.io

    And it’ll immediately create a ticket/task in your PM tool:

    Example of an issue being discussed in Marker.io

    The project lead can then assign the right person to resolve the issue quickly.

    Marker.io also shows a replay session to see the actions taken that triggered the error, which makes it so easy to know why an error was triggered.

    This is one of the things Vincent’s team does at L'Oréal through Marker.io. The non-technical team can log reports on site updates, bugs, product updates and launches, A/B testing, ...

    ...and because Marker.io provides a quality bug report, his team can prioritize and resolve high-risk issues before they escalate.

    Read more on how L'Oréal uses marker.io to monitor bugs across 100+ websites.

    Step 5: Log bugs clearly

    Every bug needs context into:

    • Where you clicked.
    • Title
    • Description
    • Steps to reproduce
    • What you expected vs. what happened
    • Console & network logs
    • Environment
    • Screenshot or annotated view

    This helps you avoid confusing PowerPoint images and vague information so your team can easily understand what needs to be reviewed in the regression testing process.

    Your client and team may also see different things (or want to add different contexts to the bugs they see).

    If you’re using Marker.io, you can add more fields for your team to fill and less fields for your clients, such that it looks like this:

    Image of different feedback form configurations for Marker.io

    Read more: How to write a bug report.

    Step 6: Retest after fixes

    After you resolve a broken source code or test script, re-run the regression workflow, at least for that impacted area. Don’t move on until you confirm the fix didn’t break something else.

    To do this, automate the retest script if possible. Otherwise, queue it first in the manual regression list for your QA team and use Marker.io to easily log the bugs.

    Step 7: Update your regression suite

    Your regression testing suite is a set of tests you'll always run to ensure that nothing breaks after changes are made.

    So, after every sprint or release, update this suite. Add a test for each bug that slipped through and remove tests for the features you've retired. This helps you keep your regression suite current and lean so your team can run and trust it in the future.

    Regression testing tools

    You need a tool stack that fits your workflow, scope, and budget.

    Here’s a short list of all you need in an automated and manual test environment:

    Automated tools

    1. Selenium

    Selenium is an open-source tool for repetitive test cases across different browsers and platforms. It’s flexible in language (functional across Java, Python, JS, C#) and helps you ascertain that new code changes do not break existing functionality.

    It also fits any CI (GitHub Actions, Jenkins, GitLab, Azure DevOps), which can help you automate testing across many brands.

    2. Cypress

    Cypress is an end-to-end testing framework designed for web apps. They enable fast, reliable and easy-to-write automated tests with real-time reloads and debugging capabilities built into the browser.

    It's great for UI regression testing (because it executes directly in the browser) and also provides fast feedback loops.

    It also integrates well with CI/CD pipelines to catch regressions before deployment and fix issues before they affect user experience.

    Manual & visual QA

    3. Marker.io

    Marker.io is a tool for manual and visual QA tests.

    It helps you record visual and UX regressions during manual tests, staging reviews, and UAT, then sends issues directly to your preferred PM tool with screenshots, annotated text, console logs, and device/browser metadata so your developers can get full context at first triage.

    This helps your team reduce time-consuming back-and-forth with the client and speed up fixes.

    Test management tools

    4. Zephyr

    Zephyr is a Jira-native test management app that lets you manage functional test cycles and see coverage dashboards without leaving Jira.

    It provides simple workflows that PMs, QA, and developers can adopt quickly, and it supports standardized regression packs for consistent runs.

    It links user stories (from manual QA), test cases, and defects/bugs end to end, with real-time metrics and dashboards so you can plan, run, and track tests across releases in one place.

    How to measure success

    When you run regression testing, we recommend tracking outcomes such as website and software stability, upgrades in critical functionalities and better user experience.

    This means you should track:

    • Bug detection rate.
    • Regression bug leak rate.
    • Time to resolution.
    • Test suite coverage.
    • Stakeholder confidence.

    Final thoughts

    Regression testing is non-negotiable if you want to avoid what happened to OpenAI when they released GPT-5.

    If they were an e-commerce brand and GPT-5 was a new product, they may have lost hundreds of thousands in sales within the 24 hour window where the system disappointed users.

    Because of this, always perform regression testing every time something changes on your website.

    And when you do that, use Marker.io for the manual QA and UAT part of the process so your team can get full visibility into what broke, when, and on which OS it broke.

    What should I do now?

    Here are three ways you can continue your journey towards delivering bug-free websites:

    2.

    Read Next-Gen QA: How Companies Can Save Up To $125,000 A Year by adopting better bug reporting and resolution practices (no e-mail required).

    3.

    Follow us on LinkedIn, YouTube, and X (Twitter) for bite-sized insights on all things QA testing, software development, bug resolution, and more.

    Nathan Vander Heyden

    Nathan Vander Heyden

    Nathan is Head of Marketing at Marker.io. He used to work as a SEO consultant for various SaaS companies—today, he's all about helping Web Ops teams find more efficient ways to deliver bug-free websites.

    Frequently Asked Questions

    What is Marker.io?

    Marker.io is a website feedback and annotation tool for websites. It’s the best way to gather feedback and bug reports with screenshots, annotations & advanced technical meta-data. It also integrates perfectly with Jira, Trello, ClickUp, Asana (and more).

    Who is Marker.io for?

    It’s perfect for agencies and software development teams who need to collect client and internal feedback during development, or user feedback on live websites.

    How easy is it to set up?

    Embed a few lines of code on your website and start collecting client feedback with screenshots, annotations & advanced technical meta-data! We also have a no-code WordPress plugin and a browser extension.

    Will Marker.io slow down my website?

    No, it won't.

    The Marker.io script is engineered to run entirely in the background and should never cause your site to perform slowly.

    Do clients need an account to send feedback?

    No, anyone can submit feedback and send comments without an account.

    How much does it cost?

    Plans start as low as $49/mo per month. Each plan comes with a 15-day free trial. For more information, check out the pricing page.

    Get started now

    Free 15-day trial  •  No credit card required •  Cancel anytime