[论文解读] Software graphs and programmer awareness
本文提出了一种生成模型,用以解释在软件依赖图中观察到的入度(幂律分布)与出度(指数分布)的显著差异。该模型将这种不对称性归因于程序员对依赖关系的认知:开发人员主动管理其出向依赖(出度),但对入向依赖(入度)缺乏意识,模型通过仅依赖出度的节点分裂机制捕捉这一现象,成功复现了12个Java应用程序中14项指标的真实分布。
Dependencies between types in object-oriented software can be viewed as directed graphs, with types as nodes and dependencies as edges. The in-degree and out-degree distributions of such graphs have quite different forms, with the former resembling a power-law distribution and the latter an exponential distribution. This effect appears to be independent of application or type relationship. A simple generative model is proposed to explore the proposition that the difference arises because the programmer is aware of the out-degree of a type but not of its in-degree. The model reproduces the two distributions, and compares reasonably well to those observed in 14 different type relationships across 12 different Java applications.
研究动机与目标
- 解释在多种Java应用程序中持续存在的软件依赖图中入度与出度分布不对称性的成因。
- 探究程序员对出向依赖的意识(而对入向依赖无意识)在多大程度上可解释所观察到的分布形态差异。
- 开发并验证一个简洁的生成模型,以捕捉这种认知不对称性,并复现经验度分布。
- 测试该模型在多种软件度量指标和真实应用场景下的鲁棒性,证明其超越特定设计模式的泛化能力。
提出的方法
- 该模型通过在现有节点之间添加边,并允许节点分裂来生成有向图,其中节点根据其出度分裂为两个。
- 仅当父节点的出度达到阈值时才触发节点分裂,不依赖于其入度,从而建模程序员对出向依赖的意识。
- 模型使用优选连接机制创建边,优先选择出度较高的节点。
- 出度分布源自一个随机过程,其中分裂行为依赖于出度,导致指数分布。
- 入度分布自然地从网络增长过程中产生,且被发现符合幂律分布,与经验数据一致。
- 通过将模型预测的度分布与12个真实Java应用程序的14项度量指标进行对比,使用双对数图和对数线性图进行验证。
实验结果
研究问题
- RQ1为何软件图中的入度分布始终遵循幂律,而出度分布则呈现指数形式?
- RQ2所观察到的分布不对称性在多大程度上可由程序员对出向依赖的意识而非对入向依赖的意识来解释?
- RQ3一个基于非对称节点分裂的简单生成模型能否复现真实软件系统中观察到的经验度分布?
- RQ4该模型在不同软件应用和各类依赖度量指标下的表现是否具有稳定性?
主要发现
- 该模型在12个真实Java应用程序的14种不同依赖度量指标中,成功复现了观察到的幂律入度与指数出度分布。
- 关键机制——仅依赖出度的节点分裂——完全解释了度分布形态的全部不对称性。
- 模型的预测与经验数据高度吻合,特别是在分布的尾部区域,证实了其解释力。
- 该模型在多种应用和度量指标下的成功表现表明,程序员对出向依赖的意识是塑造软件架构的根本性、普适性机制。
- 该模型为所观察到的网络结构提供了最小但充分的解释,无需引入复杂或特定于应用的假设。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。