Software testing is the process to uncover requirement, design and coding errors in the program. But software testing is not a “miracle” that can guaranteed the production of high quality software system, so to enhance the quality of a software and to do a testing in more unified way, the testing process could be abstracted to different levels and each level of testing aims to test different aspects of the system. In my paper, I have described different level of testing and these different levels attempted to detect different types of defects. The goal here is to test the system against requirement, and to test requirement themselves.