The software marketplace is striving to accommodate the impending shift from traditional desktop applications to a model dominated by cloud computing. This paradigm shift will enable users to access computing resources from any location using an increasingly diverse set of clients, a growing number of which are mobile devices. Because traditional software development is tailored toward centralized execution, many centralized applications need to be adapted to serve remote users efficiently and reliably. Traditionally such adaptations require modifying application source code by hand, which is difficult, costly, and error-prone. To address this problem, this project develops automated program transformations that programmers can use to achieve efficient and reliable distributed execution.
This project will help answer the following fundamental research questions: (1) How can one distribute Object Oriented software even though objects do not distribute naturally? (2) How can distributed applications effectively leverage the latency/bandwidth trade-offs of modern networks? How can one alleviate inefficiencies imposed by use of remote pointers? (3) How can one effectively harden a distributed application against network volatility? This project will develop automated refactoring techniques, semantics preserving transformations performed under the programmerÂ¹s control. These techniques will (1) remodularize monolithic applications into service modules to exploit natural distribution boundaries, (2) optimize distribution middleware as guided by program analysis to reduce the aggregate latency of remote calls and efficiently transfer object graphs as parameters, and (3) enhance distributed applications with the ability to cope with network volatility. These techniques will help achieve efficient and reliable distributed execution with reduced software development costs and improved programmer productivity, thus benefiting enterprises, researchers, and the general public alike.