Software testing involves verifying that a product is built correctly according to specifications (verification) and that the correct product is being built (validation). There are different classes of testing, including black box testing which focuses on functionality without seeing internal structures, and white box testing which tests internal structures. Test cases are developed to test software according to standard specifications to identify correct and incorrect results.