This course studies the nature of software bugs and security vulnerabilities arising in complex application domains and surveys specialized program analysis and automated testing techniques for identifying such issues proactively. The course will delve into various domains such as mobile systems, databases, web browsers, distributed and networked systems, autonomous vehicles, and smart contracts. For each domain, the class will discuss state-of-the-art research techniques that aim to uncover a special class of software bugs automatically. Apart from the literature review, students will engage significantly with software system design + engineering via a capstone project, which will involve working with real-world applications and analysis tools for one or more domains.