Acceptance testing is formal testing conducted by customers or suppliers to determine if a system meets its acceptance criteria. There are two types: user acceptance testing conducted by customers, and business acceptance testing conducted by suppliers. Acceptance criteria are selected based on quality attributes like functionality, performance, and reliability. An acceptance test plan is created and the testing is executed in two phases, with basic then complex test cases. Test reports are generated to determine if the system should be accepted, accepted with modifications, or not accepted. In extreme programming, user stories serve as acceptance criteria and associated tests verify the criteria are met.