基于网络表征学习的混合缺陷预测模型
2019-01-06刘成斌郑巍樊鑫杨丰玉
刘成斌 郑巍 樊鑫 杨丰玉
摘 要:针对软件系统模块间具有依赖关系的问题,通过对软件系统网络结构进行分析,构建了基于网络表征学习的混合缺陷预测模型。首先,将软件系统以模块为单位转换成软件网络;然后,使用网络表征技术来无监督学习软件网络中每个模块的系统结构特征;最后,结合系统结构特征和卷积神经网络学习的语义特征构建一个混合缺陷预测模型。实验结果表明:在Apache三个开源软件poi、lucene和synapse上所提混合缺陷预测模型具有更好的缺陷预测效果,其F1指标比最优模型——基于卷积神经网络(CNN)的缺陷预测模型分别提高了3.8%、1.0%、4.1%。软件网络结构特征分析为缺陷预测模型的构建提供了有效的研究思路。
关键词:软件网络;缺陷预测;卷积神经网络;语义特征;网络表征学习
中图分类号: TP311.53(软件维护)文献标志码:A
Hybrid defect prediction model based on network representation learning
LIU Chengbin 1,2, ZHENG Wei1,2*, FAN Xin1,2, YANG Fengyu 1,2
(1. School of Software, Nanchang Hangkong University, Nanchang Jiangxi 330063, China;
2. Software Evaluation Center, Nanchang Hangkong University, Nanchang Jiangxi 330063, China)
Abstract: Aiming at the problem of the dependence between software system modules, a hybrid defect prediction model based on network representation learning was constructed by analyzing the network structure of software system. Firstly, the software system was converted into a software network on a module-by-module basis. Then, network representation technique was used to perform the unsupervised learning on the system structural feature of each module in software network. Finally, the system structural features and the semantic features learned by the convolutional neural network were combined to construct a hybrid defect prediction model. The experimental results show that the hybrid defect prediction model has better defect prediction effects in three open source softwares, poi, lucene and synapse of Apache, and its F1 index is respectively 3.8%, 1.0%, 4.1% higher than that of the optimal model based on Convolutional Neural Network (CNN). Software network structure feature analysis provides an effective research thought for the construction of defect prediction model.
Key words: software network; defect prediction; Convolutional Neural Network (CNN); semantic feature; network representation learning
0 引言
随着软件规模的增长,软件缺陷预测技术[1-2]的研究对保证软件可靠性具有重要意义。软件缺陷预测技术研究软件系统中的缺陷分布,检测出软件中有问题的模块,可用于辅助软件测试人员进行有目的的测试,在软件部署阶段前充分检测软件内在缺陷,及时修复有缺陷的软件模块,从而缩短软件开发生命周期、提高软件可靠性。
传统缺陷预测技术主要研究缺陷数量与软件规模的关系。Halstead等[3]研究了软件体积度量元与软件缺陷的关系,得出缺陷数量和体积度量元的正比例关系式。Lipow[4]对其进行了改进,提出了缺陷与可执行代码行数之比是代码行数自然对数的二次函数关系,并且对于不同的计算机语言函数系数具有差异。Takahashi等[5]则结合软件文档数量给出缺陷密度估计式,缺陷率是关于软件规范变更频率、程序员技能、软件设计文档的线性函数。传统缺陷预测技术只能通过关系式估算缺陷密度,从而预计测试成本。
从机器学习的角度来看,软件缺陷预测是一个分类问题。运用机器学习的方法可以从历史测试数据中学习,从而发现潜在可能有问题的模块。大量经典机器学习算法用于研究軟件缺陷预测:Khoshgoftaar等[6]对7种基于逻辑回归和决策树软件缺陷预测模型进行了比较,提出使用误分类代价作为模型性能比较的统一指标;Fenton等[7]研究了基于贝叶斯概率模型的软件缺陷预测方法,实验结果表明基于贝叶斯概率模型的缺陷预测方法通用性能较好;Vandecruys等[8]综合比较了基于支持向量机、逻辑回归、K近邻软件缺陷预测方法,发现不同的机器学习算法在相同的指标上性能差异并不显著;傅艺绮等[9]提出利用集成学习将不同预测算法的预测结果作为软件度量,并进行再次预测的组合机器学习的软件缺陷预测模型,在Eclipse数据集实验结果表明,该方法可以有效提高预测准确率;李勇等[10]总结了缺陷预测流程,比较不同场景下的模型性能,得出缺陷预测算法的性能由度量特征和算法模型决定,但不同场景下决定算法性能的关键特征有所差异;陈翔等[11]对缺陷预测进行了系统的研究,总结了影响预测性能的三个关键因素:度量指标、缺陷预测方法和缺陷数据;Arisholm等[12]将指标分为面向对象代码指标、复杂性指标、过程指标等,得出特定缺陷建模技术对分类精度影响有限,然而不同的特征指标对于预测性能影响比较显著。
2)软件模块系统结构特征提取。根据软件基本模块的依赖关系来构建描述整个软件系统的软件网络,在软件网络中应用表征学习技术无监督学习模块系统结构特征。
3)混合特征预测缺陷。将以上步骤得到的模块系统结构特征,结合CNN学习到的语义特征和手工提取的统计指标作为Softmax神经网络的输入预测缺陷。
2.1 语义特征的提取
为了捕获软件模块丰富的语义特征,需要提取模块的词序列表示,然后利用CNN高效的特征提取能力学习模块的语义。基于网络表征学习的混合缺陷预测具体提取语义特征的流程如图3所示,具体步骤如下:
1)从软件系统模块构建抽象语法树。抽象语法树构建算法可以提取变量声明、循环、判断、类声明、接口定义、继承、异常等含有软件模块执行逻辑的语义信息,以树结构的形式表示程序模块的执行逻辑信息[19]。
2)软件模块的词序列的抽取。从软件模块构建抽象语法树之后,利用深度优先算法遍历抽象语法树,抽取满足以下三种类型的节点[13]添加到软件模块词序列:方法调用和类实例创建节点、程序控制流程节点和声明类型节点,抽象语法树中抽取的部分节点类型如表1所示。
3)词序列编码。由于CNN不能直接对词序列中的单词字符进行处理,所以数据处理时需要对词序列所有的单词进行编码。为了建立单词和编码值之间的一一对应关系,对于标签编码,由于所有的编码值在一列中,那么模型可能会错误地认为编码值存在某种大小关系,所以数据处理时使用One-Hot编码。如此,将离散特征的编码值扩展到了欧氏空间,离散特征的某个取值就对应欧氏空间的某个点。
4)CNN提取软件模块语义特征。利用CNN强大的特征生成能力,将经过以上步骤已编码的词序列作为CNN的输入,经过一个嵌入层、一个卷积层、一个池化层和一个全连接层,提取出软件模块的语义特征。
2.2 系统结构特征提取
为了提取系统结构特征,以软件模块作为基本单位,利用模块间的依赖关系构建整个软件系统的软件网络,然后利用网络表征[15-17]学习软件模块的低维表示,实现系统结构特征无监督提取。
利用系统模块间存在数据的流动的关系,构建软件网络G=(V,E),其中:G表示由软件系统构建的软件网络[20];V={vi|i=1,2,…,N}是软件网络中顶点集合,网络大小N=|V|为顶点集合的个数,元素vi代表软件系统中的模块i,E={eij|vivj=1,i,j∈[1,N]∪i≠j}是软件网络中边的集合,表示模块i和模块j存在关系。当存在以下三种情形[20]时,vivj=1 ,即eij∈E:1)模块i与模块j存在继承关系;2)模块i与模块j存在组合关系;3)模块i与模块j存在依赖关系。
如图4所示是由Apache开源软件项目poi、lucene、synapse根据以上规则构建的软件网络。假设成功构建软件系统的软件网络G, 网络大小为N,需要利用网络表征学习无监督提取软件网络的系统结构特征。
利用DeepWalk提取软件模块的系统结构特征主要分为两个过程:随机游走生成语料和Skip-Gram模型表征节点。具体过程如下:
1)在软件网络G中随机选择一个软件模块vi,然后以vi为起点、窗口大小m进行随机游走采样,生成随机游走序列定义为T(vi) 。
2)将生成的随机游走序列进行One-Hot编码,作为Skip-Gram模型输入。
3)构建Skip-Gram模型。Skip-Gram是一个神经语言模型,通过最大化词序列vi、vj的共现概率来更新词向量。同理,对于网络G中起点为vi的随机游走序列,利用游走序列的最大似然概率作为目标函数去学习模型的参数。
4)利用图G中顶点V构建Huffman树,替换Skip-Gram模型的输出层,实现层次Softmax,优化Skip-Gram模型的计算复杂度。时间复杂度从O(V)降低到O(「log |V|), 从而降低了计算复杂度,重复以上过程更新权重。
2.3 混合缺陷预测模型
成功提取统计指标、语义特征和系统结构特征之后,利用这三种指标并结合Softmax神经网络构建模型去预测缺陷,结构如图5所示。
首先将人工提取的统计指标、CNN端到端学习的语义特征和DeepWalk无监督学习的系统结构特征组合作为Softmax神经网络的输入,然后经过两个激活函数为ReLU的隐藏层和一个Softmax的输出层。输出层二分类Softmax计算式如下:
其中:pi表示模块预测的概率,输出结果pi大小在[0,1]内,并且∑ipi=1。
3 实验与结果分析
3.1 实验设计
为了验证网络表征学习无监督提取的系统结构特征能够有效提高缺陷预测模型预测性能,研究使用控制变量法設计了3组对照实验,选择了4个模型在Apache开源软件项目下进行缺陷预测实验,具体详情如下:
1)LR。使用20个统计特征构建基于逻辑回归的缺陷预测模型。
2)CNN。使用卷积神经网络对开源软件数据集的源码信息进行语义特征的提取,构建一个基于卷积神经网络的缺陷预测模型。
3)DP-CNN。结合20个统计特征和卷积神经网络提取的语义特征构建一个混合缺陷预测模型。
4)DP-NRL。结合20个统计特征、卷积神经网络提取的语义特征以及Deepwalk无监督提取的系统结构特征构建一个混合缺陷预测模型。
3.2 实验评价标准
为了评估模型性能,需要选择合适的指标比较不同模型的性能。由于软件缺陷预测数据集是一种典型不平衡数据集[21],所以预测正确率不能很好地反映应模型性能优劣,选择F1指标对模型性能进行评估,F1指标是精度P和召回率R的调和平均。精度P计算式如下:
P=TPTP+FP(4)
其中:TP表示缺陷樣本预测正确的个数;FP表示无缺陷样本预测为缺陷样本的个数;P为预测结果中有缺陷的样本预测正确的概率。召回率R计算式如下:
R=TPTP+TN(5)
其中:TN表示缺陷样本中预测为无缺陷样本的个数。这两个指标进行调和平均计算F1值:
F1=2×P×RP+R(6)
对于数据分布平衡的数据集,精度P和召回率R可以很好地衡量模型性能;但是对于软件缺陷这种经典的数据不平衡数据集,判定类别的先验概率阈值不等于0.5,所以比较模型性能时使用F1值比较模型。
3.3 实验数据
本实验的数据来源于Apache基金会下的开源软件项目,考虑到项目模块数以及项目转换成软件网络的平均度和连通性等影响因素,最终选择使用了3个开源Java软件项目poi、lucene、synapse。对于每一个开源软件项目,本文选择了其中两个连续版本,软件具体版本号如表2所示。在实验中,利用旧版本作为训练集训练模型,使用新版本作为测试集评估模型性能。表2详细给出了3个Apache开源软件项目的功能、版本、平均文件数和缺陷率。
此外,本文收集了这3个Apache开源软件项目的20个统计指标特征和缺陷统计情况数据集。统计特征数据来源于tera-PROMISE项目,数据集的贡献来自于Jureczko。该数据集中包含了从软件项目库中统计得到的基于软件规模和软件复杂度的度量元数据,其中部分统计度量元如表3所示。
3.4 结果分析
根据实验设计的方法,在Apache基金会下的3个开源软件项目数据集上进行实验。软件旧版本作为训练集,软件新版本作为测试集。4个模型在3个开源软件的F1分数实验结果对比如表4所示。
为了验证系统结构特征可以有效改进缺陷预测性能,需要对不同模型的实验结果进行比较。由LR和CNN模型的缺陷预测结果可知,统计指标特征和CNN提取的语义特征能够有效地对软件模块缺陷进行挖掘。DP-CNN综合了统计指标特征和软件模块的语义特征,从实验结果可以看出,DP-CNN比LR和CNN模型的缺陷预测的F1分数要高,表明通过组合软件模块的统计指标特征和语义特征的缺陷预测模型的综合性能比分别基于统计特征和语义特征的缺陷预测模型性能略有提高。DP-NRL模型是本文提出的一种基于软件网络表示的缺陷预测模型。与DP-CNN模型的不同之处在于,DP-NRL不仅综合了软件模块的统计指标特征和语义特征,还结合了DeepWalk无监督学习软件网络的系统结构特征。从DP-NRL在3个开源软件项目上的实验结果来看,DP-NRL的模型性能比最优模型DP-CNN模型性能要好,从而证明了DeepWalk无监督学习软件网络的系统结构特征和软件缺陷存在相关性。
由表4可以看出,DP-NRL的F1分数比DP-CNN模型的F1分数要高。以poi为例,以poi的旧版本2.5作为训练集,新版本3.0作为测试集,4个模型在该项目上的缺陷预测的F1分数分别为0.748、0.778、0.784、0.814;其中DP-NRL的性能较为显著,与DP-CNN的F1分数相比,DP-NRL的F1分数提高了3.83%。
从表4中还可以看出,LR的缺陷预测综合评价指标在3个数据集的算法结果基本上偏低,CNN的缺陷预测综合评价相对来说比较好,表明程序中确实含有比较丰富的语义特征,并且CNN能够在一定程度上捕获这种语义信息,甚至软件系统的语义信息比手工提取的统计特征更为有效。通过比较LR的缺陷预测、CNN的缺陷预测和DP-CNN模型的实验结果,表明组合统计指标特征和语义特征能够有效改善缺陷预测模型的综合性能。通过比较DP-CNN模型和DP-NRL模型可知,DP-NRL模型性能比DP-CNN要好,从而验证了表征学习提取的软件网络结构特征可以有效改进模型的性能,该网络结构特征能够在一定程度上表征集成测试的缺陷。
以poi数据集为例展示了基于网络表征学习的缺陷预测模型在不同节点度级别的F1指标,结果如表5所示。度级别i表示以模块节点度个数在2i-1~2i范围内,Total统计了不同度级别的模块数,Actual Bug统计了不同度级别存在缺陷的模块数,Predict Bug统计了不同度级别预测为存在缺陷的模块数,F1记录了DP-NRL模型在不同度级别的F1分数。从表5可以看出,模块度和缺陷的可能性呈正相关,证明了软件网络的结构和软件缺陷存在着相关性,并且DP-NRL模型的预测性能随着模块度的增加而呈增长的趋势。
4 结语
本文从软件网络的角度去分析软件系统的整体结构,从而构建了一个基于网络表征学习的混合缺陷预测模型。该模型通过网络表征学习无监督提取软件模块的系统结构特征,结合CNN提取的程序语义特征和统计指标特征去预测软件模块的缺陷。基于Apache的3个开源软件项目的实验结果表明,本文提出的系统结构特征可以进一步改进缺陷预测模型,提高缺陷预测可靠性。在接下来的工作中,我们将探索如何更有效地提取软件网络结构信息,提升缺陷预测性能。
参考文献 (References)
[1]TAN M, TAN L, DARA S, et al. Online defect prediction for imbalanced data [C]// Proceedings of the IEEE/ACM 37th IEEE International Conference on Software Engineering. Piscataway: IEEE, 2015: 99-108.
[2]ZHANG F, ZHENG Q, ZOU Y, et al. Cross-project defect prediction using a connectivity-based unsupervised classifier [C]// Proceedings of the 38th International Conference on Software Engineering. New York: ACM, 2016: 309-320.
[3]HALSTEAD M H. Elements of Software Science [M]. New York: Elsevier Science Inc., 1977: 32-41.
[4]LIPOW M. Number of faults per line of code [J]. IEEE Transactions on Software Engineering, 1982, SE-8(4): 437-439
[5]TAKAHASHI M, KAMACACHI Y. An empirical study of a model for program error prediction [J]. IEEE Transactions on Software Engineering, 1989, 15(1): 82-86.
[6]KHOSHGOFTAAR T M, SELIYA N. Comparative assessment of software quality classification techniques: an empirical case study [J]. Empirical Software Engineering Laboratory, 2004, 9(3): 229-257.
[7]FENTON N, KRAUSE P, NEIL M. A probabilistic model for software defect prediction [J]. IEEE Transactions in Software Engineering, 2001, 44(21): 444-453.
[8]VANDECRUYS O, MARTENS D, BAESENS B, et al. Mining software repositories for comprehensible software fault prediction models [J]. Journal of Systems and Software, 2008, 81(5): 823-839.
[9]傅藝绮,董威,尹良泽,等.基于组合机器学习算法的软件缺陷预测模型[J].计算机研究与发展,2017,54(3):633-641.(FU Y Q, DONG W, YIN L Z, et al. Software defect prediction model based on the combination of machine learning algorithms [J]. Journal of Computer Research and Development, 2017, 54(3): 633-641.)
[10]李勇,黄志球,王勇,等.数据驱动的软件缺陷预测研究综述[J].电子学报,2017,25(4):982-988.(LI Y, HUANG Z Q, WANG Y, et al. Survey on data driven software defects prediction [J]. Acta Electronica Sinica, 2017, 45(4): 982-988.)
[11]陈翔,顾庆,刘望舒,等.静态软件缺陷预测方法研究[J].软件学报,2016,27(1):1-25.(CHEN X, GU Q, LIU W S, et al. Survey of static software defect prediction [J]. Journal of Software, 2016, 27(1): 1-25.)
[12]ARISHOLM E, BRIAND L C, JOHANNESSEN E B. A systematic and comprehensive investigation of methods to build and evaluate fault prediction models [J]. Journal of Systems and Software, 2010, 83(1): 2-17.
[13]WANG S, LIU T Y, TAN L. Automatically learning semantic features for defect prediction [C]// Proceedings of the IEEE/ACM 38th International Conference on Software Engineering. Piscataway: IEEE, 2016: 297-308.
[14]LI J, HE P, ZHU J, et al. Software defect prediction via convolutional neural network [C]// Proceedings of the 2017 IEEE International Conference on Software Quality, Reliability and Security. Piscataway: IEEE, 2017: 318-328.
[15]PEROZZI B, AI-RFOU R, SKIENA S. DeepWalk: online learning of social representations [C]// Proceedings of the 20th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. New York: ACM, 2014: 701-710.
[16]GROVER A, LESKOVEC J. Node2vec: scalable feature learning for networks [C]// Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. New York: ACM, 2016: 855-864.
[17]TANG J, QU M, WANG M, et al. LINE: large-scale information network embedding [C]// Proceedings of the 24th International Conference on World Wide Web. Republic and Canton of Geneva: International World Wide Web Conferences Steering Committee, 2015: 1067-1077.
[18]MIKOLOV T, SUTSKEVER I, CHEN K, et al. Distributed representations of words and phrases and their compositionality [C]// Proceedings of the 26th International Conference on Neural Information Processing Systems. New York: Curran Associates Inc., 2013: 3111-3119.
[19]JONES J. Abstract syntax tree implementation idioms [EB/OL]. [2019-06-01]. http://hillside.net/plop/plop2003/Papers/Jones-
ImplementingASTs.pdf.
[20]CHONG C Y, LEE S P. Analyzing maintain ability and reliability of object-oriented software using weighted complex network [J]. The Journal of Systems and Software, 2015, 110: 28-53.
[21]ZHANG S, AI J, LI X. Correlation between the distribution of software bugs and network motifs [C]// Proceedings of the 2016 IEEE International Conference on Software Quality, Reliability and Security. Piscataway: IEEE, 2016: 202-213.
This work is partially supported by the Natural Science Foundation of Jiangxi Provincial Department of Education (GJJ180523).
LIU Chengbin, born in 1994, M. S. candidate. His research interests include software defect prediction, network representation learning.
ZHENG Wei, born in 1982, Ph. D., associate professor. His research interests include software testing, network optimization.
FAN Xin, born in 1981, M. S., lecturer. His research interests include software test automation, software defect prediction.
YANG Fengyu, born in 1980, M. S., associate professor. His research interests include software engineering, data mining.
收稿日期:2019-06-18;修回日期:2019-09-16;錄用日期:2019-09-19。基金项目:江西省教育厅自然科学基金资助项目(GJJ180523)。
作者简介:刘成斌(1994—),男,江西吉安人,硕士研究生,CCF会员,主要研究方向:软件缺陷预测、网络表示学习; 郑巍(1982—),男,江西萍乡人,副教授,博士,CCF会员,主要研究方向:软件测试、网络优化; 樊鑫(1981—),男,湖北荆州人,讲师,硕士,CCF会员,主要研究方向:软件测试自动化、软件缺陷预测; 杨丰玉(1980—),男,江西九江人,副教授,硕士,CCF会员,主要研究方向:软件工程、数据挖掘。
文章编号:1001-9081(2019)12-3633-06 DOI:10.11772/j.issn.1001-9081.2019061028