Distributed applications (such as web applications and cloud-based applications, where multiple computers cooperate to run the application) are becoming increasingly common. Given the amount of commercial activity and information handled by these distributed applications, it is important that these applications are correct, reliable, and efficient. However, many traditional tools and techniques for programmers cannot be used for distributed applications, making it difficult for programmers to write and debug distributed applications. This research explores the use of software contracts for distributed applications. Software contracts are specifications for software components that can be checked at run time (i.e., when the software executes). By developing techniques and tools to incorporate software contracts into distributed applications, this research has the potential to make it easier for programmers to write distributed applications that are correct, reliable, and efficient.
Specifically, this research explores the use of higher-order contracts for distributed applications. Higher-order contracts are contracts for higher-order values such as first-class functions or objects. Higher-order contracts are a good fit for distributed applications as components in distributed applications are often higher-order, and higher-order contracts facilitate reasoning about dynamic composition of components (which is common in distributed settings such as web applications). Potential benefits of higher-order contracts include: (a) declarative specification of the functional behavior of components; (b) run-time enforcement of specifications; and (c) correct identification of faulty components. This research focuses on the efficient enforcement of behavioral contracts, the correct enforcement of contracts in the presence of untrustworthy distributed components, and the specification and enforcement of non-functional behaviors.