#Number TR-PDS-1996-007 #Title The Sage Project: Software Engineering for Distributed Applications #Author Aleta Ricciardi and Chun Chan #Abstract This paper describes Sage, a research project in software engineering for (fault-tolerant) distributed applications that assists programmers write correct, efficient code. Specifically, Sage uses the modal logic of knowledge and applies theoretical results detailing how processes learn facts about each other's state to derive the minimal communication graph for a given distributed coordination problem. An environment that applies intricate theoretical results, but hides the theory from users is particularly important as few distributed applications programmers hold advanced degrees in computer science. The specification interface is controlled, yet expressive enough to capture canonical distributed coordination problems and weaker variants appropriate for wide-area and object-oriented systems. The resulting graphical display shows programmers which messages must be received. Sage allows users to experiment on the derived protocol by crashing processes, reordering events, losing messages, and partitioning the network. Under these conditions, Sage regenerates the communication graph, or indicates a solution is now impossible. This has two benefits: it animates the effects of unpredictable system events on distributed applications, and it greatly simplifies testing distributed algorithms. Sage completely separates the issues in testing a protocol's behavior in the face of failures, from the effects background system conditions (e.g. processor or network loads) can have on the testing procedure itself. As development continues, other components will highlight required group and communication primitives, generate skeleton code, and verify user-drawn protocols. Thus, Sage will be an integrated development, testing and verification environment for distributed applications. Keywords: software fault tolerance; highly-available software systems; distributed systems; specification and design of reliable software-based systems. #Bib