Software developers primarily rely on experience and intuition to make development decisions. Speculative analysis is a dynamic technique that helps developers make better decisions by informing them of the consequences of their likely actions. The key to the approach is computing those consequences. A speculative analysis tool generates a set of likely actions a developer might perform, makes a copy of the project code, and applies each of those actions to the copy in the background. After each application, the tool analyzes the resulting code and reports its findings to the developer.
For example, consider the Eclipse's Quick Fix mechanism, which suggests automated ways to fix compilation errors. We have developed Quick Fix Scout, an Eclipse plug-in that speculatively analyzes each Quick Fix suggestion and augments the dialog with information on how many errors each suggestion resolves.
In the space of collaborative development, we have developed Crystal, a tool that speculatively merges developers' code and informs them early and precisely of potential and existing textual, compilation, and test conflicts. Armed with this information, developers can prevent or more easily resolve the conflicts. Crystal has inspired a collaboration with Microsoft, and some Microsoft teams now use a version of the tool in their everyday work.
The Cascade project applies speculative analysis to type checking. It determines the effects of different changes to a program, making it easier for programmers to write types.