一种基于Agent嵌入式软件的不变量测试方法与工具的制作方法

文档序号:6353670阅读:633来源:国知局
专利名称:一种基于Agent嵌入式软件的不变量测试方法与工具的制作方法
技术领域
发明涉及一种软件测试方法与工具,特别地涉及一种基于Agent嵌入式软件的不 变量测试方法与工具。
背景技术
随着嵌入式技术的发展,嵌入式软件作为计算机软件的重要分支,已经在消费电 子产品、交通系统、工业控制、医疗设备和军事领域等应用越来越广泛,因而对嵌入式软件 系统的质量要求很高。软件测试是保证软件系统正确性的一个重要手段,也是计算机软件工程方法和技 术的一个主要组成部分。虽然测试并不能证明软件系统的正确性,但是它通过运行选定的 测试用例来发现软件中的错误,并通过纠正错误使软件的质量达到令人以满意的程度。所 以,在今后相当长的时间内测试仍是保证软件质量的主要手段。在测试理论发展的同时,各种软件测试方法被相继提出。如一种基于程序变异的 测试方法,该方法通过对源程序和变异后的程序执行结果的比较来进行软件故障的检测。 还有基于程序插装的软件测试方法,这种方法的核心思想是在保持程序原有逻辑完整的基 础上,在程序中插入“探测仪”,以便获取程序中的控制流和数据流信息,通过对获取的数据 进行分析来判断程序中包含的错误。这些测试方法的提出,为软件测试工作提供了帮助。但是,这些已有的软件测试理论及测试方法中,一般仍然或多或少存在以下不 足(1)对隐含的代码错误测试效果不好,如果再次测试将花费大量的人力物力;(2)人为参与的步骤太多,使用起来很不方便;(3)大部分测试软件价格昂贵,很难大规模普及。

发明内容
本发明要解决的技术问题是针对目前流行的以Linux系统作为嵌入式操作系统 内核的嵌入式软件,如何能减少人为参与且能快速有效地对软件中隐含的代码错误进行测
试ο为了解决上述问题,本发明提供了一种基于Agent嵌入式软件的不变量测试方法 与工具,包括以下步骤1.)第一阶段动态提取程序不变量,包括如下步骤(1)对待测的嵌入式软件程序进行程序编配Agent,即在程序中每个函数入口和 出口处利用前端工具插入代码,采用时间戳机制标记每一个变量,输出编配文件和轨迹文 件的格式的声明文件;( 对步骤(1)输出的编配文件里的编配程序根据路径、分支、等价 类和边界条件确定测试用例,输入所形成的测试用例,通过循环控制方式多次运行编配程 序来记录程序运行轨迹,最终形成轨迹文件;C3)利用集成思想根据程序不变量不同的分 类标准将程序不变量分成3种不同类别的形式从而预设不变量的形式,不变量检测器将步骤(2)形成的轨迹文件中变量值与预设不变量形式比较,得到相应的不变量集,利用多数 投票法整理分析,得出程序不变量报告。2.)第二阶段静态提取程序不变量,包括如下步骤(1)对待测的嵌入式软件程序进行词法分析Agent,即采用Linux下的Iex将待测 的嵌入式软件程序分解成单独的词的表示,形成初步的符号表,并将结果传递给语法分析 Agent ; (2)通过步骤(1)接收到的词法分析Agent的结果,采用yacc将输入字符串识别为 单词符号流,找出变量声明语句,并相应分离出指针变量和数组变量,最终生成语法树,每 一个语法规则对应一个相应的处理函数,并作为树的一个节点挂在语法树上,提供对外的 接口 ; C3)对步骤( 生成的语法树分析找出程序不变量。3.)第三阶段分析错误将动态提取的程序不变量与静态提取的程序不变量相比 较,找出不同的程序不变量对其分析,确定是否错误,最终将错误集中起来形成错误报告。


图1为本发明的体系结构图。
具体实施例方式本发明的核心思想是利用程序不变量的不同的分类标准,形成3种不同的轨迹 文件,对不变量进行3种不同地检测。利用集成思想和多数投票法将检测出的不变量进行 最终的确定。利用Agent的自治特性,在没有其它Agent或测试者的直接命令和干预下进 行独立的判断。利用对比的方法找出程序中的错误。下面结合附图1对本发明的工作流程 及各模块功能进行详细说明。1.工作流程本发明的工作流程包括动态提取程序不变量、静态提取程序不变量以及错误分 析。1. 1动态提取程序不变量其步骤为(1)对待测的嵌入式软件程序进行程序编配Agent,即在程序中每个函 数入口和出口处利用前端工具插入代码,采用时间戳机制标记每一个变量,输出编配文件 和轨迹文件的格式的声明文件;( 对步骤(1)输出的编配文件里的编配程序根据路径、分 支、等价类和边界条件确定测试用例,输入所形成的测试用例,通过循环控制方式多次运行 编配程序来记录程序运行轨迹,最终形成轨迹文件;C3)利用集成思想根据程序不变量不 同的分类标准将程序不变量分成3种不同类别的形式从而预设不变量的形式,不变量检测 器将步骤(2)形成的轨迹文件中变量值与预设不变量形式比较,得到相应的不变量集,利 用多数投票法整理分析,得出程序不变量报告。1. 2静态提取程序不变量其步骤为(1)对待测的嵌入式软件程序进行词法分析Agent,即采用Linux下的 Iex将待测的嵌入式软件程序分解成单独的词的表示,形成初步的符号表,并将结果传递给 语法分析Agent ;(2)通过步骤(1)接收到的词法分析Agent的结果,采用yacc将输入字符 串识别为单词符号流,找出变量声明语句,并相应分离出指针变量和数组变量,最终生成语 法树,每一个语法规则对应一个相应的处理函数,并作为树的一个节点挂在语法树上,提供对外的接口 ; C3)对步骤O)生成的语法树分析找出程序不变量。1. 3分析错误将动态提取的程序不变量与静态提取的程序不变量相比较,找出不同的程序不变 量对其分析,确定是否错误,最终将错误集中起来形成错误报告。2.模块功能描述本发明的模块包括动态提取程序不变量中的程序编配Agent模块、程序轨迹收集 模块和程序不变量提取模块,静态提取程序不变量中的词法语法分析Agent模块以及错误 分析中的错误分析模块。2. 1程序编配Agent模块程序编配Agent模块就是在待检测的程序代码中插入大量的描述轨迹的代码,为 程序运行轨迹收集奠定基础。其主要的工作是确定观测点和观测变量。程序编配的方法基本上可以分为内嵌和外包两种方法。本发明采用内嵌法。内嵌 法就是在程序的适当位置插入跟踪代码,如打印语句,以暴露程序运行的轨迹。本发明针对程序编配Agent设计的步骤为首先确定将程序中每个函数的入口和 出口作为观测点,利用前端工具Defj对源程序进行代码的插入,然后采用时间戳机制对每 一个变量做时间标记,随着时间的变化记录变量的变化过程,同时设置标记信息,如果变量 的状态有所改变则标记为1,否则标记为0。最终输出两个文件其一是与源程序文件同名 的编配文件,其二是轨迹文件格式的声明文件。2. 2程序轨迹收集模块程序轨迹收集模块就是用适当的测试用例集运行程序,收集并保存位于观测点上 的观测变量的运行值。它主要包括测试用例的生成和轨迹的形成。(1)测试用例的生成目前测试用例的选择有两类典型的方法白盒法和黑盒法。本发明采用白盒法和 黑盒法相结合的选择方法。白盒法根据路径、分支等覆盖准则选择测试用例。黑盒法使用 等价类、边界条件等技术确定测试用例。本发明针对测试用例的生成设计的步骤为首先对编配后的程序的路径和分支选 择测试用例。然后再使用等价类、边界条件确定编配后的程序的测试用例。最终将所有的 测试用例集中起来形成测试用例集。(2)轨迹的形成轨迹的形成就是利用生成的测试用例集运行程序,收集并保存位于观测点上的观 测变量的运行值。在每一次测试中,当程序运行经过预定的观测点时就将产生一条测试记 录,一次运行产生的全部检测记录序列组成程序的一个轨迹。轨迹的形成方法有单次运行程序形成和多次运行程序形成。本发明采用多次运行 程序形成。多次运行程序就是利用动态数组将程序运行多次。本发明针对轨迹的形成设计的步骤为首先在每个测试函数的入口点插入动态数 组,然后通过循环控制方式多次运行程序来记录程序运行轨迹,最终将运行轨迹集中起来 形成轨迹文件。轨迹信息主要反映在文件· cdecls和· ctrace里面。· cdecls文件为· ctrace文 件声明了文件格式。
下面介绍一下轨迹文件的声明文件.cdecls格式DEC1ARE表示一个新的函数或方法的开始。program-point-name表示此时的函数或方法名称。varnamel函数或方法中的变量名称。Declared-typel表示第一个变量在源程序中的类型。[#auxiliary-informationl]表示此变量的辅助说明信息,此项是可选项。representation-typel表示在轨迹文件中的此变量的数据类型,一般情况下和源 程序中的类型是相同的。它一般是 boolean, java. lang. String, int, hashcode, double 中 的一个,或者是它们的一个序列。comparable variables表示其它哪些变量可以和该变量进行比较运算,这个过程 需要数据类型的推理分析比较。下面介绍一下轨迹文件的声明文件.ctrace格式program-point-name (禾呈序点名字)varnamel (该程序点可见的第一个域的域名)var-value-1 (该程序点的第一个域的域值)var-modified-1 (该程序点的第一个域的修改标志位)varname2 (该程序点的第二个域的域名)var-value-2 (该程序点的第二个域的域值)var-modified-2 (该程序点的第二个域的修改标志位)其中域修改标志位,表明该域自上次被观察以后是否重新被赋值,为1表示该域 在该程序点重新被赋值,为0表示该域没有重新被赋值。2. 3程序不变量提取模块程序不变量提取模块就是对轨迹形成阶段得到的程序轨迹集合中的数据进行检 测,从中发现有意义的程序行为特征。目前的不变量提取方法主要是基于模式提取的。即首先定义好比较常见的程序不 变量类型,然后根据收集的程序轨迹文件中的各个变量在不同时刻的不同状态值,依此把 各个变量进行比较。如果发现与模板匹配则报告出此不变量,否则继续比较,直到把所有的 变量值比较完为止。本发明采用的提取方法是基于模式的集中提取。基于模式的集中提取 就是将集中的思想运用到基于模式提取中,即采用多次不同的基于模式提取。本发明针对程序不变量提取设计的步骤为首先输入.ctrace文件作为不变量检 测的分析资源,然后根据程序不变量3种不同的分类标准预设不变量的形式,接着不变量 检测器通过在观测变量值的集合上对预设的不变量形式检测得到相应的不变量集,最终利 用多数投票法整理分析数据文件,得出程序不变量报告。2. 4词法语法分析Agent模块词法语法分析Agent模块就是对待测的嵌入式软件进行词法语法分析静态地提 取出程序不变量,其包括词法分析Agent、语法分析Agent和语法树分析Agent。词法分析Agent和语法分析Agent主要采用Linux环境下的Iex和yacc来完成。 Lex与yacc是Linux系统所提供的词法分析工具和语法分析工具,使用这两个工具可以生 成词法和语法分析器,缩短开发系统软件的周期,节约时间,提高工作效率。
①词法分析Agent。Lex是一个词法分析程序的生成程序,它是为了对字符输入流 进行词法分析处理而专门设计的,这个程序的核心是正规表达式,用来描述输入串的词法 结构。本发明针对词法分析Agent设计的步骤为首先写出一个词法规则文件lex. 1,给 出特定的词法规则,即表达式和相关动作。之后,由Iex将其转变成一个通用宿主语言,生 成一个C程序lex. yy. c,其主函数为yylexO。其功能是识别输入字符流中的单词,并返回 指定的单词或其他语法单位的代号。当yyparseO (语法分析主函数)调用yylexO时,将 按照yylexO返回的代号值进行语法分析。②语法分析Agent。Yacc是Linux上一个用来生成编译器的编译器。^cc生成的 编译器主要是用C语言写成的语法解析器,需要与词法解析器Lex —起使用,再把两部分产 生出来的C程序一并编译。本发明针对语法分析Agent设计的步骤为首先根据任务需求制定一个输入处理 的功能说明,即一个语法规则文件yacc. y,其内容就是指定的语法规则集及其各规则对应 的动作。然后,由yacc将这样的说明转换成一个处理相应输入流的C语言程序yy. tab. c, 其主函数是yyparse ()。它通过调用词法分析Agent的分析程序yylex (),进而从输入流中 找到“单词”,再根据输入结构对这些单词加以组织。当某条规则被匹配,并完整地识别出来 后,就调用用户指定的对应于这条规则的一个动作,该动作具有返回值和利用其他动作的 值的能力。③语法树分析Agent。语法树分析Agent主要用来对词法Agent和语法Agent生 成的语法树进行分析,找出程序不变量。本发明针对语法树分析Agent设计的步骤为首先在程序的入口处和出口处以及 函数的入口处和出口处设置探测点,然后开始探测程序不变量,最终将探测出的程序不变 量集中形成不变量集。2. 5错误分析模块错误分析模块就是将动态提取的程序不变量与静态提取的程序不变量相比较,找 出不同的程序不变量对其分析,确定是否错误,最终将错误集中起来形成错误报告。本发明中针对错误分析设计的步骤为首先确定静态提取的程序不变量阶段得到 的程序不变量的数目,然后编写程序将动态提取的程序不变量与静态提取的程序不变量进 行比较,找出不相同的程序不变量,最终分析找出的不相同的程序不变量得出程序中的错 误。3.优势与现有技术相比,本发明提出的一种基于Agent嵌入式软件的不变量测试方法与 工具有如下显著优点(1)将不变量、集成思想和Agent的观念运用到测试技术中,是一种利用不变量、 集成思想和Agent帮助测试者进行软件测试的测试工具。(2)在测试过程中,本发明利用程序不变量的3种不同的分类标准,形成3种不同 的轨迹文件,对不变量进行不同地检测。利用集成思想和多数投票法将检测出的不变量进 行最终的确定。(3)利用Agent的自治特性,在没有其它Agent或测试者的直接命令和干预下进行独立的判断。利用对比的方法找出程序中的错误。 (4)该软件测试系统能够减少测试者的直接干预,并提供一个良好的集成测试环 境,可以大大提高自动化测试的效率,同时能够很好地发现程序中的潜在错误。
权利要求
1. 一种基于Agent嵌入式软件的不变量测试方法与工具,其特征在于包括如下步骤1.)第一阶段动态提取程序不变量,包括如下步骤(1)对待测的嵌入式软件程序进行程序编配Agent,即在程序中每个函数入口和出口 处利用前端工具插入代码,采用时间戳机制标记每一个变量,输出编配文件和轨迹文件的 格式的声明文件;( 对步骤(1)输出的编配文件里的编配程序根据路径、分支、等价类和 边界条件确定测试用例,输入所形成的测试用例,通过循环控制方式多次运行编配程序来 记录程序运行轨迹,最终形成轨迹文件;C3)利用集成思想根据程序不变量不同的分类标 准将程序不变量分成不同类别的形式从而预设不变量的形式,不变量检测器将步骤(2)形 成的轨迹文件中变量值与预设不变量形式比较,得到相应的不变量集,利用多数投票法整 理分析,得出程序不变量报告。2.)第二阶段静态提取程序不变量,包括如下步骤(1)对待测的嵌入式软件程序进行词法分析Agent,即采用Linux下的Iex将待测 的嵌入式软件程序分解成单独的词的表示,形成初步的符号表,并将结果传递给语法分析 Agent ; (2)通过步骤(1)接收到的词法分析Agent的结果,采用yacc将输入字符串识别为 单词符号流,找出变量声明语句,并相应分离出指针变量和数组变量。其结果是生成语法 树,每一个语法规则对应一个相应的处理函数,并作为树的一个节点挂在语法树上,提供对 外的接口 ; (3)对步骤( 生成的语法树分析找出程序不变量。3.)第三阶段分析错误将动态提取的程序不变量与静态提取的程序不变量相比较, 找出不同的程序不变量对其分析,确定是否错误,最终将错误集中起来形成错误报告。
2.如权利要求1中所述方法,其特征在于根据程序不变量不同的分类标准将程序不变 量分成3种不同类别的形式,分别为单一的数字变量的不变量和非单一的数字变量的不变 量、单一的序列变量的不变量和非单一的序列变量的不变量以及函数依赖的不变量和非函 数依赖的不变量。
全文摘要
本发明涉及一种基于Agent嵌入式软件的不变量测试方法与工具,是一种利用集成思想并动态与静态相结合的以Linux系统作为嵌入式操作系统内核的软件测试方法。本发明所述方法包括如下步骤第一阶段动态提取程序不变量,包括程序编配Agent、程序轨迹收集、程序不变量提取,通过执行程序动态地将其中的程序不变量提取出来;第二阶段静态提取程序不变量,包括词法分析Agent、语法分析Agent、语法树分析Agent,通过词法语法分析静态地将其中的程序不变量提取出来;第三阶段分析错误,将第一阶段动态提取的程序不变量与第二阶段静态提取的程序不变量相比较,找出不同的程序不变量对其分析,确定是否错误,最终将错误集中起来形成错误报告。本发明能够应用到不同的程序,通用性强。
文档编号G06F11/36GK102087629SQ20111002675
公开日2011年6月8日 申请日期2011年1月25日 优先权日2011年1月25日
发明者刘久富, 苏青琴, 陈魁 申请人:南京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1