Software testing involves evaluating a system or program to determine if it meets its requirements and to identify any errors. There are many definitions of software testing but generally it involves executing a program and attempting to find bugs or errors. The objectives of testing are to uncover as many errors as possible, demonstrate the software matches requirements, and validate quality with minimal cost and effort. Testing activities include planning tests, designing and specifying test cases, setting up the environment, executing tests, analyzing results, and managing the testing process. Verification ensures the software is built correctly while validation ensures the right product is being built. Complete testing is impossible so testing is risk-based and must be planned with independence from the developers.