CN107665172B - 一种基于复杂加权软件网络的软件缺陷预测方法 - Google Patents
一种基于复杂加权软件网络的软件缺陷预测方法 Download PDFInfo
- Publication number
- CN107665172B CN107665172B CN201710984718.2A CN201710984718A CN107665172B CN 107665172 B CN107665172 B CN 107665172B CN 201710984718 A CN201710984718 A CN 201710984718A CN 107665172 B CN107665172 B CN 107665172B
- Authority
- CN
- China
- Prior art keywords
- software
- node
- defect
- network
- machine learning
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N7/00—Computing arrangements based on specific mathematical models
- G06N7/01—Probabilistic graphical models, e.g. probabilistic networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Artificial Intelligence (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Algebra (AREA)
- Probability & Statistics with Applications (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提出一种基于复杂加权软件网络图的软件缺陷预测方法,能够提高针对大规模复杂软件的缺陷预测精度。包括以下步骤:步骤一、针对所预测的软件,建立复杂加权软件网络图;步骤二、确定步骤一建立的复杂加权软件网络图中每个节点的网络属性值;步骤三、从公开的软件缺陷库中搜集针对该预测软件的所有软件缺陷,建立该软件的历史缺陷库,并在历史缺陷库中标明每个软件模块的缺陷标签;骤四、将步骤二中计算确定的针对每个节点的网络属性值作为机器学习算法的输入,将步骤三中标明的缺陷标签作为机器学习算法的输出,对机器学习算法进行训练和测试,根据机器学习算法的性能评价指标确定性能最优的预测模型。
Description
技术领域
本发明涉及一种基于复杂加权软件网络的软件缺陷预测方法,属于软件质量保障技术领域。
背景技术
目前,常用的软件缺陷预测采用机器学习方法建立软件缺陷预测模型,建立过程如图1所示:
①软件源代码模块的度量元建立:针对所预测软件的软件源代码模块建立度量软件源代码模块的质量指标。
软件源代码模块是一段代码,可自行定义。目前所采用的度量元指标主要针对软件的两个方面:一是针对源代码本身,关注程序模块的代码规模和内在复杂度等属性,例如,采用面向对象开发程序的CK指标,包括WMC、DIT、NOC、CBO、RFC和LCOM等;二是针对软件开发过程,关注软件开发过程中的环境因素,包括代码修改特征、开发人员经验、模块间的依赖性以及项目团队组织构架等。
②软件历史缺陷数据库建立:从已经公开的软件缺陷库中收集针对所预测软件的所有历史缺陷,建立针对该软件的软件历史缺陷库。软件历史缺陷库中明确了针对该软件每个软件模块中缺陷的情况,包括缺陷的有和无以及缺陷的数量,将该缺陷情况定义为软件模块的缺陷标签。
③软件缺陷预测机器学习模型的训练、测试:针对所预测的软件,计算软件中每个软件模块的度量元指标的具体数值,利用软件历史缺陷库获得每个软件模块的缺陷标签,然后选择适合于该软件的机器学习算法,将每个软件模块度量元指标的具体数值作为输入,缺陷标签作为输出,建立(训练、测试和参数调整)针对于该软件项目的软件缺陷预测的机器学习模型。
④软件缺陷预测机器学习模型的应用:训练完成以及测试合格的缺陷预测模型可以对该软件的新的软件模块的缺陷情况进行预测。首先计算新的软件模块的度量元指标的具体数值,将数值输入到预测模型中,模型输出的结果即为该软件模块的缺陷标签。
在整个模型建立的过程中,影响预测模型性能的因素有三个方面:度量元指标选取、缺陷库的质量以及具体的机器学习算法。所选取的度量元指标应当能够反映有缺陷模块和没有缺陷模块的本质特征,也就是度量元指标对有缺陷和没有缺陷模块具有一定的区分能力;软件缺陷库的质量也在很多程度上影响到模型的性能,所建立的软件缺陷库应当具有较高的准确性和较好的完备性;机器学习算法本身也具有不同的性能,针对不同的软件,选取适合于本软件的机器学习算法。
软件结构用网络图的形式来描述时,可以在不同粒度的软件模块上抽取网络,包括包、类、方法等。将上述不同粒度的软件模块抽象为节点、他们之间的依赖关系抽象为边,由这些节点和边所构成的软件结构就是软件网络图。
一般情况下,普通软件网络图的连接边中的权值没有设置,或者所有的权值都设置为1,表示所有节点的连接强度相同。实际上,节点之间的连接强度是有差异的,不同类型或不同情况下的节点之间的连接强度均有差异。加权软件网络图是在普通软件网络图的边中引入权值,表示了各个节点之间的连接强度的大小。加权软件网络图更能符合软件网络图的实际情况。加权软件网络图是具有幂率分布的无标度网络图,且满足小世界特性,所以加权软件网络是一种复杂网络图,本发明中称为复杂加权软件网络图。
研究表明复杂加权软件网络图中有些节点聚集了大量的软件缺陷,而有些节点没有。进一步分析表明,含有大量软件缺陷的节点具有与其他节点明显不同的网络属性值(例如,具有较大的入点强度或者出点强度的节点具有缺陷的可能性较大),也就是通过节点的网络属性值可以区分含有缺陷的节点和没有缺陷的节点,因此在复杂加权软件网络图中可利用软件网络的属性作为度量元指标建立预测模型。
发明内容
本发明提出一种基于复杂加权软件网络图的软件缺陷预测方法,能够提高针对大规模复杂软件的缺陷预测精度。
一种基于复杂加权软件网络的软件缺陷预测方法,包括以下步骤:
步骤一、针对所预测的软件,以软件源代码模块为网络图的节点,软件源代码模块间的依赖关系为边,建立复杂加权软件网络图;
步骤二、确定步骤一建立的复杂加权软件网络图中每个节点的网络属性值;
步骤三、从公开的软件缺陷库中搜集针对该预测软件的所有软件缺陷,建立该软件的历史缺陷库,并在历史缺陷库中标明每个软件模块的缺陷标签;
步骤四、将步骤二中计算确定的针对每个节点的网络属性值作为机器学习算法的输入,将步骤三中标明的缺陷标签作为机器学习算法的输出,对机器学习算法进行训练和测试,根据机器学习算法的性能评价指标确定性能最优的预测模型;
步骤五:将步骤四中获得的性能最优的预测模型应用于新的软件模块进行缺陷预测。
进一步地,所述的复杂加权软件网络图为一个二元组G=(N,E),N表示所有节点的集合,E表示所有边的集合,边带有权值;设Nfi为节点i的方法数之和,Nfij为节点i依赖于节点j的方法数之和,Nfj为节点j的方法数之和,Nfji为节点j被节点i依赖的方法数之和,则节点i到节点j的边的权值wij的计算方法如下:
进一步地,步骤二所述的网络属性值
X={LOCODE,LOCOM,INS,OUTS,ClusCoe,BetCen};其中:
(1)每个节点中的所有代码的总行数,用LOCODE表示;
(2)每个节点中的所有代码注释的总行数,用LOCOM表示;
(3)每个节点的入点强度,用INS表示;其中节点i的入点强度INSi定义为所有指向节点i的边的权值之和;
(4)每个节点的出点强度,用OUTS表示;其中节点i的出点强度OUTSi定义为所有由结点i指向其他节点的边的权值之和;
(5)每个节点的聚集系数,用ClusCoe表示;其中节点i有ki个相邻节点,ki个相邻节点之间总共存在Mi条边,则节点i的聚集系数ClusCoei为:ClusCoei等于Mi条边上的所有权值之和除以ki(ki-1);
(6)每个节点的介数,用BetCen表示;其中节点i的介数BetCeni为通过节点i的最短路径的条数,最短路径为:在通过节点i的所有路径中,所有边的权值之和最小的路径。
本发明的有益效果:
1.加权软件网络反映了各个节点的强度不同的本质现场,因此,采用基于复杂加权软件网络建立软件缺陷预测模型更加符合软件系统的实际情况,能够提高预测模型的性能。
2.所采用的六个指标中,前两个指标准确反映了节点内部的复杂程度,后四个指标准确反映了节点之间的耦合度。耦合度直接影响到节点具有缺陷的可能性和数量。因此,这六个指标准确描述了节点的复杂性和节点之间的耦合性,有益于准确建立预测模型。
附图说明
图1为现有技术中软件缺陷预测流程图;
图2为本发明基于复杂加权软件网络的软件缺陷预测方法流程图;
图3为本发明具体实施例中依赖关系图;
图4为本发明具体实施例中软件网络图权值示意图;
图5为本发明具体实施例中加权软件网络图各节点的属性值示意图。
具体实施方式
下面以针对开源软件项目Firefox的缺陷预测为例,详细给出缺陷预测过程。
本发明的具体流程如图2所示:一种基于复杂加权软件网络的软件缺陷预测方法,包括以下步骤:
步骤一、建立所预测软件的复杂加权软件网络图
针对开源软件Firefox,软件模块的粒度选择为类,建立Firefox的基于类的复杂加权网络图。
由此可得由A、B、C三个类构成的软件网络图如下图4所示,边上的数值为权值。
步骤二、计算网络中每个节点的网络属性值
在步骤一中建立的加权软件网络图的基础上,计算网络图中的各个节点网络属性值。计算的网络属性值为LOCODE、LOCOM、INS、OUTS、ClusCoe、BetCen。
假设Firefox的加权软件网络图中的一部分如图5所示,计算得到的各节点的属性值如下表所示。
LOCODE | LOCOM | INS | OUTS | ClusCoe | BetCen | |
A | 145 | 23 | 0 | 1.28 | 0.213 | 3 |
B | 223 | 14 | 1.33 | 2.33 | 0.183 | 1 |
C | 1789 | 18 | 1.33 | 0.1 | 0.238 | 1 |
D | 23 | 154 | 1.95 | 1.4 | 0.1675 | 4 |
E | 15 | 211 | 0.2 | 0.25 | 0.225 | 1 |
F | 18 | 2 | 1.25 | 0 | 0.208 | 1 |
G | 234 | 7 | 0.77 | 0.25 | 0.051 | 5 |
H | 124 | 346 | 0 | 0.33 | 0.33 | 1 |
I | 187 | 43 | 0 | 1.25 | 0.625 | 1 |
J | 153 | 98 | 0.25 | 0.17 | 0.21 | 1 |
K | 2983 | 155 | 0 | 0.17 | 0.17 | 1 |
步骤三、建立软件历史缺陷库
Bugzilla中公布了针对Firefox的所有公开的软件缺陷,且标明了每个缺陷所在的软件代码行,进一步根据具有缺陷的代码行所在的类,可确定每个类所包含的缺陷的数量。针对Bugzilla中没有公布缺陷的类,将该类的缺陷数量设置为0,由此建立软件缺陷库。
假设建立的软件历史缺陷库的一部分如下表所示:
缺陷数量 | |
A | 0 |
B | 1 |
C | 0 |
D | 6 |
E | 2 |
F | 8 |
G | 22 |
H | 2 |
I | 1 |
J | 0 |
K | 3 |
步骤四、训练和测试缺陷预测模型
选择支持向量机算法、贝叶斯算法2种算法,将步骤二中计算得到针对每个节点的LOCODE、LOCOM、INS、OUTS、ClusCoe、BetCen数值作为机器学习算法的输入,将步骤三中分析得到的针对该节点的缺陷数量作为机器学习算法的输出,分别对这2种机器学习算法进行训练和测试。根据性能评价指标,确定基于贝叶斯算法的机器学习模型的性能最好,因此选择基于贝叶斯算法的缺陷预测模型。
步骤五、将第四步中获得的基于贝叶斯算法的缺陷预测模型应用于该Firefox项目新发布版本的软件模块的缺陷预测。首先计算新的软件模块的LOCODE、LOCOM、INS、OUTS、ClusCoe和BetCen等指标的具体数值,将计算结果作为预测模型的输入,模型运行的输出即为该新的软件模块具有漏洞的数量或者具有漏洞的可能性。
Claims (1)
1.一种基于复杂加权软件网络的软件缺陷预测方法,其特征在于,包括以下步骤:
步骤一、针对所预测的软件,以软件源代码模块为网络图的节点,软件源代码模块间的依赖关系为边,建立复杂加权软件网络图;所述的复杂加权软件网络图为一个二元组G=(N,E),N表示所有节点的集合,E表示所有边的集合,边带有权值;设Nfi为节点i的方法数之和,Nfij为节点i依赖于节点j的方法数之和,Nfj为节点j的方法数之和,Nfji为节点j被节点i依赖的方法数之和,则节点i到节点j的边的权值wij的计算方法如下:
步骤二、确定步骤一建立的复杂加权软件网络图中每个节点的网络属性值;所述的网络属性值X={LOCODE,LOCOM,INS,OUTS,ClusCoe,BetCen};其中:
(1)每个节点中的所有代码的总行数,用LOCODE表示;
(2)每个节点中的所有代码注释的总行数,用LOCOM表示;
(3)每个节点的入点强度,用INS表示;其中节点i的入点强度INSi定义为所有指向节点i的边的权值之和;
(4)每个节点的出点强度,用OUTS表示;其中节点i的出点强度OUTSi定义为所有由结点i指向其他节点的边的权值之和;
(5)每个节点的聚集系数,用ClusCoe表示;其中节点i有ki个相邻节点,ki个相邻节点之间总共存在Mi条边,则节点i的聚集系数ClusCoei为:ClusCoei等于Mi条边上的所有权值之和除以ki(ki-1);
(6)每个节点的介数,用BetCen表示;其中节点i的介数BetCeni为通过节点i的最短路径的条数,最短路径为:在通过节点i的所有路径中,所有边的权值之和最小的路径;
步骤三、从公开的软件缺陷库中搜集针对该预测软件的所有软件缺陷,建立该软件的历史缺陷库,并在历史缺陷库中标明每个软件源代码模块的缺陷标签;
步骤四、将步骤二中计算确定的针对每个节点的网络属性值作为机器学习算法的输入,将步骤三中标明的缺陷标签作为机器学习算法的输出,对机器学习算法进行训练和测试,根据机器学习算法的性能评价指标确定性能最优的预测模型;
步骤五:将步骤四中获得的性能最优的预测模型应用于新的软件模块进行缺陷预测。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710984718.2A CN107665172B (zh) | 2017-10-20 | 2017-10-20 | 一种基于复杂加权软件网络的软件缺陷预测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710984718.2A CN107665172B (zh) | 2017-10-20 | 2017-10-20 | 一种基于复杂加权软件网络的软件缺陷预测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107665172A CN107665172A (zh) | 2018-02-06 |
CN107665172B true CN107665172B (zh) | 2020-08-11 |
Family
ID=61097537
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710984718.2A Active CN107665172B (zh) | 2017-10-20 | 2017-10-20 | 一种基于复杂加权软件网络的软件缺陷预测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107665172B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109101820B (zh) * | 2018-08-16 | 2021-09-07 | 北京理工大学 | 一种基于执行流图的Web应用安全漏洞预测方法 |
CN110858176B (zh) * | 2018-08-24 | 2024-04-02 | 西门子股份公司 | 代码质量评估方法、装置、系统及存储介质 |
CN109857581B (zh) * | 2019-01-29 | 2021-05-14 | 山西大学 | 一种优化选择软件可靠性增长模型的方法 |
CN110110529B (zh) * | 2019-05-20 | 2020-12-11 | 北京理工大学 | 一种基于复杂网络的软件网络关键节点挖掘方法 |
CN110825615A (zh) * | 2019-09-23 | 2020-02-21 | 中国科学院信息工程研究所 | 基于网络嵌入的软件缺陷预测方法及系统 |
CN111767547B (zh) * | 2020-06-24 | 2022-08-19 | 北京理工大学 | 一种基于复杂网络社团的软件漏洞检测方法 |
CN112506784B (zh) * | 2020-12-16 | 2022-11-25 | 汇链通产业供应链数字科技(厦门)有限公司 | 具备自主学习能力的产品性能评价系统及方法 |
CN112905468A (zh) * | 2021-02-20 | 2021-06-04 | 华南理工大学 | 基于集成学习的软件缺陷预测方法、存储介质和计算设备 |
CN112711543B (zh) * | 2021-03-26 | 2021-06-08 | 南京航空航天大学 | 一种基于加权软件网络的工作量感知缺陷预测方法 |
CN114896138B (zh) * | 2022-03-31 | 2023-03-24 | 西南民族大学 | 一种基于复杂网络和图神经网络的软件缺陷预测方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2008039964A1 (en) * | 2006-09-28 | 2008-04-03 | Nec Laboratories America, Inc. | Software testing using machine learning |
CN103838671A (zh) * | 2014-01-26 | 2014-06-04 | 北京理工大学 | 一种基于复杂网络的软件缺陷度量方法 |
CN105808435A (zh) * | 2016-03-08 | 2016-07-27 | 北京理工大学 | 一种基于复杂网络的软件缺陷评估模型的构建方法 |
CN106502909A (zh) * | 2016-11-07 | 2017-03-15 | 南京大学 | 一种智能手机应用开发中的代码缺陷预测方法 |
-
2017
- 2017-10-20 CN CN201710984718.2A patent/CN107665172B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2008039964A1 (en) * | 2006-09-28 | 2008-04-03 | Nec Laboratories America, Inc. | Software testing using machine learning |
CN103838671A (zh) * | 2014-01-26 | 2014-06-04 | 北京理工大学 | 一种基于复杂网络的软件缺陷度量方法 |
CN105808435A (zh) * | 2016-03-08 | 2016-07-27 | 北京理工大学 | 一种基于复杂网络的软件缺陷评估模型的构建方法 |
CN106502909A (zh) * | 2016-11-07 | 2017-03-15 | 南京大学 | 一种智能手机应用开发中的代码缺陷预测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107665172A (zh) | 2018-02-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107665172B (zh) | 一种基于复杂加权软件网络的软件缺陷预测方法 | |
CN103257921B (zh) | 一种基于改进随机森林算法的软件故障预测系统及其方法 | |
CN108345544B (zh) | 一种基于复杂网络的软件缺陷分布影响因素分析方法 | |
Zhang et al. | Automatic partitioning of water distribution networks using multiscale community detection and multiobjective optimization | |
CN110335168B (zh) | 基于gru优化用电信息采集终端故障预测模型的方法及系统 | |
Huang et al. | A multi-agent evolutionary algorithm for software module clustering problems | |
US11269760B2 (en) | Systems and methods for automated testing using artificial intelligence techniques | |
CN110110529B (zh) | 一种基于复杂网络的软件网络关键节点挖掘方法 | |
CN107644297B (zh) | 一种电机系统节能量计算和验证方法 | |
CN108491931B (zh) | 一种基于机器学习提高无损检测精度的方法 | |
CN114722973B (zh) | 一种钢管热处理的缺陷检测方法及系统 | |
Wang et al. | Network-based analysis of software change propagation | |
CN110825615A (zh) | 基于网络嵌入的软件缺陷预测方法及系统 | |
Wang et al. | On the use of time series and search based software engineering for refactoring recommendation | |
CN116932384A (zh) | 一种基于特征融合和特征选择的软件缺陷预测方法 | |
CN108304317B (zh) | 一种基于路径执行频率的单过程程序静态切片方法及系统 | |
CN112907026A (zh) | 一种基于可编辑网状指标体系的综合评估方法 | |
CN104486222B (zh) | 基于蚁群优化算法的小时延缺陷测试关键路径选择方法 | |
Ding et al. | An improved approach to identifying key classes in weighted software network | |
CN104915680A (zh) | 基于改进型rbf神经网络的多标签蜕变关系预测方法 | |
CN111444079A (zh) | 一种软件缺陷修复方法及装置 | |
Shi et al. | Deepgate2: Functionality-aware circuit representation learning | |
CN107871197B (zh) | 扰动源追溯方法 | |
Seref et al. | Software code maintainability: a literature review | |
Sandhu et al. | A density based clustering approach for early detection of fault prone modules |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |