System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于错误注入的软件缺陷检测方法、装置及存储介质制造方法及图纸_技高网

一种基于错误注入的软件缺陷检测方法、装置及存储介质制造方法及图纸

技术编号:40117083 阅读:9 留言:0更新日期:2024-01-23 20:04
本发明专利技术公开了一种基于错误注入的软件缺陷检测方法、装置及存储介质,属于软件缺陷检测领域,包括:S1、获取待测程序中的错误函数列表;S2、遍历每个错误函数的错误处理部分,计算有错误处理部分的调用点处的指令序列的哈希值序列;S3、针对同一个错误函数,计算每一个调用点处的指令序列的哈希值序列与其它调用点处的指令序列的哈希值序列的相似度,并对得到的相似度求均值后作为对应调用点处的相似度;若对应调用点处的相似度低于预设的第一阈值,则所述调用点为待测的可疑调用点;S4、在待测的可疑调用点处插桩,并对待测程序进行动态测试,得到缺陷点的位置。本发明专利技术通过静态分析与动态分析相结合的方式,可快速准确的检测出缺陷位置。

【技术实现步骤摘要】

本专利技术属于软件缺陷检测领域,更具体地,涉及一种基于错误注入的软件缺陷检测方法、装置及存储介质


技术介绍

1、软件在运行过程中,可能会遇到各种错误,一个健壮的程序需要能够正确处理这些错误。这些错误一般分为两类,一类是输入相关的错误,另一类是偶发的错误。常见的软件测试技术,例如模糊测试技术理论上可以检出第一类错误的错误处理部分中的缺陷,但对于第二类偶发的错误,由于错误发生的可能性较低,在测试过程中触发的概率较低,所以很难发现这类错误的错误处理部分中的缺陷。因此,研究人员提出了软件故障注入的(software fault injection,sfi)技术,在可能发生错误的位置处注入错误,来控制错误稳定发生,从而测试相应的错误处理部分,增强软件的健壮性。

2、然而,常规的sfi技术需要人工标注注入错误的位置,这不仅需要对软件充分了解,还需要付出大量的劳动时间,不适合大规模的对不同的软件进行测试。并且,针对一个错误函数可能有多个对应的调用点,并不是每个调用点都存在缺陷,对每个调用点都进行缺陷检测,影响软件测试的效率。另外,在动态测试过程中,由于错误函数对应的调用点存在多次调用,现有技术中,在每一次的测试中都需要计算函数调用栈的哈希,而在控制错误是否发生时,并不需要知道具体的哈希值,这导致测试过程比较耗时。


技术实现思路

1、针对现有技术的缺陷和改进需求,本专利技术提供了一种基于错误注入的软件缺陷检测方法、装置及存储介质,其目的在于提升测试效率。

2、为实现上述目的,按照本专利技术的第一方面,提供了一种基于错误注入的软件缺陷检测方法,包括:

3、s1、获取待测程序中的错误函数列表;

4、s2、遍历所述错误函数列表中每个错误函数的错误处理部分,计算有错误处理部分的调用点处的指令序列的哈希值序列;其中,所述错误函数的错误处理部分由对应的指令序列构成;

5、s3、针对同一个错误函数,计算每一个调用点处的指令序列的哈希值序列与其它调用点处的指令序列的哈希值序列的相似度,并对得到的相似度求均值后作为对应调用点处的相似度;若对应调用点处的相似度低于预设的第一阈值,则所述调用点为待测的可疑调用点;所述错误函数列表中每个错误函数对应的待测可疑调用点构成待测的调用点列表;

6、s4、在所述待测的调用点列表的调用点处插桩,并采用错误注入方法对待测程序进行动态测试,得到缺陷点的位置。

7、进一步地,s4中,在所述待测的调用点列表的调用点处插桩时,还包括:对每个调用点添加控制块,所述控制块用于控制在注入点处是否注入错误,其中,插桩后的调用点为所述注入点;所述控制块控制在注入点处是否注入错误,包括:

8、设置回调函数,所述回调函数用于在每次动态测试中,查询一个注入点是否应该注入错误;

9、若所述注入点需要注入错误,则待测程序将所述注入点对应的错误函数的返回值设置为-1或者空指针,使所述注入点发生错误;

10、若所述注入点不需要注入错误,则待测程序直接调用所述注入点对应的错误函数。

11、进一步地,所述回调函数,包括:

12、静态计数器,设置在每个调用点处,用于统计每次动态测试中,每个注入点对应的错误函数被调用的次数,以产生错误函数被触发的时序序列,记所述时序序列对应的注入点编号依次为1-n;

13、第一共享内存区域,用于存储每次测试中需要所述控制块注入错误的注入点,若当前调用点处的静态计数器的值与所述错误函数被触发的时序序列中的某个注入点编号相等,表明需要在该注入点处注入错误,否则,不需要在该注入点注入错误;

14、第二共享内存区域,用于存储测试路径中所有的错误函数被触发的时序序列。

15、进一步地,s4中,采用错误注入方法对待测程序进行动态测试,得到缺陷点的位置,包括:

16、s41、采用模糊测试工具生成当前的测试用例,并将测试用例输入至待测程序中,运行待测程序;

17、s42、获取当前路径中的注入点,所述当前路径中的注入点为从所述第二共享内存区域中获取的当前的错误函数被触发的时序序列对应的注入点;将所述时序序列对应的注入点编号依次填入所述第一共享内存区域中,若填入的注入点编号与当前调用点处的静态计数器的值相等,则所述控制块在所述注入点处注入错误;

18、s43、若在测试路径上收集到新的注入点,将所述新的注入点存储至所述第二共享内存区域,并更新当前的错误函数被触发的时序序列;

19、s44、重复s42-s43,直至达到预设的第一测试时间或者用户终止;

20、s45、重复s41-s44,直至达到预设的第二测试时间或者用户终止,获得测试过程中缺陷点的位置。

21、进一步地,当达到预设的测试时间或者预设测试轮次后,s41中,采用模糊测试工具生成当前的测试用例时,模糊测试的种子的选择概率pi为:

22、

23、其中,ni为第i个测试用例中,种子i对应路径上的注入点个数,nsum为当前测试中所有测试用例收集到的注入点个数。

24、进一步地,s45中,获得测试过程中缺陷点的位置,包括:

25、每当注入点注入错误后,再次运行待测程序,得到输出的崩溃日志;

26、解析所述崩溃日志中注入点位置的程序调用栈,以及崩溃产生位置的程序调用栈;

27、使用编辑距离算法比较所述注入点位置的程序调用栈和所述崩溃产生位置的程序调用栈的相似度,若所述相似度不超过预设的第三阈值,则认为所述注入点位置为真实的缺陷位置。

28、进一步地,s2中,计算有错误处理部分的调用点处的指令序列的哈希值序列,包括:

29、针对所述指令序列中的函数调用型指令,用指令的类型和被调用的函数名计算对应的哈希值;

30、针对所述指令序列中的控制流指令,用指令的类型、控制流跳转的来源位置和跳转的目的位置,计算对应的哈希值;

31、针对所述指令序列中的其它类型指令,用指令的类型计算对应的哈希值。

32、进一步地,s1中,获取待测程序中的错误函数列表,包括:

33、s11、获取待测程序中的候选错误函数列表func1,func2,...,funcn;

34、s12、遍历待测程序,并统计出所述候选错误函数列表中的每个候选错误函数在对应调用点处被调用的次数c1,c2,...,cn以及未被调用的次数uc1,uc2,…,ucn;

35、s13、计算每个所述候选错误函数被调用的比值pi=ci÷(ci+uci),其中,i=1,...,n,若所述被调用的比值pi超过预设的第二阈值,则所述候选错误函数为所述错误函数列表中的错误函数。

36、进一步地,s11中,包括:

37、编译待测程序,并遍历编译后的待测程序,统计编译后的待测程序中具有如下特征的函数:

38、函数的返回值为指针型或整型;本文档来自技高网...

【技术保护点】

1.一种基于错误注入的软件缺陷检测方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,S4中,在所述待测的调用点列表的调用点处插桩时,还包括:对每个调用点添加控制块,所述控制块用于控制在注入点处是否注入错误,其中,插桩后的调用点为所述注入点;所述控制块控制在注入点处是否注入错误,包括:

3.根据权利要求2所述的方法,其特征在于,所述回调函数,包括:

4.根据权利要求3所述的方法,其特征在于,S4中,采用错误注入方法对待测程序进行动态测试,得到缺陷点的位置,包括:

5.根据权利要求4所述方法,其特征在于,当达到预设的测试时间或者预设测试轮次后,S41中,采用模糊测试工具生成当前的测试用例时,模糊测试的种子的选择概率Pi为:

6.根据权利要求4或5所述的方法,其特征在于,S45中,获得测试过程中缺陷点的位置,包括:

7.根据权利要求1所述的方法,其特征在于,S2中,计算有错误处理部分的调用点处的指令序列的哈希值序列,包括:

8.根据权利要求1所述的方法,其特征在于,S1中,获取待测程序中的错误函数列表,包括:

9.根据权利要求8所述的方法,其特征在于,S11中,包括:

10.一种基于错误注入的软件缺陷检测装置,其特征在于,包括计算机可读存储介质和处理器;

...

【技术特征摘要】

1.一种基于错误注入的软件缺陷检测方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,s4中,在所述待测的调用点列表的调用点处插桩时,还包括:对每个调用点添加控制块,所述控制块用于控制在注入点处是否注入错误,其中,插桩后的调用点为所述注入点;所述控制块控制在注入点处是否注入错误,包括:

3.根据权利要求2所述的方法,其特征在于,所述回调函数,包括:

4.根据权利要求3所述的方法,其特征在于,s4中,采用错误注入方法对待测程序进行动态测试,得到缺陷点的位置,包括:

5.根据权利要求4所述方法,其特征在于,当达到预设的测试时间或者...

【专利技术属性】
技术研发人员:谢子凡陈康文明
申请(专利权)人:华中科技大学
类型:发明
国别省市:

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

1