Abstraction Engineering
Nelly Bencomo, Jordi Cabot, Marsha Chechik, Betty H. C. Cheng, Benoit Combemale, Andrzej Wąsowski, Steffen Zschaler
TL;DR
The paper argues that modern software systems must cope with rapid change and high uncertainty, and that abstractions are the central mechanism for reasoning, assurance, and evolution. It defines Abstraction Engineering (AE) as a disciplined practice for constructing and manipulating abstractions across life-cycle stages, including both designed and learned/discovered abstractions. By detailing foundations and a four-question anatomy of abstractions, it identifies key challenges in complexity, uncertainty, compositionality, and reuse, and surveys partial solutions from multiple fields. It then presents a roadmap spanning technical research, education, artifacts, and collaborative practices to establish AE as a principled lens for future software and system engineering.
Abstract
Modern software-based systems operate under rapidly changing conditions and face ever-increasing uncertainty. In response, systems are increasingly adaptive and reliant on artificial-intelligence methods. In addition to the ubiquity of software with respect to users and application areas (e.g., transportation, smart grids, medicine, etc.), these high-impact software systems necessarily draw from many disciplines for foundational principles, domain expertise, and workflows. Recent progress with lowering the barrier to entry for coding has led to a broader community of developers, who are not necessarily software engineers. As such, the field of software engineering needs to adapt accordingly and offer new methods to systematically develop high-quality software systems by a broad range of experts and non-experts. This paper looks at these new challenges and proposes to address them through the lens of Abstraction. Abstraction is already used across many disciplines involved in software development -- from the time-honored classical deductive reasoning and formal modeling to the inductive reasoning employed by modern data science. The software engineering of the future requires Abstraction Engineering -- a systematic approach to abstraction across the inductive and deductive spaces. We discuss the foundations of Abstraction Engineering, identify key challenges, highlight the research questions that help address these challenges, and create a roadmap for future research.
