本发明属于计算机技术领域,尤其是软件工程和软件质量保障。本发明提供了基于软件缺陷预测的结果对静态检查工具产生的警告信息进行排序优化的方法,帮助软件开发人员和质量保障人员高效地使用静态检查工具,发现和检测出软件中存在的潜在缺陷。
背景技术:
随着软件系统的日益强大,软件质量越来越受到人们的关注。软件缺陷指软件系统中由于软件设计缺陷、程序编码错误使得软件不能满足需求或者在程序运行中出现意料之外的结果和行为。严重的软件缺陷可能会导致巨大的经济损失甚至威胁人们生命安全。然而,发现和找到软件中的缺陷是一件很困难的事。
目前,静态检查工具正广泛地应用于软件开发中,用于发现软件中存在的潜在缺陷,常用的静态检查工具包括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个类包含缺陷的概率分别为
步骤7:基于k-core分解的方法对新系统的模块依赖图进行分解,得到模块的核心度值。将软件系统中的模块与模块之间的关系构成模块依赖图。类粒度上,构成类依赖图,方法粒度上,形成方法依赖图。类与类之间的关系包括依赖、关联、聚合、组合、实现、泛化等,方法与方法之间的关系主要是方法调用和重写覆盖。对类依赖图和方法依赖图进行k-core分解,求得每个类和方法的核心度值。这q个类的核心度值分别为
步骤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排序,即是本发明优化排序后的静态警告。开发者根据优化排序后的次序进行审查,帮助开发者花费竟可能少的审查工作量来优先发现与缺陷相关的真警告,减少开发者查找缺陷的工作量。
综上所述,本发明提供了一种基于软件缺陷预测结果和程序依赖图分解的模块核心度来优化静态检查工具警告排序的方法,解决了静态检查工具产生的警告过多、假警告比例过大等问题,提高了静态检查工具的实用性,从而能更好地帮助开发人员发现软件中的真实缺陷,提高软件质量。
河南如何优化网站云南昆明网站优化推广外包tp5网站性能优化宿迁上门网站优化活动简介正安县网站优化营销集美网站优化价格金华网站优化费用企业网站优化光算科技.怎么走网站结构的优化主要是什么免费网站优化技巧河池整站网站优化百世深度优化网站虞城网站优化推广公司淘宝网站seo优化分析淘宝网站seo优化分析辽宁网站推广与优化方案雁塔区网站优化化工产品工艺优化网站翔安网站优化选哪家上海网站优化排名方案宾哥网站优化设置哪个网站没有优化池州网站首页优化去哪找网站用户优化原则有哪些大足区网站seo优化排名科学优化营销网站肇庆快速网站优化鹤壁seo网站优化哪个好整站网站优化应该要怎么操作沧州百度快照网站优化多少钱地区网站优化的价格海南专业的网站优化怎么把网站优化上去嵊州高端网站优化潍坊网站seo推广优化公司闵行区公司网站优化定制站外优化网站推荐网站制作网站优化公司哪家好无锡外贸型网站优化方案宁夏网站优化报价网站优化主要优化的内容镇海区网站优化企业嘉兴专业的seo网站优化报价天津百度seo网站优化灵宝网站建设优化推广电影网站优化需要多少钱景德镇网站优化靠谱推广网站积分seo优化贵州测试网站优化价格表深圳如何通过网站优化成功案例上海市定制版网站优化放心的网站推广优化北京网站优化推广费用沁阳网站优化推广怎么样网站搭建布局优化武邑县怎么做网站优化兰州eo 网站优化价格井陉网站优化seo费用榆林网站优化排名推广中心珠海靠谱的服务行业网站优化桐城网站关键词排名优化南阳营销网站快速排名优化技巧如何通过网站优化来提高页面权重深圳有什么网站优化方法大兴网站页面优化简述网站内容优化内容网站优化主要内容包括哪些亳州企业网站排名优化哪家合适网站手机排名优化网站优化每天发多少文章合适重庆江津效果好的网站优化自己怎么优化网站教程亳州网站自然优化饮料网站优化有哪些湖北信息化网站优化大全梅州网站优化关键词排名靠谱的传统行业网站优化团队河北家纺行业网站优化推广技巧南海网站优化专家榆林网站优化排名推广中心广西无锡网站优化推广网站排名优化外包公司哪家好潮州网站优化推广代运营河南家纺行业网站优化推广技巧网站建设和优化房睬扌云速捷网站seo关键词优化方法网站更新规范优化方法关于淘宝网站的SEO优化方案怀化外贸网站优化推广德州提供网站优化哪家便宜郑州网站优化推广技巧邯郸家装行业网站优化推广公司高端网站优化的方案保山网站优化注意事项江苏网站推广平台优化排名吉林测试网站优化价格对比潜山网站关键词优化软件新密推广网站搭建优化网站打开慢优化柘城个性化网站关键词优化费用清远网站优化托管业务宣城网站怎么优化枣阳网站优化公司项城网站推广优化收费低怎么判断英文网站优化网站优化优点有哪些芝罘智能响应式网站优化公司焦作百度网站推广优化网站推广优化钢然扌云速捷神马网站优化公司呼和浩特网站优化公司 鹊起科技安徽网站优化专业团队淇县网站推广优化运用ia优化网站的好处有哪些乐山网站整站优化公司桂溪网站优化公司的网站诊断及优化方案韶关实惠的免费网站优化内蒙古网站搜索优化义乌网站优化电话莱山网站优化价格凉山做优化网站的公司温州优化网站推广怎么做吉林网站搜索引擎优化衡水市网站seo优化排名荆门网站优化报价增城网站优化多少钱越秀网站推广优化公司安庆seo网站优化哪个品牌好成都网站优化系统外贸网站优化制造商网站过度优化会怎么样廊坊网站优化收费网站名称怎么优化宜良网站优化报价汉沽网站优化排名价格常德网站优化费用多少郯城网站优化怎么做云南网站优化哪家专业济源专业网站优化电话英文网站优化手册廊坊seo排名优化网站公明做网站优化网站内链优化是什么河南公司网站关键词优化湖南专业网站优化推广如何给一个网站做好谷歌优化网站建设优化推广西藏为什么要网站结构优化山东优化网站工具古冶网站优化联系方式锦州网站搜索优化都匀网站优化价格杭州网站快照优化外贸优化网站排名辽宁企业网站优化公司浦东网站优化报价淄博网站域名优化菜鸟式网站的优化方法保定网站搜索排名优化费用绥阳网站seo优化公司宁波网站关键词优化报价延吉网站优化公司电话西湖区seo优化网站南宁浙江网站优化建站外贸网站文章优化21条军规便宜餐饮行业网站优化网站优化哪家公司便宜网站优化方案详细教程福建测试网站优化耗材高唐县优化网站赣州网站怎么优化推广昆山盐城网站优化方案沁阳网站优化哪家有实力灵宝网站建设优化推广罗湖健康网站优化哪家好娄底品牌营销型网站优化寿县网站优化公司温州网站优化三尾狐蜘蛛屯优化排名推广网站番禺网站排名推广优化费用桐乡做网站优化长春网站安全优化万词优化网站优化费为什么比网站费用高南水网站优化天津网站优化托管效果如何优化平台网站宁夏网站优化报价牡丹江网站优化哪家专业优化网站软件只信l火20星昆山企业网站优化公司网站优化内链优化不利于网站优化的行为四川网站优化费用公司官方网站优化价格宜昌网站优化方式有哪些保定网站优化托管收费网站自然优化方案石龙网站关键词优化多少钱