基于机器学习的软件缺陷与复杂度关联关系分析方法技术

技术编号:24682980 阅读:54 留言:0更新日期:2020-06-27 07:52
本发明专利技术涉及一种基于机器学习的软件缺陷与复杂度关联关系分析方法,涉及人工智能、大数据技术领域。本发明专利技术提出一种基于机器学习的软件缺陷与复杂度关联关系分析方法,基于大量的软件测试数据,分别通过单因素方差检验、高斯混合模型的方式探究不同类别软件缺陷的数目与复杂度、软件类型等多因素之间的关系。在高斯混合模型的方式中,通过对复杂度度量结果进行清洗、处理,量化计算软件缺陷数与每一个复杂度度量元之间的影响关系,并基于AOV网络、关联分析等方法客观分析软件缺陷与多软件复杂度度量元之间的涌现特征,进而计算出影响软件缺陷的关键复杂度因素。

An analysis method of the relationship between software defect and complexity based on machine learning

【技术实现步骤摘要】
基于机器学习的软件缺陷与复杂度关联关系分析方法
本专利技术涉及人工智能、大数据
,具体涉及一种基于机器学习的软件缺陷与复杂度关联关系分析方法。
技术介绍
近年来,随着人工智能、大数据等新型技术的不断发展,软件演化日渐频繁,造成软件系统的规模越来越大、复杂程度越来越高。但由于软件规模的指数增长、为完成进度忽略软件编码规范及软件复杂程度控制等原因,软件复杂度急剧上升,直接导致软件缺陷逐渐增多,软件质量变得越来越难以控制。因此,研究软件缺陷与软件复杂度之间的关系,分析影响软件缺陷的复杂度因素,对控制软件质量尤为重要。传统软件缺陷的影响因素分析方法大多是从软件缺陷本身出发,将发现的软件缺陷分类,依据缺陷的结果数据采用统计分析、专家系统等方法,分析缺陷的产生原因。随着人工智能技术的出现,逐渐基于现有缺陷数据进行未来缺陷预测,或采用深度学习等方式分析缺陷之间的相互影响关系。以上软件缺陷分析方法从某一剖面研究了软件缺陷的影响因素,研究的影响因素粒度大小不一,缺乏对软件缺陷与软件质量关系的宏观分析。实际上,软件复杂度是最直观、最容易量化的一条软件质量评价指标,因此从软件复杂度宏观量化分析软件缺陷是较为有效的控制软件缺陷的一种方法,软件复杂度的升高会直接提高软件缺陷数增加的风险。但目前缺少软件复杂度与软件缺陷的客观、定量分析方法,无法准确定位影响软件缺陷的复杂度度量元,难以通过降低软件复杂度有效降低软件缺陷的数量。
技术实现思路
(一)要解决的技术问题本专利技术要解决的技术问题是:如何设计一种软件复杂度与软件缺陷的客观、定量分析方法,准确定位影响软件缺陷的复杂度度量元,通过降低软件复杂度有效降低软件缺陷的数量。(二)技术方案为了解决上述技术问题,本专利技术提供了一种基于机器学习的软件缺陷与复杂度关联关系分析方法,包括以下步骤:步骤一:面向领域的软件缺陷分类和软件复杂度度量元定义;步骤二:基于步骤一进行基于单因素方差检验的软件缺陷影响因素分析;步骤三:基于步骤二进行基于机器学习的软件缺陷与软件复杂度度量元之间关系的分析;步骤四:基于步骤三进行基于AOV网络的软件复杂度度量元间涌现特征分析。优选地,步骤1中,面向领域的软件缺陷分类时,依据不同领域软件运行时出现的软件缺陷情况,区分软件缺陷问题。优选地,将软件缺陷问题分为:问题总数、文档问题数、代码问题数、修改程序数、其他修改数、代码关键问题数、代码重要问题数、代码一般问题数、代码建议问题数、编程准则问题数、容错防错问题数、接口通讯问题数、异步并发问题数、时序时限问题数、计算算法问题数、初始启动问题数、内存管理问题数、其他问题数。优选地,步骤1中,软件复杂度度量元定义时,软件复杂度度量根据软件所在的领域、软件开发使用的编程语言不同,选择能反映软件复杂属性的度量元,并对软件的复杂程度进行评价。优选地,步骤1中,若软件为装备软件,定义软件复杂度度量元包括:代码行数、注释行数、功能点个数、圈复杂度。优选地,步骤二具体为:观测变量方差的分解:将观测变量的总离差平方和分解为组间离差平方和以及组内离差平方和两部分,分别表示为SST=SSA+SSE,其中:(1)SST:观测变量的总离差平方和,衡量所有的观测值cij对于总均值的偏离程度,反映了抽样随机误差的大小;(2)SSA:为组间离差平方和,衡量的是组均值对于总均值的偏离程度;(3)SSE:为组内离差平方和,反映所有的观测值cij对组均值的偏离程度,反映系统误差;将软件缺陷数目D作为观测变量,一个软件缺陷影响因素C作为当前的控制变量,观察C对D的影响,将C根据数据分布进行分组,分为a组,每组b个数据,表示为:cij表示:第i组中第j个度量元的值;根据以上定义,SST、SSA、SSE表示为:总方差SST:组内方差SSE:组间方差SSA:公式变量含义如下:cij表示第i组第j个观测变量的观测值i=1,2,3……a,j=1,2,3……b;表示总均值,表示第i组观测值的均值;进一步得到组间均方差和组内均方差:组间均方差组内均方差在方差相等的假定下,要检验N个总体的均方差是否相等,首先给定原假设和备择假设,N=a*b;原假设H0:均值方差相等备择假设H1:均值方差不完全相等构造F分布进行方差检验:该统计量服从分子自由度为a-1,分母自由度为(a*b)-a的F分布,给定显著性水平a,如果根据样本计算出F统计量的值小于临界值F(a-1,a*b-a),则说明原假设H0不成立,总体的均值不完全相等,差异并非仅仅由随机因素引起,而是由其他因素决定,由此认为当前的控制变量对观测变量产生了影响;基于以上过程,进一步确定软件研制阶段、软件类型、软件代码复杂度这些因素对软件缺陷的影响,且确定其中软件代码复杂度对缺陷的影响比较大,以便下一步分析软件缺陷与软件复杂度度量元之间的关系。优选地,步骤三具体包括:(一)软件复杂度度量元数据处理依据中心极限定理,采用高斯混合模型GMM对软件复杂度的度量元进行归一化处理,对于归一化之后的数据分别计算方差,认为方差大的数据具有明显的特征,剔除方差小、特征不明显的数据;其中,GMM是指具有如下形式的概率分布模型:其中x表示复杂度度量元,K表示GMM模型中高斯分布函数的个数,k=1,2,…,K;πk是第k个高斯分布函数的系数,πk≥0,N(x|uk,∑k)表示第k个高斯分布函数的高斯分布密度,表示如下:其中uk为第k个高斯分布函数的均值,∑k为方差;对复杂度度量元的度量值进行高斯混合建模时,选择使当前度量元的样本数据相对熵最小时超参数K作为最终高斯混合模型的K值,选择算法如下:针对各个K值,首先使用无监督EM算法进行复杂度度量元分布高斯混合模型的建模,然后计算样本数据与所建模型的相对熵,相对熵最小的高斯混合模型作为所求的高斯混合模型;针对同一个领域内多个软件项目代码复杂度度量,以项目为样本单位,构造软件复杂度样本集如下:其中,每一个横排表示一个项目度量结果,即一个样本;n表示样本集大小,即度量的项目代码个数;纵列为一个度量元的所有样本数据,即要做高斯混合模型建模的数据,每一个度量元有n个样本数据做高斯混合模型建模;m表示一个项目即一个样本中的度量元个数;根据以上定义,Xij则表示:第i个项目中第j个度量元的值;下面以第j个复杂度度量元为例介绍高斯混合模型的构建:(1)首先构造样本数据的第j个复杂度度量元数据集Sj;Sj={X1j,X2j,...,Xij,…,Xnj}(2)初始化高斯混合模型的分量个数为Kj,建立高斯混合模型GMMKj(πj,uj,∑j),则有:(3)计算GMMKj(πj,uj,∑j)与真实样本的相对熵DKj;(4)本文档来自技高网...

【技术保护点】
1.一种基于机器学习的软件缺陷与复杂度关联关系分析方法,其特征在于,包括以下步骤:/n步骤一:面向领域的软件缺陷分类和软件复杂度度量元定义;/n步骤二:基于步骤一进行基于单因素方差检验的软件缺陷影响因素分析;/n步骤三:基于步骤二进行基于机器学习的软件缺陷与软件复杂度度量元之间关系的分析;/n步骤四:基于步骤三进行基于AOV网络的软件复杂度度量元间涌现特征分析。/n

【技术特征摘要】
1.一种基于机器学习的软件缺陷与复杂度关联关系分析方法,其特征在于,包括以下步骤:
步骤一:面向领域的软件缺陷分类和软件复杂度度量元定义;
步骤二:基于步骤一进行基于单因素方差检验的软件缺陷影响因素分析;
步骤三:基于步骤二进行基于机器学习的软件缺陷与软件复杂度度量元之间关系的分析;
步骤四:基于步骤三进行基于AOV网络的软件复杂度度量元间涌现特征分析。


2.如权利要求1所述的方法,其特征在于,步骤1中,面向领域的软件缺陷分类时,依据不同领域软件运行时出现的软件缺陷情况,区分软件缺陷问题。


3.如权利要求2所述的方法,其特征在于,将软件缺陷问题分为:问题总数、文档问题数、代码问题数、修改程序数、其他修改数、代码关键问题数、代码重要问题数、代码一般问题数、代码建议问题数、编程准则问题数、容错防错问题数、接口通讯问题数、异步并发问题数、时序时限问题数、计算算法问题数、初始启动问题数、内存管理问题数、其他问题数。


4.如权利要求3所述的方法,其特征在于,步骤1中,软件复杂度度量元定义时,软件复杂度度量根据软件所在的领域、软件开发使用的编程语言不同,选择能反映软件复杂属性的度量元,并对软件的复杂程度进行评价。


5.如权利要求1所述的方法,其特征在于,步骤1中,若软件为装备软件,定义软件复杂度度量元包括:代码行数、注释行数、功能点个数、圈复杂度。


6.如权利要求4所述的方法,其特征在于,步骤二具体为:
观测变量方差的分解:将观测变量的总离差平方和分解为组间离差平方和以及组内离差平方和两部分,分别表示为SST=SSA+SSE,其中:
(1)SST:观测变量的总离差平方和,衡量所有的观测值cij对于总均值的偏离程度,反映了抽样随机误差的大小;
(2)SSA:为组间离差平方和,衡量的是组均值对于总均值的偏离程度;
(3)SSE:为组内离差平方和,反映所有的观测值cij对组均值的偏离程度,反映系统误差;
将软件缺陷数目D作为观测变量,一个软件缺陷影响因素C作为当前的控制变量,观察C对D的影响,将C根据数据分布进行分组,分为a组,每组b个数据,表示为:



cij表示:第i组中第j个度量元的值;
根据以上定义,SST、SSA、SSE表示为:
总方差SST:
组内方差SSE:
组间方差SSA:
公式变量含义如下:
cij表示第i组第j个观测变量的观测值i=1,2,3......a,j=1,2,3......b;表示总均值,表示第i组观测值的均值;
进一步得到组间均方差和组内均方差:
组间均方差
组内均方差
在方差相等的假定下,要检验N个总体的均方差是否相等,首先给定原假设和备择假设,N=a*b;
原假设H0:均值方差相等
备择假设H1:均值方差不完全相等
构造F分布进行方差检验:



该统计量服从分子自由度为a-1,分母自由度为(a*b)-a的F分布,给定显著性水平a,如果根据样本计算出F统计量的值小于临界值F(a-1,a*b-a),则说明原假设H0不成立,总体的均值不完全相等,差异并非仅仅由随机因素引起,而是由其他因素决定,由此认为当前的控制变量对观测变量产生了影响;
基于以上过程,进一步确定软件研制阶段、软件类型、软件代码复杂度这些因素对软件缺陷的影响,且确定其中软件代码复杂度对缺陷的影响比较大,以便下一步分析软件缺陷与软件复杂度度量元之间的关系。


7.如权利要求6所述的方法,其特征在于,步骤三具体包括:
(一)软件复杂度度量元数据处理
依据中心极限定理,采用高斯混合模型GMM对软件复杂度的度量元进行归一化处理,对于归一化之后的数据分别计算方差,认为方差大的数据具有明显的特征,剔除方差小、特征不明显的数据;
其中,GMM是指具有如下形式的概率分布模型:



其中x表示复杂度度量元,K表示GMM模型中高斯分布函数的个数,k=1,2,…,K;πk是第k个高斯分布函数的系数,πk≥0,N(x|uk,∑k)表示第k个高斯分布函数的高斯分布密度,表示如下:



其中uk为第k个高斯分布函数的均值,∑k为方差;
对复杂度度量元的度量值进行高斯混合建模时,选择使当前度量元的样本数据相对熵最小时超参数K作为最终高斯混合模型的K值,选择算法如下:针对各个K值,首先使用无监督EM算法进行复杂度度量元分布高斯混合模型的建模,然后计算样本数据与所建模型的相对熵,相对熵最小的高斯混合模型作为所求的高斯混合模型;
针对同一个领域内多个软件项目代码复杂度度量,以项目为样本单位,构造软件复杂度样本集如下:



其中,每一个横排表示一个项目度量结果,即一个样本;n表示样本集大小,即度量的项目代码个数;纵列为一个度量元的所有样本数据,即要做高斯混合模型建模的数据,每一个度量元有n个样本数据做高斯混合模型建模;m表示一个项目即一个样本中的度量元个数;
根据以上定义,Xij则表示:第i个项目中第j个度量元的值;
下面以第j个复杂度度量元为例介绍高斯混合模型的构建:
(1)首先构造样本数据的第j个复杂度度量元数据集Sj;
Sj={X1j,X2j,...,Xij,…,Xnj}
(2)初始化高斯混合模型的分量个数为Kj,建立高斯混合模型GMMKj(πj,uj,∑j),则有:



(3)计算GMMKj(πj,uj,∑j)与真实样本的相对熵DKj;
(4)从Kj=1开始不断增大Kj值,并重复步骤(2)~(3),即可得到不同Kj值下的相对熵DKj,根据DKj跟随Kj的变化趋势,求出最佳的Kj值,设为Kj。则复杂度度量元j的高斯混合模型GMMj(πj,uj,∑j)=GMMKj(πj,...

【专利技术属性】
技术研发人员:吴超柯文俊张在进高晨杨雨婷王坤龙
申请(专利权)人:北京计算机技术及应用研究所
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1