白盒测试练习及问题详解
1、在白盒测试用例设计中,有语句覆盖、分支覆盖、条件覆盖、路径覆盖等,其中( A )是最强的覆盖准则。为了对如下图所示的程序段进行覆盖测试,必须适当地选取测试用例组。若x, y是两个变量,可供选择的测试用例组共有Ⅰ、Ⅱ、Ⅲ、Ⅳ四组,如表中给出,则实现判定覆盖至少应采取的测试用例组是( B )或( C );实现条件覆盖至少应采取的测试用例组是( D );实现路径覆盖至少应采取的测试用例组是( E )或( F )。
供选择的答案
A:①语句覆盖②条件覆盖③判定覆盖④路径覆盖
B~F:①Ⅰ和Ⅱ组②Ⅱ和Ⅲ组③Ⅲ和Ⅳ组④Ⅰ和Ⅳ组
⑤Ⅰ、Ⅱ、Ⅲ组⑥Ⅱ、Ⅲ、Ⅳ组⑦Ⅰ、Ⅲ、Ⅳ组
⑧Ⅰ、Ⅱ、Ⅳ组
解答:A. ④ B. ⑤ C. ⑧ D. ④ E. ⑤ F. ⑧
2. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到条件覆盖。( B )
int func(int a,b,c)
{ int k=1;
if ( (a>0) || (b<0) || (a+c>0) ) k=k+a;
else k=k+b;
if (c>0) k=k+c;
return k;
}
A. (a,b,c) = (3,6,1)、(-4,-5,7)
B. (a,b,c) = (2,5,8)、(-4,-9,-5)
C. (a,b,c) = (6,8,-2)、(1,5,4)
D. (a,b,c) = (4,9,-2)、(-4,8,3)
3. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到判定覆盖。(D )
int func(int a,b,c)
{ int k=1;
if ( (a>0) &&(b<0) && (a+c>0) ) k=k+a;
else k=k+b;
if (c>0) k=k+c;
return k;
}
A. (a,b,c) = (3,6,1)、(-4,-5,7)
B. (a,b,c) = (2,5,8)、(-4,-9,-5)
C. (a,b,c) = (6,8,-2)、(1,5,4)
D. (a,b,c) = (4,-9,-2)、(-4,8,3)
4. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到判定条件覆盖。(B )
int func(int a,b,c)
{ int k=1;
if ( (a>0) || (b<0) || (a+c>0) ) k=k+a;
else k=k+b;
if (c>0) k=k+c;
return k;
}
A. (a,b,c) = (3,6,1)、(-4,-5,7)
B. (a,b,c) = (2,-5,8)、(-4,9,-5)
C. (a,b,c) = (6,8,-2)、(1,5,4)
D. (a,b,c) = (4,9,-2)、(-4,8,3)
5、下面是一段求最大值的程序,其中datalist是数据表,n是datalist的长度。
int GetMax(int n, int datalist[ ])
{
int k=0;
for ( int j=1; j if ( datalist[j] > datalist[k] ) k=j; return k; } (1)画出该程序的控制流图,并计算其McCabe环路复杂性。 (2)用基本路径覆盖法给出测试路径。 (3)为各测试路径设计测试用例。 答: 1 int k = 0; 2 int j = 1; 3 while ( j < n ) 4 { 5 if ( datalist[j] > datalist[k] ) 6 k = j; 7 j++; 8 } 9 return k; 控制流图如上,McCabe环路复杂性为3。 2. 测试路径: Path1:2→3 →9 Path2:2→3→5→6→7 →8→3→9 Path3:2→3→5→7 →8→3→9 3. 测试用例: Path1:取n=1,datalist[0] = 1, 预期结果:k=0 Path2:取n=2,datalist[0] = 1,datalist[1] = 0, 预期结果:k=0 Path3:取n=2,datalist[0] = 0,datalist[1] = 1, 预期结果:k=1 6、下面是选择排序的程序,其中datalist是数据表,它有两个数据成员:一是元素类型为Element的数组V,另一个是数组大小n。算法中用到两个操作,一是取某数组元素V[i]的关键码操作getKey ( ),一是交换两数组元素容的操作Swap( ): void SelectSort ( datalist & list ) { //对表list.V[0]到list.V[n-1]进行排序, n是表当前长度。 for ( int i = 0; i < list.n-1; i++ ) { int k = i; //在list.V[i].key到list.V[n-1].key中找具有最小关键码的对象 for ( int j = i+1; j < list.n; j++) if ( list.V[j].getKey ( ) < list.V[k].getKey ( ) ) k = j; //当前具最小关键码的对象 if ( k != i ) Swap ( list.V[i], list.V[k] );//交换 } } (1) 试计算此程序段的McCabe复杂性; (2) 用基本路径覆盖法给出测试路径; (3) 为各测试路径设计测试用例。 解答:(1) 1 int i = 0; 2 while ( i < list.n-1 ) 3 { int k = i; 4 int j = i+1; 5 while ( j < list.n ) 6 { if ( list.V[j].getKey ( ) < list.V[k].getKey ( ) ) 7 k = j; 8 j++; 9 } 10 if ( k != i ) 11 Swap ( list.V[i], list.V[k] ); 12 i++; 13 } 14 1 14 12 13 McCabe环路复杂性= 5 (2) 独立路径有5条: Path1:1→2→14 Path2:1→2→3→5→10→11→12→13→2→14 Path3:1→2→3→5→10→12→13→2→14 Path4:1→2→3→5→6→7→8→9→5→10→11→12→13→2→14 Path5: 1→2→3→5→6→8→9→5→10→11→12→13→2→14 ①③ ①②⑤⑧…… ①②⑤⑨…… ①②④⑥…… ①②④⑦…… (3) 为各测试路径设计测试用例: Path1:取n = 1 路径①②⑤⑧……:取n = 2, 预期结果:路径⑤⑧③不可达 路径①②⑤⑨……:取n = 2, 预期结果:路径⑤⑨③不可达 路径①②④⑥⑤⑧③: 取n = 2, V[0] = 2, V[1] = 1, 预期结果:k = 1, V[0] = 1, V[1] = 2 路径①②④⑥⑤⑨③: 取n = 2, V[0] = 2, V[1] = 1, 预期结果:k = 1, 路径⑨③不可达 路径①②④⑦⑤⑧③: 取n = 2, V[0] = 1, V[1] = 2, 预期结果:k = 0, 路径⑧③不可达 路径①②④⑦⑤⑨③: 取n = 2, V[0] = 1, V[1] = 2, 预期结果:k = 0, V[0] = 1, V[1] = 2 7、下面是快速排序算法中的一趟划分算法,其中datalist是数据表,它有两个数据成员:一是元素类型为Element的数组V,另一个是数组大小n。算法中用到两个操作,一是取某数组元素V[i]的关键码操作getKey ( ),一是交换两数组元素容的操作Swap( ): int Partition ( datalist &list, int low, int high ) { //在区间[ low, high ]以第一个对象为基准进行一次划分,k返回基准对象回放位置。 int k = low; Element pivot = list.V[low];//基准对象 for ( int i = low+1; i <= high; i++ )//检测整个序列,进行划分 if ( list.V[i].getKey ( ) < pivot.getKey( ) && ++ k != i ) Swap ( list.V[k], list.V[i] );//小于基准的交换到左侧去 Swap ( list.V[low], list.V[k] );//将基准对象就位 return k;//返回基准对象位置} (1) 试画出它的程序流程图; (2) 试利用路径覆盖方法为它设计足够的测试用例(循环次数限定为0次,1次和2次)。解答:(1)流程图如下。 (2) 测试用例设计 8、下面是一段插入排序的程序,将R[k+1]插入到R[1…k]的适当位置。 R[0] = R[k+1]; j = k; while (R[j] > R[0]) { R[j+1] = R[j]; j--; } R[j+1] = R[0]; 用路径覆盖方法为它设计足够的测试用例(while循环次数为0、1、2次)。答:画出该程序的流程图: 测试用例设计: 循环次数 输入数据覆盖路径k R[1] R[2] R[0] 路径 0 1 1 2 ①③ 1 1 2 1 ①②③ 2 2 2 3 1 ①②②③ 摘要:单元测试是软件测试的基础,本文详细的论述了单元测试的两个步骤人工静态检查法与动态执行跟踪法,所需执行的工作项目及相关的策略和方法。通过对这两个步骤的描述作者将多年的单元测试经验及测试理论注入于全文。 关键词:单元测试、人工检查、白盒测试、测试用例、跟踪调试 1 概述 单元测试是针对软件设计的最小单位——程序模块,进行正确性检验的测试工作。其目的在于发现每个程序模块内部可能存在的差错。 单元测试也是程序员的一项基本职责,程序员必须对自己所编写的代码保持认真负责的态度,这是也程序员的基本职业素质之一。同时单元测试能力也是程序员的一项基本能力,能力的高低直接影响到程序员的工作效率与软件的质量。 在编码的过程中作单元测试,其花费是最小的,而回报却特别优厚的。在编码的过程中考虑测试问题,得到的将是更优质的代码,因为在这时您对代码应该做些什么了解得最清楚。如果不这样做,而是一直等到某个模块崩溃了,到那时您可能已经忘记了代码是怎样工作的。即使是在强大的工作压力下,您也还必须重新把它弄清楚,这又要花费许多时间。进一步说,这样做出的更正往往不会那么彻底,可能更脆弱,因为您唤回的理解可能不那么完全。 通常合格的代码应该具备以下性质:正确性、清晰性、规范性、一致性、高效性等(根据优先级别排序)。 1. 正确性是指代码逻辑必须正确,能够实现预期的功能。 2. 清晰性是指代码必须简明、易懂,注释准确没有歧义。 3. 规范性是指代码必须符合企业或部门所定义的共同规范包括命名规则,代码风格等等。 4. 一致性是指代码必须在命名上(如:相同功能的变量尽量采用相同的标示符)、风格上都保持统一。 5. 高效性是指代码不但要满足以上性质,而且需要尽可能降低代码的执行时间。 2 单元测试步骤 在代码编写完成后的单元测试工作主要分为两个步骤人工静态检查和动态执行跟踪。 人工静态检查是测试的第一步,这个阶段工作主要是保证代码算法的逻辑正确性(尽量通过人工检查发现代码的逻辑错误)、清晰性、规范性、一致性、算法高效性。并尽可能的发现程序中没有发现的错误。 第二步是通过设计测试用例,执行待测程序来跟踪比较实际结果与预期结果来发现错误。经验表明,使用人工静态检查法能够有效的发现30%到70%的逻辑设计和编码错误。但是代码中仍会有大量的隐性错误无法通过视觉检查发现,必须通过跟踪调试法细心分析才能够捕捉到。所以,动态跟踪调试方法也成了单元测试的重点与难点。 3 人工检查 通常在人工检查阶段必须执行以下项目的活动: 第一、检查算法的逻辑正确性;确定所编写的代码算法、数据结构定义(如:队列、堆栈等)是否实现了模块或方法所要求的功能。 第二、模块接口的正确性检查;确定形式参数个数、数据类型、顺序是否正确;确定返回值类型及返回值的正确性。 第三、输入参数有没有作正确性检查;如果没有作正确性检查,确定该参数是否的确无需做参数正确性检查,否则请添加上参数的正确性检查。经验表明,缺少参数正确性检查的代码是造成软件系统不稳定的主要原因之一。 第四、调用其他方法接口的正确性;检查实参类型正确与否、传入的参数值正确与否、 以下不属于软件编码规范评测内容的是()。 A. 源程序文档化 B.数据说明方法 C. 语句结构 D. 算法逻辑 一个程序的控制流图中有 5 个节点、 9 条边,在测试用例数最少的情况下,确保程序中每个可执行语句至少执行一次所需测试用例数的上限是()。 A. 2 B. 4 C.6 D.8 对于逻辑表达式(((a>0)&&(b>0))||c<5),需要()个测试用例才能完成条件组合覆盖。 A. 2 B. 4 C.8 D.16 对于逻辑表达式(((a>0)&&(b>0))||c<5),需要()个测试用例才能完成条件组合覆盖。 A. 2 B. 4 C.8 D.16 对于逻辑表达式( (b1&b2)||in),需要()个测试用例才能完成条件组合覆盖。 A.2 B.4 C.8 D.16 以下关于白盒测试的叙述中,不正确的是()。 A.满足判定覆盖一定满足语句覆盖 B.满足条件覆盖一定满足判定覆盖 C.满足判定条件覆盖一定满足条件覆盖 D.满足条件组合覆盖一定满足判定条件覆盖 对于逻辑表达式((a||(b&c))||(c&&d)),需要()个测试用例才能完成条件组合覆盖。 A.4 B.8 C.16 D.32 以下属于静态测试方法的是()。 A.代码审查 B.判定覆盖 C.路径覆盖 D.语句覆盖 以下几种白盒覆盖测试中,覆盖准则最强的是( ) 。 A.语句覆盖 B.判定覆盖 C.条件覆盖 D.条件组合覆盖 对于逻辑表达式((a||b)||(c&&d)),需要( ) 个测试用例才能完成条件组合覆盖。 A.2 B.4 C.8 D.16 以下属于动态测试方法的是 ( ) 。 A.代码审查 B.静态结构测试 C.路径覆盖 D.技术评审 白盒测试不能发现()。 A.代码路径中的错误 B.死循环 C.逻辑错误 D.功能错误 对于逻辑表达式((a&&b)||c),需要()个测试用例才能完成条件组合覆盖。 A.2 B.4 C.8 D.16 以下属于静态测试方法的是()。 A.分支覆盖率分析 B.复杂度分析 C.系统压力测试 D.路径覆盖分析 对于逻辑表达式(a&&(b|c)),需要()个测试用例才能完成条件组合覆盖 A.2 B.4 C.6 D.8 逻辑覆盖标准包括()。 ①判定覆盖②语句覆盖③条件判定覆盖④修正条件判定覆盖 A.①③ B.①②③ C.①②④ D.①②③④ 以下关于白盒测试的叙述中,不正确的是()。 A.白盒测试仅与程序的内部结构有关,完全可以不考虑程序的功能要求 B.逻辑覆盖法是一种常用的白盒测试方法 C.程序中存在很多判定和条件,不可能实现100%的条件覆盖 D.测试基于代码,无法确定设计正确与否 1白盒测试用例设计方法 1.1白盒测试简介 白盒测试又称结构测试、逻辑驱动测试或基于程序的测试,一般多发生在单元测试阶段。白盒测试方法主要包括逻辑覆盖法,基本路径法,程序插装等。 这里重点介绍一下常用的基本路径法,对于逻辑覆盖简单介绍一下覆盖准则。 1.2基本路径法 在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出独立路径集合,从而设计测试用例,设计出的测试用例要保证在测试中程序的每一个可执行语句至少执行一次。 在介绍基本路径测试方法(又称独立路径测试)之前,先介绍流图符号: 图1 如图1所示,每一个圆,称为流图的节点,代表一个或多个语句,流程图中的处理方框序列和菱形决策框可映射为一个节点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个节点,即使该节点并不代表任何语句,例如,图2中两个处理方框交汇处是一个节点,边和节点限定的范围称为区域。 图2 任何过程设计表示法都可被翻译成流图,下面显示了一段流程图以及相应的流图。 注意,程序设计中遇到复合条件时(逻辑or, and, nor 等),生成的流图变得更为复杂,如(c)流图所示。此时必须为语句IF a OR b 中的每一个a 和b 创建一个独立的节点。 (c)流图 独立路径是指程序中至少引进一个新的处理语句集合,采用流图的术语,即独立路径必须至少包含一条在定义路径之前不曾用到的边。例如图(b)中所示流图的一个独立路径集合为: 路径1:1-11 路径2:1-2-3-4-5-10-1-11 路径3:1-2-3-6-8-9-10-1-11 路径4:1-2-3-6-7-9-10-1-11 上面定义的路径1,2,3 和4 包含了(b)流图的一个基本集,如果能将测试设计为强迫运行这些路径,那么程序中的每一条语句将至少被执行一次,每一个条件执行时都将分别取true 和false(分支覆盖)。应该注意到基本集并不唯一,实际上,给定的过程设计可派生出任意数量的不同基本集。如何才能知道需要寻找多少条路径呢?可以通过如下三种方法之一来计算独立路径的上界: 1. V=E-N+2,E 是流图中边的数量,N 是流图节点数量。 2. V=P+1,P 是流图中判定节点的数量 3. V=R,R 是流图中区域的数量 例如,(b)流图可以采用上述任意一种算法来计算独立路径的数量 1. V=11 条边-9 个节点+2=4 2. V=3 个判定节点+1=4 3. 流图有4 个区域,所以V=4 由此为了覆盖所有程序语句,必须设计至少4 个测试用例使程序运行于这4 条路径。 在采用基本路径测试方法中,获取测试用例可参考以下方式: 白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。 这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。 采用什么方法对软件进行测试呢?常用的软件测试方法有两大类:静态测试方法和动态测试方法。其中软件的静态测试不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试;而软件的动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。 白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。 白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。 六种覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖发现错误的能力呈由弱至强的变化。语句覆盖每条语句至少执行一次。判定覆盖每个判定的每个分支至少执行一次。条件覆盖每个判定的每个条件应取到各种可能的值。判定/条件覆盖同时满足判定覆盖条件覆盖。条件组合覆盖每个判定中各条件的每一种组合至少出现一次。路径覆盖使程序中每一条可能的路径至少执行一次。 "白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。 如何挑选白盒测试工具 白盒测试目前主要用在具有高可靠性要求的软件领域,例如:军工软件、航天航空软件、工业控制软件等等。白盒测试工具在选购时应当主要是对开发语言的支持、代码覆盖的深度、嵌入式软件的测试、测试的可视化等。 对开发语言的支持:白盒测试工具是对源代码进行的测试,测试的主要内容包括词法分析与语法分析、静态错误分析、动态检测等。但是对于不同的开发语言,测试工具实现的方式和内容差别是较大的。目前测试工具主要支持的开发语言包括:标准C、C++、Visual C ++、Java、Visual J++等。 软件质量保证与测试 实验指导 计算机工程学院 测试环境配置 1.setting Junit (1) start Eclipse Select windows-preferences-java-build path –class path variables (2) click new, the figure of new variable entry is shown. (3) name JUNIT_LIB select file-选择JUnit 插件所对应的JAR文件所在地,在Eclipse的安装目录的plugins目录中 2.JUNIT的组成框架 其中,junit.framework 和junit.runner是两个核心包。 junit.framework 负责整个测试对象的框架 junit.runner 负责测试驱动 Junit的框架又可分为: A、被测试的对象。 B、对测试目标进行测试的方法与过程集合,可称为测试用例(TestCase)。 C、测试用例的集合,可容纳多个测试用例(TestCase),将其称作测试包(TestSuite)。 D、测试结果的描述与记录。(TestResult) 。 E、每一个测试方法所发生的与预期不一致状况的描述,称其测试失败元素(TestFailure) F、JUnit Framework中的出错异常(AssertionFailedError)。 JUnit框架是一个典型的Composite模式:TestSuite可以容纳任何派生自Test 的对象;当调用TestSuite对象的run()方法是,会遍历自己容纳的对象,逐个调用它们的run()方法。 3.JUnit中常用的接口和类 Test接口——运行测试和收集测试结果 Test接口使用了Composite设计模式,是单独测试用例(TestCase),聚合测试模式(TestSuite)及测试扩展(TestDecorator)的共同接口。 它的public int countTestCases()方法,它来统计这次测试有多少个TestCase,另外一个方法就是public void run(TestResult ),TestResult是实例接受测试结果,run方法执行本次测试。 TestCase抽象类——定义测试中固定方法 TestCase是Test接口的抽象实现,(不能被实例化,只能被继承)其构造函数TestCase(string name)根据输入的测试名称name创建一个测试实例。由于每一个TestCase在创建时都要有一个名称,若某测试失败了,便可识别出是哪个测试失败。 TestCase类中包含的setUp()、tearDown()方法。setUp()方法集中初始化测试所需的所有变量和实例,并且在依次调用测试类中的每个测试方法之前再次执行setUp()方法。tearDown()方法则是在每个测试方法之后,释放测试程序方法中引用的变量和实例。 开发人员编写测试用例时,只需继承TestCase,来完成run方法即可,然后JUnit获得测试用例,执行它的run方法,把测试结果记录在TestResult之中。 Assert静态类——一系列断言方法的集合 Assert包含了一组静态的测试方法,用于期望值和实际值比对是否正确,即测试失败,Assert类就会抛出一个AssertionFailedError异常,JUnit测试框架将 白盒测试的基本路径测试法 一、白盒测试的主要测试方法 1、代码检查法 2、静态结构分析法 3、静态质量度量法 4、逻辑覆盖法 5、基本路径测 试法(应用最广泛)6、域测试7、符号测试8、Z路径覆盖9、程序变异 二、基本路径测试法 1、定义:基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。 设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。 2、基本路径测试法的基本步骤 1) 程序的控制流图:描述程序控制流的一种图示方法。 2)程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。 3)导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。 4)准备测试用例:确保基本路径集中的每一条路径的执行。 3、基本路径测试法的工具方法 1)图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动 地确定一个基本路径集。 三、程序的控制流图 控制流程图是描述程序控制流的一种图示方法。圆圈称为控制流图的一个结点,表示一个或多个无分支的语句或源程序语句流图只有二种图形符号:图中的每一个圆称为流图的结点,代表一条或多条语句。流图中的箭头称为边或连接,代表控制流。任何过程设计都要被翻译成控制流图。 1、根据程序流程图化成控制流图 在将程序流程图简化成控制流图时,应注意: 1)在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。 2)边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。如下页图所示: 如果判断中的条件表达式是由一个或多个逻辑运算符(OR, AND, NAND, NOR) 连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。 例如: 1 if a or b 2 x 3 else 4 y 对应的逻辑为: 白盒测试作为测试人员常用的一种测试方法,越来越受到测试工程师的重视。白盒测试并不是简单的按照代码设计用例,而是需要根据不同的测试需求,结合不同的测试对象,使用适合的方法进行测试。因为对于不同复杂度的代码逻辑,可以衍生出许多种执行路径,只有适当的测试方法,才能帮助我们从代码的迷雾森林中找到正确的方向。本文介绍六种白盒子测试方法:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。 白盒测试的概述 由于逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。由于我们经常相信某逻辑路径不可能被执行, 而事实上,它可能在正常的情况下被执行。由于代码中的笔误是随机且无法杜绝的,因此我们要进行白盒测试。 白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。 白盒的测试用例需要做到: ·保证一个模块中的所有独立路径至少被使用一次 ·对所有逻辑值均需测试true 和false ·在上下边界及可操作范围内运行所有循环 ·检查内部数据结构以确保其有效性 白盒测试的目的:通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。 白盒测试的特点:依据软件设计说明书进行测试、对程序内部细节的严密检验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试。 白盒测试的实施步骤: 1.测试计划阶段:根据需求说明书,制定测试进度。 2.测试设计阶段:依据程序设计说明书,按照一定规范化的方法进行软件结构划分和设计测试用例。 3.测试执行阶段:输入测试用例,得到测试结果。 4.测试总结阶段:对比测试的结果和代码的预期结果,分析错误原因,找到并解决错误。 白盒测试的方法:总体上分为静态方法和动态方法两大类。如何进行白盒测试
第14章白盒测试技术
白盒测试用例设计方法
(完整版)黑盒测试和白盒测试
白盒测试和黑盒测试实验报告
白盒测试的基本路径测试法
白盒测试的六种覆盖准则
白盒测试实例