Software reuse has emerged as one of the most crucial elements of modern software development. The standard way to study the dependency networks caused by reuse is to infer relationships between software packages through manifests in the packages' repositories. Such networks can help answer important questions like "How many packages have dependencies to packages with known security issues?" or "What are the most used packages?". However, an important overlooked aspect of current networks is that manifest-inferred relationships do not necessarily describe how or whether these dependencies are actually used in the code. To better model dependencies between packages, we devise Pr\"azi, an approach combining manifests and call graphs of packages. Pr\"azi constructs a fine-grained dependency network at the more fine-grained function-level, instead of at the manifest-level. For this paper, we provide a prototypical Pr\"azi implementation for the popular system programming language Rust. Using it, we replicate a recent evolution study characterizing Rust's package repository, Cratesio, on the function-level. Our results identify new key characteristics and developments of Cratesio: i) 49% of all function calls in Cratesio target a function in a dependency, suggesting prevalent reuse of dependencies, ii) packages call 40% of their resolved transitive dependencies, iii) package maintainers make nearly 7 new calls to their dependencies biannually, and iv) packages have two to three times more indirect callers than direct callers of their APIs. These results show that current analyses of manifest-level dependency networks are not sufficient to understand how packages use each other.
翻译:软件的再利用已成为现代软件开发的最关键元素之一。 研究再利用造成的依赖网络的标准方法是通过软件包库的显示器来推断软件包之间的关系。 这种网络可以帮助回答重要问题, 比如“ 有多少软件包依赖已知安全问题的包装? ” 或“ 哪些是使用最多的包? ” 。 然而, 当前网络的一个重要被忽视的方面是, 显而易见的关联不一定描述这些依赖关系在代码中是如何或是否实际使用的。 为了更好地描述软件包之间的间接依赖关系, 我们设计了Pr\"azi, 一种将软件包的表和调用图集组合结合起来的方法。 Pr\“azi”在更精细的功能级别上构建一个精细的显示依赖性网络网络。 对于本文,我们为流行的系统编程语言提供了一种半典型的 Pr\\\ 执行功能。 使用它, 我们复制了最近关于Rust 7 软件包储存库的演变研究, Cratesio, 在功能级别上, 我们发现新的关键特性特征特征和软件包的开发过程。 Pratesiumalalalal- kille, commaisiming a lifulations