黄亚蒙 马璐璐
摘要:针对开源软件存在缺陷,改善软件质量等问题,文章提出了基于贡献者行为特征的开源软件缺陷预测研究。首先获取Apache软件基金会中的开源软件项目,运用Git和SVN版本控制系统对开发人员日志信息提取;然后采用K均值聚类算法模型挖掘开发人员团队(贡献者),采用词频统计和主成分分析算法模型得到贡献者行为特征;最后利用随机森林算法实现对贡献者特征行为的软件缺陷预测,该实验结果具有一定的参考意义。
关键词:开源软件;行为特征;软件缺陷预测
中图分类号:TP311 文献标志码:A
0 引言
随着软件开发不断发展,开源软件开发正在走进大众的视野中,虽给人们的生活带来大量便利,但也出现一些问题,部分软件产品在进行操作时无法正常运行以及存在大量的软件半成品等,给人们带来巨大的经济损失,甚至威胁人类生命安全,故关于软件质量的研究已经刻不容缓。
本文通过对开源软件中版本控制系统和缺陷跟踪系统中的开发者行为日志信息挖掘与处理研究,对开源项目贡献者(即开发者团队)的行为特征进行分析,发现了研究贡献者特征行为对项目缺陷造成的影响。主要强调开发人员在开源项目的核心作用力,通过对贡献者的行为日志分析,确定出贡献者行为特征,建立一种基于贡献者特征行为的软件缺陷预测模型,确定贡献者行为特征对开源软件缺陷率的影响,贡献者在软件开发过程中规避此类缺陷[1]。
1 数据获取
本文采用Apache软件基金会中的开源软件项目作为研究对象。Apache软件基金会的开源项目具有一定公信度,其下的版本控制系统及缺陷跟踪系统的数据较为完整,具有支持多平台安装和使用、安全性高、易于扩展、性能稳定等特点。其项目信息存储在Git repository和Subversion repository资源网站,故采用不同方式获取项目信息。首先对项目克隆及检出得到230个项目集;之后采用Git,SVN,MySQL等工具将日志信息导出到CSV文件中。
2 贡献者行为特征选择
2.1 数据处理
数据处理主要目的是得到成员下的项目,然后采用K均值聚类实现贡献者的选择。其过程如下:运用Git命令对Git项目贡献统计;利用数据透视法实现对SVN项目贡献统计;实现对所有项目贡献统计;结合数据透视法得到成员下的项目,得到615组成员数据集,172个维度属性。
2.2 基于K均值聚类算法的贡献者选择
K均值聚类算法具有算法简单、时间复杂度较低、收敛速度快、能有效地处理大规模的数据集等优点,故采取K均值聚类算法实现贡献者选择[2]。首先对簇数k选择,然后通过欧式距离计算数据对象之间的相似性,使得实现类内数据对象相似度最大,类间相似度最小。K均值聚类算法将成員数据集依据数据集间的相似性(共同参与到相同项目的项目成员)聚集到指定的类簇中,且每个数据集属于并仅属于一个类簇中,具体操作如下:选取肘部方法和轮廓系数法实现对簇数的选择;采用K均值聚类算法实现贡献者的选择。
手肘法的核心指标是SSE(误差平方和)公式如(1)所示:
SSE=∑ki=1∑p∈Ci|p-mi|2(1)
Ci表示第i个簇,p表示Ci中的样本点,mi表示Ci质心中所有样本均值,SSE表示所有样本聚类误差,其代表聚类效果的好坏,通过Python得到k和SSE关系;轮廓系数法主要是确定聚类结果的内聚度和分离度,其结果是对聚类效果好坏评价。采用轮廓系数法与肘部方法相结合的方式确定k值,轮廓系数的核心指标是S,样本点Xi,其计算公式如(2)所示:
S=b-amax(a,b)(2)
a表示Xi与同簇的其他样本的平均距离,称为凝聚度,b表示Xi与最近簇中所有样本的平均距离,称为分离度,其计算公式如(3)所示:
Cj=argmin1n∑p∈Ck|p-Xi|2(3)
p表示某个簇Ck中的样本,平均轮廓系数的取值范围为[-1,1],且簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好。采用Python将k进行聚类求轮廓系数,得出k=12时,SSE及轮廓系数值相匹配,聚类结果相对较好;故采用Matlab对成员数据集进行K均值聚类,Best total sum of distances表示聚类结果的好坏,经由10次聚类结果评估,如表1所示。
最佳距离总和=544.77时效果最好,并运行得出贡献者即项目成员团队的分类结果,得到12组贡献者。
2.3 基于词频统计的贡献者行为特征选择
词频统计的主要操作步骤主要分为4步,即分词、词干提取、去停用词和计算词频[3]。分词是将文件中的信息按照一定的规则进行分散;词干提取是将同一单词在不同的语句状态下呈现不同的状态进行提取;去停用词是英文状态下经常出现,其没有特殊指代含义,采用Python自然语言中自带的NLTK工具包中停用词语料库,实现对高频词的停用;计算词频是遍历每个单词出现在文本中的次数;首先将12组文本信息通过词频统计得到12组结果,对提取出的行为特征频数排序,提取其特征数出现超过1万次的词汇作为行为特征初始样本;然后将12组贡献者的特征信息与提取的行为特征初始样本比对,保留12组贡献者都存在的特征集。
2.4 基于主成分分析的特征降维
主成分分析算法从多元特征中解析出主要特征,其反映原始变量绝大部分信息,并且彼此之间不相关,实现数据集之间的降维效果,最终实现对贡献者行为特征的选择[4]。
采用Matlab工具将12组度量元的统计数据进行主成分分析算法的降维,处理过程如下:(1)数据的标准化处理;(2)计算样本相关系数矩阵;(3)计算相关系数矩阵特征值及特征向量;(4)计算特征值的贡献率和累计贡献率;(5)选择主成分;(6)计算主成分得分。得到行为特征重要性排序,将降序中为0以上的数据集保留,其行为特征对与软件开发的影响性较大,选取此类行为特征进行软件缺陷预测分析。
3 软件缺陷预测
随机森林算法具有很高的预测准确率,对噪声和异常值具有很好的容忍度,易于实现,且计算开销小,不容易出现过拟合现象等[5],故本文采取随机森林算法实现对软件缺陷预测。
3.1 数据处理
缺陷数据集获取,实操中存在两种缺陷网址数据集,https://issues.apache.org/jira/browse下可直接获取缺陷数据集总量;https://github.com/apache下的缺陷数据集分布在issue中的open和closed中,汇总得到缺陷量,存在bug缺失项。将172个项目日志数统计,运用SPSS工具对缺陷数据集及日志数据集进行数据关联性分析,不具有关联性。平均值插补法不会对样本造成极大的干扰,其通用与各个领域,具有极大的普适性,故采用平均值法进行缺失值的插补得出最终bug数据表,得出各组贡献值的bug表,进行整理汇总,得到贡献者特征缺陷数据集表,如表2所示。
3.2 基于随机森林算法的特征行为缺陷预测
采用K折交叉验证法作为随机森林模型检验分析技术,其将原始样本打乱并重复利用,充分地利用有限的样本资源减少预测偏差,并考虑训练样本和泛化误差。其具体的步骤如下:首先将原始数据随机分为k组,然后将子集分别做一次测试集,余下的k-1组子集作为训练集用来训练模型,共得到k个模型,最后用平均值作为模型预测精度的最终估计值。求得其均方根误差(RMSE)、平均绝对误差(MAE)及因变量实际与预测值的相关系数(R)作为模型模拟结果与实际值的吻合程度的衡量指标,当RMSE与MAE的值越小,R的值越接近1,表明模型的预测效果越好,其指标的定义如(4)(5)(6)所示:
RMSE=∑ni=1( yi-yi)2n(4)
MAE=1n∑ni=1 yi-yi(5)
R=±∑ni=1(y^-y-)2∑ni=1(yi-y-)2(6)
yi,yi表示第i个样本的预测值,y-表示样本观测值的平均值,n表示对应的样本容量。利用特征缺陷率的数据集,采用随机森林回归算法进行对软件的缺陷的预测如图1所示。
当特征集为10,17,38,41,43,45,46时,即code,file,remove,support,test,update,use时,其判断为缺陷集的可能性较大,故贡献者在进行软件开发时,可以 通过规避及防范此类特征下的操作,增加开源软件项目的可信度,提高软件产品的质量。
4 结语
本文提出了基于贡献者行为特征的软件预测研究。首先在Apache软件基金会中运用Git和SVN版本控制系统完成对开源项目获取,使用MySQL等工具实现对开源项目日志信息获取,对日志中成员进行贡献统计分析,采用K均值聚类算法完成对贡献者选择,得到12组贡献者分组;然后利用词频统计方式完成对贡献者行为特征选择,并采用主成分分析完成对特征降维,共提取49项特征;之后采用缺陷跟踪系统对项目的bug集统计;最后使用随机森林算法完成贡献者特征行为的软件缺陷预测研究,得出贡献者在进行项目开发时在遇到code,file,remove,support,test,update,use等行為特征时开源软件出现缺陷的概率较高,贡献者在进行软件项目的开发过程中遇到此类编写程序代码时,应保持警惕,减少软件缺陷。
参考文献
[1]谢新强,杨晓春,王斌,等.一种多特征融合的软件开发者推荐[J].软件学报,2018(8):2306-2321.
[2]刘望舒,陈翔,顾庆,等.软件缺陷预测中基于聚类分析的特征选择方法[J].中国科学:信息科学,2016(9):1298-1320.
[3]李杰,孙仁诚.基于词频统计算法的中英文词频分布研究[J].青岛大学学报(工程技术版),2020(1):1-5.
[4]张晓风.基于主成分分析的软件缺陷预测研究[D].南京:南京航空航天大学,2017.
[5]吕红燕,冯倩.随机森林算法研究综述[J].河北省科学院学报,2019(3):37-41.
(编辑 傅金睿)
Research on open source software defect prediction based on characteristic behavior of contributors
Huang Yameng1, Ma Lulu2*
(1.Huanghe Jiaotong University, Jiaozuo 454950, China; 2.Zhengzhou Technical College, Zhengzhou 450100, China)
Abstract: Aiming at the problems of open source software defects and improving software quality,this paper puts forward a research on open source software defect prediction based on the behavior characteristics of contributors.First,obtain the open source software project in the Apache Software Foundation,and use GIT and SVN version control system to extract the developers log information;Then,the K-means clustering algorithm model is used to mine the developer team (contributors), and the word frequency statistics and principal component analysis algorithm model are used to obtain the behavior characteristics of contributors;Finally,the random forest algorithm is used to predict the software defects of contributors characteristic behavior.The experimental results have certain reference significance.
Key words: open source software; behavioral characteristics; software defect prediction