CN103914379B - 故障自动注入与故障检测的方法及其系统 - Google Patents

故障自动注入与故障检测的方法及其系统 Download PDF

Info

Publication number
CN103914379B
CN103914379B CN201410114863.1A CN201410114863A CN103914379B CN 103914379 B CN103914379 B CN 103914379B CN 201410114863 A CN201410114863 A CN 201410114863A CN 103914379 B CN103914379 B CN 103914379B
Authority
CN
China
Prior art keywords
fault
file
syntax tree
automatically injected
abstract syntax
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.)
Expired - Fee Related
Application number
CN201410114863.1A
Other languages
English (en)
Other versions
CN103914379A (zh
Inventor
宫云战
钱茛南
王雅文
黄俊飞
金大海
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing University of Posts and Telecommunications
Original Assignee
Beijing University of Posts and Telecommunications
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing University of Posts and Telecommunications filed Critical Beijing University of Posts and Telecommunications
Priority to CN201410114863.1A priority Critical patent/CN103914379B/zh
Publication of CN103914379A publication Critical patent/CN103914379A/zh
Application granted granted Critical
Publication of CN103914379B publication Critical patent/CN103914379B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明涉及一种故障自动注入与故障检测的方法及其系统,该方法包括:S1,对被测文件进行故障自动化注入,进行分析并生成多个故障文件;S2,对所述多个故障文件分别进行处理,生成多个可执行文件;S3,根据所述被测文件选择特定的用例库,将所述用例库中的用例逐一在所述每个可执行文件上运行,进行故障检测,并计算故障检测率。本发明使用源代码故障注入的方法,可以加速错误的发生,进而判断出软件中是否存在故障,并且检错能力强,尤其对于一些小概率错误具有较好的测试效果。

Description

故障自动注入与故障检测的方法及其系统
技术领域
本发明涉及软件测试技术,尤其涉及一种在软件测试中的故障自动注入与故障检测方法及其系统。
背景技术
故障注入(Fault Injection)技术作为一种特殊测试技术,通常是指按照一定的故障模型产生故障,并可控地施加到待测目标系统中,以加速该系统的错误和失效的发生。故障检测,是观测并检验系统对所注入错误的响应信息,判断是否检测出所注入的故障。两者相结合可以分析目标系统的错误处理、错误容忍能力以及系统的鲁棒性,并对系统进行验证和评价。
虽然故障注入方法有很高的检错能力,但如何自动化注入大规模的故障,及如何有效地执行大量的故障文件、比对结果,是妨碍故障注入方法广泛应用的主要原因。目前实际应用中,大都是人工进行故障注入或半自动注入,耗费了大量的人力成本,测试效率也很低。并且只能进行小规模的源代码故障注入,无法对大型程序或整个项目进行全面的源代码故障注入和检测,无法充分发挥该方法的高检错能力。
发明内容
本发明提供一种故障自动注入与故障检测方法及其系统,通过使用源代码故障注入的方法,可以加速错误的发生,进而判断出软件中是否存在故障,并且检错能力强,尤其对于一些小概率错误具有较好的测试效果。
根据上述目的,本发明提供了一种故障自动注入与故障检测的方法,其包括:S1,对被测文件进行故障自动化注入,进行分析并生成多个故障文件;S2,对所述多个故障文件分别进行处理,生成多个可执行文件;S3,根据所述被测文件选择特定的测试用例库,将所述测试用例库中的用例逐一在所述每个可执行文件上运行,进行故障检测,并计算故障检测率。
其中,所述步骤S1包括:S11,输入被测文件,对所述被测文件进行语法分析、词法分析和语义分析,生成抽象语法树;S12,基于所述抽象语法树,对变异算子进行建模,生成程序变异模型;S13,遍历所述抽象语法树,提取所述抽象语法树的节点信息;S14,根据所述抽象语法树的节点信息和所述程序变异模型,生成相应的故障注入点,并在所述故障注入点进行故障自动注入;S15,进行文件IO操作,生成多个故障文件。
其中,所述步骤S2包括:对所述多个故障文件分别进行预处理、编译、汇编和链接,生成对应的多个可执行文件。
其中,所述测试用例库包括与所述被测文件的程序相对应的用例。
其中,所述测试用例库还包括所述被测文件运行所述每个用例后的执行结果。
其中,所述测试用例库中的所述用例满足覆盖准则,所述覆盖准则可以是对原被测试文件的100%分支覆盖。
根据本发明的另一个方面,提供了一种故障自动注入与故障检测系统,所述系统包括:故障自动注入模块,用于对被测文件进行自动化注入,进行分析并生成多个故障文件;执行文件生成模块,用于对所述多个故障文件进行处理,生成多个可执行文件;故障检测模块,用于根据所述被测文件选择特定的测试用例库,将所述测试用例库中的用例逐一在所述每个可执行文件上运行,进行故障检测,并计算故障检测率。
其中,所述故障自动注入模块包括:抽象树生成单元,用于对所述被测文件进行语法分析、词法分析和语义分析,生成抽象语法树;程序变异模型生成单元,用于基于所述抽象语法树,对变异算子进行建模,生成程序变异模型;抽象语法树遍历单元,用于遍历所述抽象语法树,提取所述抽象语法树的节点信息;故障自动注入单元,用于根据所述抽象语法树的节点信息和所述程序变异模型,生成相应的故障注入点,并在所述故障注入点进行故障自动注入;故障文件生成单元,用于进行文件IO操作,生成多个故障文件。
本发明所述的故障自动注入与故障检测的方法及其系统,使用源代码故障注入的方法,可以加速错误的发生,进而判断出软件中是否存在故障,并且检错能力较高,尤其对于一些小概率错误具有较好的测试效果,同时,使用本发明进行测试时,对系统鲁棒性和可靠性测试具有较好的测试效果。
附图说明
通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
图1示出了本发明的故障自动注入与故障检测的方法的流程图;
图2示出了本发明的故障自动注入与故障检测的方法的步骤S1的具体流程图;
图3示出了本发明的故障自动注入与故障检测系统的结构框图;
图4是示出了本发明的故障自动注入与故障检测系统的故障自动注入模块的结构框图。
具体实施方式
下面将结合附图对本发明的实施例进行详细描述。
图1示出了本发明的故障自动注入与故障检测的方法的流程图。
参照图1,本发明的实施例的故障自动注入与故障检测的方法包括:
步骤S1,对被测文件进行自动化注入,经过分析并生成多个故障文件。
故障注入是使用故障算子,对被测原代码进行微小的语法改变,来模拟程序员在真实环境中可能产生的各类错误。
图2示出了本发明的故障自动注入与故障检测的方法的步骤S1的具体流程图。
参照图2,其具体步骤包括:
S11,输入被测文件,对被测文件进行语法分析、词法分析和语义分析,生成抽象语法树(Abstract Syntax Tree)。
抽象语法树是程序编译阶段的一种中间表示形式。作为一种良好的数据结构,AST可以直观地表示出源程序的语法结构,且包含源程序语法分析所需的全部静态信息,是故障注入所需信息的主要载体。其具体过程如下:
在读取被测文件后,对被测文件进行语法分析,语法分析是对读入的程序的字符流作为输入,通过一系列的规则,将字符流映射成单词Token,然后输出单词串和符号表。
然后将单词串组合成各类语法短语,如“语句”,“表达式”等等,语法分析程序判断源程序在结构上是否正确,具体使用自顶向下分析分析方法,然后输出无类型信息的抽象语法树。
然后使用上述生成的抽象语法树和符号表的信息,检测源程序是否和语言定义的语义一致,同时收集类型信息并保存起来,从而形成最终的抽象语法树。
S12,基于所述抽象语法树,对变异算子进行建模,生成程序变异模型;
变异算子,也称故障算子,是人们经过长期的实践总结出的模拟实际故障的一种源代码语法替换规则。例如对C语言,有关系算子、逻辑算子、算术算子、赋值算子、位运算算子等等。
本实施例对变异算子进行建模,不仅对传统的故障类型进行建模,还针对C语言中常使用的循环结构也进行了相应的建模。此外,为满足用户注入自定义的故障类型,还提供了相应的扩充接口。
S13,遍历抽象语法树,提取所述抽象语法树的节点信息;
本实施例使用访问者(Visitor)模式来对抽象语法树进行遍历。
访问者(Visitor)模式是设计模式的一种,它可以在不改变各元素类的前提下,定义作用于这些元素的新操作。Visitor模式把抽象语法树和作用于该结构上的操作之间的耦合解开,使得操作集合可以相对自由地定义。抽象语法树的每一个节点都可以接受一个访问者的调用,此节点向访问者对象传入节点对象,而访问者对象则反过来执行节点对象的操作。
在本实施例中,面向抽象语法树的访问者(Visitor)的具体设计:首先访问者实现一个具体操作,访问者对象针对AST中每类节点都包含一个Visit方法,AST对象自身包含一个Accept方法,访问者调用这个Accept方法,Accept方法再调用访问者的Visit方法。
S14,根据上述抽象语法树的节点信息和程序变异模型,生成相应的故障注入点,并在故障注入点进行故障自动注入。
提取语法树节点信息后,再根据标准算子提供的程序变异模型,生成对应的故障注入点(Injection Point)。该故障注入点包含了程序结构信息,故障信息等。故障注入点为变异算子指定了具体的注入位置,故障注入点确定下来后,在故障注入点使用变异算子,进行具体的语法内容替换,即开始故障自动注入。
S16,进行文件IO操作,生成多个故障文件。
故障注入完成后,将注入故障的文件转换为文本序列流,从而生成多个故障文件。
下面是本发明的一个故障注入的实施例。
本实施例使用的变异算子是REOR关系类算子,由==替换为>=,本实施例的源程序是:
上述程序生成的抽象语法树(局部)为:
进行故障注入后生成的故障文件为:
通过上述故障注入,将源程序中的“year%4==0”替换为“year%4>=0”,从而形成故障文件。
步骤S2,对上述多个故障文件进行处理,生成多个可执行文件。
为了自动化检测被测程序是否包含错误,需要在故障文件上执行用例,将其输出结果和源程序的输出进行比对。在上述步骤S1中,只是生成了一组包含故障的源代码文件,是以文本文件格式存在,还不能直接执行。因此,需要将其转化为可执行的文件,为下一步自动化比对做准备。
本实施例在c语言标准编译可执行文件的基础上,对故障文件进行了相应的处理,具体步骤如下:
1)预处理。
预处理主要针对.c源程序,对其中的预处理指令(preprocessingdirector,即以#开头的指令)和特殊符号进行处理。
本实施例主要对以下四种类型进行预处理:
A,宏定义指令,如#define Pai3.1415,#undef等。
C语言源程序中,允许使用一个标识符来表示一个字符串,该标识符称做“宏”。预处理时,对程序中出现的所有“宏”名,都使用宏定义中的字符串去代替。
B,条件编译指令,如#ifdef,#ifndef,#if等。
条件编译指令,用于在预处理中进行条件控制,根据所求条件的值,有选择地包含不同程序部分,因而产生不同的目标代码。
C,头文件包含指令,如#include"Headfile1.h"
多人合作的大型项目中,往往将公用函数写在头文件中,使代码简洁,便于维护。有指向系统目录的<>格式和指向用户定义目录的“”格式。
D,特殊字符,如行号标识。
如对goto语句指定的跳转目标语句的标识等特殊符号,在预处理时,也会进行相应的内部标识替换。
2)编译
编译过程主要工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
3)汇编
汇编过程是指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件的内容是与源程序等效的机器语言代码。
4)链接
链接过程主要工作就是将有关的目标文件彼此相连接,即将在一个文件中引用的库函数包含进来,使得所有的这些目标文件成为一个能够被操作系统载入并执行的可执行文件。
步骤S3,根据所述被测文件选择特定的测试用例库,将所述测试用例库中的用例逐一在所述可执行文件上运行,进行故障检测,并计算故障检测率。
在获得了注入故障的可执行文件后,选择特定的测试用例库,在每个故障文件上,运行测试用例库中的每一个用例,将每一个执行结果,与原被测文件的相应执行结果进行比对。如果比对结果不一致,表明该故障被用例库中的该用例检测出来;如果结果一致,则该故障未被检测出来,此时再人工介入,判断原程序中该注入点是否存在故障。
将检测出的故障文件进行统计,从而可以计算出故障检测率。
测试用例库主要包含针对原被测程序的一组测试用例。这些用例整体满足一定的覆盖准则,例如满足对原被测试程序的100%分支覆盖。测试用例库还包含具体每个用例的其他属性,如具体输入数值、是否为全局变量等等。以库的形式管理用例,便于自动化执行。
此外,为提高检测效率,测试用例库中还记录了原被测文件运行每一个用例的执行结果。这样,在故障文件上执行用例后,就无需在原被测文件上再执行一遍用例,而直接将故障文件的执行结果与用例库中保存的执行结果进行比对。
图3示出了本发明的故障自动注入与故障检测系统的结构框图。
本发明的另一个实施例中,提供了一种故障自动注入与故障检测的系统,该系统包括:
故障自动注入模块100,用于对被测文件进行自动化注入,经过分析并生成故障文件;
执行文件生成模块200,用于对所述故障文件进行处理,生成可执行文件;
故障检测模块300,用于根据所述被测文件选择特定的用例库,将所述用例库中的用例逐一在所述可执行文件上运行,进行故障检测,并计算故障检测率。
图4示出了本发明的故障自动注入与故障检测系统的故障自动注入模块100的结构框图。
参照图4,故障自动注入模块100包括:
抽象树生成单元110,用于对所述被测文件进行语法分析、词法分析和语义分析,生成抽象语法树;
程序变异模型生成单元120,用于基于所述抽象语法树,对变异算子进行建模,生成程序变异模型;
抽象语法树遍历单元130,用于遍历所述抽象语法树,提取所述抽象语法树的节点信息;
故障自动注入单元140,用于根据所述抽象语法树的节点信息和所述程序变异模型,生成相应的故障注入点,并在所述故障注入点进行故障自动注入;
故障文件生成单元150,用于进行文件IO操作,生成多个故障文件。
本发明的实施例的故障注入与故障检测方法及其系统,使用了多种故障算子进行建模,其中除了常见故障,还包含了多种新的故障类型。表一是示出了本发明的实施例的各种算子的类型。
表一各种算子的类型表
编号 故障类型 英文解释 中文翻译
1 AROR arithmetic operator replacement 算术运算符替换
2 ASOR assignment operator replacement 赋值运算符替换
3 BIOR binary operator replacement 位运算符替换
4 CORP constant replacement 常量替换
5 LOOR logical operator replacement 逻辑运算符替换
6 REOR relational operator replacement 关系运算符替换
7 VARP variable replacement 变量替换
8 TIAS to insert a semicolon 插入分号
9 TDBS to delete the break statement 删除break语句
10 TDGS to delete the goto statement 删除goto语句
11 LOCN logical context negation 逻辑上下文否定
12 ARER array element replacement 数组元素替换
13 STER structure element replacement 结构体元素替换
14 RERP reference replacement 引用替换
15 LIV loop initial value 改变循环变量的初始赋值
16 LBV loop boundary value 改变循环条件的边界值
17 LCV loop condition value 改变循环条件值
18 LET loop execution times 改变循环执行次数
本发明所述的故障自动注入与故障检测的方法及其系统,使用源代码故障注入的方法,可以加速错误的发生,进而判断出软件中是否存在故障,并且检错能力较高,尤其对于一些小概率错误具有较好的测试效果,同时,使用本发明进行测试时,对系统鲁棒性和可靠性测试具有较好的测试效果。
虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。

Claims (6)

1.故障自动注入与故障检测的方法,其特征在于,包括:
S1,对被测文件进行故障自动化注入,进行分析并生成多个故障文件;
S2,对所述多个故障文件分别进行处理,生成多个可执行文件;
S3,根据所述被测文件选择特定的测试用例库,将所述测试用例库中的用例逐一在所述每个可执行文件上运行,进行故障检测,并计算故障检测率;
所述步骤S1包括:
S11,输入被测文件,对所述被测文件进行语法分析、词法分析和语义分析,生成抽象语法树;
S12,基于所述抽象语法树,对变异算子进行建模,生成程序变异模型;
S13,遍历所述抽象语法树,提取所述抽象语法树的节点信息;
S14,根据所述抽象语法树的节点信息和所述程序变异模型,生成相应的故障注入点,并在所述故障注入点进行故障自动注入;
S15,进行文件IO操作,生成多个故障文件。
2.根据权利要求1所述的故障自动注入与故障检测的方法,其特征在于,所述步骤S2包括:
对所述多个故障文件分别进行预处理、编译、汇编和链接,生成对应的多个可执行文件。
3.根据权利要求1所述的故障自动注入与故障检测的方法,其特征在于,所述测试用例库包括与所述被测文件的程序相对应的用例。
4.根据权利要求3所述的故障自动注入与故障检测的方法,其特征在于,所述测试用例库还包括所述被测文件运行所述每个用例后的执行结果。
5.根据权利要求1所述的故障自动注入与故障检测的方法,其特征在于,所述测试用例库中的所述用例满足覆盖准则,所述覆盖准则可以是对所述被测试文件的100%分支覆盖。
6.故障自动注入与故障检测系统,其特征在于,所述系统包括:
故障自动注入模块,用于对被测文件进行自动化注入,进行分析并生成多个故障文件;
执行文件生成模块,用于对所述多个故障文件进行处理,生成多个可执行文件;
故障检测模块,用于根据所述被测文件选择特定的测试用例库,将所述测试用例库中的用例逐一在所述每个可执行文件上运行,进行故障检测,并计算故障检测率;
所述故障自动注入模块包括:
抽象树生成单元,用于对所述被测文件进行语法分析、词法分析和语义分析,生成抽象语法树;
程序变异模型生成单元,用于基于所述抽象语法树,对变异算子进行建模,生成程序变异模型;
抽象语法树遍历单元,用于遍历所述抽象语法树,提取所述抽象语法树的节点信息;
故障自动注入单元,用于根据所述抽象语法树的节点信息和所述程序变异模型,生成相应的故障注入点,并在所述故障注入点进行故障自动注入;
故障文件生成单元,用于进行文件IO操作,生成多个故障文件。
CN201410114863.1A 2014-03-25 2014-03-25 故障自动注入与故障检测的方法及其系统 Expired - Fee Related CN103914379B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410114863.1A CN103914379B (zh) 2014-03-25 2014-03-25 故障自动注入与故障检测的方法及其系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410114863.1A CN103914379B (zh) 2014-03-25 2014-03-25 故障自动注入与故障检测的方法及其系统

Publications (2)

Publication Number Publication Date
CN103914379A CN103914379A (zh) 2014-07-09
CN103914379B true CN103914379B (zh) 2016-10-26

Family

ID=51040081

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410114863.1A Expired - Fee Related CN103914379B (zh) 2014-03-25 2014-03-25 故障自动注入与故障检测的方法及其系统

Country Status (1)

Country Link
CN (1) CN103914379B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106681901B (zh) * 2015-11-10 2019-12-06 中国电信股份有限公司 一种测试样本生成的方法和装置
CN105354035A (zh) * 2015-11-17 2016-02-24 天津橙子科技有限公司 用于编写web工程测试用例的方法
CN107797540B (zh) * 2016-09-07 2021-03-16 上海汽车集团股份有限公司 变速器故障测试方法、装置及终端
CN107451057B (zh) * 2017-07-31 2020-11-24 苏州浪潮智能科技有限公司 一种分支确定方法及装置
CN108255736B (zh) * 2018-02-12 2022-02-08 苏州盛科通信股份有限公司 一种电路测试平台的质量评估方法及装置
CN110908819B (zh) * 2018-09-17 2023-07-04 千寻位置网络有限公司 定位代码运行崩溃的方法及装置、终端、存储器
CN109585012B (zh) * 2018-11-02 2023-06-16 成都飞机工业(集团)有限责任公司 一种健康诊断专家知识库自动编码方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102760098A (zh) * 2012-06-13 2012-10-31 北京航空航天大学 面向bit软件测试的处理器故障注入方法及其模拟器

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102760098A (zh) * 2012-06-13 2012-10-31 北京航空航天大学 面向bit软件测试的处理器故障注入方法及其模拟器

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
单元测试中自动故障定位技术的研究与设计;韩春晓;《中国优秀硕士学位论文全文数据库信息科技辑》;20131115;第2013年卷(第11期);正文第9-46页 *
基于抽象语法树的代码静态自动测试方法研究;高传平,谈利群,宫云战;《北京化工大学学报》;20070720;第34卷(第增刊I期);全文 *

Also Published As

Publication number Publication date
CN103914379A (zh) 2014-07-09

Similar Documents

Publication Publication Date Title
CN103914379B (zh) 故障自动注入与故障检测的方法及其系统
US11797298B2 (en) Automating identification of code snippets for library suggestion models
US11354225B2 (en) Automating identification of test cases for library suggestion models
CN109144882B (zh) 一种基于程序不变量的软件故障定位方法及装置
CN104899147B (zh) 一种面向安全检查的代码静态分析方法
US20200264870A1 (en) Automating Generation of Library Suggestion Engine Models
CN111460450B (zh) 一种基于图卷积网络的源代码漏洞检测方法
CN103336760B (zh) 一种基于逆向工程自动生成软件文档的方法及装置
CN105787367B (zh) 一种软件更新的补丁安全性检测方法及系统
Schäfer et al. An empirical evaluation of using large language models for automated unit test generation
KR101051600B1 (ko) 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템
US9418230B2 (en) Automated tools for building secure software programs
CN105912381B (zh) 一种基于规则库的编译期代码安全检测方法
Cheng et al. Static detection of control-flow-related vulnerabilities using graph embedding
CN102567200A (zh) 基于函数调用图的并行化安全漏洞检测方法
CN104035873A (zh) 测试代码生成方法及生成装置
CN109033843A (zh) 用于分布式静态检测系统的Java文件依赖性分析方法及模块
CN107704382A (zh) 面向Python的函数调用路径生成方法和系统
CN106843840A (zh) 一种基于相似度分析的源代码版本演化注释复用方法
CN103914374B (zh) 基于程序切片和频繁模式提取的代码缺陷检测方法及装置
Ren et al. Making smart contract development more secure and easier
CN105243018A (zh) 一种面向对象的类测试数据生成方法
CN110059006A (zh) 代码审计方法及装置
CN115269427A (zh) 针对web注入漏洞的中间语言表示方法及系统
CN103235757B (zh) 基于自动化造数对输入域测试对象进行测试的装置和方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20161026