"This proposal advocates a fundamentally new approach to achieving software quality: remove the distinction between software use and software testing -- enable programs to accumulate experience from each one of their executions, and leverage this experience toward self-improvement of the software. My hypothesis is that every program execution has information by-products that, if suitably captured and aggregated, can substantially speed up the process of testing programs and proving them correct. Software is being executed billions of times around the world, with the corresponding information going to waste. At the same time, traditional software testing tries to simulate a small subset of real-world conditions and executions. I propose instead viewing every execution of a program as a test run, and the aggregation of executions across the lifetime of all copies of that program as one gigantic test suite.
I propose the study of techniques and formalisms for automatically recouping the information that is lost during everyday software use, aggregating it, and automatically turning it into tests and proofs; techniques to use these tests and proofs to automatically correct the behavior of programs; and techniques for automatically steering programs into exploring behaviors for which information is lacking. All these techniques will be embodied in a platform, called BeeNet, that implements a massively distributed learning process which turns execution by-products into a collective experience that leads to higher quality software. This is a radical new way of exploiting the vast (but today completely wasted) information that results from program execution.
I will investigate these questions with an integrated approach that combines thorough theoretical studies with practical application to real-world software, employing the perspectives of three different research communities: operating systems, programming languages, and software verification."
Fields of science
Call for proposal
See other projects for this call