Functional & Regression Testing

Every release has to do what was asked and leave everything else working. We test both, scope regression by risk, and give you sign-off evidence showing what was checked on which build.

The release passed testing, and two days later finance noticed that credit notes no longer carried the original invoice number. Nobody had tested credit notes, because nobody had changed them. Escaped defects often look like this. They sit next to the feature that was built, in something that shared a table, a rule or a screen with it. Testing a release means answering two questions, and the second, what did we break, usually gets the least time.

Two questions, two kinds of testing

Functional testing asks whether the change does what was asked. That needs acceptance criteria agreed before the work started, test cases written from them, and a tester who also tries what the criteria forgot: the empty field, the second currency, the user with two roles. Much of it is manual the first time, and should be, because a new screen needs a person’s judgment before it needs a script.

Regression testing asks whether anything that used to work has stopped. It’s repetitive by nature, which makes it the right place for automation once a feature settles. Both kinds are traced to the requirement they check. When someone asks whether the discount rules were tested in this release, the answer is a link to the results rather than somebody’s recollection.

Choosing what to retest

Regression scope should be a decision

Full regression every release

Run the whole regression pack before every release. It’s easy to explain, nothing is skipped on paper, and anyone who asks whether testing was done gets a clear answer.

  • Simple to plan and simple to audit afterward
  • No judgment call that someone could later be blamed for
  • The pack grows each release until it no longer fits the window
  • Testers skim the long, familiar parts, where defects quietly get through

Regression scoped by risk

Scope each release from what changed, what depends on it and what a failure would cost. The full pack still runs, on a schedule instead of every time.

  • Changed areas and their neighbors get the deepest testing
  • Money, customer data and compliance paths are checked every release
  • Scope decisions are written down with the reasoning, for review
  • It takes analysis up front, and someone has to own the call

How regression scope gets decided

AreaReasonDepth
Code changed in this releaseDirect impact of the changeFull functional plus exploratory
Features sharing data or componentsLikeliest place for side effectsCore paths and known edge cases
Payments, invoicing, personal dataA failure costs money or trustEvery release, changed or not
Areas with recent production defectsHistory says they breakExtended until they stay stable
Stable areas untouched for monthsLow change, low exposureSmoke test, full pack on schedule
The table is agreed per product with the business owner, then applied release by release, so scope isn’t reinvented under deadline pressure.

How a release gets tested

The cycle is the same for a weekly release and an annual upgrade; only the time each step gets changes. Every step leaves a record you can open later.

  1. 01

    Read the change

    Release notes, tickets, the code diff, and a conversation with the developers about what they touched and what worried them. You receive a short impact summary: what changed, what it touches and what is out of scope.

  2. 02

    Agree the scope

    Regression scope from the risk table, the new test cases, and the environment and data each one needs. The business owner approves it before testing starts, so any gap is a choice made in advance rather than a surprise.

  3. 03

    Test the new behavior

    Test cases against the acceptance criteria, then exploratory sessions on the same build. Defects go into your tracker with steps, data and the build number, so a developer can reproduce them on the first try.

  4. 04

    Run regression

    Automated checks run first, and manual regression covers what isn’t automated yet. Fixes are retested and the areas around each fix get a second look. You can follow results build by build in your test management tool.

  5. 05

    Sign off

    A release report states what was tested on which build, what failed, what is still open and who accepted it. The release decision stays with you; the report makes it a decision on evidence.

What sign-off rests on

A signature is only as good as what it refers to. The release pack gives the person approving the release, and anyone who asks later, the same four things.

Traceability to requirements

Each requirement links to the test cases that check it and their latest result, so an untested requirement is visible before release, not after a complaint.

Results tied to a build

Every result names the build, the environment and the test data it ran against. A pass on last week’s build is not counted as a pass on this one.

Open defects with an owner

Anything still open at release is listed with its severity, its workaround and the name of whoever accepted shipping with it. Accepted risk is recorded, not implied.

What was not tested, and why

Scope left out on purpose is listed with the reasoning. If a defect turns up there later, the conversation is about a known decision rather than a missed check.

What release owners ask

No, though they overlap. Test automation is about building a suite that runs on every change. This work decides what each release must be checked against, covers what a script can’t, and produces the evidence for sign-off. Automated tests are one of its tools, and the stable parts of a manual regression pack are the obvious next things to automate.

Not sure which one you need?

Describe the problem in a paragraph and we will tell you which service applies.