软件测试 第5章动态测试技术-白盒测试方法
- 格式:doc
- 大小:761.50 KB
- 文档页数:11
软件测试技术及方法第一章软件测试技术软件测试是软件开发生命周期中必不可少的环节,主要是为了验证软件是否能够满足用户和开发者的需求。
下面介绍一些常见的软件测试技术:1. 黑盒测试:在此测试方法中,测试人员并不知道系统内部的工作原理,只对输入输出的结果进行检测。
黑盒测试能够验证系统的功能是否满足需求,但无法检测系统内部的错误。
2. 白盒测试:白盒测试方法主要是通过对源代码的分析,检查程序的内部结构是否符合要求。
白盒测试能够找出程序中的逻辑错误和代码位置问题,协助开发人员解决问题。
3. 灰盒测试:灰盒测试方法是黑盒测试和白盒测试的结合体,既考虑测试人员对系统的外部功能,还考虑了他们对于系统的内部实现的一定程度的认识。
主要用于中等复杂的系统进行测试。
4. 压力测试:在多用户同时操作或者数据流非常大的情况下,测试系统是否能够承受大量用户的访问请求。
通过压力测试可以找出系统存在的性能瓶颈,以便优化系统。
5. 安全测试:测系统在安全性方面是否具备可靠、完善的特性。
其重点在于防范系统被病毒、木马、黑客等攻击行为所侵犯。
6. 兼容性测试:在不同的操作系统、浏览器和设备上测试系统是否可以正常运行。
7. 回归测试:在系统升级或者添加新功能后,重新进行测试,以确保之前无错的部分依旧能够按照预期运行。
第二章软件测试方法在进行软件测试时,需要遵循一定的测试流程和方法。
以下是一些常见的软件测试方法:1. 白盒测试和黑盒测试的组合:白盒测试用以测试程序的内部结构,而黑盒测试用以测试程序的外部行为,二者结合可以找出进一步的错误。
2. 自动化测试:通过自动化测试脚本,可以减少人工测试的劳动力和时间,并提高测试的覆盖率和准确性。
3. 模拟测试:通过人为模拟真实场景,如网络故障或者流量超载等,以验证系统是否可以正常工作及如何应对异常情况。
4. 冒烟测试:在系统功能测试前进行简单的测试,验证系统是否可以正常运行。
如果无法通过冒烟测试,则不必进行更详细的测试。
软件测试中的动态测试技术软件测试是软件开发过程中不可或缺的一环,它的目的是验证和验证软件系统的正确性和可靠性。
在测试的过程中,我们常常使用动态测试技术来检查程序在运行时的行为。
本文将讨论软件测试中的动态测试技术,包括黑盒测试、白盒测试和灰盒测试。
1. 黑盒测试黑盒测试是一种基于功能需求的测试方法,测试人员只需要关注输入和输出,而不需要关心内部实现细节。
这种测试技术主要用于检查系统是否按照规格说明书的要求工作。
黑盒测试的一个重要方法是边界值分析,在此方法中,测试人员选择输入的边界值,并检查系统对这些边界值的处理。
举例来说,假设我们正在测试一个银行系统的转账功能。
在黑盒测试中,我们可以输入不同金额的转账,如小于账户余额、等于账户余额和大于账户余额,以确保系统能够正确处理这些情况。
2. 白盒测试白盒测试是一种基于程序内部结构的测试方法,测试人员需要了解系统的内部逻辑和算法。
在白盒测试中,测试人员可以检查程序中的语句覆盖率、分支覆盖率和路径覆盖率等指标来评估测试的质量。
白盒测试的一个重要技术是代码注入,测试人员可以在程序中插入特定的代码来检查系统的响应和输出。
比如,我们测试一个排序算法的实现。
在白盒测试中,我们可以检查算法对不同大小的输入数据的排序情况,以及各种边界情况的处理。
3. 灰盒测试灰盒测试是黑盒测试和白盒测试的结合,综合了功能需求和内部结构的测试方法。
灰盒测试测试人员需要有一定的系统内部知识,但不需要详细了解每个细节。
灰盒测试通常通过关注系统的功能特性和结构特性来设计测试用例。
举例来说,假设我们测试一个电子商务网站的购物功能。
在灰盒测试中,我们可以结合用户的需求和系统的内部逻辑来设计测试用例。
我们可能会检查系统对购物车的处理、订单的生成和支付过程的处理等。
总结:软件测试中的动态测试技术主要包括黑盒测试、白盒测试和灰盒测试。
黑盒测试关注系统的功能需求,通过输入输出验证系统的正确性;白盒测试关注系统的内部结构,通过检查代码覆盖率和路径覆盖率等指标评估测试质量;灰盒测试结合了功能需求和内部结构,通过设计合适的测试用例来验证系统的正确性和可靠性。
白盒测试white-box testing1测试概述白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。
白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。
"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。
"白盒"法是穷举路径测试。
在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
贯穿程序的独立路径数是天文数字。
采用什么方法对软件进行测试呢?常用的软件测试方法有两大类:静态测试方法和动态测试方法。
其中软件的静态测试不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试;而软件的动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。
在动态分析技术中,最重要的技术是路径和分支测试。
下面要介绍的六种覆盖测试方法属于动态分析方法。
测试方法白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异。
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。
其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
白盒测试六种覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖发现错误的能力呈由弱至强的变化。
语句覆盖每条语句至少执行一次。
判定覆盖每个判定的每个分支至少执行一次。
条件覆盖每个判定的每个条件应取到各种可能的值。
判定/条件覆盖同时满足判定覆盖条件覆盖。
条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
路径覆盖使程序中每一条可能的路径至少执行一次。
要求1.保证一个模块中的所有独立路径至少被使用一次;2.对所有逻辑值均需测试 true 和 false;3.在上下边界及可操作范围内运行所有循环;4.检查内部数据结构以确保其有效性。
一、白盒测试概念1、定义白盒测试又称结构测试、透明盒测试、逻辑驱动测试、基于代码的测试。
盒子指被测试的软件,白盒指盒子是可视的。
白盒测试是一种测试用例设计方法,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例。
白盒测试主要针对被测程序的源代码,主要用于软件验证,不考虑软件的功能实现,只验证内部动作是否按照设计说明书的规定进行。
2、目的我们一方面注重软件功能需求的实现,另一方面还要注重程序逻辑细节,主要是因为软件自身的缺陷,具体如下:1)逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。
日常处理往往被很好地了解,而“特殊情况”的处理则难于发现。
2)我们经常相信某逻辑路径不可能被执行,而事实上,它可能在正常的基础上被执行。
程序的逻辑流有时是违反直觉的,只有路径测试才能发现这些错误。
3)代码中的笔误是随机且无法杜绝的。
笔误出现在主流上和不明显的逻辑路径上的机率是一样的。
很多被语法检查机制发现,但是其他的会在测试开始时才会被发现。
4)功能测试本身的局限性。
如果程序实现了没有被描述的行为,功能测试是无法发现的,例如病毒,而白盒测试很容易发现它。
3、目标采用白盒测试必须遵循以下几条原则,才能达到测试的目标:1)保证一个模块中的所有独立路径至少被测试一次。
2)所有逻辑值均需测试真(true) 和假(false) 两种情况。
3)检查程序的内部数据结构,保证其结构的有效性。
4)在上下边界及可操作范围内运行所有循环。
4、黑白灰区别黑盒测试技术:也称功能测试或数据驱动测试,只关注规格说明中的功能,测试者在程序接口对软件界面和软件功能进行测试,它只检查实现了的功能是否按照“用户需求说明书”的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
主要用于软件确认测试,结合兼容、性能测试等方面,但黑盒测试不能保证已经实现的各个部分都被测试到。
黑盒测试适用于各阶段测试。
第五章白盒测试一、判断分析题1.语句覆盖是最弱的逻辑覆盖。
(√)2.语句覆盖是最强的逻辑覆盖。
(X)3.判定覆盖不一定包含条件覆盖。
(X)4.条件覆盖不一定包含判定覆盖。
(√)5.判定/条件覆盖能同时满足判定、条件两种覆盖标准。
(√)6.判定/条件覆盖指满足判定覆盖标准或条件覆盖标准。
(X)7.DD-路径图是一种压缩图。
(X)8.详细设计的目的是为软件结构图中的每一个模块确定使用的算法和块内数据结构,并用某种选定的表达工具给出清晰的描述。
(X )9.尽量用公共过程或子程序去代替重复的代码段。
(X)10.对于连锁型分支结构,若有n个判定语句,则有2n条路径。
(√)11.尽量采用复合的条件测试,以避免嵌套的分支结构。
(√)12.GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁。
(√)二、简答题1.请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
答:黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。
通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。
它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。
从这一层意义上讲,组件是指多个单元的集成聚合。
在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。
方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。
最后,将构成进程的所有模块一起测试。
系统测试是将经过测试的子系统装配成一个完整系统来测试。
它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。
白盒测试主要采用的方法
在软件测试领域中,白盒测试是一种对系统内部结构和逻辑进行检查的测试方法,它旨在验证软件代码的正确性和完整性。
为了有效地进行白盒测试,测试人员通常会采用以下几种主要方法:
1. 代码覆盖测试
代码覆盖测试是通过执行测试用例来测量被执行的代码行的比例。
常见的代码
覆盖测试包括语句覆盖、分支覆盖、路径覆盖等。
通过对代码进行全面的覆盖测试,可以确保每个代码路径都经过测试,提高代码的稳定性和可靠性。
2. 数据流分析
数据流分析是一种静态分析技术,用于检测代码中的数据流动。
通过分析程序
中变量的定义和使用情况,可以发现潜在的数据流问题,如未初始化变量、数据依赖关系等。
数据流分析能够帮助测试人员找出潜在的程序错误,提高代码质量。
3. 控制流分析
控制流分析是一种静态分析方法,用于分析程序执行过程中的控制流转移关系。
通过对程序的控制流图进行分析,可以找出潜在的控制流问题,如死循环、逻辑错误等。
控制流分析有助于提高代码的可读性和可维护性。
4. 静态代码分析
静态代码分析是一种通过审查源代码来发现潜在问题的方法。
通过分析代码的
结构、语法和语义,可以提前发现代码中的错误和不规范之处。
静态代码分析可以帮助测试人员在代码编写阶段就发现问题,提高代码的质量和稳定性。
结论
综上所述,白盒测试主要采用代码覆盖测试、数据流分析、控制流分析和静态
代码分析等方法来验证软件代码的正确性和完整性。
通过使用这些方法,测试人员可以全面而有效地测试软件系统,提高软件的质量和可靠性。
白盒测试的测试方法包括白盒测试,又称结构测试或逻辑驱动测试,是软件测试中一种测试方法,旨在检查软件的内部结构和逻辑。
在白盒测试中,测试人员了解软件系统的内部工作原理,以便设计测试用例和执行测试。
白盒测试方法包括以下几种常见的技术:1. 语句覆盖语句覆盖是一种基本的白盒测试方法,要求执行足够的测试用例以覆盖软件中的每个语句或代码行。
测试人员通过设计测试用例来确保每个代码语句至少被执行一次,从而验证程序的正确性。
2. 判定覆盖判定覆盖是一种更高级的白盒测试方法,要求测试用例覆盖每个判定(条件)的真假分支。
测试人员通过设计测试用例来验证每个条件在不同情况下的执行路径,以确保程序在各种条件下行为正确。
3. 分支覆盖分支覆盖是从完整测试覆盖的角度考虑的一种测试方法,要求测试用例覆盖每个判定的所有可能分支路径。
测试人员通过设计测试用例来确保每个条件的所有分支均能被触发,以评估程序的正确性和异常处理能力。
4. 条件覆盖条件覆盖是白盒测试中一种详细的测试方法,要求测试用例考虑每个判定的所有可能组合条件。
测试人员通过设计测试用例来尽量覆盖所有判定内部的逻辑组合,以验证程序在各种条件下的正确性和鲁棒性。
5. 路径覆盖路径覆盖是一种综合性的白盒测试方法,要求测试用例覆盖软件中的每个可能路径。
测试人员通过设计测试用例来确保程序的每个路径段都被执行到,以发现潜在的逻辑错误和异常情况。
综上所述,白盒测试的测试方法包括语句覆盖、判定覆盖、分支覆盖、条件覆盖和路径覆盖等多种技术,测试人员可根据需求和复杂性选择适当的测试方法,以确保软件的质量和稳定性。
软件测试智慧树知到课后章节答案2023年下青岛职业技术学院青岛职业技术学院第一章测试1.下列选项中,哪一项不是软件开发模型。
()答案:V模型2.下列哪一项不是软件缺陷产生的的原因。
()答案:测试用例设计不好3.现在比较流行的软件开发模型为螺旋模型。
()答案:错4.软件存在缺陷是由于开发人员水平有限引起的,一个非常优秀的程序员可以开发出零缺陷的软件。
()答案:错5.软件缺陷都存在于程序代码中。
()答案:错6.软件测试是为了证明程序无错。
()答案:对7.软件测试要投入尽可能多的精力以达到100%的覆盖率。
()答案:错8.下列软件实施活动的进入准则描述错误的是:()答案:项目阶段成果已经被基线化9.验收测试的测试用例主要根据()的结果来设计。
答案:需求分析第二章测试1.下列选项中,哪一项不是因果图输入与输入之间的关系。
()答案:恒等2.下列选项中,哪一项是因果图输出之间的约束关系。
()答案:强制3.使用边界值方法测试时,只取边界两个值即可完成边界测试。
()答案:错4.因果图考虑了程序输入、输出之间的各种组合情况。
()答案:对5.下面四种说法中正确的是()答案:健壮性等价类测试的测试用例要求在有效等价类中取值6.黑盒测试又叫功能测试或数据驱动测试。
()答案:对7.下列选项中,哪一项不是影响软件质量的因素。
()答案:使用新技术8.在黑盒测试中,着重检查输入条件组合的方法是()。
答案:因果图法9.下面()方法能够有效地检测输入条件的各种组合可能引起的错误。
答案:因果图10.功能测试是系统测试的主要内容,检查系统的功能、性能是否与需求规格说明相同。
()答案:对第三章测试1.下列选项中,哪一项不属于逻辑覆盖。
()答案:判定-语句覆盖2.关于逻辑覆盖,下列说法中错误的是。
()答案:在逻辑覆盖中,条件组合覆盖是覆盖率最大的测试方法。
3.决策表法是由因果图演变而来的。
()答案:对4.语句覆盖无法考虑分支组合情况。
()答案:对5.语句覆盖可以测试程序中的逻辑错误。
软件测试中的静态与动态测试技术在软件开发的过程中,测试是非常重要的一环。
通过测试,我们可以发现并改正软件中的错误,确保软件的质量和稳定性。
而在软件测试中,静态和动态测试技术是两种常用的测试方法。
本文将详细介绍这两种测试技术的概念、特点和应用。
一、静态测试技术静态测试是一种基于软件文档和源代码的测试方法,它通过对软件的可读性、可理解性和可维护性等方面进行评估,以发现潜在的问题和错误。
静态测试主要包括以下几种技术:1. 代码走查(Code Review)代码走查是通过审查源代码的方式,发现代码中可能存在的问题和错误。
它可以由开发人员、测试人员和项目经理等多方参与,通过合作与讨论,提高代码的质量、可读性和可维护性。
代码走查可以在编码过程中进行,也可以在功能完成后进行。
2. 静态代码分析(Static Code Analysis)静态代码分析是通过使用代码分析工具,对源代码进行静态扫描和检测,从而发现可能存在的问题和错误。
静态代码分析可以发现潜在的逻辑错误、潜在的安全漏洞和不规范的编程风格等。
常用的静态代码分析工具包括Lint、FindBugs和PMD等。
3. 配置项审查(Configuration Item Review)配置项审查是对软件的相关文档和配置项进行检查和审查,以确保其正确性和一致性。
配置项可以包括需求文档、设计文档、测试用例等。
通过配置项审查,可以发现文档的错误、遗漏和不一致等问题,并及时进行修正。
静态测试技术的优点在于可以早期发现问题,减少后期的修复成本。
然而,它也有一定的局限性,不能发现系统的运行时错误和性能问题。
二、动态测试技术动态测试是一种基于软件运行的测试方法,它通过执行软件系统的功能和性能,检测系统的行为和输出结果是否符合预期。
动态测试主要包括以下几种技术:1. 黑盒测试(Black Box Testing)黑盒测试是一种对软件系统进行功能测试的方法,它不关注系统的内部结构和实现细节,只关注系统对输入的响应和输出结果。
第5章动态测试技术(2)-白盒测试方法教学内容:1.掌握白盒测试的基本概念2.掌握逻辑覆盖、基本路径覆盖白盒测试方法3.理解其他白盒测试方法(循环测试、数据流测试、变异测试、域测试、Z路径覆盖)的内容及其对逻辑覆盖测试的补充4.了解白盒测试方法的选择策略课型:新授课教时:8课时教学重点:1.白盒测试基本概念2.逻辑覆盖测试3.基本路径测试4.开源白盒测试工具的使用方法1.白盒测试概述1.定义:根据程序内部的逻辑结构及相关信息设计测试用例2.主要的黑盒测试方法有2.1逻辑覆盖测试2.2基本路径覆盖测试2.3循环测试2.4程序插装2.5程序变异测试2.6其他白盒测试数据流测试域测试Z路径覆盖符号测试2.逻辑覆盖测试1.概述:1.1考察使用测试数据运行被测程序时对程序逻辑的覆盖程度1.2希望选择最少的测试用例来满足所需的覆盖标准1.3常用的覆盖标准语句覆盖判定覆盖条件覆盖判定-条件覆盖条件组合覆盖路径覆盖2.实例2.1题目要求:对下列子程序进行测试procedure example(y,z:real;var x:real);beginif (y>1) and (z=0) then x:=x/y;if (y=2) or (x>1) then x:=x+1;end;该子程序接受x、y、z的值,并将计算结果x的值返回给调用程序。
与该子程序对应的流程图如下:该子程序有两个判定:a: (y>1) and (z=0)c: (y=2) or (x>1)判定a中有两个条件:y>1、z=0判定c中有两个条件:y=2 、x>12.2根据程序的执行流程可知:●当判定a为“假”时,判定C中的x就是输入的x值,此时,相对于输入的x而言,判定C中的“x>1”就是“x>1”●当判定a为“真”时,判定C中的x是经过x=x/y计算后的值,此时,相对于输入的x而言,判定C中的“x>1”实际是“x/y>1”,即“x>y”2.3该子程序有四条可执行路径:路径1 sabcde ,其执行条件(L1)是a为“t”且c为“t”L1= {(y>1) and (z=0)} and{(y=2) or (x/y>1)}= (y>1) and (z=0) and (y=2) or(y>1) and (z=0) and (x> y )= (y=2) and (z=0) or(y>1) and (z=0) and (x> y )路径2 sace ,其执行条件(L2)是a为“f”且c为“f”L2 = not{(y>1) and (z=0)} andnot{(y=2) or (x>1)}= { not (y>1) or not (z=0) } and{ not (y=2) and not (x>1) }= not (y>1) and not (y=2) and not (x>1)ornot (z=0) and not (y=2) and not (x>1)=(y≤1) and (x ≤ 1)or(z ≠ 0) and (y ≠ 2) and (x ≤ 1)路径3 sacde ,其执行条件(L3)是 a 为“f”且c 为“t”L3 = not {(y>1) and (z=0)} and {(y=2) or (x>1)}= { not (y>1) or not (z=0)} and {(y=2) or (x>1)} = not (y>1) and (y=2) ornot (y>1) and (x>1) or not (z=0) and (y=2) or not (z=0) and (x>1) = (y ≤ 1) and (x>1) or(z ≠ 0) and (y=2) or (z ≠ 0) and (x>1)路径4 sabce ,其执行条件(L4)是 a 为“t”且c 为“f”L4 = {(y>1) and (z=0)} andnot {(y=2) or (x/y>1)}= (y>1) and (z=0) and not (y=2) and not (x> y) =(y>1) and (z=0) and (y ≠ 2) and (x ≤ y)3. 语句覆盖:3.1 语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个可执行语句都至少执行一次3.2 执行条件L1(t,t )(y=2) and (z=0) or4. 判定覆盖4.1 判定覆盖(也称分支覆盖)是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次(即判定的每个分支至少经过一次) 4.2 执行条件L3(f,t )和L4 (t,f )或者执行条件L1(t,t )和L2(f,f )● 选择执行条件L3(f,t )和L4 (t,f )● L3 =(y ≤ 1) and (x>1) or (z ≠ 0) and (y=2) or (z ≠0) and (x>1)5.条件覆盖5.1条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中的每个条件的所有可能结果都至少出现一次6.判定/条件覆盖6.1判定/条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次,并且,每个判定中的每个条件的所有可能结果都至少出现一次6.27.条件组合覆盖7.1条件组合覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中条件结果的所有可能组合都至少出现一次7.2判定a中条件结果的所有可能组合:①y>1,z=0 ② y>1,z ≠ 0③y ≤ 1 ,z=0 ④ y ≤ 1 ,z ≠ 07.3判定c中条件结果的所有可能组合:⑤ y=2,x>1 ⑥ y=2,x ≤ 1 ;8.路径覆盖8.1路径覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每条可能则要求每条环路至少经过一次)9.逻辑覆盖测试需注意的问题9.1在逻辑覆盖测试时,我们强调“运行这些测试用例时”覆盖了被测程序的哪些判定、条件或路径9.2这表明在使用这些测试用例运行被测程序时,能执行到相应的判定、条件或路径9.3当运行测试数据y = 12时,其执行路径是sacg,覆盖了判定a为真的情况(即覆盖y >10)。
由于其执行路径未经过判定b,所以这个测试数据并不覆盖判定b为真的情况(即不覆盖条件y > 5)9.4而运行测试数据y = 8时,其执行路径是sabdg,所以该测试数据覆盖了判定a为假的情况(即覆盖y ≤ 10)和判定b为真的情况(即覆盖y > 5)10.逻辑表达式错误敏感的测试10.1逻辑覆盖测试依赖于程序中的逻辑条件,这些逻辑条件由逻辑表达式组成10.2对于一个含有n个逻辑变量或关系表达式的逻辑表达式,通常需要2n个测试用例来覆盖其所有可能的条件组合10.3当n较大时,我们可以选择对发现逻辑表达式错误比较敏感的组合条件进行测试,以较少的测试用例来发现逻辑表达式中的绝大多数错误10.4Tai提出的分支与关系运算符(branch and relational operator,BRO)测试技术,能用较少的测试用例发现条件中分支与关系运算符的大多数错误10.5采用BRO方法的前提条件:条件中的每个布尔变量和关系运算符至多出现一次,并且无公共变量10.6BRO方法引入条件约束的概念,含有n个简单条件C i的复合条件C的约束D表示为(D1,D2,…D n),D i (0<i≤n)表示在C i的结果(outcome)上的约束,它一般是某种符号10.7对逻辑变量,约束为t或f (真、假);对关系表达式,约束为<、>、=10.8符合条件C的一次执行覆盖条件约束D是指,C中出现的每个简单条件C i在这次执行中都满足D中对应的约束D i10.9下面分三种情况讨论:若条件为C:B1&B2其中B1、B2为逻辑变量,C的约束具有形式(D1,D2),D1和D2为t或f则C可能的三种约束为{(t,t),(f,t),(t,f)}对其中的每一组设计一个测试用例而(f,f)对条件C是不敏感的若条件为C:B1 or B2其中B1、B2为逻辑变量同理,C可能的三种约束为{(f,t),(t,f),(f,f)}对其中的每一组设计一个测试用例而(t,t)对条件C是不敏感的若条件为C:B1&(E3=E4)其中B1为逻辑变量,E3和E4为算术表达式C的约束形式为(D1,D2)D1为t或f当E3=E4时D2为=当E3≠E4时D2为<或>则C可能的约束集合为{(t,=),(f,=),(t,<),(t,>)}而(f,<)和(f,>)对条件C是不敏感的若条件为C:(E1 > E2)&(E3=E4)其中E1、E2、E3、E4均为算术表达式则C可能的约束集合为{(>,=),(=,=),(<,=),(>,<),(>,>)}而其他约束对条件C是不敏感的3.基本路径覆盖测试1.概述:1.1在实际问题中,一个不太复杂的程序,特别是包含循环的程序,其路径数可能非常大1.2因此测试常常难以做到覆盖程序中的所有路径,为此,我们希望把测试的程序路径数压缩到一定的范围内1.3基本路径测试是Tom McCabe提出的一种白盒测试技术,这种方法首先根据程序或设计图画出控制流图,并计算其区域数,然后确定一组独立的程序执行路径(称为基本路径),最后为每一条基本路径设计一个测试用例2.程序的控制流图(也称程序图):2.1控制流图由结点和边组成,分别用圆和箭头表示2.2设计图中一个连续的处理框(对应于程序中的顺序语句)序列和一个判定框(对应于程序中的条件控制语句)映射成控制流图中的一个结点2.3设计图中的箭头(对应于程序中的控制转向)映射成流图中的一条边2.4对于设计图中多个箭头的交汇点可以映射成流图中的一个结点(空结点)2.5上述映射的前提是设计图的判定中不包含复合条件2.6如果设计图的判定中包含了复合条件,那么必须先将其转换成等价的简单条件设计图2.7我们把控制流图中由结点和边组成的闭合部分称为一个区域(region),在计算区域数时,图的外部部分也作为一个区域2.8例如,右图所示的流图的区域数为32.9独立路径是指程序中至少引进一个新的处理语句序列或一个新条件的任一路径,在流图中,独立路径至少包含一条在定义该路径之前未曾用到过的边2.10在基本路径测试时,独立路径的数目就是流图的区域数3.实例:例如,对一个PDL程序进行基本路径测试,该程序的功能是:最多输入N个值(以-999为输入结束标志),计算位于给定范围内的那些值(称为有效输入值)的平均值,以及输入值的个数和有效值的个数其区域数为6●路径1:1-2-10-11-13●路径2:1-2-10-12-13●路径3:1-2-3-10-11-13●路径4:1-2-3-4-5-8-9-2-10-12-13●路径5:1-2-3-4-5-6-8-9-2-10-12-13●路径6:1-2-3-4-5-6-7-8-9-2-10-11-13为每一条独立路径设计测试用例假设:n = 5;minimum = 0;maximum = 100路径1:1-2-10-11-13测试数据:value = [ 90,-999,0,0,0]预期结果:Average = 90,total.input = 1,total.valid = 1路径2:1-2-10-12-13测试数据:value = [ -999 ,0,0,0,0]预期结果:Average = -999,total.input = 0,total.valid = 0路径3:1-2-3-10-11-13测试数据:value = [ -1,90,70,-1,80]预期结果:Average = 80,total.input = 5,total.valid = 3路径4:1-2-3-4-5-8-9-2-10-12-13测试数据:value = [-1,-2,-3,-4,-999]预期结果:Average = -999,total.input = 4,total.valid = 0路径5:1-2-3-4-5-6-8-9-2-10-12-13测试数据:value = [ 120,110,101,-999,0]预期结果:Average = -999,total.input = 3,total.valid = 0路径6:1-2-3-4-5-6-7-8-9-2-10-11-13测试数据:value = [ 95,90,70,65,-999]预期结果:Average = 80,total.input = 4,total.valid = 44.基本路径覆盖测试1.概述1.1循环类型:简单循环、嵌套循环、串接循环和非结构循环2.简单循环的测试2.1零次循环:从循环入口到出口2.2一次循环:检查循环初始值2.3二次循环:检查多次循环2.4m次循环:检查多次循环2.5最大次数循环2.6比最大次数多一次的循环2.7比最大次数少一次的循环3.嵌套循环的测试3.1先测试最内层循环:所有外层的循环变量置为最小值,最内层按简单循环测试3.2由里向外,测试上一层循环:测试时此层以外的所有外层循环的循环变量取最小值,此层以内的所有嵌套内层循环的循环变量取“典型”值,该层按简单循环测试3.3重复上一条规则,直到所有各层循环测试完毕3.4对全部各层循环同时取最小循环次数,或者同时取最大循环次数4.串接循环的测试4.1如果串接的各个循环互相独立,则可以分别用简单循环的方法进行测试4.2如果第一个循环的循环变量与第二个循环控制相关,则两个循环不独立,可使用嵌套循环的办法来测试5.非结构循环的测试5.1先将其结构化,然后再测试5.程序插装1.概述1.1借助向被测程序中插入操作来实现测试目的的方法1.2基本原理:在不破坏被测程序原有逻辑完整性的前提下,在程序的相应位置上插入一些探针1.3探针:采集信息的代码段(赋值语句或函数调用)1.4探针的执行可输出程序的运行特征数据,从而揭示程序的内部行为和特征1.5程序插装的主要应用:测试覆盖率度量;断言(如执行程序段后变量应满足的条件)预测;数据流异常检测2.测试覆盖率度量2.1例如,度量如下覆盖情况:程序中每个语句至少被执行一次;每个分支至少被经过一次;每个可能的路径至少被经过一次2.2做法:在控制流中确定一个点集,在这些点上插入软件计数器,执行一组测试用例,检查计数器的值,以便计算覆盖率2.3程序插装需要考虑的问题:探测哪些信息在程序什么部位设置探测点需要设置多少探测点(设置最少探测点的方案)6.程序变异测试1.概述1.1穷尽测试是不可能的,只能选择最小的测试用例集,尽可能多地发现程序中的缺陷1.2变异分析是一种评价技术,通过检查测试用例能否发现特定类型缺陷对测试用例的质量进行评价1.3变异测试:通过注入故障(缺陷)得到相似的程序,称为变异体,使用原程序的测试用例集对变异体进行测试,如能区分变异体和原始程序,即二者的执行结果不同,则称变异体被杀死,否则变异体仍然活跃1.4变异体活跃的原因测试用例集不充分变异体与原始程序等价(即功能上是一致的)1.5与原始程序等价的变异体通常在测试基本完成后再区分1.62.●变异体Ⅰ是等价变异体7.其他白盒测试1.数据流测试1.1根据程序中变量的定义(赋值)和引用位置来选择测试用例1.2定义-引用链DU变量x的定义-引用链记为[x,s,s’]其中s, s’为语句标号,变量x在s中定义(赋值),在s’中被引用,且s处定义的x 在s’处仍有效1.3数据流测试就是设计测试用例使得每个DU链至少被覆盖一次1.4数据流测试适用于嵌套IF和多重循环程序的测试2.域测试2.1一种基于程序结构的测试方法2.2程序错误可分为域错误:一条执行路径对应输入域的一类,对于一个特定的输入可能执行一条错误的路径,这种错误称为域错误,或路径错误计算性错误:对于一个特定的输入执行一条正确的路径,但由于赋值语句的错误导致输出结果不正确丢失路径错误:由于程序中某处少了一个判定谓词而引起的错误2.3域测试指主要针对域错误的一种测试2.4域指被测程序的输入空间2.5输入空间可分为不同的子空间,每个子空间对应一种不同的计算2.6子空间的划分由程序中分支语句的谓词决定的2.7域测试就是在分析输入域的基础上,选择适当的测试点进行测试2.8域测试的缺点对程序提出的限制过多当程序存在很多路径时,所需的测试点也很多3.Z路径覆盖1.对于一个比较复杂的程序,特别是包含循环的程序,测试不可能覆盖程序所有的路径2.Z路径覆盖指对程序中的循环只考虑循环0次和循环1次两种情况的测试4.符号测试1.允许程序的输入可包含符号值。