一种嵌入式软件白盒覆盖测试系统设计

时间:2011-09-04

    随着嵌入式系统的广泛应用,人们对嵌入式系统软件的质量提出了更高的要求,而作为保证软件质量有效手段的测试技术,也越来越受到关注。目前嵌入式软件的开发语言以C等语言为卞,因此,对这些语言的测试显得尤为重要,”。

  目前实用的嵌入式系统测试平台卞要由国外厂商开发,比较具有代表性的测试平台有T eleloglc公司的Logi-scope .M etrow erk、公司的CodeTest, Windriver公司的CoverageScope和IPL公司的C ant at a等。

  国外厂商的嵌入式系统测试平台功能较强,技术较先进,但一套测试系统价格往往高达数万到十多万美元,极大增加了嵌入式系统的开发成木,无法得到普遍的应用,影响了国内嵌入式系统的开发质量。国内的嵌入式系统测试平台有基于目标开发的测试系统。

  木系统实现了基于仿真的嵌入式C语言软件覆盖测试分析。通过有效的词法语法分析、自动插装、测试用例的生成和加入、动态仿真运行及覆盖分析等模块对源代码进行覆盖分析,缩短了嵌入式系统开发周期,有效地解决了传统手工测试程序运行效率低、繁琐等问题,保证了嵌入式软件系统高效稳定的运行。

  嵌入式软件测试系统框图

  嵌入式软件测试系统的结构框图如所示。它卞要由5部分组成:程序的预处理过程(包括词法语法分析)程序的自动插装过程、测试用例的加入、动态仿真运行及覆盖分析。

  被测试程序首先经过预处理。由于源程序中存在宏定义次件包含和条件编译等预处理命令,因此在进行词法分析前必须进行预处理,将宏展开,以利于查找变量词法分析是将预处理阶段产生的中间代码分解成单独的词的表示,语法分析是将输入字符串识别为单词符号流,卞要用来确定插装的位置,在一些关键的字段和函数处插。

600)makesmallpic(this,600,1800);" height=383>

  嵌入式系统是根据IEEE(电气和电子工程师协会)的定义,嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”。从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

  功能模块设计

  仿真软件主要功能

  ①源语言的规范化和处理,即规定描述模型的符号、语句、句法、语法,检测源程序中的错误和将源程序翻译成机器可执行码。

  ②仿真的执行和控制。

  ③数据的分析和显示。

  ④模型、程序、数据、图形的存储和检索。可以通过对软件的设计来实现这些功能。

  仿真软件分为仿真语言、仿真程序包和仿真软件系统三类。其中仿真语言是应用广泛的仿真软件。仿真程序包是针对仿真的专门应用领域建立起来的程序系统。软件设认人员将常用的程序段设计成通用的子程序模块,并设计一个主程序模块,用于调用子程序模块。仿真研究人员使用这种程序包可免去繁重的程序编制工作。仿真程序包除不具备仿真软件的功能①以外,至少具备功能②、③、④中的任一种。仿真软件系统以数据库为将仿真软件的所有功能有机地统一在一起,构成一个完善的系统。它由建模软件、仿真运行软件(语言)、输出结果分析软件和数据库管理系统组成。

   词法语法分析模块

   预处理

   在源程序中,空白符测匕格符、回车符和换行符等编辑性字符除了出现在文字常数中之外,在别处任何地方出现都没意义,而注释部分出现在程序中的任何地方。对于这些不是程序必要组成的部分,预处理时可以将其剔掉。

   词法分析

    将预处理阶段产生的中间代码分解成单独词的表示,并将词的基木信息表,如词的行号、词的列号及词的类型等信息,为语法分析做准备。词的类型有:普通变量标识符擞字表、关键字表运算符表。

   语法分析

   语法分析是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等。语法分析程序判断源程序在结构上是否正确。源程序的结构由上下文无关文法描述。语法分析程序可以用YACC等工具自动生成

  语法分析的卞要任务是在词法分析识别出的单词符号串的基础上,分析并判断程序的语法结构是否符合语法规则。由于木系统分析的程序是经过嵌入式软件编译器编译的,因此认为不存在语法上的错误,只是通过语法分析得到程序结构及函数信息,为插装做准备。

  插装模块

  程序插装概念由J.  G.  H uang教授首次提出,简单地说就是借助向被测程序中插入操作来实现测试目的。在调试程序时,常常要在程序中插入一些打印语句,希望执行程序时打印出所关心的信息。通过这些信息进一步了解执行过程中程序的一些动态特性。比如,程序的实际执行路径,或是特定变量在特定时刻的取值。从这一思想发展出的程序插装技术能够按用户的要求,获取程序的各种.

600)makesmallpic(this,600,1800);" height=620>


  覆盖率分析

  通过动态仿真运行模块,覆盖信息被写入文件中,读取存放记录文件,分别对语句块数和执行分支数进行计算。根据覆盖率公式,结合计算的结果,得到测试语句覆盖汾支覆盖与程序的有效代码率并GUI显示。将测试的结果与测试用例库生成的测试用例期望值作比较,得出测试结论。

  语句覆盖率算法分析

  语句覆盖是软件测试中基木的覆盖标准,因此在测试时应将每个语句至少执行1次。在 T estImp系统中得到语句覆盖率的算法流程如所示,通过词法分析后,读单独的词语,如遇到能产生分支的关键词(for .if .else .switch .goto .return .break .continue .do :`{”和“}’,)则继续往卜判断,否则返回继续读词语。如果链表节点大于1,则判断链表节点数与对应层数是否相等,如果相等则计算出该层的总行数,即用此时+}”行数减去栈中保存“{”的总行数,然后保存该层总行数,并用总行数减去近嵌套内层行数之和,即得到该层行数对应记录。当所有的词语全部读取完毕后,读取动态执行时写入的插装文件,读取关键词标号,取对应关键词链表中的行数与总行数变量相加,直至插装文件读取完毕,此时可以输出被覆盖语句数。

  分支覆盖率算法分析

  分支覆盖率的计算一般也需要达到一定的指标。在T estImp系统中得到分支覆盖率的算法流程如


600)makesmallpic(this,600,1800);" height=472>

600)makesmallpic(this,600,1800);" height=408>

  该系统实现如卜几个模块:

  ①分析模块。用打开文件菜单选择要分析的源文件,并进行词法分析。语法分析并没有生成可见的语法树,只是形成提供插装的结构信息。

  ②插装模块。选择自动插装菜单,系统会读取词法语法分析的结果,根据算法流程实现对源程序的自动插装,插装点有for ,if ,else ,case ,goto ,return ,break ,con-tinue .do ,while语句后及程序开始与结束处插入记录函数指针,并在程序插入插装函数体。

  ③编译器配置模块。根据不同嵌入式软件选择不同的编译环境,该部分需在使用该系统之前对各种嵌入式编译软件进行配置,在木系统中有Visual C + + ,ARM编译器ADS ,Keil环境沛福环境,Borland C环境,DSP编译器CCS。

  ④覆盖率。木系统已实现的覆盖率有语句覆盖与分支覆盖,并将覆盖率通过二维图形形式体现。后续将实现条件覆盖、多条件判定覆盖、多条件覆盖,M C/DC潞径覆盖等覆盖率。

  实验结果

  在实验中,采用1个AT 89C51单片机键盘识别系统作为实验对象。在该系统中,通过AT 89C51的P1口连接1个4x4的知阵键盘,并通过P0. 4 } P0. 6所连接的74LS138扩展连接到型号位7SEG-MPXGCA的6位LED选通端上,可以显示所按卜键盘的编号,将RXD和T XD连接到串口。经过试验得到一个结论:将测试源程序进行分析并自动插装,然后通过单片机的Keil编译器对插装后的源程序进行编译,得到。此时插装后的程序会将插装的信急通过串口传送到TestImp测试系统的联机串口传送界而中,并将其保存在指定文件中,为覆盖测试做准备。

  为该系统设计的基木测试用例是按卜单个1号键。在此测试用例卜,手工运行推算出语句覆盖率和分支覆盖率分别为55. 6%和42. 80}0 ,在测试系统运行后,得出的语句覆盖率和分支覆盖率分别为55. 6%和42. 8 0}o。测试结果如所示。

600)makesmallpic(this,600,1800);" height=398>

   实验结果表明:在特定的测试用例卜,对嵌入式系统应用木文设计的基于仿真嵌入式软件白盒覆盖测试系统与理论上推导出来的语句和分支覆盖率指标完全相同。


  
上一篇:基于VxBus的设备驱动开发
下一篇:设计一种适用于嵌入式系统的加密IP核

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料