Today's software systems suffer from poor reliability, with software errors costing the U.S. economy upwards of $60 billion annually. Testing is the predominant technique in industry to ensure software quality. Existing test generation techniques, such as random testing and symbolic execution based test generation, are either not effective or not scalable. This project investigates techniques to make automated test generation and automated bug fixing fast, scalable, and exhaustive by bridging the gap between practical techniques, such as testing, and mathematically rigorous techniques, such as model checking and symbolic analysis. Specifically, the project integrates ideas from randomized algorithms, symbolic analysis and model checking, and computational machine learning and develops novel ideas in three research efforts: (1) develop techniques for fast and exhaustive unit test generation; (2) scale automated testing to large software through compositional reasoning; and (3) investigate techniques for automated repair advice generation where automated test generation is used to automatically generate candidate program variants that could potentially fix the bugs discovered during testing. This project will immediately benefit the software industry where testing and bug fixing consume more than half of the total software development cost.