故障自动注入与故障检测的方法及其系统的制作方法
【专利摘要】本发明涉及一种故障自动注入与故障检测的方法及其系统,该方法包括:S1,对被测文件进行故障自动化注入,进行分析并生成多个故障文件;S2,对所述多个故障文件分别进行处理,生成多个可执行文件;S3,根据所述被测文件选择特定的用例库,将所述用例库中的用例逐一在所述每个可执行文件上运行,进行故障检测,并计算故障检测率。本发明使用源代码故障注入的方法,可以加速错误的发生,进而判断出软件中是否存在故障,并且检错能力强,尤其对于一些小概率错误具有较好的测试效果。
【专利说明】故障自动注入与故障检测的方法及其系统
【技术领域】
[0001]本发明涉及软件测试技术,尤其涉及一种在软件测试中的故障自动注入与故障检测方法及其系统。
【背景技术】
[0002]故障注入(Fault Injection)技术作为一种特殊测试技术,通常是指按照一定的故障模型产生故障,并可控地施加到待测目标系统中,以加速该系统的错误和失效的发生。故障检测,是观测并检验系统对所注入错误的响应信息,判断是否检测出所注入的故障。两者相结合可以分析目标系统的错误处理、错误容忍能力以及系统的鲁棒性,并对系统进行验证和评价。
[0003]虽然故障注入方法有很高的检错能力,但如何自动化注入大规模的故障,及如何有效地执行大量的故障文件、比对结果,是妨碍故障注入方法广泛应用的主要原因。目前实际应用中,大都是人工进行故障注入或半自动注入,耗费了大量的人力成本,测试效率也很低。并且只能进行小规模的源代码故障注入,无法对大型程序或整个项目进行全面的源代码故障注入和检测,无法充分发挥该方法的高检错能力。
【发明内容】
[0004]本发明提供一种故障自动注入与故障检测方法及其系统,通过使用源代码故障注入的方法,可以加速错误的发生,进而判断出软件中是否存在故障,并且检错能力强,尤其对于一些小概率错误具有较好的测试效果。
[0005]根据上述目的,本发明提供了一种故障自动注入与故障检测的方法,其包括:SI,对被测文件进行故障自动化注入,进行分析并生成多个故障文件;S2,对所述多个故障文件分别进行处理,生成多个可执行文件;S3,根据所述被测文件选择特定的测试用例库,将所述测试用例库中的用例逐一在所述每个可执行文件上运行,进行故障检测,并计算故障检测率。
[0006]其中,所述步骤SI包括:S11,输入被测文件,对所述被测文件进行语法分析、词法分析和语义分析,生成抽象语法树;S12,基于所述抽象语法树,对变异算子进行建模,生成程序变异模型;S13,遍历所述抽象语法树,提取所述抽象语法树的节点信息;S14,根据所述抽象语法树的节点信息和所述程序变异模型,生成相应的故障注入点,并在所述故障注入点进行故障自动注入;S15,进行文件IO操作,生成多个故障文件。
[0007]其中,所述步骤S2包括:对所述多个故障文件分别进行预处理、编译、汇编和链接,生成对应的多个可执行文件。
[0008]其中,所述测试用例库包括与所述被测文件的程序相对应的用例。
[0009]其中,所述测试用例库还包括所述被测文件运行所述每个用例后的执行结果。
[0010]其中,所述测试用例库中的所述用例满足覆盖准则,所述覆盖准则可以是对原被测试文件的100%分支覆盖。[0011]根据本发明的另一个方面,提供了一种故障自动注入与故障检测系统,所述系统包括:故障自动注入模块,用于对被测文件进行自动化注入,进行分析并生成多个故障文件;执行文件生成模块,用于对所述多个故障文件进行处理,生成多个可执行文件;故障检测模块,用于根据所述被测文件选择特定的测试用例库,将所述测试用例库中的用例逐一在所述每个可执行文件上运行,进行故障检测,并计算故障检测率。
[0012]其中,所述故障自动注入模块包括:抽象树生成单元,用于对所述被测文件进行语法分析、词法分析和语义分析,生成抽象语法树;程序变异模型生成单元,用于基于所述抽象语法树,对变异算子进行建模,生成程序变异模型;抽象语法树遍历单元,用于遍历所述抽象语法树,提取所述抽象语法树的节点信息;故障自动注入单元,用于根据所述抽象语法树的节点信息和所述程序变异模型,生成相应的故障注入点,并在所述故障注入点进行故障自动注入;故障文件生成单元,用于进行文件IO操作,生成多个故障文件。
[0013]本发明所述的故障自动注入与故障检测的方法及其系统,使用源代码故障注入的方法,可以加速错误的发生,进而判断出软件中是否存在故障,并且检错能力较高,尤其对于一些小概率错误具有较好的测试效果,同时,使用本发明进行测试时,对系统鲁棒性和可靠性测试具有较好的测试效果。
【专利附图】
【附图说明】
[0014]通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
[0015]图1示出了本发明的故障自动注入与故障检测的方法的流程图;
[0016]图2示出了本发明的故障自动注入与故障检测的方法的步骤SI的具体流程图;
[0017]图3示出了本发明的故障自动注入与故障检测系统的结构框图;
[0018]图4是示出了本发明的故障自动注入与故障检测系统的故障自动注入模块的结构框图。
【具体实施方式】
[0019]下面将结合附图对本发明的实施例进行详细描述。
[0020]图1示出了本发明的故障自动注入与故障检测的方法的流程图。
[0021]参照图1,本发明的实施例的故障自动注入与故障检测的方法包括:
[0022]步骤SI,对被测文件进行自动化注入,经过分析并生成多个故障文件。
[0023]故障注入是使用故障算子,对被测原代码进行微小的语法改变,来模拟程序员在真实环境中可能产生的各类错误。
[0024]图2示出了本发明的故障自动注入与故障检测的方法的步骤SI的具体流程图。
[0025]参照图2,其具体步骤包括:
[0026]S11,输入被测文件,对被测文件进行语法分析、词法分析和语义分析,生成抽象语法树(Abstract Syntax Tree)。
[0027]抽象语法树是程序编译阶段的一种中间表示形式。作为一种良好的数据结构,AST可以直观地表示出源程序的语法结构,且包含源程序语法分析所需的全部静态信息,是故障注入所需信息的主要载体。其具体过程如下:[0028]在读取被测文件后,对被测文件进行语法分析,语法分析是对读入的程序的字符流作为输入,通过一系列的规则,将字符流映射成单词Token,然后输出单词串和符号表。
[0029]然后将单词串组合成各类语法短语,如“语句”,“表达式”等等,语法分析程序判断源程序在结构上是否正确,具体使用自顶向下分析分析方法,然后输出无类型信息的抽象语法树。
[0030]然后使用上述生成的抽象语法树和符号表的信息,检测源程序是否和语言定义的语义一致,同时收集类型信息并保存起来,从而形成最终的抽象语法树。
[0031]S12,基于所述抽象语法树,对变异算子进行建模,生成程序变异模型;
[0032]变异算子,也称故障算子,是人们经过长期的实践总结出的模拟实际故障的一种源代码语法替换规则。例如对C语言,有关系算子、逻辑算子、算术算子、赋值算子、位运算
曾早坐坐丁寸寸ο
[0033]本实施例对变异算子进行建模,不仅对传统的故障类型进行建模,还针对C语言中常使用的循环结构也进行了相应的建模。此外,为满足用户注入自定义的故障类型,还提供了相应的扩充接口。
[0034]S13,遍历抽象语法树,提取所述抽象语法树的节点信息;
[0035]本实施例使用访问者(Visitor)模式来对抽象语法树进行遍历。
[0036]访问者(Visitor)模式是设计模式的一种,它可以在不改变各元素类的前提下,定义作用于这些元素的新操作。Vi sitor模式把抽象语法树和作用于该结构上的操作之间的耦合解开,使得操作集合可以相对自由地定义。抽象语法树的每一个节点都可以接受一个访问者的调用,此节点向访问者对象传入节点对象,而访问者对象则反过来执行节点对象的操作。
[0037]在本实施例中,面向抽象语法树的访问者(Visitor)的具体设计:首先访问者实现一个具体操作,访问者对象针对AST中每类节点都包含一个Visit方法,AST对象自身包含一个Accept方法,访问者调用这个Accept方法,Accept方法再调用访问者的Visit方法。
[0038]S14,根据上述抽象语法树的节点信息和程序变异模型,生成相应的故障注入点,并在故障注入点进行故障自动注入。
[0039]提取语法树节点信息后,再根据标准算子提供的程序变异模型,生成对应的故障注入点(Injection Point)。该故障注入点包含了程序结构信息,故障信息等。故障注入点为变异算子指定了具体的注入位置,故障注入点确定下来后,在故障注入点使用变异算子,进行具体的语法内容替换,即开始故障自动注入。
[0040]S16,进行文件10操作,生成多个故障文件。
[0041]故障注入完成后,将注入故障的文件转换为文本序列流,从而生成多个故障文件。
[0042]下面是本发明的一个故障注入的实施例。
[0043]本实施例使用的变异算子是REOR关系类算子,由==替换为 >=,本实施例的源程序
是:
[0044]
【权利要求】
1.故障自动注入与故障检测的方法,其特征在于,包括: Si,对被测文件进行故障自动化注入,进行分析并生成多个故障文件; S2,对所述多个故障文件分别进行处理,生成多个可执行文件; S3,根据所述被测文件选择特定的测试用例库,将所述测试用例库中的用例逐一在所述每个可执行文件上运行,进行故障检测,并计算故障检测率。
2.根据权利要求1所述的故障自动注入与故障检测的方法,其特征在于,所述步骤SI包括: S11,输入被测文件,对所述被测文件进行语法分析、词法分析和语义分析,生成抽象语法树; S12,基于所述抽象语法树,对变异算子进行建模,生成程序变异模型; S13,遍历所述抽象语法树,提取所述抽象语法树的节点信息; S14,根据所述抽象语法树的节点信息和所述程序变异模型,生成相应的故障注入点,并在所述故障注入点进行故障自动注入; S15,进行文件IO操作,生成多个故障文件。
3.根据权利要求1所述的故障自动注入与故障检测的方法,其特征在于,所述步骤S2包括: 对所述多个故障文件分别进行预处理、编译、汇编和链接,生成对应的多个可执行文件。
4.根据权利要求1所述的故障自动注入与故障检测的方法,其特征在于,所述测试用例库包括与所述被测文件的程序相对应的用例。
5.根据权利要求4所述的故障自动注入与故障检测的方法,其特征在于,所述测试用例库还包括所述被测文件运行所述每个用例后的执行结果。
6.根据权利要求1所述的故障自动注入与故障检测的方法,其特征在于,所述测试用例库中的所述用例满足覆盖准则,所述覆盖准则可以是对所述被测试文件的100%分支覆至JHL ο
7.故障自动注入与故障检测系统,其特征在于,所述系统包括: 故障自动注入模块,用于对被测文件进行自动化注入,进行分析并生成多个故障文件; 执行文件生成模块,用于对所述多个故障文件进行处理,生成多个可执行文件; 故障检测模块,用于根据所述被测文件选择特定的测试用例库,将所述测试用例库中的用例逐一在所述每个可执行文件上运行,进行故障检测,并计算故障检测率。
8.根据权利要求7所述的故障自动注入与故障检测系统,其特征在于,所述故障自动注入模块包括: 抽象树生成单元,用于对所述被测文件进行语法分析、词法分析和语义分析,生成抽象语法树; 程序变异模型生成单元,用于基于所述抽象语法树,对变异算子进行建模,生成程序变异模型; 抽象语法树遍历单元,用于遍历所述抽象语法树,提取所述抽象语法树的节点信息; 故障自动注入单元,用于根据所述抽象语法树的节点信息和所述程序变异模型,生成相应的故障注入点, 并在所述故障注入点进行故障自动注入;故障文件生成单元,用于进行文件IO操作,生成多个故障文件。
【文档编号】G06F11/36GK103914379SQ201410114863
【公开日】2014年7月9日 申请日期:2014年3月25日 优先权日:2014年3月25日
【发明者】宫云战, 钱茛南, 王雅文, 黄俊飞, 金大海 申请人:北京邮电大学