CN111913872A - 一种基于缺陷预测的软件静态检查警告排序优化方法 - Google Patents
一种基于缺陷预测的软件静态检查警告排序优化方法 Download PDFInfo
- Publication number
- CN111913872A CN111913872A CN201910400566.6A CN201910400566A CN111913872A CN 111913872 A CN111913872 A CN 111913872A CN 201910400566 A CN201910400566 A CN 201910400566A CN 111913872 A CN111913872 A CN 111913872A
- Authority
- CN
- China
- Prior art keywords
- defect
- module
- software
- information
- defects
- 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.)
- Pending
Links
- 230000007547 defect Effects 0.000 title claims abstract description 185
- 230000003068 static effect Effects 0.000 title claims abstract description 69
- 238000000034 method Methods 0.000 title claims abstract description 61
- 238000007689 inspection Methods 0.000 title claims abstract description 39
- 238000012163 sequencing technique Methods 0.000 title claims abstract description 31
- 238000005457 optimization Methods 0.000 title claims abstract description 9
- 238000005259 measurement Methods 0.000 claims abstract description 50
- 238000000354 decomposition reaction Methods 0.000 claims abstract description 11
- 238000010801 machine learning Methods 0.000 claims abstract description 10
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 6
- 238000011161 development Methods 0.000 claims abstract description 3
- 230000008569 process Effects 0.000 claims abstract description 3
- 230000008859 change Effects 0.000 claims description 37
- 238000004458 analytical method Methods 0.000 claims description 17
- 238000012216 screening Methods 0.000 claims description 11
- 230000002950 deficient Effects 0.000 claims description 9
- 238000012549 training Methods 0.000 claims description 9
- 238000000605 extraction Methods 0.000 claims description 6
- 230000002776 aggregation Effects 0.000 claims description 2
- 238000004220 aggregation Methods 0.000 claims description 2
- 238000003066 decision tree Methods 0.000 claims description 2
- 238000007477 logistic regression Methods 0.000 claims description 2
- 238000007637 random forest analysis Methods 0.000 claims description 2
- 238000012706 support-vector machine Methods 0.000 claims description 2
- 230000008439 repair process Effects 0.000 claims 3
- 230000006870 function Effects 0.000 claims 1
- 235000019580 granularity Nutrition 0.000 claims 1
- 238000004445 quantitative analysis Methods 0.000 claims 1
- 230000004931 aggregating effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005065 mining Methods 0.000 description 2
- 238000012552 review Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000000275 quality assurance Methods 0.000 description 1
- 238000013179 statistical model Methods 0.000 description 1
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/3668—Software testing
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于缺陷预测的软件静态检查警告排序优化方法。根据已知软件***的源代码和开发过程信息,抽取软件***的模块度量信息并对软件模块是否存在缺陷进行标注;根据软件模块度量和缺陷信息利用机器学习算法构建缺陷预测模型;对待分析的软件***,获取它的模块度量信息、模块依赖信息和静态检查产生的警告信息;对待分析***进行缺陷预测获得新***各模块包含缺陷的概率;通过k‑core分解得到每个软件模块的核心度值;最后依据每一个静态检查警告所在的模块包含缺陷的概率和模块核心度值对警告进行排序,向开发者推荐最有可能与缺陷相关的警告,提升静态检查工具的实用性,帮助开发者尽快发现软件中包含的缺陷。
Description
技术领域
本发明属于计算机技术领域,尤其是软件工程和软件质量保障。本发明提供了基于软件缺陷预测的结果对静态检查工具产生的警告信息进行排序优化的方法,帮助软件开发人员和质量保障人员高效地使用静态检查工具,发现和检测出软件中存在的潜在缺陷。
背景技术
随着软件***的日益强大,软件质量越来越受到人们的关注。软件缺陷指软件***中由于软件设计缺陷、程序编码错误使得软件不能满足需求或者在程序运行中出现意料之外的结果和行为。严重的软件缺陷可能会导致巨大的经济损失甚至威胁人们生命安全。然而,发现和找到软件中的缺陷是一件很困难的事。
目前,静态检查工具正广泛地应用于软件开发中,用于发现软件中存在的潜在缺陷,常用的静态检查工具包括FindBugs、PMD等。静态检查工具通过静态分析,发现程序源代码中存在的潜在错误和缺陷,诸如空指针引用、未初始化变量、缓冲区溢出等,向开发者提示各种警告信息,进而开发者审查警告信息对代码做出必要的修正。然而,静态检查工具往往会产生大量的警告,并且这些警告很有可能是假警告,也就是说这些警告中很多提出的问题是不存在的或者不需要开发者注意的。大量假警告降低了静态检查工具的实用性,这意味着需要采取一些方法对这些警告信息根据一定的规则进行优先级排序,使得真实警告的优先级高于假警告,真实警告优先被开发者审查。通过优化静态检查警告的排序,提高软件开发人员使用静态检查工具寻找缺陷的效率,保证软件产品质量。
已有的一些工作通过挖掘一系列警告特征、代码特征、代码仓库度量、缺陷仓库度量、动态分析度量等信息,综合运用图论、机器学习、统计模型、动态监测等方法对警告进行分类和排序优化。
发明内容
本发明提供了一种基于缺陷预测的软件静态检查警告排序优化方法,该方法综合使用缺陷预测技术和模块核心度信息,使用软件模块的缺陷预测结果,结合模块的程序依赖核心度值,确定每个警告的排序关键值,依据排序关键值由大到小对所有产生的警告进行排序,最终开发者根据排序后的警告次序进行代码审查,能够优先发现有缺陷的代码模块,帮助开发者高效发现软件中的缺陷。
为达成上述目的,本发明提出一种基于缺陷预测的软件静态检查警告排序优化方法。方法包括下列步骤:
1)获取一些已知软件***的源代码、缺陷追踪信息、版本控制与变更信息;
2)对源代码进行静态分析,抽取软件***的模块信息以及模块度量信息;
3)根据软件***的缺陷追踪信息、版本控制与变更信息对软件模块是否有缺陷进行标注;
4)根据软件模块的度量信息与缺陷信息,使用机器学习算法构建缺陷预测模型;
5)对一个新的、待分析的软件***,获取它的源代码、编译后的字节码、模块度量信息和静态检查工具分析后的警告信息;
6)依据已建立的缺陷预测模型对该新***的模块中是否存在缺陷进行预测,获得每个模块预测包含缺陷的概率;
7)基于k-core分解的方法对新***的模块依赖图进行分解,获得模块的核心度值;
8)根据模块的缺陷预测结果和模块核心度值,确定每个静态检查警告的排序关键值;
9)根据排序关键值由大到小对所有警告进行排序,向开发者优先推荐排序关键值较大的警告。
进一步,其中上述步骤1)的具体步骤如下:
步骤1)-1:选择一些已知的软件***和特定的版本号,从版本控制与变更信息中获取这些***特定版本的源代码,从缺陷追踪信息中挖掘***的缺陷报告,从版本控制和变更库中获取这些软件***变更信息;
步骤1)-2:软件不同版本源程序以及开发过程信息采集完毕。
进一步,其中上述步骤2)的具体步骤如下:
步骤2)-1:对步骤1中收集到的不同软件***和不同软件版本的源代码进行分析;
步骤2)-2:使用静态分析工具和度量抽取工具对特定版本的软件***源代码进行分析;
步骤2)-3:获取软件***中各个模块的度量值,这些度量包括规模度量、复杂性度量、Halstead软件科学法度量和面向对象度量。
步骤2)-4:不同软件***及其特定版本的模块和度量信息收集完成。
进一步,其中上述步骤3)的具体步骤如下:
步骤3)-1:对步骤1中获得的软件***缺陷追踪信息进行筛选,筛选出其中已经被修复和确认的缺陷报告,获得这些缺陷的缺陷编号;
步骤3)-2:对步骤1中获得的缺陷***变更信息进行匹配和筛选,筛选出所有与步骤3)-1中的缺陷编号相关的变更信息;
步骤3)-3:对这些与缺陷编号相关的变更信息进行分析,定位发生变更的有缺陷软件代码行信息;
步骤3)-4:基于版本控制与变更信息,对有缺陷的软件代码行进行回溯,确定这些代码是何时引入到软件***中的,确定这些缺陷在软件***中的生命周期;
步骤3)-5:根据软件缺陷的生命周期对软件特定版本的模块进行缺陷标注,标注各个模块是否有缺陷;
步骤3)-6:软件***特定版本的模块缺陷信息标注完成。
进一步,其中上述步骤4)的具体步骤如下:
步骤4)-1:将步骤2生成的不同软件***特定版本的模块度量信息和步骤3中生成的不同软件***特定版本的模块缺陷信息聚合成模块度量缺陷,构成训练集;
步骤4)-2:对训练集中的所有的度量信息进行共线性分析,去除其中与其他度量相冗余的度量,减少度量信息间的多重共线性;
步骤4)-3:对训练集中的度量进行特征选择,只保留一部分与缺陷有关的度量;
步骤4)-4:使用机器学习方法,二元分类器,构建缺陷预测模型;
步骤4)-5:缺陷预测模型构建完成。
进一步,其中上述步骤5)的具体步骤如下:
步骤5)-1:准备一个新的、待预测和待分析的软件***,收集它的源代码和编译后的字节码;
步骤5)-2:使用步骤2中的方法,抽取该新***的度量信息;
步骤5)-3:使用静态检查工具FindBugs和PMD分别对新***的字节码和源代码进行检查,产生静态警告信息;
步骤5)-4:收集完成该新***的模块度量信息和静态检查产生的警告信息。
进一步,其中上述步骤6)的具体步骤如下:
步骤6)-1:将步骤5中产生的新***度量信息作为测试集;
步骤6)-2:使用步骤4中产生的预测模型对测试集进行预测;
步骤6)-3:得到新***中每个模块包含缺陷的概率。
进一步,其中上述步骤7)的具体步骤如下:
步骤7)-1:使用静态分析工具对新***的源代码进行分析,得到模块依赖关系;
步骤7)-2:根据模块依赖关系构造模块依赖图;
步骤7)-3:对类依赖图和方法依赖图分别进行k-core分解,获得每个模块的核心度值;
进一步,其中上述步骤8)的具体步骤如下:
步骤8)-1:对步骤5产生的每一条警告信息,确定警告信息所处的模块;
步骤8)-2:警告所处的类的缺陷预测概率、警告所处的方法的缺陷预测概率、警告所处的类的核心度值、警告所处的方法的核心度值,进行相乘操作,四个值相乘的结果即为每个警告的排序关键值。
步骤8)-3:对所有警告根据排序关键值进行排序,生成优化排序后的静态警告排序结果。
本发明根据软件***的缺陷信息和版本与变更信息,挖掘已知软件***的缺陷信息,并对软件***的特定版本模块进行有无缺陷的标注;使用静态分析工具和度量抽取工具抽取软件***的代码度量信息;依据模块度量信息和缺陷信息,使用机器学习算法构建缺陷预测模型;使用静态分析工具抽取新***度量信息,使用静态检查工具分析新***的静态警告信息;使用已建立的缺陷预测模型对新***模块有无缺陷进行预测;使用基于k-core分析的方法获得***各模块的核心度;根据模块缺陷预测结果和核心度计算各个警告的排序关键值;对所有警告根据排序关键值排序,最终获得优化排序后的静态警告序列;开发者可以根据排序后的结果依次对静态警告进行审查,提高开发人员审查代码的效率,尽早发现软件缺陷,提升软件爱你质量。
附图说明
图1为本发明实施的一种基于缺陷预测的软件静态检查警告排序优化方法的总体架构图。
图2为本发明实施的一种基于缺陷预测的软件静态检查警告排序优化方法总体的流程图。
图3为根据软件***缺陷追踪信息和版本控制与变更信息获取软件模块缺陷信息的方法架构图。
具体实施方式
本发明首先获取一些已知软件***的源代码、缺陷追踪信息、版本控制与变更信息;接着对源代码进行静态分析,抽取软件***的模块信息以及模块度量信息;然后根据已知软件***的缺陷追踪信息、版本控制与变更信息对软件模块是否有缺陷进行标注;再次根据软件模块的度量信息与缺陷信息,使用机器学习算法构建缺陷预测模型;这样对一个新的、待分析的软件***,获取它的源代码、编译后的字节码、模块度量信息和静态检查工具检查后的警告信息;依据已建立的缺陷预测模型对该新***的模块中是否存在缺陷进行预测,获得每个模块预测包含缺陷的概率,并通过k-core分解的方法求得每个模块的核心度值;最后根据每一个静态检查警告所在的模块包含缺陷的概率和模块核心度值对警告进行排序,向开发者推荐最有可能与缺陷相关的警告,帮助开发者尽快发现软件中包含的缺陷。
为了更好地说明本发明的技术内容,特结合所附图式作如下说明。
本发明的总体架构图如图1所示,流程图如图2所示。本发明提出的缺陷预测的静态检查警告排序优化方法,包括下列9个步骤:
步骤1:获取一些已知软件***的源代码、缺陷追踪信息、版本控制与变更信息。从缺陷追踪信息中获得软件***包含的所有缺陷,从版本控制和变更信息中获得为了修复缺陷所发生的代码变更和一些特定版本的源代码,为接下来的步骤提供数据准备。
步骤2:对源代码进行静态分析,抽取软件***的模块信息以及模块度量信息。对步骤1中产生的特定项目的不同版本的源代码,使用静态分析工具和度量抽取工具来获得软件项目中不同模块的信息,以及这些模块的度量信息。模块一般可以分为类粒度和方法粒度,分别表示软件***中的不同类和不同方法。软件度量来衡量不同类和不同方法的不同属性值。在类粒度和方法粒度选择常用的规模度量(代码行数)、复杂性度量(圈复杂度、基本复杂度)和Halstead软件科学法度量(模块中的标识符、操作符数目),除此之外,在类粒度上使用面向对象度量(类的继承深度、内聚性、耦合性)。模块的度量信息为构建缺陷预测模型打下基础。
步骤3:根据软件***的缺陷追踪信息、版本控制与变更信息对软件模块是否有缺陷进行标注。图3展示了根据软件缺陷报告和软件变更信息对软件模块进行缺陷标注的总体步骤。首先从缺陷报告中筛选出其中已经被修复和确认的缺陷报告,获得这些缺陷的编号;然后,缺陷***变更信息进行匹配和筛选,筛选出所有与缺陷编号相关的变更信息;接着,对这些与缺陷编号相关的变更信息进行分析,定位发生变更的有缺陷软件代码行信息;再次,在版本控制工具中,对有缺陷的软件代码行进行回溯,确定这些代码是何时引入到软件***中的,确定这些缺陷在软件***中的生命周期;最后,根据软件缺陷的生命周期对软件特定版本的模块(类和方法)进行缺陷标注,标注各个模块是否有缺陷。
步骤4:根据软件模块的度量信息与缺陷信息,使用机器学习算法构建缺陷预测模型。将步骤2中的模块度量信息和步骤3中的缺陷标注信息聚合成模块度量与缺陷信息,构成构建缺陷预测模型的训练集;然后,对训练集中的所有的度量信息进行共线性分析,去除其中与其他度量相冗余的度量,减少度量信息间的多重共线性;接着,对训练集中的度量进行特征选择,筛选出一部分与缺陷有关的度量;最后,运用机器学习方法,使用分类器(Logistic回归、支持向量机、决策树、随机森林、多层感知机)构建缺陷预测模型。
步骤5:对一个新的、待分析的软件***,获得它的源代码、编译后的字节码、模块度量信息和静态检查工具分析后的警告信息。使用静态分析工具与度量抽取工具来分析源代码,获得模块度量信息,使用静态检查工具PMD和FindBugs分别分析新软件***的源代码和编译后的字节码,获取静态警告信息,本发明的目的即是优化这些静态警告的排序。
步骤6:依据已建立的缺陷预测模型对该新***的模块中是否存在缺陷进行预测,获得每个模块的缺陷概率。对新***的软件度量信息,使用步骤4已建立的缺陷预测模型,可以预测出新软件***各个模块包含缺陷的概率。假设软件***包含的q个类c1,c2,c3,...,cq,和r方法m1,m2,m3,...,mr。对这q个类和r个方法进行缺陷预测后的结果反映了这些模块包含缺陷的概率,这q个类包含缺陷的概率分别为这r个方法包含缺陷的概率分别为
步骤7:基于k-core分解的方法对新***的模块依赖图进行分解,得到模块的核心度值。将软件***中的模块与模块之间的关系构成模块依赖图。类粒度上,构成类依赖图,方法粒度上,形成方法依赖图。类与类之间的关系包括依赖、关联、聚合、组合、实现、泛化等,方法与方法之间的关系主要是方法调用和重写覆盖。对类依赖图和方法依赖图进行k-core分解,求得每个类和方法的核心度值。这q个类的核心度值分别为这r个方法包含缺陷的概率分别为
步骤8:根据模块的缺陷预测结果和模块核心度值,赋予每个静态检查警告以排序关键值。产生的警告w1,w2,w3,...,wn这n个警告,这n个警告的排序关键字分别为key1,key2,key3,...,keyn。对第i个警告wi,与它关联的类是cj,关联的方法是mk,警告wi的排序关键值是与它关联的类和方法的缺陷预测值和模块核心度值的乘积。
步骤9:根据排序关键值由大到小对警告进行排序,向开发者优先推荐潜在的真实警告。将静态检查工具产生的w1,w2,w3,...,wn这n个警告根据其对应的排序关键值key1,key2,key3,...,keyn排序,即是本发明优化排序后的静态警告。开发者根据优化排序后的次序进行审查,帮助开发者花费竟可能少的审查工作量来优先发现与缺陷相关的真警告,减少开发者查找缺陷的工作量。
综上所述,本发明提供了一种基于软件缺陷预测结果和程序依赖图分解的模块核心度来优化静态检查工具警告排序的方法,解决了静态检查工具产生的警告过多、假警告比例过大等问题,提高了静态检查工具的实用性,从而能更好地帮助开发人员发现软件中的真实缺陷,提高软件质量。
Claims (1)
1.一种基于缺陷预测的软件静态检查警告排序优化方法,其特征在于,从已知的软件***中抽取软件模块度量信息,根据已知软件***的缺陷追踪信息和版本控制与变更信息对软件模块是否有缺陷进行标注,利用模块度量信息和缺陷信息构建缺陷预测模型,使用缺陷预测模型来预测新***的模块缺陷,并基于k-core分解的方法计算新***模块的核心度,结合新***的模块缺陷概率和模块核心度对新***的静态检查后产生的静态警告进行排序,最终实现静态检查警告的排序优化,该方法包括下列步骤:
1)获取一些已知软件***的源代码、缺陷追踪信息、版本控制与变更信息;从缺陷追踪信息中获得软件***包含的所有缺陷,从版本控制和变更信息中获得为了修复缺陷所发生的代码变更和一些特定版本的源代码;
定义1:已知软件***指的是源代码、缺陷追踪信息和版本控制与变更信息均可以获得的软件***,已知软件***的开发过程、历史信息是可获得的,用于缺陷预测模型的训练;
定义2:缺陷追踪信息是关于该软件***的所有缺陷报告、缺陷修复情况的信息集合;
定义3:版本控制与变更信息是有关该软件***的所有历史变更、变更提交说明、变更发生的时间、变更发生的代码变化的信息集合;
2)对源代码进行静态分析,抽取软件***的模块信息以及模块度量信息;对步骤1中产生的特定项目的不同版本的源代码,使用静态分析工具和度量抽取工具获得软件项目中不同模块的信息,以及这些模块的度量信息;
定义1:软件模块指软件中为了实现某一特定功能而设计与实现的,具有一定独立性的代码片段,本发明考虑面向对象软件***中的类和方法两个粒度的软件模块;
定义2:模块度量信息指对软件***中的模块属性的定量分析,定量衡量模块的规模、复杂度以及模块与模块之间的关系,本发明考虑软件模块的规模度量、复杂性度量、Halstead软件科学法度量和面向对象度量;
3)根据已知软件***的缺陷追踪信息、版本控制与变更信息对软件模块是否有缺陷进行标注;首先从缺陷追踪信息中筛选出其中已经被修复和确认的缺陷报告,获得这些缺陷的编号;然后,对所有变更信息进行匹配和筛选,筛选出所有与缺陷编号相关的变更信息;接着,对这些与缺陷编号相关的变更信息进行分析,定位发生变更的有缺陷代码行信息;再次,利用版本控制信息,对有缺陷的软件代码进行回溯,确定这些代码是何时引入到软件***中的,确定这些缺陷在软件***中的生命周期;最后,根据软件缺陷的生命周期对软件特定版本的模块进行缺陷标注;
定义1:缺陷编号指向缺陷追踪***提交缺陷报告后,***自动为该缺陷报告生成的唯一编号;
定义2:所有软件提交中,如果某一次代码变更提的提交说明中明确该次变更是用于修复某一个已知软件缺陷的,则该次变更提交是与缺陷相关的变更;
定义3:缺陷的生命周期指缺陷从初次引入到最终被修复之前的一段时间,开始于引入缺陷代码到软件***的那次变更,结束于修复该缺陷的之前的一次变更;
定义4:在某一缺陷周期内发布的软件版本,都受该缺陷的影响,这些版本中与缺陷代码相对应的源代码都是有缺陷的源代码;
定义5:软件模块缺陷标注的结果是该软件每个模块源代码是否存在缺陷;
4)根据软件模块的度量信息与缺陷信息,使用机器学习算法构建缺陷预测模型;将已知软件***的模块度量与缺陷信息,作为构建缺陷预测模型的训练集;然后,对度量进行特征选择;最后,运用机器学习方法,使用分类器(Logistic回归、支持向量机、决策树、随机森林、多层感知机)构建缺陷预测模型;
定义1:特征选择指从训练集的所有度量中,剔除其中冗余的,与缺陷无关的度量,只保留与缺陷相关的度量,使用这些与缺陷相关的度量来构建模型;
定义2:缺陷预测模型描述了模块缺陷有无同各种度量数值大小之间的关系,揭示了软件缺陷同度量信息之间的内在联系;
5)对一个新的、待分析的软件***,获取它的源代码、编译后的字节码、模块度量信息和静态检查工具检查后的警告信息;使用静态分析工具与度量抽取工具来分析源代码,获得模块度量信息,使用静态检查工具获取静态警告信息;
定义1:新***、待分析的软件***指缺陷未知、变更未知,只有源代码和编译后的字节码,并且需要对它的静态警告进行排序优化的软件***;
定义2:静态检查是指使用代码静态检查工具PMD和FindBugs分别检查软件***的源代码和字节码,静态检查的结果是与软件***相关的一系列警告信息,这些警告信息对应于源代码中的一些代码片段;
6)依据已建立的缺陷预测模型对该新***的模块中是否存在缺陷进行预测,获得每个模块预测包含缺陷的概率;对新***的软件度量信息,使用步骤4已建立的缺陷预测模型,可以预测出新软件***各个模块包含缺陷的概率;
定义1:待分析软件***包含的q个类c1,c2,c3,...,cq,和r方法m1,m2,m3,...,mr;
7)基于k-core分解的方法对新***的模块依赖图进行分解,得到模块的核心度值;将软件***中的模块与模块之间的关系构成模块依赖图,对类依赖图和方法依赖图进行k-core分解,求得每个类和方法的核心度值;
定义1:类与类之间的关系包括:依赖、关联、聚合、组合、实现、泛化;
定义2:方法与方法之间的关系包括:方法调用和重写覆盖;
定义3:模块依赖图指将模块看作节点,模块与模块之间的关系看作边的图结构,两个模块间如果有边相连说明这两个模块存在关系,如果两个模块间没有边相连说明这两个模块间不存在关系;
定义4:对图进行k-core分解是构造一个图的最大子图,使得这个子图中所有节点的度都不小于k;
定义5:对于一个无向图G=<V,E>,其中V是该图点的集合,E是该图边的集合;基于k-core对图G进行分解,k-core是图G的子图H=<V′,E′|V′>,其中V′是V的子集,对于degreeH(v)≥k,H是满足上述条件的最大子图,degreeH(v)表示图H中点v的度;
定义6:图中某个点i的核心度值为c,当且仅当点i是c-core子图的点,而不是(c+1)-core子图的点;
8)根据模块的缺陷预测结果和模块核心度值,确定每个静态检查警告的排序关键值;
定义1:静态检查产生w1,w2,w3,...,wn这n个警告,这n个警告的排序关键字分别为key1,key2,key3,...,keyn;
定义2:对于第i个警告wi,与它关联的类是cj,关联的方法是mk,警告wi的排序关键值是与它关联的类和方法的缺陷预测值和模块核心度值的乘积:
9)根据排序关键值由大到小对所有警告进行排序,向开发者优先推荐排序关键值较大的警告;将静态检查工具产生的w1,w2,w3,...,wn这n个警告根据其对应的排序关键值key1,key2,key3,...,keyn排序,即是本发明对静态检查优化排序的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910400566.6A CN111913872A (zh) | 2019-05-09 | 2019-05-09 | 一种基于缺陷预测的软件静态检查警告排序优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910400566.6A CN111913872A (zh) | 2019-05-09 | 2019-05-09 | 一种基于缺陷预测的软件静态检查警告排序优化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111913872A true CN111913872A (zh) | 2020-11-10 |
Family
ID=73242874
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910400566.6A Pending CN111913872A (zh) | 2019-05-09 | 2019-05-09 | 一种基于缺陷预测的软件静态检查警告排序优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111913872A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023004701A1 (zh) * | 2021-07-29 | 2023-02-02 | 西门子股份公司 | 软件安全缺陷预测方法、装置和计算机可读介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102129406A (zh) * | 2011-03-03 | 2011-07-20 | 南京航空航天大学 | 一种基于条件值的软件静态预测方法及工具 |
US20120017280A1 (en) * | 2010-03-14 | 2012-01-19 | Virtual Forge GmbH | APPARATUS AND METHOD FOR DETECTING, PRIORITIZING AND FIXING SECURITY DEFECTS AND COMPLIANCE VIOLATIONS IN SAP® ABAPtm CODE |
CN103713998A (zh) * | 2013-11-07 | 2014-04-09 | 北京安码科技有限公司 | 一种可扩展的在线静态代码缺陷分析方法 |
CN106096635A (zh) * | 2016-06-06 | 2016-11-09 | 重庆大学 | 基于阈值操作的代价敏感神经网络的警告分类方法 |
CN108446213A (zh) * | 2017-02-15 | 2018-08-24 | 西门子公司 | 一种静态代码质量分析方法和装置 |
CN108932192A (zh) * | 2017-05-22 | 2018-12-04 | 南京大学 | 一种基于抽象语法树的Python程序类型缺陷检测方法 |
-
2019
- 2019-05-09 CN CN201910400566.6A patent/CN111913872A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120017280A1 (en) * | 2010-03-14 | 2012-01-19 | Virtual Forge GmbH | APPARATUS AND METHOD FOR DETECTING, PRIORITIZING AND FIXING SECURITY DEFECTS AND COMPLIANCE VIOLATIONS IN SAP® ABAPtm CODE |
CN102129406A (zh) * | 2011-03-03 | 2011-07-20 | 南京航空航天大学 | 一种基于条件值的软件静态预测方法及工具 |
CN103713998A (zh) * | 2013-11-07 | 2014-04-09 | 北京安码科技有限公司 | 一种可扩展的在线静态代码缺陷分析方法 |
CN106096635A (zh) * | 2016-06-06 | 2016-11-09 | 重庆大学 | 基于阈值操作的代价敏感神经网络的警告分类方法 |
CN108446213A (zh) * | 2017-02-15 | 2018-08-24 | 西门子公司 | 一种静态代码质量分析方法和装置 |
CN108932192A (zh) * | 2017-05-22 | 2018-12-04 | 南京大学 | 一种基于抽象语法树的Python程序类型缺陷检测方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023004701A1 (zh) * | 2021-07-29 | 2023-02-02 | 西门子股份公司 | 软件安全缺陷预测方法、装置和计算机可读介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10430323B2 (en) | Touchless testing platform | |
CN110825644B (zh) | 一种跨项目软件缺陷预测方法及其*** | |
CN108345544B (zh) | 一种基于复杂网络的软件缺陷分布影响因素分析方法 | |
CN111460167A (zh) | 基于知识图谱定位排污对象的方法及相关设备 | |
CN109840157A (zh) | 故障诊断的方法、装置、电子设备和存储介质 | |
CN111459799A (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及*** | |
CN113792825A (zh) | 一种用电信息采集设备故障分类模型训练方法及装置 | |
CN116450399B (zh) | 微服务***故障诊断及根因定位方法 | |
CN106708738B (zh) | 一种软件测试缺陷预测方法及*** | |
CN111427775B (zh) | 一种基于Bert模型的方法层次缺陷定位方法 | |
CN116124398B (zh) | 旋转机械故障检测方法及装置、设备、存储介质 | |
CN113779272A (zh) | 基于知识图谱的数据处理方法、装置、设备及存储介质 | |
Chang et al. | Integrating in-process software defect prediction with association mining to discover defect pattern | |
CN112364352A (zh) | 可解释性的软件漏洞检测与推荐方法及*** | |
CN115641162A (zh) | 一种基于建筑工程造价的预测数据分析***和方法 | |
Martínez-Plumed et al. | CASP-DM: context aware standard process for data mining | |
CN115456107A (zh) | 一种时间序列异常检测***及方法 | |
Wang et al. | Software defect fault intelligent location and identification method based on data mining | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
CN114880312A (zh) | 一种可柔性设置的应用***业务数据稽核方法 | |
CN111913872A (zh) | 一种基于缺陷预测的软件静态检查警告排序优化方法 | |
CN116611813B (zh) | 一种基于知识图谱的智能运维管理方法及*** | |
CN117575222A (zh) | 生产管理方法、***、设备及存储介质 | |
CN110808947B (zh) | 一种自动化的脆弱性量化评估方法及*** | |
Singh et al. | An investigation of the effect of discretization on defect prediction using static measures |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20201110 |