2.1 基于优先级评估的问题描述
在计算可疑度之前,首先对其进行定量分析,在可疑度优先级排列的多属性决策中,决策群体为E={e1,e2,…,en},使用ω描述专家权重。优先级评估排序需求集合是R={r1,r2,…,rk},可疑度需求评估属性是F,评估属性权重是λ。
度量决策者es对度量需求ri属性的打分过程为
(2)
(3)
决策群体对度量需求评估的结果通过个体决策与专家权重计算得到,记作
(4)
2.2 缺陷数据与源文件的关联性计算
软件源文件缺陷通过诸多特征属性表示,划分成标称与序数两个类别,如表1内的缺陷数据,表内缺陷类别1与2为标称属性,3为序数属性。
表1 软件源文件缺陷数据表
按照数据挖掘有关定理,数据间的相邻性包含相似与相异两种性质。在目标i、j的标称属性匹配情况下,相似性sim(i,j)=1,相异性d(i,j)=0。
标称属性一般使用布尔度量方法,如果两个目标互相匹配,相似性等于1,反之等于0。序数属性与标称数据的区别在于:具备抽象意义的序数属性值可使用距离来推算源文件缺陷相似度[8],计算过程为:首先设置第i个目标的序数属性f的值是rif,属性f内含有Mf个有序状态。其次,因为每个序数属性极有可能产生差别较多的状态数,为了让属性间的相异性处于(0,1)取值范围内,要规范化属性值,得到
(5)
再把缺陷序数属性实施距离计算,针对单属性来说,使用欧几里得距离[9]描述两个缺陷样本间的相异性大小
(6)
融合粗糙集理论与模糊聚类算法解析软件缺陷数据,划分缺陷属性权值,详细过程如下:
第一,构建缺陷数据编码表,抽象化处理数据,每个缺陷均是通过n个抽象化特征值定义的矢量,将全部缺陷数据当作特征空间内的多维矩阵,表示成
(7)
第二,组建模糊相似矩阵T,推导过程为
(8)
式中,n表示矩阵列数。
第三,分割不同的临界值面积来阐明缺陷数据间的相似性,按照模糊等价矩阵内的缺陷数据相似性,分别把缺陷数据划分成各不相等的类型。
第四,利用粗糙集内关键性定理算出属性权重值。将缺陷数据划分结果D的特征属性C依赖度描述成
γ(C,D)=|POS(C,D)|/|U|
(9)
其中,|POS(C,D)|代表正域的缺陷数量,|U|代表缺陷数据非空集合内的缺陷数目。
将属性的关键性记作
SGF(f,C,D)=γ(C,D)-γ(C-{f},D)
(10)
则属性全局关键性为
(11)
根据属性的关键性排名,推算每个属性自身的权重值
(12)
由此将缺陷数据与软件源文件的相关性推导公式记作
(13)
式中,Similarity(B,Si)是缺陷数据与过往修正缺陷的相似性,m是全部和源文件相关的缺陷个数。
2.3 支持向量回归下的源文件易错性计算
为了保证软件源文件可疑度度量的正确性,首先要明确软件缺陷的度量元。以往缺陷定义均采用代码行当作度量准则[10],而后又相继研发出一系列面向目标的软件研发技术,得到软件度量元,例如内聚性、耦合性等。本文方法的度量元如表2所示。
表2 软件源文件缺陷定位度量元
易错性即为源文件缺陷密度大小,密度越大,易错性越强,可疑度越高。代入Spearman秩相关数算法,衡量度量元和源文件缺陷密度间的关联,得到对缺陷密度影响最高的度量元,并剔除多余度量元。假设软件源文件的度量元为H,缺陷密度为I,把H、I内的数据实施匹配,获得数据集合(H1,i1),…,(Hk,ik),把Hk、ik依次根据大小排列,得到二者在第二个次序样本内的排名,定义成Rk、Sk。则H、I之间的关联水准计算公式为
(14)
为防止数据处理时由于某些度量元数值差异较多影响运算正确率,需要预处理数据。归一化是把度量元属性值整合至[0,1]区间。归一化单个维度下的度量元数据,得到
(15)
使用支持向量回归完成源文件代码易错性预测。设定一个数据集{(h1,i1),…,(hl,il)},hl是第l个软件源文件的度量元矢量,il是第l个源文件缺陷密度。使用Rn内的函数f(x)进行数据拟合,函数的表达式为
f(x)=w·x+b
(16)
其中,w代表超平面的法矢量,b是一个任意常数。
可疑度度量的计算过程就是探寻一个最佳超平面,让全部样本点与超平面的偏差总值距离为最短,使用具备正则化特征的偏差函数进行距离运算,得到
(17)
其中,f(xe)是第e个软件项目缺陷密度评估值。
将软件源文件易错性问题变换成最优问题,得到
(18)
(19)
代入一个拉格朗日乘子α,获得如下对偶表达式:
(20)
其中,K(xi,xj)是一个核函数。
最终得到支持向量回归下的易错性预测模型是
(21)
利用式(21)即可在输入任意度量元矢量的情况下,得到软件源文件相对的缺陷密度,完成易错性计算全过程。
挑选模型内的核函数,恰当的核函数可把低维空间非线性问题变换成高维空间线性问题,探寻回归问题的最佳超平面。运用径向基核函数优化预测模型,将优化过程描述成
(22)
其中,xj表示径向基核函数中心位置,σ是径向基核函数的宽度指数,与核函数径向作用区域面积有直接关系。
模型参变量优化的根本含义是面向各类性质不同的目标择取恰当的(C,g)数据对。在缺陷密度预测模型内设定C、g的取值范围,按照搜寻步长把C、g依次分割成n1、n2个集合,再匹配合适的数值,组成n1·n2个(C,g)数据对。利用网格搜寻实现参变量遍历搜寻,并将预测准确率最大的(C,g)数据当作最优参数,实现易错性预测评估,并综合缺陷数据与源文件的关联性计算结果,二者相加实现高精度软件源文件可疑度度量。
3 仿真研究
利用仿真证明所提方法的性能优越,所使用的仿真环境为2GHzCPU、内存2G的计算机,实验平台为Matlab 7.1。创建两个不同的待测程序,各个程序内均涵盖一个缺陷。将软件源文件中的代码作为实验对象,计算其可疑度大小,利用本文算法思想,以源文件谓词代码为例,将其可疑度计算过程描述为
Φ(P)=nt(P)/(nt(P)+nf(P))
S(P)=-lg(sim(fs(P),ff(P)))
(23)
式中,nt(P)是谓词代码,P是无缺陷的次数,nf(P)是有缺陷次数,S(P)是可疑度,sim(fs(P),ff(P))是随机相似度函数。
将本文方法下的两个待测程序谓词代码可疑度度量结果表示成表3与表4。
表3 待测程序1的可疑度列表
表4 待测程序2的可疑度列表
在表3与表4中,可疑度S(P)是fs(P)和ff(P)二者间的差异,S(P)值越趋近1,证明软件源文件谓词代码P具备缺陷的概率越高,即可疑度越大,反之概率越低,可疑度越小。
通过实验结果看出,包含缺陷的第6个与第15个谓词代码可疑度为最高,排在可疑度表格的首位,且可疑度从大到小排序,逐步趋近于0。在两个表格内,第8个与第7个的谓词代码可疑度相同,表明两个分支在源文件内具备同时执行与不执行的耦合关联,则依照实验结果,缺陷检测人员首先要勘测可能包含缺陷的分支语句,缺陷极有可能隐藏在分支语句中,实现了预期可疑度度量目标。
为进一步验证本文方法的可靠性,将软件数据集SWT3.1作为实验对象,和文献[4]、文献[5]进行可疑度度量分析,表明本文方法对提升软件源文件缺陷定位的实用性。实验中使用三类指标用于衡量可疑度度量缺陷定位方法的性能,TopN表示返回结果内缺陷文件的定位个数,平均倒数排名是对全部的排序进行统计分析的过程,排名值越大,表明方法计算正确率越好。平均精度是对全部排序表的全局评估。将三种方法的缺陷定位结果表示成表5。
表5 SWT3.1数据集缺陷定位结果对比
从表5可知,本文方法三种指标的值均为最高的,证明该方法较比文献方法,在源文件可疑度度量方面占据更大的优势。这是因为本文方法采用优先级评估算法,运用评估结果明确软件源文件可疑度大小,让软件研发者有更充裕的时间完成缺陷修复,让软件安全平稳运行。
4 结论
面向软件源文件代码缺陷问题,提出一种优先级评估下的软件源文件可疑度度量方法。所提方法使用优先级评估手段排列软件源文件缺陷可疑度大小,并快速计算出缺陷数据与源文件的关联性,运用支持向量回归方法创建易错性预测模型,完成高质量软件源文件缺陷定位目标。在下一步工作中,会简化权重计算方法,增强方法计算效率。