In recent years, the increasing success of e-business, e-learning, e-government, and other similar emerging models, has led the World Wide Web, initially thought of as a system for human use, to evolve towards an architecture for service-oriented computing (SOC) supporting automated use. SOC advocates the use of loosely coupled services, to be understood as autonomous, platform-independent, computational entities that can be described, published, discovered, and assembled, as the basic blocks for building interoperable and evolvable applications. Current software engineering technologies for SOC, however, remain at the descriptive level and lack rigorous formal foundations. Many researchers have hence put forward the idea of using process calculi that, due to their algebraic nature, convey in a distilled form the compositional programming style of SOC.
COWS (Calculus for Orchestration of Web Services) is a foundational language for specifying and combining service-oriented systems whose design has been influenced by WS-BPEL, the OASIS standard language for orchestration of web services. COWS combines in an original way a number of ingredients borrowed from well-known process calculi, e.g. asynchronous communication, polyadic synchronization, pattern-matching, protection, delimited receiving and killing activities, while resulting different from any of them. The principles that driven the design of COWS take inspiration from WS-CALCULUS, a process language introduced in a previous work. COWS has proved to be sufficiently expressive both for modelling imperative and orchestration constructs, e.g. web services, flow graphs, fault and compensation handlers, and for encoding other process and orchestration languages, e.g. Localized pi-calculus, Orc, WS-CALCULUS. Since its introduction, some mild linguistic extensions have been proposed to model e.g. timed activities, and service discovery and negotiation. Moreover, a number of methods and tools have been devised to analyse COWS specifications, such as a type system to check confidentiality properties, a stochastic extension to enable quantitative reasoning on service behaviours, and a logic and a model checker to express and check functional properties of services.