Researchers can construct dependency networks by inferring relationships between packages through readily-available manifests in package repositories. They answer questions such as "How many use the vulnerable package event-stream?" and "What are the most used packages in a repository?" through network analysis. An overlooked aspect of such networks is that manifest-inferred relationships describe declarations on external packages--not necessarily how or whether they make use of them. To better model dependencies between packages, we devise Pr\"azi, an approach combining manifests and call graphs of packages to construct a fine-grained dependency network at the function-level granularity. We implement Pr\"azi for Rust and replicate a recent evolution study to characterize its package repository, crates.io, from a function call perspective. Our results identify new key characteristics and developments of crates.io: i) 49% of all calls in crates.io 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 meta-information of package relationships are not sufficient alone to understand how packages use each other. By pegging network representations on the function level of packages, Pr\"azi is a step towards understanding the dynamics of package repositories and reuse through program analysis.
翻译:研究人员可以通过在软件包库中容易获得的货包清单来推断包件之间的关系, 从而建立依赖性网络。 他们通过网络分析回答“ 有多少人使用脆弱的软件包事件流” 和“ 储存库中最常用的货包” 等问题。 这种网络的一个被忽视的方面是, 显示式推论关系描述外部软件包的申报- 不一定是如何使用或是否使用这些软件包。 为了更好地模拟包件之间的依赖性, 我们设计 Pr\\\\\"azi, 一种将货包的货包和调用式图组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合, 连续组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合,,,, 、组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合组合), 、组合