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.
翻译:现代基于软件的系统在快速变化的条件下运行,并面临日益增长的不确定性。作为应对,系统正变得越来越自适应,并愈发依赖人工智能方法。除了软件在用户和应用领域(如交通、智能电网、医疗等)的普遍性之外,这些高影响力的软件系统必然从多个学科汲取基本原理、领域专业知识和工作流程。近期在降低编码入门门槛方面取得的进展,催生了一个更广泛的开发者社区,其成员不一定是软件工程师。因此,软件工程领域需要相应地进行调整,并提供新的方法,以便由广泛的专家和非专家系统地开发高质量的软件系统。本文审视了这些新挑战,并提议通过"抽象"的视角来解决它们。抽象已在软件开发的许多相关学科中得到应用——从历史悠久的经典演绎推理和形式化建模,到现代数据科学所采用的归纳推理。未来的软件工程需要"抽象工程"——一种跨越归纳与演绎空间的系统性抽象方法。我们讨论了抽象工程的基础,识别了关键挑战,强调了有助于应对这些挑战的研究问题,并制定了未来研究的路线图。