白盒测试技术案例详解.doc_第1页
白盒测试技术案例详解.doc_第2页
白盒测试技术案例详解.doc_第3页
白盒测试技术案例详解.doc_第4页
白盒测试技术案例详解.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

白盒测试白盒测试技术案例详解技术案例详解 白盒测试白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、 基本路径测试法、域测试、符号测试、Z 路径覆盖、程序变异。 其中运用最为广泛的是基本路径测试法。 基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出 基本可执行路径集合,从而设计测试用例的方法。 设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。 在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集 合,从而设计测试用例。包括以下 4 个步骤和一个工具方法: 1. 程序的控制流图:描述程序控制流的一种图示方法。 2. 程序圈复杂度:McCabe 复杂性度量。从程序的环路复杂性可导出程序基本路径集 合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数 目的上界。 3. 导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。 4. 准备测试用例:确保基本路径集中的每一条路径的执行。 工具方法: 图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定 一个基本路径集。 程序的控制流图:描述程序控制流的一种图示方法。 圆圈称为控制流图的一个结点,表示一个或多个无分支的语句或源程序语句 流图只有二种图形符号: 图中的每一个圆称为流图的结点,代表一条或多条语句。 流图中的箭头称为边或连接,代表控制流 任何过程设计都要被翻译成控制流图。 如何根据程序流程图画出控制流程图? 在将程序流程图简化成控制流图时,应注意: n 在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。 n 边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。 如下图所示 n 如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND, NAND, NOR) 连接的 复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。 例如: 1 if a or b 2 x 3 else 4 y 对应的逻辑为: 独立路径:至少沿一条新的边移动的路径 基本路径测试法的步骤: o 第一步:画出控制流图 流程图用来描述程序控制结构。可将流程图映射到一个相应的流图(假设流程图的菱形 决定框中不包含复合条件)。在流图中,每一个圆,称为流图的结点,代表一个或多个语句。 一个处理方框序列和一个菱形决测框可被映射为一个结点,流图中的箭头,称为边或连接, 代表控制流,类似于流程图中的箭头。一条边必须终止于一个结点,即使该结点并不代表 任何语句(例如:if-else-then 结构)。由边和结点限定的范围称为区域。计算区域时应包 括图外部的范围。 画出其程序流程图和对应的控制流图如下 第二步:计算圈复杂度 圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序 的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。独立路径必须 包含一条在定义之前不曾用到的边。 有以下三种方法计算圈复杂度: 流图中区域的数量对应于环型的复杂性; 给定流图 G 的圈复杂度 V(G),定义为 V(G)=E-N+2,E 是流图中边的数量,N 是流图中 结点的数量; 给定流图 G 的圈复杂度 V(G),定义为 V(G)=P+1,P 是流图 G 中判定结点的数量。 第三步:导出测试用例 根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路 径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独 立路径的条数。) 路径 1:4-14 路径 2:4-6-7-14 路径 3:4-6-8-10-13-4-14 路径 4:4-6-8-11-13-4-14 根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。 o 第四步:准备测试用例 为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的 数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是: 举例说明: 例:下例程序流程图描述了最多输入 50 个值(以1 作为输入结束标志),计算其中有 效的学生分数的个数、总分数和平均值。 步骤 1:导出过程的流图。 步骤 2:确定环形复杂性度量 V(G): 1)V(G)= 6 (个区域) 2)V(G)=EN+2=1612+2=6 其中 E 为流图中的边数,N 为结点数; 3)V(G)=P+1=5+1=6 其中 P 为谓词结点的个数。在流图中,结点 2、3、5、6、9 是谓词结点。 步骤 3:确定基本路径集合(即独立路径集合)。于是可确定 6 条独立的路径: 路径 1:1-2-9-10-12 路径 2:1-2-9-11-12 路径 3:1-2-3-9-10-12 路径 4:1-2-3-4-5-8-2 路径 5:1-2-3-4-5-6-8-2 路径 6:1-2-3-4-5-6-7-8-2 步骤 4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行 一次。 1)路径 1(1-2-9-10-12)的测试用例: scorek=有效分数值,当 k =“) 4. m_oper.SetCurSel(0); 5. else 6. 7. if (temp = = “) 8. m_oper.SetCurSel(1); 9. else 10. 11. if ( temp = = “= =“) 12. m_oper.SetCurSel(2); 13. else 14. 15. if( temp = = “=” ) m_oper.SetCurSel(0) Path 2 ReadPara(” ) m_oper.SetCurSel(1) Path 3 ReadPara(”=” ) m_oper.SetCurSel(2) Path 4 ReadPara(”3) /语句块 2 9.j=j%3; /语句块 3 10. LCSAJ(5 个): (1)int k=0,j=0; if ( (x3) j=j%3 (5)j=j%3 LCSAJ 路径(4 条): (1)-(2)-(4) (1)-(2)-(5) (1)-(3)-(4) (1)-(3)-(5) 7、为什么要进行白盒测试? 原因有三,如下: 逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。 我们经常相信某逻辑路径不可能被执行,而事实上,它可能在正常的基础上被执行。 印刷上的错误是随机的。 8、白盒测试用例测试方法 1、 语句(statement)覆盖:语句覆盖是最起码的结构覆盖要求,要求设计足够多的测试 用例,使得程序中每条可执行语句至少被执行一次。 2、判定(branches)覆盖/分支覆盖:要求设计足够多的测试用例,使得程序中每个判定 至少有一次为真值,有一次为假值,即:程序中的每个分支至少执行一次。 3、条件(condition)覆盖:要求设计足够多的测试用例,使得判定中的每个条件至少有 一次为真值,有一次为假值。 4、判定/条件(branches/condition)覆盖:设计足够多的测试用例,使得判定中每个条 件的所有可能结果至少出现一次,每个判定本身所有可能结果也至少出现一次。 5、组合覆盖:要求设计足够多的测试用例,使得每个判定中条件结果的所有可能组合至少 出现一次。 6、路径覆盖:设计足够的测试用例,覆盖程序中所有可能的路径 下面举例说明:下面举例说明: 语句覆盖(SC): 程序中的每条词句至少执行一次 如针对以下程序段,对于变量 c 的取值,至少需要(61)个测试用例才能够满足语句覆 盖的要求。 c = (u8_t *)q-payload)i; switch (c) case SLIP_END: sio_send(SLIP_ESC, netif-state); sio_send(SLIP_ESC_END, netif-state); break; case SLIP_ESC: sio_send(SLIP_ESC, netif-state); sio_send(SLIP_ESC_ESC, netif-state); break; default: sio_send(c, netif-state); break; (61)A4 B.3B.3 C2 D 1 判定覆盖(DC) 设计足够测试用例,使得程序中的每个判定至少都获得一次“真值”或“假值”,或都 说使得程序中的每一个取“真”或“假”分支至少经历一次,因些判定覆盖又称分支覆盖。 A else if ( 100 = Type ) x = y + 10; else x = y - 20; (62)A5 B 4 C C 3 3 D 2 测试用例:(1,10),(1,100),(1,200) 条件覆盖(CC): 构造一组测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次 A switch (c) case SLIP_END: sio_send(SLIP_ESC, netif-state); sio_send(SLIP_ESC_END, netif-state); break; case SLIP_ESC: sio_send(SLIP_ESC, netif-state); sio_send(SLIP_ESC_ESC, netif-state); break; default: sio_send(c, netif-state); break; (61)A4 B.3B.3 C2 D 1 针对以下 C 语言程序段,对于(MaxNum,Type)的取值,至少需要(62)个测试用例能够 满足判定覆盖的要求。 while ( MaxNum- 0 ) if ( 10 = Type ) x = y * 2; else if ( 100 = Type ) x = y + 10; else x = y - 20; (62)A5 B 4 C C 3 3 D 2 假设 A、B 为布尔变量,对于逻辑表达式( A else if (temp = “) m_oper.SetCurSel(1); else if ( temp = “=“) m_oper.SetCurSel(2); else if( temp = “= 1 min = b; else max = b; min = a; if( max c ) /*判断 3*/ min = c; printf( “max=%dnmin=%d“, max, min ); return 0; 问题 1(3 分) 请画出该程序段的控制流图,并分析该控制流图中有多少条线性独立路径(V(G)的值) 。 V(G)=4,即有 4 条线性独立路径。 问题 2(2 分) 为了用分支(判定)覆盖方法测试该程序,需要设计测试用例,使其能对该程序中的每个 判断语句的各种分支情况全部进行过测试。 对两组输入数据(1)a=3,b=5,c=7;(2)a=4,b=6,c=5,请分别写出程序中各个判断 语句的执行结果(以 T 表示真,以 F 表示假) ,填入答题纸的相应栏中。 用例序号判断 1判断 2判断 3 1(a=3,b=5,c=7 ) F T (没有运行到) 2(a=4,b=6,c=5 ) FFF 问题 3(5 分) 上述两组测试数据是否能实现该程序的分支(判定)覆盖?如果能,请说明理由。如果不 能,请再增设一组输入数据,使其能实现分支(判定)覆盖。 不能。abc 如 a=7,b=6,c=5 用例序号判断 1判断 2判断 3 1(a=3,b=5,c=7 ) F T (没有运行到) 2(a=4,b=6,c=5 FFF ) 3(a=7,b=6,c=5) TFT 试题试题 5 5(1010 分分 ) (20092009 年)年) 阅读下列说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。 说明 逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖,是设计白盒测试用例的主要 方法之一。以下代码由 C 语言书写,请按要求回答问题。 void cal( int n ) int g, s, b, q; if ( ( n 1000 ) j=x*y+10; 9 9 j=j%3;j=j%3; 1010 说明:程序段中每行开头的数字(说明:程序段中每行开头的数字(110110)是对每条语句的编号。)是对每条语句的编号。 (1 1)画出程序的控制流图(用题中给出的语句编号表示)画出程序的控制流图(用题中给出的语句编号表示) 。 (2 2)简述什么是测试用例。简述什么是测试用例。白盒测试的动态测试要根据程序的控制结构设计测试用例简白盒测试的动态测试要根据程序的控制结构设计测试用例简 述其原则。述其原则。 (3 3)分别以语句覆盖、判定覆盖、条件覆盖、判定分别以语句覆盖、判定覆盖、条件覆盖、判定/ /条件覆盖、条件组合覆盖、路径覆条件覆盖、条件组合覆盖、路径覆 盖方法设计测试用例,并写出每个测试用例的执行路径(用题中给出的语句编号表盖方法设计测试用例,并写出每个测试用例的执行路径(用题中给出的语句编号表 示)示) 。 参考答案:参考答案: (1 1)程序控制流图程序控制流图 (2 2)测试用例:测试用例: 就是将软件测试的行为活动作一个科学化的组织归纳。测试用例是为特定的目的而设计的 一组测试输入、执行条件和预期的结果。执行的最小实体。 测试用例应包括:测试目标和被测功能、测试环境和其他条件、测试数据和测试步骤。 白盒测试的动态测试要根据程序的控制结构设计测试用例,原则是 1)、保证一个模块中的所有独立路径至少被使用一次 2)、对所有逻辑值均需测试 true 和 false 3)、在上下边界及可操作范围内运行所有循环 4)、检查内部数据结构以确保其有效性。 (3 3)设计的测试用例如下:设计的测试用例如下: 覆盖策略覆盖策略测试用例测试用例执行路径执行路径 语句覆盖语句覆盖(SC)(SC) X=4X=4 y=5y=5 z=5z=5245789245789 判定覆盖(判定覆盖(DCDC) X=4X=4 y=5y=5 z=5z=5 X=2X=2 y=5y=5 z=5z=5 245789245789 279279 条件覆盖(条件覆盖(CCCC) X=2X=2 y=6y=6 z=5z=5 X=4X=4 y=5y=5 z=15z=15 27892789 27892789 判定判定/ /条件覆盖(条件覆盖(CDCCDC) X=4X=4 y=6y=6 z=5z=5 X=2X=2 y=5y=5 z=15z=15 245789245789 279279 条件组合覆盖(条件组合覆盖(MCCMCC) X=4X=4 y=6y=6 z=5z=5 X=4X=4 y=5y=5 z=15z=15 X=2X=2 y=6y=6 z=5z=5 X=2X=2 y=5y=5 z=15z=15 245789245789 27892789 27892789 279279 路径覆盖路径覆盖 X=4X=4 y=6y=6 z=5z=5 X=4X=4 y=5y=5 z=15z=15 X=5X=5 y=5y=5 z=5z=5 X=2X=2 y=5y=5 z=15z=15 245789245789 27892789 2457924579 279279 (x3)L2:abd;L3:abe;L4:acd. 小王设计了 4 组测试用例: (1,0,3) , (1,0,4)覆盖 ace;(2,1,1) , (2,1,2)覆盖 ace; (2,1,1) , (2,1,2)覆盖 abe;(3,0,3) , (3,0,1)覆盖 acd; (2,0,4) , (2,0,3)覆盖 ace;(1,0,3) , (1,0,4)覆盖 abe; (2,1,1) , (2,1,2)覆盖 abe;(1,1,1) , (1,1,1)覆盖 abd; (2,0,4) , (2,0,3)覆盖 ace;(1,1,1) , (1,1,1)覆盖 abd; (1,1,2) , (1,1,3)覆盖 abe;(3,0,3) , (3,0,1)覆盖 acd; 这 4 组测试用例中(5)属于判定覆盖;(6)属于条件覆盖;(7)属于路径覆盖; (8)属于条件组合覆盖。 (注意:该题测试用例格式为(A,B,X)输入, (A,B,X)输 出) 。 (5)(5) (6) (7) (8) 从供选择的答案中,选出应填入_n_内的正确答案,把编号写在答卷的对应栏内。 在用白盒法设计测试用例时,常用的五种覆盖标准是:语句覆盖,判别覆盖,条件 覆盖,判别条件覆盖,多重条件组合覆盖。 假设 A 和 B 是两种覆盖标准,我们用 AB 表示 A 包含 B,用 AB 表示 B 包 含 A ,用 AB 表示 A 与 B 相同,用 AB 表示 A 和 B 互不包含。于是上述五种覆盖 标准之间的某些关系可表示为; 语句覆盖 _A_ 判别覆盖语句覆盖 _B_ 条件覆盖 判别覆盖 _C_ 条件覆盖 判别覆盖 _D_ 判别条件覆 盖 判别条件覆盖 _E_ 多重条 件组合覆盖 供选择的答案 AE: 参考答案: 案例十、案例十、白盒测试方法静态测试白盒测试方法静态测试 下面给出的C+程序类CoinBox用于实现一个简单的饮料自动售货机,该售货机只接受5角 的人民币硬币,一个饮料的售价是2元人民币。 (1) 当5角硬币投入机器时调用函数addHalf (2) 当按下退回硬币按钮时调用函数returnHalfs (3) 当按下按钮给出饮料时调用函数vend (4) 当可以给出饮料时变量allowVend置为1,否则置为0 要求:对下面的程序执行代码走查(其中行号仅用于标识,不是代码的一部分),直接在 代码上指出错误所在之处(不包括注释问题),简要说明理由并改正错误。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 Class CoinBox unsigned total; unsigned curHalfs; unsigned allowVend; Public: CoinBox() total = 0; allowVend = 0; curHalfs = 0; void returnHalfs() curHalfs = 0; void addHalf() curHalfs = curHalfs + 1 if ( curHalfs 3 ) allowVend = 1; void Vend() if ( allowVend ) total = total + curHalfs; curHalfs = 0; allowVend = 0; ; 参考答案:参考答案: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 Class CoinBox unsigned total; unsigned curHalfs; unsigned allowVend; Public: CoinBox() total = 0; allowVend = 0; curHalfs = 0; void returnHalfs() curHalfs = 0; void addHalf() curHalfs = curHalfs + 1 if ( curHalfs 3 ) allowVend = 1; void vend() if ( allowVend ) total = total + curHalfs; curHalfs = 0; allowVend = 0; ; 案例十一、如下程序请用基本路径测试法,设计其测试用例。案例十一、如下程序请用基本路径测试法,设计其测试用例。 voidvoid SortSort ( ( intint iRecordNum,iRecordNum, intint iTypeiType ) ) 1 1 2 2 intint x=0;x=0; 3 3 intint y=0;y=0; 4 4 whilewhile ( ( iRecordNum-iRecordNum- 0 0 ) ) 5 5 6 6 IfIf ( ( iType=0iType=0 )

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论