Grants and Contributions:
Grant or Award spanning more than one fiscal year. (2017-2018 to 2022-2023)
Our dependence on software continues to grow every day. Software systems themselves become increasingly larger and more complex. At the same time, software development cycles shrink and customers expect new products to be delivered to the market faster than ever.
In such a reality, software construction becomes a compositional activity, where developers integrate code from in-house and third-party libraries, snippets of code “borrowed” from earlier projects, and code found online. Such borrowed code can comprise up to 90% of a typical software system.
Integrating independently-developed code fragments in a predictable manner is a challenging task: developers often have a limited understanding of what each individual piece of software does, let alone how their composition behaves. The inability to reason about software functionalities and their interplay complicates software development processes, prolongs the time to market, and reduces the quality of the produced software. In fact, there are several well-known disasters caused by software reuse, composition, and integration problems, including the Ariane 5 rocket explosion, the KCG trading system failure, and the massive radiation overdoses inflicted by Therac-25 therapy machines.
Motivated by these challenges, the research program proposed here aims at building foundations for efficient and reliable development of compositional software . The main distinction of this program from existing work is that it does not focus on approaches for specifying reusable software components or subsystems with well-defined interfaces. Instead, it leverages recent advances in the fields of formal methods and program analysis to develop paradigms for understanding and composing existing, already available software fragments .
Specifically, this program explores the development of:
1) A formal model for representing software in terms of its conceptual features – logical units of meaning to developers. The model is populated by extracting information about features, specifications of features (prerequisites and guarantees), and feature dependencies, from existing code artifacts.
2) Analysis techniques for reasoning about complex compositional software properties. These techniques aim at, for example, identifying unexpected side effects caused by reusing features outside of their original context and inconsistencies caused by independent evolution of related features.
3) Concepts for integrating the compositional model and analysis techniques into existing development tools and practices, including version control system workflows (e.g., that of Git).
The outcomes of this work are expected not only to advance the state of science but also to reduce time to market and increase the quality of our software, making a significant contribution to the software industry, and to the Canadian and global economy.