An empirical study of unspecified dependencies in make-based build systems

An empirical study of unspecified dependencies in make-based build systems
复制标题

DOI:
10.1007/s10664-017-9510-8
复制
发表时间:
2017-04
影响因子:
4.1
通讯作者:
C. Bezemer;Shane McIntosh;Bram Adams;D. Germán;A. Hassan
C. Bezemer;Shane McIntosh;Bram Adams;D. Germán;A. Hassan
中科院分区:
计算机科学2区
文献类型:
--
作者:
C. Bezemer;Shane McIntosh;Bram Adams;D. Germán;A. Hassan

文献摘要

被引文献

相似文献

软件开发人员依赖构建系统来编译他们的源代码更改,并生成用于测试和部署的可交付成果。由于大型软件系统的完整构建可能需要数小时,因此增量构建是现代构建系统的基石。增量生成只应重新编译其依赖项已被开发人员更改的可交付成果。然而,在许多组织中,这样的依赖关系仍然由(主要)手动指定和维护的构建规则来标识,通常使用像Make这样的技术。不完整的规则会导致未指定的依赖关系,这可能会阻止重新生成某些可交付成果,从而产生不完整的结果,从而使来源和可交付成果不同步。在本文中,我们提供了一个案例研究,在基于组件的构建系统中,Glib、Openldap、linux和qt开源项目中的未指定依赖项。为了揭示基于Make的构建系统中的未指定依赖项,我们使用一种方法,该方法将构建系统中指定的依赖项的概念模型与在构建过程中实际执行的文件和过程的具体模型相结合。我们的方法提供了整个构建系统中使用的依赖关系的概述,并揭示了构建系统规则中尚未表达的未指定的依赖关系。在我们的分析中,我们发现未指定的依赖关系很常见。我们在120多万个未指明的依赖关系中确定了6个常见原因。
Software developers rely on a build system to compile their source code changes and produce deliverables for testing and deployment. Since the full build of large software systems can take hours, the incremental build is a cornerstone of modern build systems. Incremental builds should only recompile deliverables whose dependencies have been changed by a developer. However, in many organizations, such dependencies still are identified by build rules that are specified and maintained (mostly) manually, typically using technologies likemake. Incomplete rules lead to unspecified dependencies that can prevent certain deliverables from being rebuilt, yielding incomplete results, which leave sources and deliverables out-of-sync. In this paper, we present a case study on unspecified dependencies in themake-based build systems of theglib, openldap, linuxandqtopen source projects. To uncover unspecified dependencies inmake-based build systems, we use an approach that combines a conceptual model of the dependencies specified in the build system with a concrete model of the files and processes that are actually exercised during the build. Our approach provides an overview of the dependencies that are used throughout the build system and reveals unspecified dependencies that are not yet expressed in the build system rules. During our analysis, we find that unspecified dependencies are common. We identify 6 common causes in more than 1.2 million unspecified dependencies.