Acceptance testing is a final stage of testing that is performed on a system before the system being delivered to a live environment. Systems subjected to this testing process might include such deliverables as a software system or a mechanical hardware system. Acceptance tests are generally performed as "black box" tests, which means that the tester uses specified inputs into the system and verifies that the resulting outputs are correct, without knowledge of the system's internal workings.
User acceptance testing (UAT) is the term used when these tests are performed by the person who will be using the live system once it is delivered. If the system is being built or developed by an external supplier, this is sometimes called customer acceptance testing (CAT). The UAT or CAT acts as a final confirmation that the system is ready for go-live. A successful one at this stage may be a contractual requirement prior to the system being signed off by the client.
In some industries, such as manufacturing, factory acceptance testing (FAT), is the term usually used for the formal test stage. This test may be performed by the vendor or supplier of the system and observed by the client. This is often done in a very formal manner, with each factory or site test being documented in detail, and each portion signed off.
This form of testing is often made up of many individual "test cases," which are individually documented scenarios. Each test case that forms part of the overall process will usually document what the input to the system consists of and what the expected output should be. If the actual output is as expected, the test case is said to return a successful, or positive result.
When acceptance tests are designed and specified, often a client or end user group will document what level of results will be considered sufficiently successful for the system to be accepted. Payment to the supplier or vendor may depend on this target being met. During testing, each test case is usually assigned a "pass" or "fail" result. Some test cases may be extremely important, while others may test non-essential parts of the system. As such, for the system to overall achieve a "pass," it may not be necessary for every single test case to achieve a positive result.