Skip to content
LPR Studio
FREN
Contact us

MethodContractsChoosing a vendorBusiness software

User acceptance testing checklist: what to verify before you sign off delivered software

11 min read

Before you sign off user acceptance testing, check four things: every item in the contract's scope has been tested with real business scenarios, the remaining defects are listed on the sign-off with deadlines, the deliverables (code, documentation, access) have actually been handed over, and the go-live has a rollback plan. Signing is not a formality. In most contracts, it releases the final payment, starts the warranty period, and makes it harder to claim anything that was visible at the time.

Most UAT checklists online are written for QA teams running the tests. This one is written for the other side of the table: the business owner or project sponsor who has commissioned software from an agency or studio and has to put a signature at the bottom of the acceptance form. It explains what UAT is, how to build useful test scripts, then runs through the checklist to complete before you sign.

UAT in one paragraph

User acceptance testing is the client verifying that delivered software does what was agreed. The supplier tests its own work continuously; UAT is the moment when you check, on an environment close to production, with your own cases. Contracts call the outcome an acceptance certificate, a sign-off or an acceptance notice; the effect is the same.

It matters for one simple reason: it is the last point at which you have real leverage. Before sign-off, a defect is a non-conformity the supplier must fix. After it, the same defect often becomes a maintenance request, or even a paid change.

The three levels of acceptance

LevelWho testsWhat is checkedWhen
System and technical testingThe supplierThe software installs, runs, passes its automated testsBefore delivery
User acceptance testingThe client, helped by the supplierEach function in the contract behaves as agreedAt delivery, on a staging environment
Operational acceptanceEnd users in live useThe software holds up in real conditions over a set periodAfter go-live

Public procurement frameworks often name and time these stages precisely. In a private contract, nothing is imposed: the contract defines the stages, the deadlines and the effect of each decision. Read it before you start, not when a disagreement arises. Our guide to software development contract clauses covers the acceptance clause alongside the others.

Test scripts: what they must contain

The test scripts (sometimes called the UAT plan or test book) are the list of checks to run. They follow directly from the requirements or the validated scope: every stated need should have at least one test case. If you started from a software requirements document, the mapping is line by line.

A test case, in practice

A good test case can be followed by someone who does not know the software. It includes:

  • an identifier and the function under test;
  • preconditions: which user, with which permissions, which data present;
  • the steps, in order;
  • the expected result, phrased so it can be checked;
  • the actual result, the status (pass, fail) and the severity if it fails.

An example for a quoting application:

FieldContent
CaseQUO-07: convert an accepted quote into an invoice
Preconditions"Accountant" user, quote no. 1042 with status "accepted", customer with a 5% discount
StepsOpen the quote, click "Invoice", confirm
Expected resultInvoice created with the discount, number next in sequence, quote status set to "invoiced"

The scenarios people forget

The happy path is always written. The other cases are the ones that cause trouble in production:

  • business exceptions: the credit note, the cancellation, the customer with no VAT number, the partial order, the product removed from the catalogue;
  • permissions: what a role must not be able to see or do;
  • volumes: the list with ten thousand rows, the full-year export, the import of a malformed file;
  • outputs: PDFs, emails sent, exports to accounting;
  • integrations: what goes out to other systems and what comes back;
  • mobile use: the screen used standing in a warehouse, on a weak network.

Who writes them

The client is best placed to write the business scenarios: it knows its awkward cases. The supplier helps structure them and adds its technical tests. Scripts written only by the supplier test the supplier's understanding of the need, which is not the same thing as the need.

Classifying defects

Not all defects are equal. A severity grid agreed before testing starts saves you negotiating every ticket:

SeverityDefinitionEffect on sign-off
BlockingStops an essential function, no workaroundRejection, new delivery
MajorFunction degraded, workaround painful or riskyFix before signing, or reservation with a short deadline
MinorAn annoyance with no business impactListed reservation, fixed under warranty

The contract or test plan must say who sets the severity, and how a disagreement is settled. Without that rule, every major defect becomes "minor" in the supplier's report.

The checklist before you sign off

These are the points to verify yourself, or to have verified by whoever runs the project on your side. Each "no" is either a reservation to write down or a reason to postpone the signature.

Scope

  • Every function in the contract has at least one test case, and it has been run.
  • Test cases have been run by real users, not only by the supplier.
  • The business exceptions listed above have been tested.
  • Differences between what was planned and what was delivered are written down, including those agreed during the project.

Data and security

  • Testing used realistic data. If it is real personal data, it has been anonymised or its use properly framed, as the GDPR requires; our GDPR checklist for business applications covers the details.
  • Every user role has been tested, including what it must not see.
  • Data migrated from the old tool has been checked on a sample, by the people who know that data.
  • Basic security is covered: passwords, permissions, logging of sensitive actions.

Operations

  • A backup has been restored at least once, not merely scheduled.
  • Monitoring is in place: a named person is alerted when the application goes down.
  • Go-live has a date, an owner, and a rollback plan if it fails.
  • Performance has been observed with a volume close to real use.

Deliverables

  • The source code is stored where the contract says, and you know how to access it.
  • Hosting, the domain name and third-party service accounts are in your name or accessible to you.
  • Documentation exists: installation, deployment, business rules, user guide.
  • Users have been trained, or training is scheduled.
  • Rights over the code and deliverables match the contract, with rights defined case by case in the contract.

The sign-off document itself

  • It identifies the exact version tested (number, delivery date).
  • Each reservation is precise, linked to a test case, with a correction deadline.
  • It states what happens if a reservation is not cleared in time.
  • You know what the signature triggers: payment, start and length of the warranty, start of the maintenance contract.
  • The person signing has the authority to do so in your company.

Three possible outcomes

Acceptance without reservations. The software conforms. That is the outcome to aim for, provided the checklist was completed honestly.

Conditional acceptance. The software can go live, but non-blocking defects remain to be fixed. It is the most common outcome, and it is not a failure. What matters is the precision of the reservations: "a few display bugs" protects nobody; "case QUO-07: the discount is not carried over to the invoice, fix within ten working days" is enforceable.

Rejection. Blocking defects remain, or the scope is not covered. The rejection must be written, reasoned and linked to the failed test cases. The supplier fixes and delivers a new version, which goes back through testing, at least on the cases concerned plus a sample of cases already passed, to check that the fix broke nothing else.

The traps that cost money

Deemed acceptance. Many contracts state that silence beyond a deadline, or putting the software into production, counts as acceptance. Read that clause before you start, note the deadline, and never go live with software you have not formally accepted without saying so in writing.

Testing without the users. The director or project manager approves the screens in a meeting, and the teams discover the tool on launch day. Defects found afterwards are the most expensive to get fixed.

Testers who were never released. Testing happens "on top of" normal work, so it is half done. Block time in calendars, as you would for training.

Change requests disguised as defects. A new need discovered during testing is not a non-conformity. Mixing it with defects creates a pointless conflict with the supplier. Log it separately: it will feed the next phase.

Testing everything at the end. On a project lasting several months, a single acceptance phase at the end concentrates every risk. Accepting each increment as it is delivered surfaces misunderstandings while they are still cheap, which is one of the principles of an agile fixed-price contract.

How long to plan

No standard duration fits every project. The honest calculation is simple: the number of test cases, multiplied by the time each takes, plus writing defect reports, plus at least one second pass after fixes. Then factor in the real availability of your testers, which is almost always the limiting factor. For operational acceptance, the duration is the one set by the contract; it should cover at least one full business cycle, such as a month-end close if the software touches it.

After sign-off

Acceptance does not end the software's life. The first weeks in production surface cases nobody imagined. The contract must say how they are handled: fixed under warranty when they are non-conformities, through maintenance or as enhancements otherwise. Our article on business application maintenance describes that period.

Acceptance starts before development

The best acceptance testing is the one where nothing comes as a surprise, because the client saw the software before it was built. A scope made visible, screen by screen, becomes the shared reference: the test scripts follow from it, and disputes about "what was agreed" almost disappear.

That is the role of the free visual prototype LPR Studio presents by video call within 5 working days, before any commitment. On a fixed-price project, it then serves as the basis for the scope, and later for acceptance.

Frequently asked questions

What is user acceptance testing?

User acceptance testing, or UAT, is the client checking that delivered software does what was agreed. It runs on a test environment, from test scripts listing the cases to verify, and ends with a written decision: acceptance, acceptance with listed defects, or rejection. In most contracts, that decision triggers payment and starts the warranty period.

Who should write the UAT test scripts?

The client is best placed to write the business scenarios for user acceptance testing, because it knows its real cases, exceptions and data. The supplier helps structure them and adds its own technical tests. Test scripts written only by the supplier check what the supplier understood of the need, which is not always the need itself.

What happens if I sign UAT off without reservations?

Signing user acceptance without reservations generally means you accept the delivery: the final payment becomes due and the warranty period starts, under the terms of the contract. Defects that were visible during testing then become hard to claim. That is why every known defect should be listed on the sign-off, each with a correction deadline.

Can I reject software at user acceptance testing?

Yes, you can reject software when it has blocking defects or does not cover the scope agreed in the contract. The rejection must be written, reasoned and linked to the failed test cases. The supplier fixes and delivers a new version, which goes back through testing. Check the contract deadline, because silence can count as acceptance.

How long should user acceptance testing take?

Estimate user acceptance testing by multiplying the number of test cases by the time each takes, then add at least one second pass after fixes. Above all, book time for the people who test: UAT rarely fails for lack of method, and far more often because users were never released from their usual work to do it.