Software is ubiquitous, yet its development remains error-prone. Software defects are expensive to fix and can result in mission failure, infrastructure damage, and loss of life. To avoid another generation of software failure, our students must learn the skills necessary to reason rigorously about the software they develop. This project is developing student exercises to teach principles of mathematical reasoning in multiple courses across the computer science curriculum. Previous results suggest this approach increases student learning and attitude towards analytical reasoning.
Expected outcomes include several web-based learning modules called Reasoning Assistants. These interactive exercises and tutorials allow students to explore software verification, analytical performance, component-based contracts and testing. The reasoning assistants are complemented by a collection of in-class collaborative exercises. Materials are being used and assessed at a diverse set of institutions. Several hundred students and a dozen faculty are expected to participate.