Testing is a critical stage in any software development life cycle. In some shops, the quality assurance team is responsible for writing and maintaining tests, while in others, the development team must carry out this task. In either case, as an application becomes ever more complex, the need for testing becomes ever more important. Testing allows the team members to identify functional problems with the application so that they may proceed with confidence knowing that any changes they make in the source code do not result in runtime errors, erroneous output, and unexpected behavior. Of course, even the most thorough testing cannot eliminate all errors, but testing is the software development team's first line of defense.