Our modern society can hardly exist without software. Hence, it is paramount that this software works not only as intended, but also that it cannot be exploited by attackers such that these alter the functionality or obtain access to sensitive information. Software analysis and testing are the two most important techniques to achieve such dependability from existing software. Software analysis examines the program code of the software itself, deriving properties such as the possible information flow. Software testing executes the software under a large variety of inputs and environments, determining precisely what happens in a concrete setting. Both techniques work hand in hand to precisely determine what can and what cannot happen in software. Our test generation techniques thus have found thousands of errors and vulnerabilities in web browsers and other real-world software, protecting users from software mistakes and their consequences.