1. Testing is necessary because humans inevitably make mistakes when developing software, which can introduce defects. These defects may cause failures when the software is used.
2. Defects arise from errors made during software design and development. When defects are encountered during use, it can lead to failures in the software's functionality. Not all defects will necessarily cause failures.
3. The risks from software failures depend on the context and system. Failures in safety-critical systems pose more risk than in everyday programs. Minor defects may be tolerable for some systems but not for others, like those affecting health, safety, or major business functions. Testing aims to find defects that could lead to failures with high impact.