白盒测试中的六种覆盖方法
白盒测试中的覆盖测试包括哪些测试内容

白盒测试中的覆盖测试包括哪些测试内容在软件开发领域,白盒测试是一种软件测试方法,旨在通过检查代码的内部结构和实现细节来评估软件质量。
覆盖测试是白盒测试的一个重要方面,它涵盖了多种测试方法,以确保代码覆盖足够的情况,以最大程度地提高测试的全面性和准确性。
覆盖测试的内容主要分为以下几个方面:1. 语句覆盖(Statement Coverage)语句覆盖是指确保代码中每个语句至少执行一次的测试方法。
通过运行测试用例,检测每个代码语句是否被执行,以发现潜在的逻辑错误和代码覆盖不足的问题。
2. 判定覆盖(Decision Coverage)判定覆盖是指测试用例必须覆盖代码中的所有判定语句,包括条件判断、循环判断和分支判断等。
确保每个判定语句的每个可能结果都被覆盖,以提高测试用例的全面性。
3. 条件覆盖(Condition Coverage)条件覆盖是一种更为详细的覆盖方法,要求至少执行每个条件表达式中的每个条件结果。
通过检查每个条件的每个可能取值,确保测试用例覆盖了所有可能的条件情况。
4. 路径覆盖(Path Coverage)路径覆盖是一种涵盖率更高的测试方法,要求测试用例覆盖代码中的所有可能路径。
通过分析程序的控制流图,确定所有可能的执行路径,并设计测试用例以覆盖这些路径,以发现潜在的错误和逻辑漏洞。
5. 分支覆盖(Branch Coverage)分支覆盖要求测试用例至少覆盖所有可能的分支情况,包括每个分支语句的每个条件结果。
通过测试每个分支的真假条件,检测程序在不同分支下的行为表现,以确保程序能够正确处理各种情况。
总结在白盒测试中,覆盖测试是一项非常重要的工作,通过不同的覆盖准则,可以帮助测试人员发现代码中的潜在问题,提高软件质量和稳定性。
综合利用以上所述的不同覆盖测试方法,可以更全面地评估代码的质量,发现潜在的问题,保障软件的可靠性和稳定性。
通过持续的覆盖测试工作,可以及时发现和修复问题,提高软件的质量和用户体验。
浅析条件覆盖测试用例的设计

逻辑运算组成判定语句开始研究 , a、 、lb 为四个 不同的逻辑 设 1a b 、2 2 条件 , 组成两个判定语句 : & a,1 I2 a & 2b b 。 l l
表 2测试用例组 2
测试用例 输 入 a a l 2
Te tCa e s s 1 T T
a& a b l&2 l b 2
测试用例 输入
T髓 tC ae1 s T F Te C ̄ e n s 3 Cm e 4 F F
2 条件 覆盖案例 分析
设计以下 c语言程序段 的条件覆盖测试用例 :
i (> 0 & o> 0) f x 10  ̄/ 5 0
sor + 1; c e
a 2
a 3
T F F
bI2 1I b
T
Tet ae sC s2
Tet Cae s s 3
T
F
F
F
T
F
T
T
F
T
在表 2中,一” “ 表示任意取值 , 因为不管 a 取什么值 , a 为假 2 当 1 值时 , 都被屏蔽。实际设计测试用例 时, 一” a 2 将“ 任意取真值或假值 , 再根据各逻辑条件 的取值设计输入数据就形成 了满 足条件 覆盖的测 试用例。 三个逻辑条件组成 的判定语句测试用例 又如何设 计?根据相 同 的道理 , 可以得到表 3 。 表 3 测试用例组 3
1 引 题
白盒测试法的覆盖标准有逻辑覆盖 、 循环覆 盖和基 本路径测试 。 其中逻辑覆盖包括语句覆盖 、 判定覆盖 、 条件覆盖 、 判定/ 条件覆盖 、 条 件组合覆盖和路径覆盖 。六种覆盖发现错误 的能力呈由弱至强的变 化。其中 , 条件覆盖 需要设计足够多的测试用例 , 得每一判定语句 使 中每个逻辑条件的可能值至少满足一次 , 条件覆盖率的公式可以表示 如下 :条件 覆盖 率= 被评 价到 的条 件取值 的数 量/ 条件取 值的总 数 X 0%。优点 : 10 对每个判定语句中每个逻辑 条件进行了测试 ; 缺点 : 不 定能够满足判定覆盖 。 对 于单一逻辑条件组成的判定语句 , 设计测试用例比较 简单 , 选 择逻辑 条件 的真值和假值两个测试用例即可 。但对于两个和两个 以 上逻辑 条件组成 的判定语句 , 设计测试用例就不是那么容易 , 并不 是 将每个逻辑条件 的真值和假值进行组合形成 的测试用例组就能满足 条件覆盖测试 的要求 。这是 由于组合逻辑条件的逻辑运算具 有短路 的特性 , 某些测试用例 由于前项逻辑条件 的设定 , 使后项逻辑条件不 能完成判断 , 从而无法实现条件覆盖 。
白盒测试方法分析与研究

Co u o e g n e h oo y电 脑 知 识 与技 术 mp  ̄r Kn wld ea d T c n lg
Vo ., 6 J n 01 ,P .43 — 4 2 4 4 1 No 1 u e 2 0 P4 1 4 3 , 4 5 6
白盒 测 试 方法 分 析 与 研 究
为错综复杂 , 原有 的 软 件 测 试 方 法 已 不 能 满 足 测 试 需 要 。 系 统 化 的 软 件 测 试 方 法 应 运 而 生 。 目前 , 以 通 过 三 种 典 型 的方 法对 软件 可 进 行 测 试 : 盒测 试 、 盒 测 试 以及 灰 龠 测 试 其 『『 白盒 测 试 方法 足 埽 常 行 之 有 效 的 测 试 手 段 , 程 序 的编 写 过 程 , 码 的笔 白 黑 『, 非 在 代 误是 随 机 且 尢 可 避 免 的 , 此 , 要 通 过 h盒 测 试 办法 达 到提 高软 件 的 质量 的 目的 。典 的 盒测 试 方 法有 六种 : 句 覆 盖 、 定 覆 因 需 语 判
近 年 来 , 着 软件 质量 关 注 度 的 不 断 提 高 , 件 测 试 已成 为软 件 工程 中 一 个 非 常 蕈要 的研 究 热 点 。早期 的 软 件测 试 都 是 由程 序 随 软 员 在 编 程 过 巾完 成 的 , “ 件 凋试 ” 程 即 软 过 然 而 , : 件 规 模 的 不 断 增 _ , 件 模 块 之 问 以及 不 同 软 件 系 统 之 间 的联 系变 得 更 由 】软 人 软
徐 翠.政 青 柴
( 西理T大学 南昌校医信息 1 系 . 西 南昌 30 】) 汀 _ 程 江 3 0 3
摘要 : 白金 测 试 主 要 针 对 软 件 的 内部 结 构 和 处 理 过 程 进 行 测 试 , 具体 的 白盒 测 试 方 法 有 六 种 : 句 覆 盖 、 定 覆 盖 、 件 覆 盖 、 定 语 判 条 判
SOP_Test_V1.0(白盒测试指导书)

白盒测试作业指导书技术文件编号:版本:版本变更记录文件编号版本拟制人/修改人拟制/修改日期主要更改内容1.0 吴威2009-4-21 无1.1 吴威2009-6-30 新增静态测试和覆盖率实施标准。
注1:每次更改归档文件(指归档发布数据库)时,需填写此表。
注2:文件第一次归档时,“主要更改内容”栏写“无”。
目录版本变更记录 (2)目录 (3)1. 简介 (4)1.1概念 (4)1.2目的 (4)1.3分类 (5)2. 静态白盒测试 (6)2.1概念 (6)2.2人工静态测试 (6)2.2.1测试方法 (6)2.2.2桌面检查 (6)2.2.3代码审查 (8)2.2.4代码走查 (8)2.2.4静态分析 (9)2.3静态工具分析 (10)2.4实施标准 (10)3. 动态白盒测试 (10)3.1概念 (10)3.2单元/代码功能测试 (11)3.3代码覆盖测试 (11)3.3.1语句覆盖 (11)3.3.2判定覆盖 (12)3.3.3条件覆盖 (13)3.3.4判定/条件覆盖 (13)3.3.5条件组合覆盖 (14)3.3.6路径覆盖 (14)3.4测试实例 (15)3.4.1程序控制流图 (15)3.4.2测试步骤 (17)3.5实施标准 (20)4代码质量度量 (21)4.1、功能性 (21)4.2、可靠性 (21)4.3、易用性 (22)4.4、效率 (22)4.5、可维护性 (22)4.6、可移植性 (22)1.简介1.1概念白盒测试(White-box Testing,又称逻辑驱动测试,结构测试)是把测试对象看作一个打开的盒子。
利用白盒测试法进行动态测试时,需要测试软件产品的内部结构和处理过程,不需测试软件产品的功能。
白盒测试又称为结构测试和逻辑驱动测试。
1.2目的由Capers Jones与McGraw-Hill的统计表明:若将问题发现、定位与解决都计算进去,单元测试效率最高,是集成测试的2倍,是系统测试的3倍。
白盒测试技术中覆盖强度最强的是

白盒测试技术中覆盖强度最强的是
在软件开发过程中,白盒测试技术扮演着至关重要的角色。
白盒测试是一种基
于软件内部结构和源代码的测试方法,通过分析代码的逻辑路径、条件分支和数据流来设计测试用例,以评估系统在实现功能和处理异常情况时的正确性、完整性和最大覆盖范围。
在白盒测试技术中,有几种不同的覆盖度标准,包括语句覆盖、分支覆盖、条件覆盖、判定覆盖和路径覆盖等。
这些覆盖度标准中覆盖强度最强的是路径覆盖。
路径覆盖是白盒测试中最严格和最全面的覆盖度标准之一。
它要求测试用例覆
盖软件中所有可能的逻辑路径,即程序中每个可能的路径至少被测试用例执行一次。
路径覆盖可以有效检测出潜在的逻辑错误和漏洞,确保软件在各种情况下都能正确运行。
相比于其他覆盖度标准,路径覆盖要求更高的测试用例设计水平和执行成本,但也能提供更全面、更可靠的测试结果。
在实际的软件开发和测试过程中,路径覆盖往往作为白盒测试的重要指标之一。
测试团队可以利用静态分析工具、路径生成工具和符号执行等技术来辅助生成符合路径覆盖要求的测试用例,从而提高测试效率和覆盖度。
通过路径覆盖的测试,软件开发团队可以更好地了解代码执行流程和数据交互,发现隐藏在代码内部的潜在问题,并提高软件质量和稳定性。
综上所述,白盒测试技术中覆盖强度最强的是路径覆盖。
路径覆盖要求测试用
例覆盖软件中所有可能的逻辑路径,能够全面检测潜在的逻辑错误和漏洞,提高软件的质量和可靠性。
在实际测试中,测试团队可以利用各种工具和技术辅助生成符合路径覆盖要求的测试用例,以确保软件能够在各种情况下正确运行,并满足用户的需求和期待。
(完整版)黑盒测试和白盒测试

白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作.这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
采用什么方法对软件进行测试呢?常用的软件测试方法有两大类:静态测试方法和动态测试方法。
其中软件的静态测试不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试;而软件的动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异.白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试.其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
六种覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖发现错误的能力呈由弱至强的变化。
语句覆盖每条语句至少执行一次。
判定覆盖每个判定的每个分支至少执行一次。
条件覆盖每个判定的每个条件应取到各种可能的值.判定/条件覆盖同时满足判定覆盖条件覆盖。
条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
路径覆盖使程序中每一条可能的路径至少执行一次。
”白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。
”白盒”法是穷举路径测试。
在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据.贯穿程序的独立路径数是天文数字.但即使每条路径都测试了仍然可能有错误。
第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。
覆盖率
一、覆盖率概念覆盖率=(至少被执行一次的item数)/item的总数。
这个公式是对item的覆盖情况进行计算,item可以是需求,语句,分支,条件,路径等等。
覆盖率是用来度量测试完整性的一个手段,不是测试的目的。
通过覆盖率数据,我们可以知道我们测试的是否充分,测试的弱点在哪些方面,进而指导我们去设计能够增加覆盖李率的测试用例。
二、逻辑覆盖率(白盒测试覆盖率)1.语句覆盖(statement coverage)在测试时,运行被测试程序后,程序中被执行到的可执行语句的比率。
语句覆盖率=(至少被执行一次的语句数量)/(可执行的语句总数)注意:可执行的语句不包括:以#开头的#include、宏定义、预处理语句和注释语句缺点:不能发现判定的逻辑结果错误;不能发现判定的条件中的错误。
2.分支覆盖(branch coverage)也叫判定覆盖(decision coverage)在测试时,运行被测试程序后,程序中所有判断语句的取真分支和取假分支被执行到的比率判定覆盖率=(判定结果至少被评价一次的数量)/(判定结果的总数)出现在分支的情况下,如if、while、for、switch、和三目运算符a?b:c缺点:发现不了判定的条件的错误。
3.条件覆盖(condition coverage)在测试时运行被测试程序后,所有判断语句中每个条件的可能取值(真值和假值)出现过的比率条件覆盖率=(条件操作数值至少被评价一次的数量)/(条件操作数值的总数)条件操作数是条件的具体取值(真或者假)。
4.分支-条件覆盖(branch condition coverage)也叫判定-条件覆盖(decision condition coverage)在测试时运行被测试程序后,所有判断语句中每个条件的所有可能值(为真为假)和每个判断本身的判定结果(为真为假)出现的比率分支-条件覆盖率=(条件操作数值或判定结果至少被评价一次的数量)/(条件操作数值总数+判定结果总数)5.路径覆盖(path coverage)在测试时运行被测试程序后,程序中所有可能的路径被执行过的比率。
白盒测试和黑盒测试分别有哪些测试方法
白盒测试和黑盒测试分别有哪些测试方法
白盒测试和黑盒测试是软件测试中常用的两种测试方法,它们在测试对象的角度和方法上有所不同。
白盒测试主要关注内部逻辑结构和代码的执行路径,而黑盒测试则主要关注功能和用户接口。
下面将分别介绍白盒测试和黑盒测试的一些常见测试方法。
白盒测试方法
1. 语句覆盖
语句覆盖是一种基本的白盒测试方法,通过执行测试用例来覆盖代码中的所有语句,确保每条语句都被执行到。
2. 分支覆盖
分支覆盖是基于控制流的测试方法,旨在覆盖代码中的所有可能分支情况,包括条件分支和循环分支,确保每个分支都被执行到。
3. 判定覆盖
判定覆盖是一种更严格的测试方法,要求每个条件表达式的结果都能取到true 和false,以确保对所有条件的覆盖。
黑盒测试方法
1. 等价类划分
等价类划分是一种常见的黑盒测试方法,将输入数据划分为有效等价类和无效等价类,选择代表性的测试用例进行测试。
2. 边界值分析
边界值分析是为了发现输入数据的边界情况而设计的测试方法,验证输入数据在临界值处的行为是否正确。
3. 功能测试
功能测试是黑盒测试中最常见的方法,通过对软件功能进行测试来验证其符合需求规格说明书的功能要求。
总结
白盒测试和黑盒测试各有其适用的场景和方法,选择合适的测试方法能够更好地保证软件质量。
在实际测试过程中,可以综合使用不同的测试方法,以达到全面覆盖和高效测试的目的。
希望以上介绍对你有所帮助,谢谢阅读!。
修正判定条件覆盖方法的设计原理与应用
修正判定条件覆盖方法的设计原理与应用摘要:修正判定条件覆盖是白盒测试的一种重要测试类型,它通过引入每一个判定条件对判定结果的独立影响,来实现设计尽可能少的用例以满足较高的逻辑覆盖率。
但修正判定条件覆盖的用例组合较多,对测试人员的能力和经验提出了较高要求。
本文主要分析如何使用真值表进行修正判定条件覆盖测试方案的设计,通过将待测代码的判定内容转化成真值表,将待测代码的逻辑关系转化成相应逻辑结构图来简化明晰测试用例的设计过程,从而能够迅速设计出测试用例数目最少的用例方案。
关键词:逻辑覆盖修正判定条件覆盖真值表1概述白盒测试是软件测试的一种重要测试方法,主要根据软件内部的逻辑结构来进行测试,设计人员需要对源代码进行分析,是基于代码的测试。
白盒测试方法分为:代码检查法、静态结构分析法、逻辑覆盖测试法、基本路径测试法等。
逻辑覆盖法又在白盒测试方法中占有重要地位。
逻辑覆盖测试法又分为语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖、条件组合覆盖和修正判定条件覆盖。
以上逻辑覆盖测试法的覆盖率依次增强,其中条件组合覆盖的覆盖程度最高,绝大部分的问题都能测试出来,但条件组合覆盖的测试用例数目往往最多,测试工作量较大,尤其是对于条件较多的判定,工作量呈指数级增长。
在对覆盖率和测试工作量综合权衡下,提出了修正判定条件覆盖。
但修正判定条件覆盖需要罗列出每一个判定条件对判定结果的独立影响来消除测试用例的冗余。
因此如何通过科学的方法,清晰地罗列出每一个条件对判定结果的独立影响,从而设计出用例数目较少、较省时的修正判定条件覆盖测试方案,是本文需要解决的问题。
2 设计原理修正判定条件覆盖要求每一个判断的所有可能结果都出现过;每一个判断中所有条件的所有可能结果出现过;每一个进入点和结束点都执行过;判定中每一个条件都可以独立的影响判定结果,以上4点必须同时满足。
但以上概念比较抽象,经过转化,修正判定条件覆盖可以理解为①.修正判定条件覆盖首先要满足条件覆盖、判定覆盖;②.在①的基础上,对于每个条件C,要求存在符合以下条件的计算:条件C所在判定内的所有条件,除条件C外,其他条件的取值完全相同,条件C的取值相反,判定的计算结果相反。
黑盒和白盒测试方法
黑盒和白盒测试方法黑盒测试介绍黑盒测试(black—box testing)又称功能测试、数据驱动测试或基于规范的测试。
用这种方法进行测试时,被测程序被当作看不见内部的黑盒。
在完全不考虑程序内部结构和内部特性的情况下,测试者仅依据程序功能的需求规范考虑确定测试用例和推断测试结果的正确性。
因此黑盒测试是从用户观点出发的测试,黑盒测试直观的想法就是既然程序被规定做某些事,那我们就看看它是不是在任何情况下都做的对。
完整的“任何情况”是无法验证的,为此黑盒测试也有一套产生测试用例的方法,以产生有限的测试用例而覆盖足够多的“任何情况”。
由于黑盒测试不需要了解程序内部结构,所以许多高层的测试如确认测试、系统测试、验收测试都采用黑盒测试。
黑盒测试首先是程序通常的功能性测试。
要求:每个软件特性必须被一个测试用例或一个被认可的异常所覆盖;用数据类型和数据值的最小集测试;用一系列真实的数据类型和数据值运行,测试超负荷、饱和及其他“最坏情况”的结果;用假想的数据类型和数据值运行,测试排斥不规则输入的能力;对影响性能的关键模块,如基本算法、应测试单元性能(包括精度、时间、容量等)。
不仅要考核“程序是否做了该做的?”还要考察“程序是否没做不该做的2”同时还要考察程序在其他一些情况下是否正常。
这些情况包括数据类型和数据值的异常等等。
下述几种方法:(a)等价类划分,(b)因果图方法,(c)边值分析法,(d)猜错法,(e)随机数法,就是从更广泛的角度来进行黑盒测试。
每一个方法都力图能涵盖更多的“任何情况”,但又各有长处,综合使用这些方法,会得到一个较好的测试用例集。
1.等价类划分等价类划分是一种典型的黑盒测试方法。
等价类是指某个输入域的集合。
它表示对揭露程序中的错误来说,集合中的每个输入条件是等效的。
因此我们只要在一个集合中选取一个测试数据即可。
等价类划分的办法是把程序的输入域划分成若干等价类,然后从每个部分中选取少数代表性数据当作测试用例。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要:白盒测试作为测试人员常用的一种测试方法,越来越受到测试工程师的重
视。白盒测试并不是简单的按照代码设计用例,而是需要根据不同的测试需求,
结合不同的测试对象,使用适合的方法进行测试。因为对于不同复杂度的代码逻
辑,可以衍生出许多种执行路径,只有适当的测试方法,才能帮助我们从代码的
迷雾森林中找到正确的方向。本文介绍六种白盒子测试方法:语句覆盖、判定覆
盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
白盒测试的概述
由于逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。由于我
们经常相信某逻辑路径不可能被执行, 而事实上,它可能在正常的情况下被执行。
由于代码中的笔误是随机且无法杜绝的,因此我们要进行白盒测试。
白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。白
盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是
可视的,你清楚盒子内部的东西以及里面是如何运作的。
白盒的测试用例需要做到:
·保证一个模块中的所有独立路径至少 被使用一次
·对所有逻辑值均需测试 true 和 false
·在上下边界及可操作范围内运行所有循环
·检查内部数据结构以确保其有效性
白盒测试的目的:通过检查软件内部的逻辑结构,对软件中的逻辑路径进行
覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态
与预期状态是否一致。
白盒测试的特点:依据软件设计说明书进行测试、对程序内部细节的严密检
验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试。
白盒测试的实施步骤:
1.测试计划阶段:根据需求说明书,制定测试进度。
2.测试设计阶段:依据程序设计说明书,按照一定规范化的方法进行软件结
构划分和设计测试用例。
3.测试执行阶段:输入测试用例,得到测试结果。
4.测试总结阶段:对比测试的结果和代码的预期结果,分析错误原因,找到
并解决错误。
白盒测试的方法:总体上分为静态方法和动态方法两大类。
静态分析是一种不通过执行程序而进行测试的技术。静态分析的关键功能是
检查软件的表示和描述是否一致,没有冲突或者没有歧义。
动态分析的主要特点是当软件系统在模拟的或真实的环境中执行之前、之中
和之后 , 对软件系统行为的分析。动态分析包含了程序在受控的环境下使用特
定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正
确。在动态分析技术中,最重要的技术是路径和分支测试。下面要介绍的六种覆
盖测试方法属于动态分析方法。
白盒测试的优缺点
1. 优点
·迫使测试人员去仔细思考软件的实现
·可以检测代码中的每条分支和路径
·揭示隐藏在代码中的错误
·对代码的测试比较彻底
·最优化
2. 缺点
·昂贵
·无法检测代码中遗漏的路径和数据敏感性错误
·不验证规格的正确性
六种覆盖方法
首先为了下文的举例描述方便,这里先给出一张程序流程图。(本文以1995
年软件设计师考试的一道考试题目为例,图中红色字母代表程序执行路径)。
1、语句覆盖
1)主要特点:语句覆盖是最起码的结构覆盖要求,语句覆盖要求设计足够
多的测试用例,使得程序中每条语句至少被执行一次。
2)用例设计:(如果此时将A路径上的语句1—〉T去掉,那么用例如下)
X Y 路径
1 50 50 OBDE
2 90 70 OBCE
3)优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。
4)缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于
隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。在本例中去掉了语句1
—〉T去掉,那么就少了一条测试路径。在if结构中若源代码没有给出else后
面的执行分支,那么语句覆盖测试就不会考虑这种情况。但是我们不能排除这种
以外的分支不会被执行,而往往这种错误会经常出现。再如,在Do-While结构
中,语句覆盖执行其中某一个条件分支。那么显然,语句覆盖对于多分支的逻辑
运算是无法全面反映的,它只在乎运行一次,而不考虑其他情况。
2、判定覆盖
1)主要特点:判定覆盖又称为分支覆盖,它要求设计足够多的测试用例,
使得程序中每个判定至少有一次为真值,有一次为假值,即:程序中的每个分支
至少执行一次。每个判断的取真、取假至少执行一次。
2)用例设计:
X Y 路径
1 90 90 OAE
2 50 50 OBDE
3 90 70 OBCE
3)优点:判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比
语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须
细分每个判定就可以得到测试用例。
4)缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语
句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取
值情况,必然会遗漏部分测试路径。
3、条件覆盖
1)主要特点:条件覆盖要求设计足够多的测试用例,使得判定中的每个条
件获得各种可能的结果,即每个条件至少有一次为真值,有一次为假值。
2)用例设计:
X Y 路径
1 90 70 OBC
2 40 OBD
3)优点:显然条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加
了测试路径。
4)缺点:要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保
证判定覆盖。条件覆盖只能保证每个条件至少有一
4、判定/条件覆盖
1)主要特点:设计足够多的测试用例,使得判定中每个条件的所有可能结
果至少出现一次,每个判定本身所有可能结果也至少出现一次。
2)用例设计:
X Y 路径
1 90 90 OAE
2 50 50 OBDE
3 90 70 OBCE
4 70 90 OBCE
3)优点:判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的
不足。
4)缺点:判定/条件覆盖准则的缺点是未考虑条件的组合情况。
5、组合覆盖
1)主要特点:要求设计足够多的测试用例,使得每个判定中条件结果的所
有可能组合至少出现一次。
2)用例设计:
X Y 路径
1 90 90 OAE
2 90 70 OBCE
3 90 30 OBDE
4 70 90 OBCE
5 30 90 OBDE
6 70 70 OBDE
7 50 50 OBDE
3)优点:多重条件覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。
更改的判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有
可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每
个条件都显示能单独影响判定结果。
4)缺点:线性地增加了测试用例的数量。
6、路径覆盖
1)主要特点:设计足够的测试用例,覆盖程序中所有可能的路径。
2)用例设计:
X Y 路径
1 90 90 OAE
2 50 50 OBDE
3 90 70 OBCE
4 70 90 OBCE
3)优点:这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面
都广。
4)缺点:由于路径覆盖需要对所有可能的路径进行测试(包括循环、条件
组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数
级增长。而在有些情况下,一些执行路径是不可能被执行的,如:
If (!A)B++;
If (!A)D--;
这两个语句实际只包括了2条执行路径,即A为真或假时候对B和D的处理,
真或假不可能都存在,而路径覆盖测试则认为是包含了真与假的4条执行路径。
这样不仅降低了测试效率,而且大量的测试结果的累积,也为排错带来麻烦。
总结
白盒测试是一种被广泛使用的逻辑测试方法,是由程序内部逻辑驱动的一种
单元测试方法。只有对程序内部十分了解才能进行适度有效的白盒测试。但是贯
穿在程序内部的逻辑存在着不确定性和无穷性,尤其对于大规模复杂软件。因此
我们不能穷举所有的逻辑路径,即使穷举也未必会带来好运(穷举不能查出程序
逻辑规则错误,不能查出数据相关错误,不能查出程序遗漏的路径)。
那么正确使用白盒测试,就要先从代码分析入手,根据不同的代码逻辑规则、
语句执行情况,选用适合的覆盖方法。任何一个高效的测试用例,都是针对具体
测试场景的。逻辑测试不是片面的测试正确的结果或是测试错误的结果,而是尽
可能全面地覆盖每一个