Testing is a process used to identify the correctness, completeness and quality of developed computer software. It involves finding differences between expected and observed behavior by executing the system with different inputs. The goal of testing is to maximize the number of discovered faults and increase reliability. Testing techniques include unit testing of individual components, integration testing of combined components, and system testing of the full application. Fault avoidance techniques like code reviews aim to prevent errors from being introduced.