第33卷 第22期 计算机工程 2007年l1月 VoL33 No.22 Computer Engineering November 2007 ・人工智能及识别技术・ 文章编号:1000---3428(2007)22---0195---03 文献标识码:A 中圈分类号:TP18 路径测试中基本路径集的自动生成 张广梅 ,李晓维2韩丛英 (1.山东农业大学信息科学与工程学院,泰安271000;2.中国科学院计算技术研究所先进测试技术实验室,北京100080; 3.山东科技大学,青岛266510) 摘要:路径测试是一种重要的白盒测试技术,具有较高的故障覆盖率。基本路径集覆盖了程序中所有语句和分支,该文测试了基本路径 集中的路径,在测试资源有限的情况下得到较好的测试效果,并提出了基于图的深度优先搜索的基本路径集的生成方法,该算法采用的生 成子路径的方法可以有效地减少路径生成过程中的搜索过程,提高路径生成的效率。 关健词:路径测试;独立路径;基本路径集 Automatic Generation of Basis Path Set in Path Test ZHANG Guang.mei ,LI Xiao.wei ,HAN Cong-ying3 (1.College of Information Science and Engineering,Shandong Agriculture University,Taian 27 1 000; 2.Advanced Test Technology Laboratory,Institute of Computing Technology,Chinese Academy of Sciences,Beijing 100080; 3,Shandong University of Science and Technology,Qindao 2665 1 0) [AbstractI Path test is an important white—box test method,which can detect more program e ̄ors than others.Basis path set contains SO many program paths that it will cover all the statements and branches in lf program.It gains the better result by testing all the paths in a basis set under the limited test resource.This paper proposes an automatic generation of basis path set method based on depth—ifrst searching.In order to avoid the condition that the algorithm never stops and reduces the searching procedure,and to improve its efifciency,the generation of sub—path method is adopted. [Key words|path test;independent path;basis path set 路径测试…是对程序中所有的路径或某些程序路径进行 (2)独立路径。至少包含一条在其他路径中从未有过边的 测试的方法,对软件进行单元测试时经常会采用白盒测试技 路径。 术 J。事实表明 “J,在单元测试阶段,路径测试的检错能力 (3)基本路径集、基本路径 J。基本路径集中的每条路径 最强,采用路径测试方法可以有效地检测程序错误。当存在 具有下列特点: 分支语句、循环语句的情况时 ,程序中的路径数目变得很 1)每一条路径都是一条独立路径; 大,在有限的测试资源下,该方法可以进行路径测试。 2)程序中所有的边都被访问; l 已有的路径生成方法 3)程序中的所有的、不属于该基本路径集的路径都可以 基于基本路径集的测试,首先需要确定待测试的路径。 由这个基本路径集中的路径经过线性运算得到。 目前已有的路径生成方法为: 基本路径集中的每一条程序路径称为一条基本路径。 (1)采用遗传算法进行路径生成的方法 j。该方法首先确 (4)程序路径问的线性运算。某一程序的CFG见图1。 定一个表示程序路径的种群,用遗传算子对这一种群进行处 理,并得到新的路径集。 (2)A.Bertolino利用简化的控制流图来确定程序路径。该 方法从程序的控制流图出发,建立程序的DT(dominate tree) 和IT(implication tree),通过构造2个相邻控制节点之间的子 图的方法来确定两个控制节点之间的所有的路径,从而生成 测试路径。这些方法为生成程序的路径提供了帮助,但不能 保证生成的路径集是基本路径集。 针对已有的路径生成方法中存在的问题,本文提出了一 种基于控制流图广度优先搜索的基本路径生成方法。 图1某一程序的CFG 2基本路径集自动生成方法 2.1相关概念 作者简介:张广梅(1972一),女,博士、副教授,主研方向:软件可 (1)程序的路径。程序的路径是程序中顺序执行的一个语 靠性评估,软件测试;李晓维,研究员、博士生导师;韩丛英,博 句序列。从CFG的角度来看,程序路径是由控制流图中的一 士研究生、讲师 系列节点组成。 收稿日期:2006—12—25 E-mail:lotus@sdau.edu.cn 维普资讯 http://www.cqvip.com 在程序路径的适当位置上增加或删除边,可以构造新的 程序路径。用加法运算表示在路径上增加边,用减法运算表 示删除路径上的边,则一条程序路径可以通过路径之间的线 _(4)如果新选定边的弧头节点不在已经建好的子路经 pathnode set[1..count一1】中,并且存在从节点node出发到程 序出13的一个子路径to_end__path[node】,则调用merge_two_ subpath,将path_node_set【l—count-l l和to_end_path[node]合 并成一条路经,转(1);否则,转(5)。 性运算表示。式(2)表示了一条新的程序路径可以通过其他程 序路径间的线性运算得到,其中,abcef,abcdcef,abcdcdcdcef 表示了图1中的3条路径。 cd=abcdce ̄abcdef (1) abcdcdcdcef=3 (abcdcef-abcef)+abcef=3 abcdce ̄2 abcef (2) 2.2从多入度节点封程序出口节点的子路径的生成 CFG中存在多入度的节点。在一个基本路径集中,经过 多入度节点的基本路径数目不能少于该节点的入度,否则, 表示程序中有未被访问过的边。为减少路径生成过程中的搜 索过程,在生成一条基本路径时,如果已经构建好的基本路 径中包含经过多入度节点的子路径,则记录下该子路径,在 新的基本路径生成过程中,如果遍历到了多入度的节点,可 以利用已经存在的子路径构造新的独立路径。 2-3基本路径构造过程中边的选取规月 规lU 1在构造基本路径过程中,选择的边不应该导致程 序路径中存在环。如果不限定边的选取原则,路径生成过程 可能不会停止;并且考虑到基本路径集的特点,在基本路径 生成的过程中,避免生成的路径中存在环。 规月2根据规则1,如果不允许生成的路径中存在环, 会导致程序中的部分边不能被覆盖。为避免这种情况出现, 在遍历过程中,如果新边的选取使得程序路径中存在环,则 停止搜索过程,生成一个待合并的、从程序入13节点引出的 到新选择边的弧首节点的程序子路径。 2.4基本路径集自动生成方法 在讨论基本路径集的生成之前,给出下面的假设。 假设1从CFG的入13节点到其他的任意一个节点都是 可达的。 假设2 CFG中的任意节点到程序的出13节点之间存在程 序路径。 上述两个假设保证了程序中不存在不可达程序代码和无 用的程序代码。 基本路径生成通过对CFG的深度优先搜索来完成。应用 程序的CFG可以通过各种可视化的图形工具获得,如: daVinci,vectorcast等。基本路径集生成算法的步骤如下: (1)定义并初始化存放程序路径的数组。 (2)调用函数为 GENERATE—BASISPATH~SET(node,count) 从CFG的第一个节点出发,进行基本路径的生成。 (3)对所有的路径,即 fromstartpathinclude_cycle[1..n】 进行合并,生成一条程序路径。 算法基本路径集自动生成方法 下面对GENERATE_BASIS—PATH_SET算法进行介绍: (1)如果count<O,算法结束;如果count>=O,调用 ifneneware(node)函数,查找以node为弧尾的边,如果没有 找到,转(2),否则,转(3)。 (2)count=count一1.node=path set node[count】,转(1)。 (3)将新选定边的弧头节点写入path—set—node数组中,如 果该节点是CFG中的最后一个节点,则调用 createaindependencepath createa—._subpathto—._end —.建立到达CFG出13节点的独立路径和子路经,转(1);否则, 转(4)。 一196一 (5)如果新选定边的弧头节点不在已经建好的子路经 path—node set[1一count一1】中,调用create—a_cycle—subpath,该 函数用path—node set[1..n】中的节点和node节点来创建一条 从CFG的入13节点到node节点的、包含环的子路径,转(1), 否则,转(6)。 (6)将新选定边的弧头节点加入到子路经path_node —set[1..count】中,并将count值增1,转(1)。 3算法功售正确性证啊 算法功能正确性证明如下: (1)每条程序路径都是独立路径。由2.4节的算法构造过 程可知,在对图进行深度优先搜索过程中,对于遇到新的边 可以进行如下工作: 1)如果新边的弧首节点是CFG的出口节点,则利用访问 到的节点生成一条从入口节点到出口节点的程序路径。 2)如果新边弧首节点是一个多入度节点,并且存在一条 从该节点出发到出13节点的子路径,则停止搜索,并将这两 条子路径合并成一条程序路径。 3)如果新边的引入会造成访问过的子路径中存在环,停 止搜索过程并记录这条子路径。 4)如果上述情况都不满足,继续搜索该边的后继。 在这4种情况下,生成的路径或子路径中包含独立的边, 通过该方法得到的程序路径是独立路径。 (2)程序中所有的边都被访问。由2.4节中的算法可以看 到,路径的生成是借助于一个存放CFG节点的栈来实现的, 通过在所有以栈顶节点作为弧尾的边中选择合适的边来生成 基本路径。当栈空时,算法停止,因此,所有以栈中的节点 为弧尾的边都将被访问。 根据2.4节中的路径生成特点,生成程序路径中的所有 点都进栈一次。如果存在CFG中的某些节点没有进栈,则表 示在生成的所有的程序路径中均不包含这些节点,与假设2 相矛盾。由此得出结论:程序中所有的边都被访问到。 (3)任何一条不属于某一基本路径集的程序路径都可以 由该基本路径集中的路径之间的线性运算得到。对于程序的 某一个基本路径集,p(0)为不包含在该基本路径集中的一条 程序路径,称这条路径为目标路径。为证明该问题,首先需 要对下面的引理进行证明: 引理对于任意一个基本路径集和关于该基本路径集的 一条目标路径,至少存在该目标路径的一个标准划分 fspl,sp2,…,sp ),划分中的每一个子路径sp 属于该基本路径 集中的某一条基本路径。 下面采用反证法对该引理进行证明。 对于给定的一个基本集和关于该基本集的一条目标路 径,假设不存在该目标路径的一个标准划分使得标准划分中 的每一个子路径分别属于该基本路径集中的一条基本路径, 即在该目标路径的任意一个标准划分中,至少存在一条子路 径,该子路径不属于该基本集的任何一条基本路径,这表示 存在着程序中的某些边,这些边没有包含在任何一条基本路 径中,这与路径集合是基本路径相矛盾。 维普资讯 http://www.cqvip.com 由引理可以得到,任何一条目标程序路径可以划分成 苇 ④ 基。 a,b,c出现一次;b,d出现i次,即 萤。苫。 n个片断,其中每一个片断均来自于生成的基本路径集中的 ab(db) c=i (abdbc)一(f—1) (abc) 独立路径。按照这目标路径中是否存在环,本问题的证明可 以分为2种情况:(1)目标程序中的n个程序片断各不相同; (2)目标程序中的n个程序片断中存在着相同的程序片断。 6 对于目标路径中是否存在环的情况,可以进行如下分析: (1)目标路径不存在环的情况。图2给出了一条目标路径 和基本路径集。 ①Jr 。 圈4包含环的程序路径 圭圭圭 圭。 章』 4实验结果 本文利用中科院计算所开放源码的编译器(open resource compiler,ORC)前端工作的结果,实现了上述基本路 径生成算法。利用该程序,以SPEC2000基准程序库中的程 序作为待测对象,得到表1。表1为基准程序的基本信息, 包含程序的名称、代码行数、函数个数、基本块个数,path 列为在假定程序中全部路径可达的基础上基本路径生成算法 所生成的程序基本路径个数。 表1基准程序分析结果 按照2.4节的方法,如果构造的基本路径集中包含图2 所示的n条边,则路径集中肯定包含图3中所示的n一1条基 本路径(每条路径用虚线连接),则对这2n一1条基本路径进行 如下式所示的线性运算,则可以得到目标路径,即 0)= 1)+ 2)+…+ 哪一 1 一 23…‘ n一13 5结束语 在对软件进行路径测试时,测试路径的选择可以提高软 件测试的效率。本文提出了基于图广度优先搜索的基本路径 生成方法。为减少路径生成过程中的搜索过程,在生成每一 条程序路径时,对于生成路径中的多入度的节点,构造从该 点出发的程序子路径,为后继路径的生成提供了帮助。 参考文簟 1 Institute of Electrical and Electronics Engineers.Glossary of Software 圈3第2赧程序路径 Engineering Terminology[Z].1991. 2 Van Nostrnad Reinhold Company.Software Sys ̄m Testing[Z].1990. (2)目标路径中包含环的情况。目标程序路径中的某些段 3 Frankl P G Weyuker E J.An Applicable Family of Data Flow Tesitng 被多次重复时,该程序路径仍然可以通过基本路径集中的路 Criteria[J].IEEE Transactions on Software Engineering,1988,14(10) 径通过线性运算得到。为讨论方便起见,假设给定的程序路 1483—1498. 径为ab(db) c(i=l,2,…,n),其中,a,b,c,d表示CFG中的一段 4 Zhu H,Hall May J.Software Unit Test Coverage and Adequacy[J]. 子路径。则a,b,c,d之间的关系见图4。由a,b,c,d组成的路径 ACM Computing Surveys,1997,29(4):366—427. abc,abdbc均为程序路径,如果这两条路径不属于生成的基本 5 Bint J R,Site R.Optimizing Testing Efifciency with Error Prone Path 路径集,由上面的讨论可以知道,这两条路径可以由基本路 Identiifcation and Genetic Algorithms[C]//Proc.of Australian 径集经过线性运算得到,并由下式计算得到程序路径,其中, Software Engineering Conference.2004:106—1 15. …………………………………………………………………………………………………~ (上接第194页) 4 结束语 路识别[JI.计算机工程与应用,2004,41(26):18—21. 本文对CCD摄像机获取的图像进行了分析和研究,论述 2朱虹.数字图像处理基础[M】.北京:科学出版社,2005. 了如何通过实时图像获得车辆行驶参数,并由此判断汽车驾 3 Lin Guangyu,Wei Lang,Chen Tao.Study of Embedded On—board 驶员的行驶状态。这适用于及时监控驾驶员工作状态以及适 Information Image Monitoring System[C]//Proceedings of the 13th 时警示驾驶员;并且有益于交管部门掌握驾驶员的工作状况, International Paciifc Conference on Automotive Engineering 更加便于管理;特别地,本系统可以有效预防长途客车由于 rPoceedings.2005. 驾驶员疲劳驾驶、超速驾驶、占道行驶造成的交通事故,是 4 Andreone L,Antonello P C,Bertozzi M,et a1.Vehicle De ̄ction and 车辆主动安全技术的深入扩展。 Localization in Infra—red Images[C]//Proceedings of the IEEE 5th 参考文献 International Conference on Intelligent Transportation Systems. l王荣本,游峰,崔高健,等.基于计算机视觉高速智能车辆的道 2O02. 197一
因篇幅问题不能全部显示,请点此查看更多更全内容