On the evolution of technical lag in the npm package dependency network
Alexandre Decan, Tom Mens, Eleni Constantinou
备注:
Preprint. Paper accepted for publication at the 34th IEEE International Conference on Software Maintenance and Evolution (ICSME 2018), Madrid, Spain. A replication package of our analysis is available on https://doi.org/10.5281/zenodo.1283203
Software packages developed and distributed through package managers extensively depend on other packages. These dependencies are regularly updated, for example to add new features, resolve bugs or fix security issues. In order to take full advantage of the benefits of this type of reuse, developers should keep their dependencies up to date by relying on the latest releases. In practice, however, this is not always possible, and packages lag behind with respect to the latest version of their dependencies. This phenomenon is described as technical lag in the literature. In this paper, we perform an empirical study of technical lag in the npm dependency network by investigating its evolution for over 1.4M releases of 120K packages and 8M dependencies between these releases. We explore how technical lag increases over time, taking into account the release type and the use of package dependency constraints. We also discuss how technical lag can be reduced by relying on the semantic versioning policy.
Towards Understanding Third-party Library Dependency in C/C++ Ecosystem
第三方库(TPL)经常在软件中重用,以降低开发成本和上市时间。但是,外部库依赖性可能会在主机应用程序中引入漏洞。图书馆的依赖性问题已经引起了相当大的关注。许多包管理器,如Maven,Pip和NPM,被提议用于管理TPL。此外,大量的努力已经投入到研究语言生态系统中的依赖关系,如Java,Python和JavaScript(C/C++除外)。由于缺乏统一的C/C++包管理器,现有的研究对C/C++生态系统中的TPL依赖了解甚少,特别是在大规模的情况下。为了深入理解C/C++生态系统中的TPL依赖,本文收集了现有的TPL数据库、包管理工具和依赖检测工具,总结了C/C++项目的依赖模式,构建了一个全面而精确的C/C++依赖检测器。使用我们的检测器,我们从GitHub上包含24 K C/C++存储库的大型数据库中提取依赖关系。基于提取的依赖关系,我们提供了实证研究的结果和发现,其目的是了解第三方物流的依赖关系的特点。我们进一步讨论了C/C++依赖管理的意义以及未来软件工程研究人员和开发人员在库开发、软件组合分析和C/C++包管理等领域的研究方向。
An Empirical Comparison of Dependency Network Evolution in Seven Software Packaging Ecosystems
几乎每一种流行的程序设计语言都带有一个或多个包管理器。由这样的包管理器分发的软件包形成大的软件生态系统。这些打包生态系统包含大量定期更新的包版本,并且与其他包版本有许多依赖关系。虽然打包生态系统对各自的开发人员社区非常有用,但它们面临着与规模、复杂性和进化速度相关的挑战。典型的问题是向后不兼容的软件包更新,以及依赖于已经过时或不活动的软件包的风险。本文使用libraries.io数据集对七个不同规模和年龄的包装生态系统的包依赖网络演变之间的相似性和差异性进行了定量实证分析:Cargo for Rust,CPAN for Perl,CRAN for R,npm for JavaScript,NuGet for.NET平台,Packagist for PHP和RubyGems for Ruby。我们提出了新的指标来捕捉这些依赖网络的增长,易变性,可恢复性和脆弱性,并使用这些指标来分析和比较它们的演变。我们观察到,依赖网络往往会随着时间的推移而增长,无论是在大小和软件包更新的数量,而少数软件包负责大部分的软件包更新。大多数软件包依赖于其他软件包,但只有一小部分软件包占大多数反向依赖。我们观察到一个高比例的脆弱的软件包,由于高和越来越多的传递依赖。这些发现有助于评估软件包依赖网络的质量,并通过依赖管理工具和强加的政策来改善它。