Software testing involves three key aspects: verification to ensure the system is built correctly, error detection to find bugs, and validation to check it is the right system. However, testing has limitations as it cannot guarantee a bug-free product or 100% coverage. Testing is still important to prove absence of errors, provide metrics for stakeholders, and allow for user acceptance. It is impossible to do fully objective quality assurance on one's own work due to blind spots.