This course is designed to teach students how to ensure high quality software by means of testing, debugging, and other quality assurance activities. Students learn a combination of both theoretical and practical skills via get hands-on experience with modern software quality-assurance tools and approaches. Topics include: black-box and white-box testing, category-partitioning testing, unit testing, test-driven and behavior-driven development, combinatorial testing, code reviews, static code analysis tools, mocking, regression testing, capture-reply, mutation testing, and debugging.