一种代码缺陷检测方法及系统技术方案

技术编号:19023261 阅读:29 留言:0更新日期:2018-09-26 19:01
本发明专利技术提供了一种代码缺陷检测方法,包括:分别计算由代码的故障函数入口到所述代码缺陷检查点之间的第一可达路径集合以及由程序入口到故障函数调用点之间的第二可达路径集合;对所述第一可达路径集合和所述第二可达路径集合所构成的完整路径集合中每一可达路径进行后向约束求解,得到从程序入口到达代码缺陷检查点且疑似触发故障的一组测试用例;基于所述测试用例,对所述代码缺陷进行检测。本发明专利技术通过计算故障函数入口到代码缺陷检查点的可达路径和程序入口到故障函数调用点的可达路径,并对完整路径进行后向分段迭代求解,将人从繁重的确认工作中解放出来,而且提高了确认的效率和代码检测技术的实用性。

【技术实现步骤摘要】
一种代码缺陷检测方法及系统
本专利技术实施例涉及计算机
,更具体地,涉及一种代码缺陷检测方法及系统。
技术介绍
随着计算机技术的飞速发展,人们对计算机的需求和依赖与日俱增,随之而来的是计算机系统的规模和复杂性急剧增加。软件作为计算机系统的灵魂,其规模也以惊人的速度膨胀。2010年最新新发布的Linux内核(2.6.36版本)源代码量超过1000万行,而微软的Vista操作系统源代码量已超5000万行。大规模软件中的缺陷难以避免,据统计,通过编译和传统软件测试过后,软件代码中平均10~20个缺陷/KLOC。由于软件缺陷引起的失效和故障轻则给用户带来不便,重则造成重大生命财产损失。软件代码缺陷检测技术开始于上世纪90年代中期,本世纪初这种技术得到了迅速的发展,目前已有80个以上的相关工具,其中商用的工具有十余个,主要有Coverity、Klocwork、Fortify、Logiscope、DTS。但是,现有技术中使用的工具都是对于源代码进行静态分析,通过静态分析源程序计算出来的疑似故障点称为检查点(IP),所有的IP都需要进一步确认其真实性。受IP的规模及复杂度影响,人工确认效率及准确度面临极大挑战。一个优秀的软件工程师一天大约可以确认100个IP,以一个100万行的国产软件为例,工具计算出来的IP大约为4000~6000个,大概需要2~3人月的时间来确认,现有技术对于代码缺陷的检测采用人工确认的方式,其效率及难度都非常低下,因此,现在亟须一种代码缺陷检测方法及系统,来提高代码缺陷检测的效率。
技术实现思路
本专利技术实施例提供了一种克服上述问题或者至少部分地解决上述问题的一种代码缺陷检测方法及系统。一方面本专利技术实施例提供了一种代码缺陷检测方法,包括:S1、基于获取的代码缺陷检查点的IP特征以及代码的函数调用关系,分别计算由代码的故障函数入口到所述代码缺陷检查点之间的第一可达路径集合以及由程序入口到故障函数调用点之间的第二可达路径集合;S2、对所述第一可达路径集合和所述第二可达路径集合所构成的完整路径集合中每一可达路径进行后向约束求解,得到从程序入口到达代码缺陷检查点且疑似触发故障的一组测试用例;S3、基于所述测试用例,对所述代码缺陷进行检测。第二方面本专利技术实施例提供了一种代码缺陷检测系统,所述系统包括:可达路径计算模块,用于基于获取的代码缺陷检查点的IP特征以及代码的函数调用关系,分别计算由代码的故障函数入口到所述代码缺陷检查点之间的第一可达路径集合以及由程序入口到故障函数调用点之间的第二可达路径集合;后向约束求解模块,用于对所述第一可达路径集合和所述第二可达路径集合所构成的完整路径集合中每一可达路径进行后向约束求解,得到从程序入口到达代码缺陷检查点且疑似触发故障的一组测试用例;检测模块,用于基于所述测试用例,对所述代码缺陷进行检测。根据本专利技术的第三方面,提供了一种代码缺陷检测设备,包括:处理器、存储器、通信接口和总线;其中,所述处理器、存储器、通信接口通过所述总线完成相互间的通信;所述通信接口用于该测试设备与显示装置的通信设备之间的信息传输;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行上述所述的一种代码缺陷检测方法。第四方面专利技术实施例提供了一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述方法。第五方面专利技术实施例提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述方法。本专利技术实施例提供的一种代码缺陷检测方法及系统,通过计算故障函数入口到代码缺陷检查点的可达路径和程序入口到故障函数调用点的可达路径,并对完整路径进行后向分段迭代求解,得到一组触发疑似故障的测试用例来完成疑似故障的确认,不但将人从繁重的确认工作中解放出来,而且提高了确认的效率和代码检测技术的实用性。附图说明图1是本专利技术实施例提供的一种代码缺陷检测方法流程图;图2是本专利技术实施例提供的一种代码缺陷检测系统结构图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。图1是本专利技术实施例提供的一种代码缺陷检测方法流程图,如图1所示,所述方法包括:S1、基于获取的代码缺陷检查点的IP特征以及代码的函数调用关系,分别计算由代码的故障函数入口到所述代码缺陷检查点之间的第一可达路径集合以及由程序入口到故障函数调用点之间的第二可达路径集合;S2、对所述第一可达路径集合和所述第二可达路径集合所构成的完整路径集合中每一可达路径进行后向约束求解,得到从程序入口到达代码缺陷检查点且疑似触发故障的一组测试用例;S3、基于所述测试用例,对所述代码缺陷进行检测。可以理解的是,本专利技术实施例对于一段代码程序的缺陷检查采用了可达路径分析的方式,通过计算故障函数入口到代码缺陷检查点的可达路径和程序入口到疑似故障点的可达路径,并对可达路径进行求解,得到触发疑似故障的测试用例,从而根据测试用例对程序进行检测,实现自动化检测过程,解放人力。具体的,S1中,本专利技术实施例根据获取的代码缺陷检查点的IP特征可以对代码的故障函数入口到所述代码缺陷检查点之间的第一可达路径集合进行计算,同样的,根据代码的函数调用关系,可以计算由程序入口到故障函数调用点之间的第二可达路径集合,其中,第一、第二只是为了区分可达路径集合的不同类型,而非有顺序和时序关系。需要说明的是,在本专利技术所有实施例中,所述代码缺陷检查点即本专利技术实施例提供的疑似故障点,本专利技术实施例需要求解其故障条件,从而对疑似故障点是否发生故障做出判断。在S1中,计算得到了由代码的故障函数入口到所述代码缺陷检查点之间的第一可达路径集合以及由程序入口到故障函数调用点之间的第二可达路径集合,那么即可以构成由程序入口到代码的故障函数入口再到代码缺陷检查点的完整可达路径,对于完整可达路径中的进行后向约束求解,即可获取每一条完整可达路径的路径约束条件,在本专利技术实施例中,所述路径约束条件即为IP故障触发条件,根据求解得到的IP故障触发条件,即可得到从程序入口到达代码缺陷检查点且疑似触发故障的一组测试用例。可以理解的是,在本专利技术实施例整个对于可达路径的后向约束求解过程中,是按照程序的逆序依次向前进行求解,并将前一段可达路径的约束求解结果作为后一段可达路径的求解输入,从而实现迭代求解的过程。在上述实施例的基础上,步骤S2之前、步骤S1之后所述方法还包括:按照可达路径的路径复杂度,对所述第一可达路径集合和所述第二可达路径集合中的每条可达路径进行排序。本专利技术实施例优选的提供了按照路径复杂度的方式对可达路径集合的可达路径进行排序,从而方便后续路径求解过程。具体的,本专利技术实施例首先将进行路径约束文法提取,然后计算段内的路径约束复杂度,最后计算段间的路径约束复杂度,从而根据路径约束复杂度对所有可达路径进行排本文档来自技高网...

【技术保护点】
1.一种代码缺陷检测方法,其特征在于,包括:S1、基于获取的代码缺陷检查点的IP特征以及代码的函数调用关系,分别计算由代码的故障函数入口到所述代码缺陷检查点之间的第一可达路径集合以及由程序入口到故障函数调用点之间的第二可达路径集合;S2、对所述第一可达路径集合和所述第二可达路径集合所构成的完整路径集合中每一可达路径进行后向约束求解,得到从程序入口到达代码缺陷检查点且疑似触发故障的一组测试用例;S3、基于所述测试用例,对所述代码缺陷进行检测。

【技术特征摘要】
1.一种代码缺陷检测方法,其特征在于,包括:S1、基于获取的代码缺陷检查点的IP特征以及代码的函数调用关系,分别计算由代码的故障函数入口到所述代码缺陷检查点之间的第一可达路径集合以及由程序入口到故障函数调用点之间的第二可达路径集合;S2、对所述第一可达路径集合和所述第二可达路径集合所构成的完整路径集合中每一可达路径进行后向约束求解,得到从程序入口到达代码缺陷检查点且疑似触发故障的一组测试用例;S3、基于所述测试用例,对所述代码缺陷进行检测。2.根据权利要求1所述的方法,其特征在于,步骤S2之前、步骤S1之后所述方法还包括:按照可达路径的路径复杂度,对所述第一可达路径集合和所述第二可达路径集合中的每条可达路径进行排序。3.根据权利要求1所述的方法,其特征在于,步骤S1中计算由代码的故障函数入口到所述代码缺陷检查点之间的第一可达路径集合,具体包括:基于获取的代码缺陷检查点的IP特征,计算所述IP特征对应的故障触发条件;将所述IP特征对应的故障触发条件作为所述代码的函数入口到所述代码缺陷检查点之间的路径约束条件,计算由代码的故障函数入口到所述代码缺陷检查点之间的第一可达路径集合。4.根据权利要求1所述的方法,其特征在于,步骤S1中计算由程序入口到故障函数调用点之间的第二可达路径集合,具体包括:基于代码的函数调用关系,计算由主函数到疑似故障函数的函数调用关系序列;按照函数的调用关系将所述函数调用关系序列分为若干个序列段,并对每个序列段进行路径分析,得到由程序入口到所述故障函数调用点之间的第二可达路径集合,其中,所述路径分析包括将任意两个序列段之间的可达路径进行组合判断。5.根据权利要求4所述的方法,其特征在于,步骤...

【专利技术属性】
技术研发人员:金大海朱红磊宫云战王雅文
申请(专利权)人:北京邮电大学
类型:发明
国别省市:北京,11

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

1