Tools for Improving Software Right Now
Many areas of technology have enjoyed spectacular advances in recent years: the number of transistors on a chip, the density of memory and storage, the bandwidth and speed of networks. Software quality, however, is not one of them. In spite of considerable effort, the quality of software -- both correctness and performance -- remains a significant and persistent problem. Part of the reason is that software development practices change very slowly. For the most part we still use languages, tools, and techniques designed decades ago. Therefore, any solution to this problem that requires substantial changes to existing programs and to existing programmers is unlikely to produce the kind of improvements we desperately need right now.
In this talk I will describe current and future research that my group is undertaking to address this problem. Our goal is to improve the reliability and performance of software in ways that are (a) easy to deploy in existing systems, (b) low cost and low investment, and (c) appealing to programmers, both novice and professional. Our foundational assumption is that we cannot change certain elements of today's computing infrastructure, such as programming languages and machine architectures. Therefore our focus is on providing new capabilities through add-on development tools and augmented runtime systems. I will begin by describing some of the specific problems we are tackling and present recent results in dynamic bug detection. I will then outline upcoming work on configurable and adaptive runtime services for improving the performance of large server systems.