微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于仿真的嵌入式软件白盒覆盖测试系统设计

基于仿真的嵌入式软件白盒覆盖测试系统设计

时间:08-26 来源:单片机与嵌入式系统应用 点击:

引言

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

目前实用的嵌入式系统测试平台卞要由国外厂商开发,比较具有代表性的测试平台有Telelogic公司的Logi-scope .Metrowerk公司的CodeTest, Windriver公司的CoverageScope和IPL公司的Cantata等。国外厂商的嵌入式系统测试平台功能较强,技术较先进,但一套测试系统价格往往高达数万到十多万美元,极大增加了嵌入式系统的开发成木,无法得到普遍的应用,影响了国内嵌入式系统的开发质量。

国内的嵌入式系统测试平台有基于目标开发的测试系统。电子科技大学研究了基于目标的嵌入式软件测试系统,实现了对汇编语言进行自动插装,并实现基木的覆盖测试功能。但由于嵌入式软件需要基于硬件电路进行调试,当软件程序写入硬件电路后,如果电路工作不正常甚至无法工作,则难以断定问题所在,这就限制了嵌入式软件测试必须按照先硬件后软件的模式进行。

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

1嵌入式软件测试系统框图

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

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

2功能模块设计

2. 1词法语法分析模块

(1)预处理

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

( 2)词法分析

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

( 3)语法分析

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

2. 2插装模块

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

2. 4覆盖率分析

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

2. 4. 1语句覆盖率算法分析

语句覆盖是软件测试中最基木的覆盖标准,因此在测试时应将每个语句至少执行1次。在 T estImp系统中得到语句覆盖率的算法流程如图3所示,通过词法分析后,读单独的词语,如遇到能产生分支的关键词(for .if .else .switch .goto .return .break .continue .do :`{"和"}’,)则继续往卜判断,否则返回继续读词语。如果是能产生分支的关键词,则将关键词对应的当前标号(flagif }flagelse .flagwhile,flagfor }flagswitch)推进栈中的account单元保存,并将当前标号加1。当读取到关键词之后第1个气"时,标志fflag加1,且判断是否大于1:如果大于1,则将此时的行号推入到栈当前位置中的mine单元中保存;否则直接返回读词。如果是+}"标号,则判断链表的节点是否大于。,如果是且

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top