嵌入式软件路径覆盖测试的研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式软件路径覆盖测试的研究
施冬梅
【摘要】路径覆盖是软件测试中一种十分重要的方法,它使程序的每个分支至少执行一次;针对嵌入式软件测试的特点,提出了嵌入式软件路径覆盖测试的策略,通过模拟测试通用型智能水量计量仪C430主控程序的各个步骤,运用基本路径插桩策略
分析计算插桩探针的位置、个数,统计计算整个探针的覆盖面,构造基本路径和实际
程序执行路径;测试覆盖率达到71.1%,取得了一定的效果,对增强软件测试方案设计的系统性,提高软件测试质量和效率,起到了较好的作用.
【期刊名称】《计算机测量与控制》
【年(卷),期】2010(018)010
【总页数】3页(P2236-2237,2240)
【关键词】路径覆盖;软件测试;控制流程图;程序插桩
【作者】施冬梅
【作者单位】镇江市高等专科学校,电子信息系,江苏,镇江,212003
【正文语种】中文
【中图分类】TP311.56
0 引言
嵌入式系统广泛地应用于工业系统、军事系统、通讯、仪器仪表、船舶、航空航天、消费电子类产品中,完成一种或多种特定功能,是软硬件的紧密结合体。
嵌入式系统
是以应用为中心,以计算机技术为技术,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统,它具有与硬件联系紧密和实时性强的优点[1]。
软件测试是保证软件系统正确性的一个重要手段,也是计算机软件工程方法和技术的一个主要组成部分,虽然测试并不能证明软件系统的正确性,但是,它通过运行选定的测试用例来发现软件中的错误,并通过纠正错误使软件的质量达到令人满意的程度[2]。
所以,在今后相当长的时间内测试仍是保证软件质量的主要手段。
1 基本路径覆盖测试策略
路径覆盖是非常强的逻辑覆盖标准,它使程序的每条路径至少执行一次。
贯穿在程序内部的逻辑存在着不确定性和无穷性,一个有着N个决策的方法会有2N种可能路径,如果程序中出现多个判断和多个循环,可能的路径数目将会急剧增长,达到天文数字。
为了解决这一问题,需要制定一个有效的、开销较小的覆盖准则对
BCFG(Block Control Flow Graph)进行优化处理。
定义1:块控制流图BCFG(F)=(N,E,Entry,Exit):F(Function)为被测函数集,N是程序块集,分基本块和节点块(条件判断块、连接块、函数的入口和出口点)两类;E是边集;Entry和Exit是F入口及出口节点集。
定义2:Z路径优化:简化控制流图循环意义下的一种路径构造方法,本文中把循环体简化为一次和零次(跳过)两种情况处理。
由定义1、2推导出本文定义的基本路径集BP(Basic Path),即BCFG经过Z路径覆盖处理所剩的完全路径集合。
根据McCabe度量法计算环路复杂度V(BCFG)指出为确保软件质量应该检测的最少BP数目:
其中,e为边数,n为节点数,度量程序拓扑结构复杂性。
采用深度优先搜索BCFG法构造BP。
由bp(bp∈BP)设计测试用例t(bp=>t),使t
理论上按bp执行,然后分析运行t采集的测试数据,构造实测路径集Pn(随机均匀路径生成法)。
覆盖率PCP(Path Coverage Percent)计算公式:
当且仅当 T执行后覆盖所有BP,称T使路径覆盖测试是充分的。
目前存在很多优化算法,比如使某些乘法因子变小、使乘法运算的次数变少等,但整体突破不大,没有改变路径覆盖率乘法运算的根本属性。
由于嵌入式软件与硬件的紧密依赖关系,降低了低层模块路径覆盖的可测性,其测试指标难以制定,只能模拟完成应用层BP覆盖测试。
BP覆盖可以确保对所有相互独立的决策结果进行测试,它是理论执行路径集的有效测试子集,可有效降低测试执行难度、提高覆盖率。
2 嵌入式软件路径覆盖测试原理
软件测试的目的是改善软件质量,要求考虑怎样在较低的成本内,高效率地完成对测试数据全面采集、分析处理。
嵌入式系统资源受限,操作系统、高层应用软件、硬件及硬件驱动等紧密关联,开发、测试必须在交叉编译环境下进行:开发及测试工具运行在宿主机上,而应用程序运行在软硬件资源紧张的目标机上,并通过物理/逻辑连接传输必要的数据给宿主机[3]。
嵌入式软件测试中,静态测试是基础,对被测软件做静态规约检查和质量评估,可用函数调用关系图(Function Call Graph,FCG)和块控制流程图(Block Control Flow Graph,BCFG)表示内部逻辑结构;动态测试是必要补充,在目标机真实环境下运行执行程序,采集数据,分析其动态行为[4]。
嵌入式软件路径覆盖测试的特点就是必须在交叉编译环境下,通过物理通道传输完整的动态测试跟踪数据。
测试用例集被运行完毕后,消息队列接到传输端口的数据缓冲中,把数据传输给宿主机测试平台的数据接收服务端。
动态执行时先要检查目标机与宿主机的连线状态,确保测试正常进行[5-6]。
嵌入式软件路径覆盖测试体系结构如图1所示,其详细流程如下:
图1 嵌入式软件路径覆盖测试体系结构框图
(1)被测程序静态分析:按已定协议规范对被测程序P进行静态分析,制作P的
FCG(P)及BCFG(F),指导插桩库的建设;再采用深度优先搜索法构造 p的基本路径集BP,构建动态路径覆盖测试的比较基础。
(2)建设插桩库:首先要由静态分析结果确定isl的编码协议,再选定要进行动态测试
的模块制作相应的ISLF,然后设计探针函数类型、属性、调用过程,完成探针函数库。
插桩库由两部分组成:插桩选择记录文件库ISLF_DB和探针函数库PF_DB。
ISL是
依据测试人员选择的测试用例从ISLF中找出的一次测试实现的插桩选择记录的子集。
(3)源程序插桩:将静态分析规整后的源码与插桩库连接生成带有插桩探针的可执行
程序。
插桩库中的探针被触发的条件是由isl确定,从isl中提取探针识别标志位信
息和插桩位置定位信息,然后从PF_DB中提取所需要的探针函数,并把isl作为参量,插入被测软件源码指定的位置。
插桩时需确保探针函数对源程序执行影响最小,并
要注意保存现场,以便测试后恢复现场。
(4)动态实施:目标机在真实环境中运行可执行程序,测试用例集T为运行输入参量,
探针采集数据为运行的输出参量。
探针函数以消息队列机制采集动态跟踪测试数据,执行程序初始化时,探针便为消息队列开辟暂存空间,被执行到的探针采集的测试数
据顺序压入队列[7]。
当消息队列添满时,启动通讯中断程序,把队列内容传输给宿主机测试平台;然后清空队列,继续采集、传送测试数据。
保证硬件设备工作稳定,线路连接完好。
(5)数据传输及规范处理:动态测试跟踪数据以字节码的形式,通过特定通讯协议传输给宿主机,其有效性、可靠性是客观评估被测对象的稳定性、安全性的战术指标。
宿主机测试平台把接收到的测试数据直接转存到动态测试数据文档中,当T运行完
毕后统一进行测试数据的规范处理:按isl协议逆向解析动态测试跟踪数据,并采用dom4j技术把所得的有效测试数据,处理成MXL标准测试结构数据文档。
(6)测试数据分析:包括路径覆盖率计算分析和缺陷定位分析,对测试处理后的数据及日志记录进行综合分析[8],分析完毕后还需在基础报告中说明常见缺陷类型及改正意见。
3 测试实例分析
采用基本路径实际程序执行测试数据生成法,模拟测试基于通用型智能水量计量仪C430主控程序的各个步骤。
对于C语言开发的嵌入式软件被测模块,由插桩策略可以分析计算插桩探针的位置、个数,可以统计计算整个探针的覆盖面,构造基本路径和实际程序执行路径,比较分析缺陷。
对智能水量计量仪的软件系统最高两层模拟测试,结果如表1所示。
表1 基本路径覆盖测试分析表被测函数编号 Z优化数V(BCFG)插桩个数实测路径main() 0001 1 9 18 8 Symtem_Init() 0100 0 1 2 1 IC_Card() 0101 1 5 8 4 Water_Quantity_Judge() 0102 0 3 5 3 BurstReadTime() 0103 0 1 2 1 Sample() 0104 1 2 4 2 Compute_Sample() 0105 0 1 2 1
Show_Water_Quantity()0106 0 1 2 1 LED_Flash()0107 0 1 6 1
Key_Manage()0108 1 2 2 2 GSM_Module()0109 0 1 2 1
基本路径覆盖测试覆盖率计算如下:
测试覆盖率是一个多方面影响的问题,其涉及到测试的各个过程。
路径覆盖是一种针对结构测试的常用充分性准侧,事实上,即使规模很小的程序,包含的逻辑路径数量也是很大的,从而使得完全的路径覆盖在实际的软件测试中不具有可行性,从覆盖率看出,本次基本路径覆盖测试分析,达到了预期的目的。
4 结束语
本文研究了针对嵌入式软件(C语言开发)源代码的基本路径覆盖测试,模拟测试通用型智能水量计量仪C430主控程序的各个步骤,达到了预期的目的。
它对增强软件
测试方案设计的系统性,提高软件测试质量和效率,起到了较好的作用。
对嵌入式软件产品的测试是多方面的,除路径覆盖测试外,还有时间性能测试、内存使用测试与分析,也是我们研究的重要课题。
参考文献:
【相关文献】
[1]Yates D F,Malevris N.An objective comparison of the cost effectiveness of three testing methods[J].Information and Software T echnology.2007,(49):1045-1060.
[2]Kandl S,Kirner R,Puschner P.Automated Formal Verification and Testing of C Programs for Embedded Systems[A].IEEE International Symposium[C].2007,7(9):373-381.
[3]于全喜,张毅坤,胡燕京,等.嵌入式软件路径覆盖测试数据采集 [J].计算机工程,2009,11:54-59.
[4]毛红梅,舒远仲.基于控制流程图的路径覆盖测试的改进方法研究[J].计算机工程与应
用,2007,44(30):93-95.
[5]乔文军,万晓冬.嵌入式软件覆盖测试工具的研究[J].计算机测量与控制,2007,15(9):1238-1258.
[6]张丽.基于嵌入式系统的软件结构覆盖测试技术 [J].舰船电子工程,2005,3:63-83.
[7]黄新生,吴百锋,朱琦.基于组件的嵌入式软件开发方法 [J].计算机工程与设计,2004,3:327-331.
[8]胡燕京,张毅坤,朱伟,等.嵌入式软件功能路径测试用例自动生成研究 [J].微电子学与计算
机,2010,1:81-85.。