Software product line (SPL) engineering has been successfully applied to software development by obtaining software systems as compositions of modular features. Existing approaches to SPL engineering, however, are typically bound to a specific technological space (such as, a programming language and a composer) and integrated development environment (IDE), and rely on extraction mechanisms that make strong assumptions on the underlying technological space. This tight coupling hinders reuse, evolution, and adoption of heterogeneous development environments. We propose a general, workbench-agnostic protocol for extracting feature models from existing software artifacts and for configuring and deriving software products. The protocol follows a bottom-up approach based on lightweight dependency units called "atoms", and organizes the extraction and configuration process around an SPL server (workbench-independent) and an SPL client with a workbench-specific backend and a generic frontend. The protocol makes few assumptions on the underlying software artifacts and is therefore applicable to varied SPLs. The applicability of this approach is presented through a prototypical implementation of the architecture in which several subsystems interact and can be swapped freely without affecting the others. In particular, we focus on the application of such a protocol in the context of language product lines (LPLs), demonstrating its applicability to concrete scenarios while preserving workbench-agnosticism. From bottom to top, the implementation comprises: Neverlang language artifacts, a Java SPL client backend, an agnostic and reusable SPL server written in Go and Prolog, and a JavaScript SPL client frontend.
翻译:[translated abstract in Chinese]
软件产品线(SPL)工程已通过将软件系统作为模块化特征的组合来获取,成功应用于软件开发。然而,现有的SPL工程方法通常局限于特定的技术空间(例如编程语言和组合器)及集成开发环境(IDE),并依赖于对底层技术空间做出强假设的提取机制。这种紧密耦合阻碍了异构开发环境的重用、演进和采纳。我们提出了一种通用的、与工作台无关的协议,用于从现有软件工件中提取特征模型,以及配置和派生软件产品。该协议采用自底向上的方法,基于称为“原子”的轻量级依赖单元,并围绕SPL服务器(与工作台无关)和具有工作台特定后端及通用前端的SPL客户端组织提取与配置流程。该协议对底层软件工件做出的假设较少,因此适用于各种SPL。通过一个原型实现展示了该方法的适用性,其中多个子系统可自由交互与互换而不影响其他子系统。我们特别关注了该协议在语言产品线(LPL)场景中的应用,验证了其在具体场景中的可行性,同时保持了工作台无关性。自底向上,该实现包括:Neverlang语言工件、Java SPL客户端后端、用Go和Prolog编写的无关且可复用的SPL服务器,以及JavaScript SPL客户端前端。