Page 151 - 《软件学报》2025年第5期
P. 151

邓文涛 等: 基于图神经网络的多粒度软件系统交互关系预测                                                    2051


                 Dependency Finder 解析工具对项目源码逆向解析和处理的数据, 包括包、类和函数这                  3  种粒度的元素信息及其之
                 间的交互关系, 并以一种层级嵌套的结构表示              [35] . 其中, <package> 标签表示包对象, <class> 表示类对象, <feature>
                 表示方法或函数对象, <outbound> 和<inbound> 标签分别表示依赖与被依赖关系. 具体粒度元素间的层级结构如
                 图  5  所示. 各粒度软件网络建模见第       2.1  节.









                                                 图 5 软件元素间的层级结构

                 3.1.2    特征信息
                    本文特征选择的依据主要是基于能够充分表示软件网络中节点                        (如软件包、类和函数) 间交互关系的需求.
                 为此设置了    3  种特征提取方式. 其中, 局部特征通过         node2vec 获得, 捕获节点的邻近交互模式, 反映直接连接的特
                 性  [27,28] ; 全局特征通过拉普拉斯特征向量编码, 捕捉节点在整个软件网络中的位置信息, 揭示间接连接的全局结构                       [28,30] .
                 这两类特征的融合和优化, 能够同时利用节点的直接邻近性信息和其在整个网络中的相对位置信息, 这为模型提
                 供了一个更全面且精确的数据视角, 有助于更准确地捕捉和理解软件网络中的复杂交互关系, 从而提高版本内和
                 跨版本软件交互关系预测的准确性和鲁棒性               [28,33] .

                 3.2   实验设计

                 3.2.1    数据集划分
                    本文数据集选取了       Ant、Azure 和  Maven  作为研究对象, 原因为: (1) 这   3  个项目都来自于    PROMISE  软件工
                 程库  (http://promise.site.uottawa.ca/SERepository/), 该库提供了可信、公开的软件工程数据集, 经过了严格的筛选
                 和审核, 具有高质量和可信度的特点, 适合用于研究和分析                 [36] . (2) Ant 是一款跨平台的  Java 编译和生成工具, 被广
                 泛应用于软件开发; Azure 是微软的云计算操作系统, 在云计算领域占据重要地位; 而                      Maven  是一款常用的项目管
                 理和整合工具. 这些项目具有不同规模和应用范围, 能够提供多样化的数据, 有利于深入研究不同系统的交互关系
                 预测问题   [36] . (3) 这些项目拥有活跃的用户群体和广泛的社区讨论, 这种环境会促进软件系统的经常变更, 使得软
                 件系统的交互关系更加复杂和多样化, 也能够更好地反映真实的软件系统交互情况                           [36,37] . (4) 已有相关软件交互关
                 系预测的研究在这些数据集上进行, 证明了数据适用于软件交互预测任务                        [38] .
                    表  1  为  3  个项目数据的版本号、粒度类别及其相应的节点数和边数信息. 此外, 为了方便表述, 将同一项目内
                 所选版本由低到高依次简约命名为              Ant1、Ant2  和  Ant3; Azure1、Azure2  和  Azure3; Maven1、Maven2  和
                 Maven3.
                    由于  RQ  的不同, 本文对数据集的划分方式也有所不同. 对于               RQ1  的版本内多粒度交互关系预测任务, 每个
                 版本都是独立的研究对象, 在版本内进行训练集和测试集的划分. 而                     RQ2  的跨版本多粒度交互关系预测任务, 则
                 是将同一类项目中的一版数据作为训练集, 另一版数据作为测试集. 具体定义如下.
                    v1⇒v2: 同一项目中的第      1  个版本预测第    2  个版本, 即, Ant 项目中版本   1.0.0  作为训练集, 版本   1.4.0  作为测
                 试集; Azure 项目中版本    3.0.0.8  作为训练集, 版本  3.7.0.1  作为测试集; Maven  项目中版本  2.0.0  作为训练集, 版本
                 2.6.1  作为测试集.
                    v2⇒v3: 同一项目中的第      2  个版本预测第    3  个版本, 即, Ant 项目中版本   1.4.0  作为训练集, 版本   1.7.6  作为测
                 试集; Azure 项目中版本    3.7.0.1  作为训练集, 版本  4.5.0.2  作为测试集; Maven  项目中版本  2.6.1  作为训练集, 版本
                 3.2.2  作为测试集.
                    v1⇒v3: 同一项目中的第      1  个版本预测第    3  个版本, 即, Ant 项目中版本   1.0.0  作为训练集, 版本   1.7.6  作为测
   146   147   148   149   150   151   152   153   154   155   156