This course covers fundamental software testing techniques and related program analysis. It will examine the important phases of testing, emphasizing each phase's significance when testing different software types. The objectives are to study software testing concepts, discuss issues and solutions for different testing stages, and learn how to plan, design, conduct and report on a test project. By the end of the course, students should gain the ability to apply software testing knowledge and engineering methods to identify and solve problems.