《软件测试牛倩第五章白盒测试上机作业.ppt》由会员分享,可在线阅读,更多相关《软件测试牛倩第五章白盒测试上机作业.ppt(60页珍藏版)》请在三一文库上搜索。
1、软件测试,第五章 白盒测试 牛倩,黑盒测试,等价类划分 边界值分析 因果图 决策表,本章要点,白盒测试的含义 白盒测试无法实现穷举测试的原因 白盒测试的优点和局限性 白盒测试中的静态测试和动态测试 逻辑覆盖法、基本路径测试及控制结构测试 白盒测试方法的综合使用策略,什么是白盒测试?,白盒测试也称结构测试或逻辑驱动测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。 测试人员利用程序的内部逻辑结构和相关信息,对程序的内部结构和路径进行测试,检验其是否达到了预期的设计要求。,谁来负责白盒测试?,白盒测试一般由软件开发人员进行 在集成测试阶段,如果需要白盒测试,则由有经验的测试人员和软件开
2、发人员共同完成。,有了黑盒测试为什么还要白盒测试?,白盒测试是一种主要的单元测试方法。如果基础单元不能保证质量,则会给后续测试工作带来很多困难。 黑盒测试只能观察软件的外部表现,即使软件的输入输出都是正确的,却并不能说明软件就是正确的。因为程序有可能用错误的运算方式得出正确的结果,例如“负负得正,错错得对”,只有白盒测试才能发现真正的原因。 白盒测试能发现程序里的隐患,象内存泄漏、误差累计问题。在这方面,黑盒测试存在严重的不足。,白盒测试的优点,与黑盒测试相比,白盒测试深入到程序的内部进行测试,更易于定位错误的原因和具体位置,弥补了黑盒测试只能从程序外部进行测试的不足。,白盒测试的局限性,即使
3、白盒测试覆盖了程序中的所有路径,仍不一定能发现程序中的全部错误。这是因为: 白盒测试不能查出程序中的设计缺陷。 白盒测试不能查出程序是否遗漏了功能或路径。 白盒测试可能发现不了一些与数据相关的错误。,白盒测试的主要目的,保证一个模块中的所有独立路径至少被执行一次; 对所有的逻辑值均需要测试真、假两个分支; 在上下边界及可操作范围内运行所有循环; 检查内部数据结构以确保其有效性。,白盒测试的方法及分类,白盒测试分为静态测试和动态测试两大类。 静态测试:代码检查法、静态结构分析法、代码质量度量法等。 动态测试:逻辑覆盖法、基本路径测试法、控制结构测试、程序插桩等。,静态白盒测试(略),代码检查法
4、代码检查包括桌面检查、代码审查和走查等。 代码检查主要检查代码和设计的一致性,代码是否遵循标准,代码的可读性,代码的逻辑正确性,代码结构的合理性等。 代码检查应在编译和动态测试之前进行,并且应尽早进行。,静态白盒测试(略),静态结构分析法 静态结构分析主要是以图形的方式表现程序的内部结构,供测试人员对程序结构进行分析。 在静态结构分析中,测试人员通过使用测试工具分析程序源代码的系统结构、数据结构、数据接口、内部控制逻辑等内部结构,生成函数调用关系图、模块控制流图、内部文件调用关系图、子程序表、宏和函数参数表等各类图形图表,以清晰地表示程序的内部结构,供测试人员对其进行分析,进而查找程序中的错误
5、。,静态白盒测试(略),代码质量度量法 根据ISO/IEC 9126国际标准的定义,软件质量包括以下 六个方面: 功能性(Functionality) 可靠性(Reliability) 可用性 (Usability) 效率 (Efficiency) 可维护性(Maintainability) 可移植性(Portability) 可根据ISO 9126质量模型构造软件的静态质量度量模 型,通过量化的数据评估被测程序的质量。,逻辑覆盖法,逻辑覆盖法(Logic-coverage Testing)是以程序内部的逻辑结构为基础设计测试用例的方法。 根据对程序内部的逻辑结构的覆盖程度,逻辑覆盖法具有不同
6、的覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、修正条件判定覆盖。,例子程序(画出程序控制流图):,if( (a1) ,程序框图,1.语句覆盖,设计若干条测试用例,使程序中每条可执行语句至少执行一次。,语句覆盖,Case1:A=2, B=0, X=3,语句覆盖,Case2:A=2, B=1, X=3,此语句未覆盖,语句覆盖,Case1:A=2, B=0, X=3,语句覆盖是最弱的覆盖,语句覆盖,2. 判定覆盖(分支覆盖),设计测试用例,使程序中的每个逻辑判断的取真和取假的分支至少经历一次。,第一组:Case1:A=2, B=0, X=3,(A1) AND (B=0),(A
7、=2) OR (X1),X=X/A,X=X+1,F,F,T,T,判定覆盖,第一组:Case3:A=1, B=0, X=1,(A1) AND (B=0),(A=2) OR (X1),X=X/A,X=X+1,F,F,T,T,判定覆盖,判定覆盖无法确定判定内部条件的错误。,(A1) AND (B=0),(A=2) OR (X1),X=X/A,X=X+1,F,F,T,T,错写成X1,判定覆盖,Case4:A=3, B=0, X=3 Case5:A=2, B=1, X=1,因此判定覆盖仍是弱的覆盖标准。,例:,说明:以上仅考虑了两出口的判断,我们还应把判定覆盖准则扩充到多出口判断(如Case语句)的情况
8、。因此,判定覆盖更为广泛的含义应该是使得每一个判定获得每一种可能的结果至少一次。,判定覆盖,3.条件覆盖,设计若干测试用例,使程序的每个判定中的每个条件的可能取值至少满足一次 上例中设条件: A1 T1 F1 B=0 T2 F2 A=2 T3 F3 X1 T4 F4,取真表为,取假表为,满足条件覆盖的一组测试用例,3.条件覆盖,条件覆盖,Case6:A=2, B=1, X=1 Case7:A=1, B=0, X=3,两个测试用例覆盖了四个条件八种可能取值。但未覆盖c、d分支,不满足判定覆盖的要求。,条件覆盖,4.判定-条件覆盖,使判定中每个条件的可能取值至少满足一次,并且使每个判定分支至少执行
9、一次。 判定-条件覆盖能同时满足判定、条件两种覆盖标准。,满足判定-条件覆盖的一组测试用例,判定-条件覆盖,Case1:A=2, B=0, X=3,判定-条件覆盖,Case8:A=1, B=1, X=1,判定-条件覆盖,5.条件组合覆盖,设计用例,使得每个判断表达式中条件的各种可能组合都至少出现一次;,上例中需考虑4个条件的8种组合 A 1, B = 0 T1 T2 判定一为真 A 1, B0 T1 F2 A1, B = 0 F1 T2 判定一为假 A1, B0 F1 F2 A = 2,X 1 T3 T4 A = 2,X1 T3 F4 判定二为真 A2,X1 F3 T4 A2,X1 F3 F4
10、 判定二为假,条件组合覆盖,满足条件组合覆盖的一组测试用例,条件组合覆盖,6.路径覆盖,设计足够多的测试用例,覆盖程序中的每条可能路径。 上述满足条件组合覆盖的测试用例不能覆盖路径acd。,满足路径覆盖的一组测试用例,路径覆盖,小结,习题,为以下流程图所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖。,路径测试,控制流图 程序环路复杂性 基路径测试 循环测试,控制流图,控制流图是退化的程序流程图,图中每个处理都退化成一个结点,流线变成连接不同结点的有向弧。 控制流图将程序流程图中结构化构件改用一般有向图的形式表示。,控制流图,在控制流图
11、中用圆“”表示节点,一个圆代表一条或多条语句。 控制流图中的基本元素: 节点 边,Q:while控制流和until控制流的区别?,基本控制流图,复合逻辑下的控制流图,(a),(b),(c),路径覆盖的困难 含4个分支 循环次数20 从A到B的可能路径:,问题引入,1. 程序环路复杂性,程序的环路复杂性又叫圈复杂度: 是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目。 独立路径必须包含一条在定义之前不曾用到的边。(每一条新的路径都包含了一条新边),程序环路复杂性计算方法(三种): V(G)= e - n + 2p e:边数,n:节点数,p:连接区域数 当p=
12、1时,V(G)= e - n + 2; V(G)=P+1 P是图G 中判定节点的数量 程序图中区域的数量等于圈复杂度 对于强连接图的圈复杂度的计算: V(G)= e - n + p;,1. 程序环路复杂性 (续),例:如下图所示的程序环路复杂性是多少?,图形矩阵,为什么要用图形矩阵? 导出控制流图和决定基本测试路径的过程均需要机械化,为了开发辅助基本路径测试的软件工具,称为图形矩阵的数据结构很有用。 什么是图形矩阵? 有m个节点的控制流图矩阵,是一个mm矩阵:A=( a (i,j) ),其中a(i,j)是1,当且仅当从节点i到节点j有一条弧,否则该元素为0。,例:,什么是基本路径测试? 把覆盖
13、的路径数压缩到一定限度内,例如程序中的循环体只执行零次和一次,就成为基路径测试。 通过分析程序控制流图的环路的复杂性,导出基本路径集合,从而设计测试用例,保证这些路径至少通过一次。,2.基本路径测试法,2.基本路径测试法,基本路径测试步骤: 1.导出程序的控制流图; 2.计算控制流图的环路复杂度V(G); 3.确定只包含独立路径的基本路径集; 4.设计测试用例;,习题4,应用基本路径法给出测试用例。(见kp83),main() char c; int i=0,j=0,k=0; c=getchar(); while (c!=#) if (c=A ,习题3 解答,3.程序插桩,程序插桩是一种通过向
14、被测程序中插入操作来发现和定位错误的方法。在单元测试中运用较多。 在测试或调试程序时,常常需要在程序中插入一些打印语句,使其在程序执行过程中能打印出我们关心的信息,通过这些信息来了解程序执行过程中的动态特性,如程序的实际执行路径、程序中某语句的执行次数、程序中各路径的被覆盖程度、程序中某变量在特定时刻的值等。这些是可以通过程序插桩来完成的。,下面以计算整数X和整数Y的最大公约数的程序为例,来说明程序插桩方法的要点。计算整数X和整数Y的最大公约数的程序流程图如图4-9所示。 图4-9中的虚线框是为了记录语句的执行次数而插入的,其形式为: C(i) = C(i) +1 i=1,2,6 程序从入口开
15、始执行到出口结束执行,经过的计数语句记录下该程序点语句的执行次数。若在程序的入口处插入了对计数器C(i)初始化的语句,在程序出口处则插入打印这些计数器的语句,则构成了一个完整的插桩程序。,3.程序插桩,设计程序插桩方法时需考虑如下问题: 应探测程序中的哪些信息。 在程序的什么位置设置探测点。,4.3 白盒测试方法的综合使用策略,静态测试和动态测试的时序关系 一般可先进行静态测试,接着进行动态测试。 白盒测试的重点 覆盖率测试是白盒测试的重点,一般可使用基本路径测试方法来使基本路径集合中的每条独立路径至少执行一次。 不同测试阶段使用的白盒测试方法 在单元测试阶段,以代码检查法、逻辑覆盖法、基本路径测试法为主。 在集成测试阶段,需增加静态结构分析法、代码质量度量法。 在集成测试之后的测试阶段,应尽量使用黑盒方法,有选择性地使用白盒测试方法。,对黑盒、白盒测试方法的总结,黑盒测试: 优点:从程序外部进行测试,成本较低。 不足:仅从外部测试,有时不准确;无法发现内存泄漏、误差累积等隐患。 白盒测试 优点:深入到程序内部进行测试,能发现比黑盒测试更多的错误,也更易于定位错误,并能得出测试对代码的覆盖率。 不足:测试成本较高。 一般说来,在单元测试阶段,以使用白盒测试法为主;在集成测试阶段,可使用黑盒、白盒相结合的方法;在集成测试之后,应主要使用黑盒方法。,
链接地址:https://www.31doc.com/p-2161044.html