【文档说明】软件测试-测试用例的设计方法课件.ppt,共(203)页,1.611 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45264.html
以下为本文档部分文字说明:
软件测试3.1软件测试用例的概述3.2黑合测试用例的设计3.3白合测试用例的设计第三章软件测试用例的设计3.1.1测试用例的基本概念3.1.2测试用例的设计原则与特性3.1.3测试用例的编制3.1测试用例
的基本概念1、什么是测试用例◆测试用例(TestCase)是为达到最佳的测试效果或高效的揭露隐藏的错误而精选的少量有代表性或特殊性测试数据。➢软件测试的灵魂----测试用例➢例:测试Yahoo邮箱的登录程序,
假设存在一用户为user,密码为12345。3.1.1测试用例的概念用例编号测试步骤输入数据期望结果测试结果1输入用户名和密码,点击“登录雅虎服务”按钮用户名:user密码:12345成功登录user的个人邮箱2输入用户名和密码
,点击“登录雅虎服务”按钮用户名:user密码:123456提示“密码错误,请重新输入!”3不输入用户名和密码,直接点击“登录雅虎服务”按钮提示“请输入用户名和密码!”…………………….3.1.1测试用例的概念工程硕士6◆测试用例包括测试环境、
测试步骤、测试数据和预期结果。即测试用例=输入+输出+测试环境+测试步骤输入:测试数据和操作步骤输出:期望结果测试环境:软硬件环境配置3.1.1测试用例的概念2、编制测试用例的重要性◆为什么要做测试用例,
主要原因有如下几点:➢完全测试是不可能的;➢输入量太大;➢输出结果太多;➢软件实现路径太多;➢软件说明书没有客观标准,软件缺陷的标准也不同。3.1.1测试用例的概念◆使用测试用例的好处:➢可以避免盲目测试并提高测试效率。➢使软件测试的实施重点突
出、目的明确。➢在软件版本更新后只需修正少部分的测试用例便可展开测试工作,降低工作强度、缩短项目周期。➢测试用例的通用化和复用化则使软件测试易于开展。3.1.1测试用例的概念◆测试用例的作用➢指导测试的实施➢规划测试数据的准备➢评估测试结果的度量基准➢分析缺陷的标准➢编写测试脚本的"设计
规格说明书"3.1.1测试用例的概念1、测试用例的设计原则保证测试用例的明确性。测试人员要尽量避免测试用例存在含糊的因素,否则会影响测试工作进行与测试结果的准确性(模棱两可)。在测试过程中,测试用例的测试结果是唯一的,即通过、没通过或未进行测试。如果测试没有通过,
一般会生成相应的测试错误报告;如果测试没有进行,也会生成相应的原因说明报告,如测试用例本身具有错误性、测试用例的不适用性等等。3.1.2测试用例的设计原则与特性保证测试用例的代表性。尽量将具有相似功能的测试用例抽象合并,使一个测试用例具有测试一类或一系列的系统需求。保证测试用例的简洁性。
冗长与复杂的测试用例是不应该出现的,否则可读性差、不利于测试人员理解和操作。简洁的测试用例可以让测试过程目的明确,让测试结果具有唯一性。3.1.2测试用例的设计原则与特性2、测试用例的特性有效性:测试用例是测试人员测试过程中的重要
参考依据,不同的测试人员根据相同的测试用例所得到的输出应该是一致的。可复用性:良好的测试用例具有重复使用的功能,这样就可以大大地节约测试的时间,提高测试的效率。3.1.2测试用例的设计原则与特性易组织性:测试用例可能
有成千上万个,有效地组织这些测试用例,分门别类地提供给测试人员参考和使用,才是一个好的测试计划。可评估性:从测试管理的角度,测试用例的通过率和软件缺陷的数目是软件产品质量好坏的测试标准。可管理性:测试用例可
以作为检验测试人员进度、工作量以及跟踪/管理测试人员工作效率的因素。3.1.2测试用例的设计原则与特性14GoodTestcase有效性仿效性经济性修改性测试用例是否能够发现缺陷或者至少可能发现缺陷。测试用例的代表程度,可测试多项内容,因而减少测试用例数量。实
现、调试和运行测试用例的成本修改和维护测试用例的难易程度3、测试用例的度量标准3.1.2测试用例的设计原则与特性1、测试用例编制的依据◆需求说明以及相关文档;◆设计说明及相关文档(概要设计,详细设计等);◆与开发组交流的记录(可以是开发人员的
一个解释);◆基本成型的UI;◆编写测试用例的文档模板和符合内部的规范要求。测试用例有相关的编制标准,如ANSI/IEEE829-1983标准中列出的关于软件测试用例的相关编制规范和模板。3.1.3测试用例的编制2、测试用例的编制过程◆分析软件程序的工作流程。目的是了解用户与系统
交互时的操作和步骤,以确定与描述测试软件所需的测试用例。3.1.3测试用例的编制◆确定并制定测试用例目的是为每项测试需求编写适当的测试用例。软件测试用例主要根据测试用例编写要素,结合相应的软件需求文档,在掌握一定测试用例设计方法的基础上,设计出比较全面、合理的测试用例,并生成规范的测试用例表。
如果测试过以前的版本,则测试用例已经存在,应复审这些测试用例。3.1.3测试用例的编制◆确定测试用例数据根据测试用例表的内容,确定支持这些测试用例的实际值。测试用例数据一般包括:用作输入的数据值用作预期结果的数据值用作支
持测试用例所需的数据◆测试用例的修改更新测试用例在形成文档后还需要不断完善,缘故在于:在测试过程中发现设计测试用例时考虑不周;在软件交付使用后反馈的软件缺陷,而缺陷又是因测试用例存在漏洞造成;软件自身的新增功能以及软件版本的更新,测试用例也必须
配套修改更新。3.1.3测试用例的编制3、测试用例的管理测试管理软件的主要功能有三个:记录测试用例文档的关键内容、可供测试实施时及时输入测试情况、实现自动生成测试结果文档。3.1.3测试用例的编制4、测试用例的文档◆测试用例文档由简介
和测试用例两部分组成。◆测试用例的文档模板。用于描述输入、动作、时间和一个期望结果。◆测试用例的基本要素。包括测试用例编号、测试标题、测试模块、用例级别、测试环境、测试输入、执行操作、预期结果。不同的公
司会有不同的测试用例模板。3.1.3测试用例的编制用例编号:每个测试用例都有唯一的标识号,用以区别其他测试用例。测试用例的编号有一定的规则:项目名称+测试阶段类型(系统测试阶段)+编号,如PROJECT1-ST-00
1,定义测试用例编号,是为了便于查找与跟踪测试用例。测试标题:测试用例标题应清楚表达测试用例的用途,如“测试用户登录时输入错误密码时,软件的响应情况”。测试模块:指明并简单描述测试用例是用来测试哪些项目、子项目或软件特性的。3.1.3测试用
例的编制用例级别:测试用例的优先级别,可以粗略地分为“高”和“低”两个级别,也可以分为“高”、“中”、“低”三个级别。一般来说,软件需求的优先级和测试用例的优先级一致,即如果软件需求的优先级为“高”,该需求的测试用例的优先级也为
“高”;反之亦然。测试环境:执行测试用例所需的硬软件环境。在整个测试模块中需要对应说明整个测试的特殊环境要求,在单个测试用例的测试环境需要表述该测试用例所单独需要的特殊环境要求。3.1.3测试用例的编制
测试输入:用来执行测试用例的输入要求。输入可以是数据、文件或具体操作。根据需求中的输入条件,确定测试用例的输入,测试用例的输入对软件需求当中的输入有很大的依赖性,如果软件需求中没有很好的定义需求的输入,那么测试用
例设计中会遇到很大的障碍。执行操作:执行测试用例所需的每一步操作。对于复杂的测试用例,测试用例的输入需要分为几个步骤完成,这部分内容在操作步骤中详细列出。3.1.3测试用例的编制预期结果:描述被测项目或特性所希望或要求达到的输出或指标。一般来说,预期结果主要根据软件需求中的输出得出,如果在
实际测试过程中,得到的实际测试结果与预期结果不符,那么测试不通过;反之则测试通过。3.1.3测试用例的编制软件测试用例元素含义给出定义的测试角色用例编号被标识过的测试需求测试标题测试用例的描述测试模块指明测试的具体对象用例级别指明测试用例的优先
级别测试需求分析测试环境进入测试实施步骤所需的资源及其状态。测试输入运行本测试所需的代码和数据,包括测试模拟程序和测试模拟数据测试设计(描述性定义)执行操作建立测试运行环境、运行被测对象、获取测试结果的步骤序列预期结果用于比较测试结果的基准测试实现(计算机表示)评价标准根据测试结果与预期结
果的偏差,判断被测对象质量状态的依据测试用例的基本要素3.1.3测试用例的编制工程硕士26测试用例的内容(示例)1用例编号10用例类别2用例名称11用例状态3测试目的12用例设计人4输入数据13创建时间5测试步骤14用例评
审人6测试脚本15评审时间7预期结果16评审结果8响应时间17执行结果9实际输出18相关模块3.1.3测试用例的编制工程硕士27测试用例模板(示例)项目名称程序版本测试环境硬件环境软件环境网络环境编制人编制时间功能模块用户登录功能特性测试目的预置条件用例编号测试步骤输入数据预期结果测试结果3
.1.3测试用例的编制测试用例是测试工作的核心,应该尽量设计的周密细致,这样才能更好的保证测试工作的质量。以一个实现登录功能的小程序为例,它允许用户选择城市和地区,输入自己的账号和密码。如图1-9所示,通过Alt-
F4组合键和“Exit”按钮来终止程序,Tab键在区域中间移动。操作员登录--选择城市----选择地区--城市地区操作员密码提交退出登录窗口根据组成页面的具体元素,做了比较全面的测试用例。(1)下拉框和输入框测试用例测试内容输入操作预期输
出实际结果下拉框未和后台数据库绑定(显示列表元素固定)不允许列表中出现NULL现象,固定“—请选择--”已和后台数据库绑定(显示列表元素活动)不允许列表中出现NULL现象,固定“—请选择--”输入框限定字符型输入12、6无#,*等错误提示限定型数字输入测试
数据无12月、7*、0错误提示(2)功能测试用例用例应产生行为结果失败原因1.基本功能测试1.1在输入框内输入资料并且执行存储程序必须能够接受使用者的输入并且将输入值存在登录文件内1.2在输入框内不输入资
料但执行储存程序必须能够检查使用者输入是否为空白,同时必须能够告知使用者原因1.3检查city字段储存结果City字段输入后存入cookies1.4检查area字段储存结果Area字段输入后存入cookies储存结果1.5检查ID字段储存结果ID字段输入后存入cookies……2.使用接
口功能测试2.1检查输入字段的输入值必须组织使用者输入空白,同时部分字段只能输入数字(3)各种错误数据的测试测试内容输入操作预选测试数据预期输出实际结果点击登录按钮不完整的数据City,area,ID,pswd略提示错误对话框不正确的数据City,area,ID,ps
wd略提示错误对话框回车操作不完整的数据City,area,ID,pswd略提示错误对话框点击“退出”按钮无无无关闭当前应用系统(4)特殊测试测试内容输入操作预选测试数据预期输出操作焦点逃逸连续Tab切换,察看异常无焦点可准确回归当前操作窗口分配内存不足启动多
个应用程序或模拟多个程序运行无是否可以正常运行网络断线切断网络连接无是否可正常抛出异常3.2.1等价类测试用例设计法3.2.2边界分析测试用例设计法3.2.3决策表测试用例设计法3.2.4因果图测试用例设计法3.2.5错误
猜测测试用例设计法3.2.6业务流程图测试用例设计法3.2.7黑盒测试用例设计方法的应用3.2黑合测试用例的设计常用的黑盒测试用例设计方法主要有以下几种:边界值分析等价类决策表因果图法错误猜测法流程图法3.2黑合测试用例的设计1、等价类测试用例设计的
基本思想等价类测试法是将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。等价类测试法是把所有可能的输入数据(即程序的输入域)划分成若干子集(等价类),从每一个子集中选取少数具有代表性的数据作
为测试用例。每个子集中的输入具有相同揭示程序问题的能力,进而达到尽可能完备同时又可避免冗余的测试。在分析需求规格说明书的基础上划分等价类,是等价类测试用例设计的前提。3.2.1等价类测试用例设计法所谓等价类是指输入域的某个子集,所有等价类的并集就是整个输入
域。在等价类中,各个输入数据对于揭露程序中的错误都是等效的,具有等价特性。因此,测试等价类中的代表值等价于对该类中其它值的测试,即如果某等价类中的一个用例发现了错误,该等价类中的其它用例也能发现同样的错误;反之,如果等价类中的一个用例没有发现错误,该等价类中的其它用
例也不会查出错误。3.2.1等价类测试用例设计法2、有效等价类与无效等价类软件不能只接收合理有效的数据,还应具有处理异常数据的功能,才能确保软件具有更高的可靠性。因此,在划分等价类的过程中,不但要考虑
有效等价类划分,同时也要考虑无效等价类划分。有效等价类是指对《需求规格说明书》来说,合理、有意义的输入数据所构成的集合。利用有效等价类可以检验程序是否满足规格说明所规定的功能和性能。无效等价类则和有效等价类相反,对需求规格说明书》是无意义的、不合理的输入数据所构成的集合,即不满足程序输入要求
或者无效的输入数据所构成的集合。利用无效等价类可以检验程序异常情况的处理。3.2.1等价类测试用例设计法393、等价类划分的原则如果输入条件规定了一个取值范围,就应确定一个有效等价类和两个无效等价类;如果输入条件规定了取值的个数,就应确定一个有效等价类和两个无效等价类;如果输入
条件是一个布尔表达式的条件,可以确定一个有效等价类和一个无效等价类如果输入条件规定了一个输入值的集合,而且程序会对每个值进行不同处理,就应为每个输入值确定一个有效等价类和一个无效等价类;如果输入条件规定了“必须是”
的情况,就应确定一个有效等价类和若干无效等价类;如果程序未等同地处理等价类中的元素,应将这个等价类再划分为小一些的等价类。3.2.1等价类测试用例设计法404、等价类测试用例设计的步骤划分等价类;为每一个有效等价类和无效等价类规定一个唯一的编号;设计一个测试用例,使其尽可能多地覆盖尚
未覆盖的有效等价类,重复这一步直到所有有效等价类均被测试用例所覆盖;设计一个测试用例,使其只覆盖一个无效等价类,重复这一步,直到所有无效等价类均被覆盖。3.2.1等价类测试用例设计法输入条件有效等价类无效等价类………………5、等价类表示在确
立了等价类之后,建立等价类表,列出所有划分出的等价类,如表所示。等价类表3.2.1等价类测试用例设计法42—求三角形面积(仅判断是否是三角形)边长非数值小数(7)整数<1(5)>99(6)空白(11)空格(10)数值特殊字符(9)字母(8)1~99a
+c<b(4)b+c<a(3)a+b<c(2)不能构成三角形构成三角形(1)某程序实现如下功能:输入三个整数a,b,c,输出以a,b,c为三边的三角形面积(1<a,b,c<100),结果保留2位小数。3.2.1等
价类测试用例设计法43用例编号所属等价类输入数据预期结果11(有效等价类)A=10,B=10,C=1043.6021(有效等价类)A=99,B=99,C=994364.9932(无效等价类)A=1,B=2,C=4提示“不能构成三角形”4
3(无效等价类)A=4,B=1,C=2提示“不能构成三角形”54(无效等价类)A=1,B=4,C=2提示“不能构成三角形”65(无效等价类)A=0,B=0,C=0提示“请输入1~99之间的整数”76(无效等价类)A=100,B=100,C=100提示“请输入1~99之间
的整数”87(无效等价类)A=ABCD,B=ABCD,C=ABCD提示“请输入1~99之间的整数”3.2.1等价类测试用例设计法6、常见等价类划分形式针对是否对无效数据进行测试,可以将等价类分为标准等价类、健壮等价类和对等区间等价类。(1)标准(简单)等价类标准等价类不考虑无效数
据,测试用例使用每个等价类中的一个值。通常,标准等价类测试用例的数量和最大等价类中元素的数目相等。3.2.1等价类测试用例设计法NextDate函数包含三个变量:month(月份)、day(日期)和year(年),函数的输出为输入日
期后一天的日期。例如,输入为2007年9月9日,则函数的输出为2007年9月10日。要求输入变量month、day和year均为整数值,并且满足下列条件:(1)1≤month≤12(2)1≤day≤31(3)
1912≤year≤20503.2.1等价类测试用例设计法NextDate函数的标准等价类有三个有效等价类:M1={month:1≤month≤12}D1={day:1≤day≤31}Y1={year:1912≤year≤2050}3.2.1等
价类测试用例设计法测试用例输入期望输出monthdayyearTestCase19920072007年9月10日(2)健壮等价类NextDate函数的主要特点是输入变量之间的逻辑关系比较复杂,原因有两个:一个是输入域的复杂性,另一个
是闰年的规则。例如变量year和变量month取不同的值,对应的变量day会有不同的取值范围,day值的范围可能是1~30或1~31,也可能是1~28或1~29。3.2.1等价类测试用例设计法(2)健壮等价类健壮等价类应考虑无效等价类,若三个输入中有
一个条件无效,那么NextDate函数都应产生一个输出,来指明相应的变量超出取值范围,例如month的值不在1~12范围当中。显然还存在着大量的year、month、day的无效组合,NextDate函数将这些组合统一输出为:“无效输入日期”。M2={month:month<1}M3=
{month:month>12}D2={day:day<1}D3={day:day>31}Y2={year:year<1912}Y3={year:year>2050}3.2.1等价类测试用例设计法(2)健壮等价类在标准等价类中,既没有考虑2月份的天数问题,也没有考虑闰年的问题,月份
只包含了30天和31天两种情况。在健壮等价类划分中,考虑2月份天数。关于每个月份的天数,可以详细划分为以下等价类:M1={month:month有30天}M2={month:month有31天}M3={mon
th:month是2月}D1={day:1≤day≤27}D2={day:day=28}D3={day:day=29}D4={day:day=30}D5={day:day=31}Y1={year:year是闰
年}Y2={year:year不是闰年}3.2.1等价类测试用例设计法测试用例输入期望输出monthdayyearTestCase163020072007年7月1日TestCase283120072007年9月
1日TestCase322720072007年2月28日TestCase422820072007年3月1日TestCase522920002000年3月1日(2000是闰年)TestCase63192007不可能的输入日期TestCase72292007不可能的
输入日期TestCase82302007不可能的输入日期TestCase91592007变量month无效NextDate函数健壮等价类测试用例3.2.1等价类测试用例设计法(3)弱健壮等价类测试弱健壮等
价类主要是考虑无效等价类。对有效输入,测试用例从每个有效等价类中取一个值;对无效输入,一个测试用例有一个无效值,其他值均取有效值。3.2.1等价类测试用例设计法NextDate函数弱健壮等价类测试用例测试用例输入期望输出monthdayyearTestCase
19920072007年9月10日TestCase2092007month不在1~12中TestCase31392007month不在1~12中TestCase4902007day不在1~31中TestCase59322007day不在1~31中TestCase6991911year不在1912
~2050中TestCase7992051year不在1912~2050中3.2.1等价类测试用例设计法(4)强健壮等价类测试强健壮等价类则考虑更多的无效值。强健壮等价类中的无效测试用例可以包含多个无效值,即含有多个缺陷假设。因为NextDate函数有三个变量,所
以对应的强健壮等价类测试用例可以包含一个无效值,两个无效值或三个无效值。3.2.1等价类测试用例设计法NextDate函数强健壮等价类测试用例测试用例输入期望输出monthdayyearTestCase1-192007month不在1~12中TestCase29-1
2007day不在1~31中TestCase3991900year不在1912~2050中TestCase4-1-12007month、day无效,year有效TestCase5-191900month、year无效,day有效TestCase69-11900day、year无效,month有效
TestCase7-1-11900month、day、year无效3.2.1等价类测试用例设计法(5)对等区间等价类对等区间等价类是非常规的形式化方法,它将被测对象的输入/输出划分成一些区间,被测软件对一个特定区间的
任何值都是等价的。测试区间的数据不只是函数/过程的参数,也可以是程序可以访问的全局变量、系统资源等,且变量或资源可以是以时间形式存在的数据,或以状态形式存在的输入/输出序列。对等区间等价类划分的前提是位于单个区间的所有值对测试都是对等的,应为每个区间的
一个值设计一个测试用例。3.2.1等价类测试用例设计法输入区间输出区间ⅰ<0A>=0ⅱ>=0BError平方根函数要求当输入值为0或大于0时,返回输入数的平方根;当输入值小于0时,显示“平方根错误”。考虑平方根函数的测试用例区间,可以划分出两个输入区间和两个
输出区间。区间划分3.2.1等价类测试用例设计法通过分析,可以用两个测试用例来测试4个区间:测试用例1:输入4,返回2//区间ⅱ和A测试用例2:输入-4,输出“平方根错误,输入值小于0”//区间ⅰ和B当软件变得更加复杂时,对等区间的确定就较难,区间之
间的相互依赖性就越强,使用对等区间等价类划分设计测试用例技术的难度增加。3.2.1等价类测试用例设计法58NextDate(月,日,年)是三个变量的函数。函数返回输入日期的下一个日期。变量月份,日期和年都是整数值,且满足下面的条件:1<=月份
<=12,1<=日期<=31,1900<=年<=2060两种不同的等价类划分方法等价类测试示例:NextDate问题59方法1⚫测试用例1.覆盖等价类1,2,3:测试输入=(2006,6,16),预期结果=(2006,6,17)2.
覆盖等价类4,2,3:测试输入=(1890,4,10),预期结果=“输入错误!”3.覆盖等价类5,2,3:测试输入=(2062,4,10),预期结果=“输入错误!”4.覆盖等价类1,6,3:测试输入=(
2006,-2,16),预期结果=“输入错误!”5.覆盖等价类1,7,3:测试输入=(2006,13,16),预期结果=“输入错误!”6.覆盖等价类1,2,8:测试输入=(2006,6,0),预期结果=“输入错误!”7.覆盖等价类1,2,9:测试输入=(2006,4,33),预期结果
=“输入错误!”条件有效等价类编号无效等价类编号年[1900,2060]1年<19004年>20605月[1,12]2月<16月>127日[1,31]3日<18日>31960方法2⚫测试用例1.覆盖等价类1,3,7:测试输
入=(2000,7,16),预期结果=(2000,7,17)2.覆盖等价类2,4,8:测试输入=(2006,4,29),预期结果=(2006,4,30)3.覆盖等价类1,5,9:测试输入=(2000,2,30),预期结果=“输入错误!”4.覆盖等价类2,6
,10:测试输入=(2001,12,31),预期结果=(2002,1,1)5.覆盖等价类11,3,7:测试输入=(1830,3,19),预期结果=“输入错误!”61方法2(续)⚫测试用例(续)6.覆盖等价类12,3,7:测试输入=(3000,3,19),预期结果=“输入错误!”7.覆盖等价类1,1
3,7:测试输入=(2004,-2,10),预期结果=“输入错误!”8.覆盖等价类1,14,7:测试输入=(2004,15,10),预期结果=输入错误!”9.覆盖等价类1,3,15:测试输入=(2004,8,-2),预期结果=“输入错误!”覆盖等价类测试输入预期结果“
输入错误”。。。。。。62⚫讨论⚫每种结果都覆盖了一些应该测试的功能点第一种方法:过多关注无效等价类的测试,遗漏了较多NextDate问题蕴含的逻辑,如平年和闰年、二月和大小月、月底等;第二种方法:在第一种方法的基础上,增加了对二月、年底等的测试,同时要考虑NextDate的
逻辑知识,测试用例涵盖了大部分需测试的要点,但仍有些遗漏,例如年底、平年的二月等⚫如果程序未等同地处理等价类中的元素,应将这个等价类再划分为小一些的等价类。3.2.1等价类测试用例设计法63等价类测试示例:加法器一个c语言程
序,功能是计算1~100之间的整数的和#include<stdio.h>voidmain(void){inta;//加数intb;//加数intc;//和while(1){printf(“请输入两个1到100之间的整数
:”);fflush(stdin);//清空输入缓冲区scanf(“%d%d”,&a,&b);if((a>1&&a<100)&&(b>1&&b<100))//判断{c=a+b;printf(“两个数的和为%d\n”,c)
;}}}(1)无效等价类<1(2)有效等价类1~100之间(3)无效等价类>100用例编号所属等价类加数1加数2预期结果1234043210-1提示33110101提示AB+=64加法器等价类扩展除了考虑数据的输入范围,还要考虑输入数据的类型加数数值非数值整数
小数(4)字母(5)特殊字符(6)空格(7)空白(8)<1(1)1~100(2)>100(3)65加法器测试用例用例编号所属等价类加数1加数2和(预期结果)12(有效等价类)3404321(无效等价类)0-1提示“请输入1~100之间的整数”
33(无效等价类)110101提示“请输入1~100之间的整数”44(无效等价类)1.23.2提示“请输入1~100之间的整数”55(无效等价类)AB提示“请输入1~100之间的整数”66(无效等价类)@#提示“请输入1~100之间的整数”77(无效等价类)空格空格提示“请
输入1~100之间的整数”(无效等价类)提示“请输入之间的整数”3.某软件要求输入以年月表示的日期,日期限定在1998年1月~2068年12月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月。现用等价类划分法对输入日期进行黑合测试,测试用例的等价类如下表,试设计测试用例,以覆
盖所有的等价类。输入等价类有效等价类无效等价类日期类型与长度①6位数字字符④有非数字字符⑤少于6位数字字符⑥多于6位数字字符年份范围②在1998~2068之间⑦小于1998⑧大于2068月份范围③在01~12之间⑨等于00⑩大于12覆盖所有的等价类的测试用例如下表。测试用例数据
期望结果覆盖的等价类编号200611输入有效①②③199901输入有效①②③205901输入有效①②③9954X9无效输入④20096无效输入⑤20120607无效输入⑥198901无效输入⑦200401无效输入⑧200400无效输入⑨
200422无效输入⑩1、边界值分析法的思想边界值分析法(BoundaryValueAnalysis,BVA)是对等价类测试用例设计法的补充,不是选择等价类中的元素,而是选择等价类边界的数据。在测试过程中,往往忽略边界的条件
,而软件中的大量错误是发生在输入或输出范围的边界上。因此针对各种边界设计测试用例,以查出更多的错误。3.2.2边界值分析测试用例设计法1、边界值分析法的思想如创建一个含有10个元素的一维数组的VB程序:Dimdata(10)asInteger
DimiasIntegerFori=1to10data(i)=1Nexti3.2.2边界值分析测试用例设计法1、边界值分析法的思想在Basic语言中,定义数组的第一个元素所对应的下标是0而不是1。因此,程序运行结束后
,数组中成员的赋值情况如下:data(0)=0,data(1)=1,data(2)=1,...,data(10)=1当其他程序员使用该数组时,可能会造成软件的缺陷或错误的产生。边界值分析方法设计的测试用例,就是着重测试的边界情况。3.2.2边
界值分析测试用例设计法71边界值测试用例的取值在输入变量的最小值、略高于最小值、正常值、略低于最大值和最大值处。abcdX2X1有效输入区域函数F有两个变量X1和X2,F实现为一个程序,完成某功能,X1和X2的值域分别为[a,b]和[c,d]3.2.2边界值分析测试用例设计法2、
边界值分析法的原则边界值分析法应遵循以下几条原则:如果输入条件规定了值的范围,应选取刚达到及刚超过范围边界的值作为测试输入数据。如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少1、比最大个数多1的数作为测试数据。根据规格说明的每一个输出条件,分别
使用以上两个原则。3.2.2边界值分析测试用例设计法2、边界值分析法的原则如果规格说明给出的输入域或输出域是有序集合(如有序表、顺序文件等),应选取集合的第一个元素和最后一个元素作为测试用例。如果程序中使用了一个内部数据结构,应选择该内部数据结构的边界值作为测试用例。分析规格说明,找出
其他可能的边界条件。3.2.2边界值分析测试用例设计法743、基于单缺陷假设边界值单缺陷假设:失效极少是由两个(或多个)缺陷同时发生而引起的。边界值分析的测试用例:通常一个输入变量取边界值,而其它变量则正常值。每个变量重复进行,对
于一个n变量函数,边界值分析产生4n+1个测试用例。3.2.2边界值分析测试用例设计法753、基于单缺陷假设边界值abcdX2X1如何设定边界值?根据上下文(语境)人工创建3.2.2边界值分析测试用例设
计法实现计算一个含有两个整数自变量X和Y函数的程序,X的取值域为[4,24],Y的取值域为[2,20],根据单缺陷假设边界值测试用例的设计原则,给出边界值分析法的测试用例。若X取正常值14,Y取2、3、19和20,则测试用例有(14,2)、(14,3)、(14,19)
和(14,20)。若Y取正常值11,X取4、5、23和24,则测试用例有(4,11)、(5,11)、(23,11)和(24,11)。若X和Y均取正常值,则测试用例有(14,11)。对所有的测试用例,预期结果都
是一个数值。3.2.2边界值分析测试用例设计法4、基于单缺陷假设健壮边界值测试思想:测试用例除了最小值、略高于最小值、正常值、略低于最大值和最大值处取输入变量的值,还要在略超过最大值以及略小于最小值之处值。如果被测变量个数为n,则测试用例个数
为6n+1。abcdX2X1观察例外情况处理关心预期的输出3.2.2边界值分析测试用例设计法5、基于多缺陷假设边界值测试多缺陷假设:失效可能是由两个(或多个)缺陷同时发生而引起的。测试思想:首先取每个变量的最小值、略高于最小值、正常值、略低于最大值和最大值的集合进行测试,然后对
这些集合进行笛卡儿乘积计算,生成测试用例。即取各变量的不同边界值的组合,产生5的n次幂个用例。78abcdX2X1最坏情况3.2.2边界值分析测试用例设计法6、基于多缺陷假设健壮边界值测试测试思想:首先对于每个变量进行最小值、略高于最小值、正常值、略低于最大值、
最大值以及略超过最大值和略小于最小值的集合的测试,然后对这些集合进行笛卡儿乘积计算,生成测试用例。即取各变量的不同边界值的组合,产生7的n次幂个用例。79abcdX2X1健壮最坏情况测试3.2.2边界值分析测试用例设计法以三角形问题为例,要求输入三
个整数a、b、c,分别作为三角形的三条边,取值范围在1~100之间,判断由三条边构成的三角形类型为等边三角形、等腰三角形、一般三角形(包括直角三角形)以及非三角形。如表所示给出了边界值分析测试用例。3.2.2边界值分析测试用例设计法测试用例abc预期输出TestCase115050等腰三角形
TestCase225050等腰三角形TestCase3505050等边三角形TestCase4995050等腰三角形TestCase51005050非三角形TestCase650150等腰三角形TestCase75025
0等腰三角形TestCase8509950等腰三角形TestCase95010050非三角形TestCase1050501等腰三角形基于单缺陷假设边界值的测试用例3.2.2边界值分析测试用例设计法82⚫某选课系统中规定每门
课程的选修人数在[20,60]之间,小于20人不开设该门选修课,大于60人不接受后面的选课要求。⚫测试设计⚫输入变量:选课人数⚫测试输入1.选课人数分别为19,20,21,59,60和61等几个边界点2.一个正常值点403.2.2边界值分析测试用例设计法83
边界值测试举例——NextDate问题⚫NextDate(年,月,日)是三个变量的函数。函数返回输入日期的下一个日期。变量年份,月份,日期都是整数值,且满足下面的条件:1900≤年≤2060,1≤月≤12,1≤日≤31⚫测试设计⚫三个输入变量:年,月,日⚫年
的边界值:1899,1900,1901,1980,2059,2060,2061⚫月的边界值:0,1,2,7,11,12,13⚫日的边界值:0,1,2,15,30,31,323.2.2边界值分析测试用例设计法84边界值测试小结错误隐含
在角落,边界值最容易出现问题。边界值测试的局限:边界值分析假设变量是独立的,没有相互依赖关系。未考虑函数的性质及变量的语义。如果输入变量之间不是真正独立的,由边界值而得的测试用例不够充分。不仅要考虑输入空间,还要考虑输出空
间。健壮性测试是测试内部变量的一种好的选择:循环控制变量、索引和指针等。注意单缺陷假设和多缺陷假设。NextDate的月、日和年之间存在依赖关系,例如2月和闰年(1912年2月31日?)3.2.2边界值分析测试法85采用边界值技术测试加法
器功能:计算两个1~100之间的整数的和。程序:#include<stdio.h>voidmain(void){inta;//加数intb;//加数intc;//和while(1){printf(“请输入两个1到100之间的整数:”);fflu
sh(stdin);//清空输入缓冲区scanf(“%d%d”,&a,&b);if((a>1&&a<100)&&(b>1&&b<100))//判断{c=a+b;printf(“两个数的和为%d\n”,c);}}}⚫测试用例:11+1210
0+10030+04101+101?AB+=1.决策表及其测试思想决策表是分析和表达多个逻辑条件下执行不同操作的工具,可以把复杂的逻辑关系与多种条件组合表达得极为具体而又明确。决策表最突出的优点是,能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏,利
用决策表能够设计出完整的测试用例集合。3.2.3基于决策表测试用例设计法1.决策表及其测试思想测试思想是根据逻辑条件取值的组合所构成的多种情况,分别执行不同的操作,构造相应的测试用例。在所有的黑盒测试方法中,基于决策表(也称判定表)的测
试是最为严格、最具有逻辑性的测试方法。3.2.3基于决策表测试用例设计法2、决策表的组成及其适用性决策表适合描述不同条件集合下采取行动的若干组合的情况,它通常由四个部分组成。条件桩:用于列出问题的所有条件,且列出条件的先后次序可任意。动作桩:用于列出问题规定的可能采取的操作,且操作
的排列次序没有约束。条件项:用于针对条件桩给出的条件列出所有可能的取值。3.2.3基于决策表测试用例设计法2、决策表的组成及其适用性动作项:用于列出在条件项的各组取值情况下应该采取的动作,与条件项紧密相关。3.2.3基
于决策表测试用例设计法条件桩(conditionstub)(输入条件集合)条件项(conditionentry)(输入值)动作桩(actionstub)(输出结果集合)动作项(actionentry)(输出结果)2、决策表的组
成及其适用性而任何一个条件组合的特定取值及其相应要执行的操作称为一条规则,在决策表中贯穿条件项和动作项的一列就是一条规则。显然,决策表中列出多少组条件取值,也就有多少条规则,即条件项和动作项有多少列。3.2.3基于决策表测试用例设计法2、决策表的组成及其适用性
决策表法一般适用于下列情况:(1)规格说明以决策表形式给出或很容易转换成决策表。(2)条件的排列顺序不会也不应影响执行的操作。(3)规则的排列顺序不会也不应影响执行的操作。3.2.3基于决策表测试用例设计法2、决策表的组成及其适用性(4)每当某一规则的条件已
经满足,并确定要执行的操作后,不必检验别的规则。(5)如果某一规则得到满足要执行多个操作,操作的执行与顺序无关。3.2.3基于决策表测试用例设计法3、决策表的建立与分类根据规格说明,建立决策表的步骤为:(1)分析需求,确定条件桩和动作桩(2)填入所有的条件桩和动作桩(3
)根据逻辑关系,填入条件项的值(4)根据需求,填入相应动作项的值(5)重复3、4直到所有逻辑关系被遍历完毕(根据条件数和条件取值,确定规则数)(6)化简即合并相似规则(相同动作)。3.2.3基于决策表测试用例设计法3、决策表的建立与分类根据条件可取值数,决策表可分为有限项决策表和扩展项决
策表。有限项决策表中的每个条件只有两个值,如Y/N、T/F、1/0等;扩展项决策表中的每个条件的取值有多个(大于2个)。3.2.3基于决策表测试用例设计法建立决策表示例:如果某产品销售好并且库存低,则增加该产品的生产;如
果该产品销售好,但库存量不低,则继续生产;若该产品销售不好,但库存量低,则继续生产;若该产品销售不好,且库存量不低,则停止生产。该问题中有2个条件(销售、库存)、3个动作(增加生产、继续生产和停止生产),
而每个条件可以有两个取值(销售好与不好、库存低与不低),所以有有22=4种规则。3.2.3基于决策表测试用例设计法规则选项1234条件:C1:销售好?C2:库存低?TTTFFTFF动作:a1:增加生产a2:继续生产a3:停止生产√√√
√产品销售问题的决策表3.2.3基于决策表测试用例设计法4、不相关项的合并通过合并具有相同动作结果的相似规则,减少规则数量,进而减少测试用例的个数。所谓相似规则是指在其它条件不变时,某一条件无论取何值,
都产生相同动作的规则集。而所有相似规则可以合并为一个规则。3.2.3基于决策表测试用例设计法12345678问题你觉得累吗?YYYYNNNN你对书中内容感兴趣吗?YYNNYYNN书中的内容使你糊涂吗?YNYNYNYN建
议请回到本章开头重读XX继续读下去XX跳到下一章去读XX不读了,请休息XX4、不相关项的合并3.2.3基于决策表测试用例设计法4、不相关项的合并当第二、三个条件为“Y”时,第一个条件无论取何值都会产生相同的动作,所以
可以将第一条规则和第五条规则利用不相关项进行合并3.2.3基于决策表测试用例设计法4、不相关项的合并规则数降低到4,相应的测试用例数也降低到4。不相关项用“-”表示。3.2.3基于决策表测试用例设计法三角形问题示例:有一判断由三条边构成的三角形类型(类型有等边三
角形、等腰三角形、一般三角形(包括直角三角形)以及非三角形)的程序,要求输入三个整数a、b、c,分别作为三角形的三条边,取值范围在1~100之间的整数。运用有限项决策表方法设计测试用例。3.2.3基于决策表测试用例设计法由题意可知:运用决策表方法设计测试用例
时,有六个条件桩:a<b+c、b<a+c、c<b+a、a=b、a=c和b=c,有五个动作桩:非三角形、不等边三角形、等腰三角形、等边三角形和不可能出现的三个数。且由于每个条件只有两个值(F和T),因此由决策表方法建立的决策表是有限项决策表,即有26=64条规则。特别地,当a<b+c为F时,
另外的条件无论是F还是T,产生的动作项是相同的,所以构成的条件项是不相关项,即可把25=32规则合并为一个。当a<b+c为T、b<a+c为F时,另外的条件无论是F还是T,产生的动作项是相同的,所以构成的条件项是不相关项,即可把24=16规则合
并为一个。当a<b+c为T、b<a+c为T、c<b+a为F时,另外的条件无论是F还是T,产生的动作项是相同的,所以构成的条件项是不相关项,即可把23=8规则合并为一个。因此共有11条规则需要设计测试用例,如下图所示。3.2.
3基于决策表测试用例设计法测试用例:规则1:测试输入=(60,16,26),预期结果:非三角形规则2:测试输入=(50,50,0),预期结果:非三角形规则3:测试输入=(0,0,0),预期结果:非三角形规则4:测试输入=(60,60,60),预期结果:等边三角形规则5:这种组合在现实中不可能存在规
则6:这种组合在现实中不可能存在3.2.3基于决策表测试用例设计法104规则7:测试输入=(60,60,26),预期结果:等腰三角形规则8:这种组合在现实中不可能存在规则9:测试输入=(60,26,60),预期结果:等腰三角形.规则10:测
试输入=(26,60,60),预期结果:等腰三角形规则11:测试输入=(30,40,50),预期结果:不等边三角形3.2.3基于决策表测试用例设计法105扩展项决策表——NextDate问题示例⚫条件桩:M1={月份:每月有30天}M2={月份:每月有31天}M3={月份:2月}D1
={日期:1≤日期≤28}D2={日期:日期=29}D3={日期:日期=30}D4={日期:日期=31}Y1={年:1900≤年≤2060}⚫动作桩:A1={输出下一个日期}A2={不可能}⚫如果选择有限项决策表,那么表中会存在256条规则106扩展项决策表
——NextDate问题C1:月份在M1中C2:月份在M2中C3:月份在M3中C4:日期在D1中C5:日期在D2中C6:日期在D3中C7:日期在D4中C8:年在Y1中A1:输出下一个日期A2:不可能T-----X......,共有256条
......TT--107扩展项决策表——NextDate问题NextDate问题的扩展项决策表:⚫日期:⚫D1={从1到27}⚫D2={28}⚫D3={29}⚫D4={30}⚫D5={31}⚫年:⚫Y1={闰年}⚫Y2={平年}⚫月份:⚫M1={31天
的月,除去12月}⚫M2={30天的月}⚫M3={2月}⚫M4={12月}108扩展项决策表——NextDate测试用例⚫测试用例规则1:测试输入=(2007,7,19),预期结果=“2007-7-20”规则2:测试输入=(2007,
7,31),预期结果=“2007-8-1”规则3:测试输入=(2007,9,25),预期结果=“2007-9-26”规则4:测试输入=(2007,9,30),预期结果=“2007-10-1”规则5:测试输入=(200
7,11,31),预期结果=“日期输入错误”规则6:测试输入=(2000,2,15),预期结果=“2000-2-16”109扩展项决策表——NextDate测试用例⚫测试用例规则7:测试输入=(2000,2,29),预期结果=“2000-3-1”
规则8:测试输入=(2000,2,30),预期结果=“日期输入错误”规则9:测试输入=(2007,2,15),预期结果=“2007-2-16”规则10:测试输入=(2007,2,28),预期结果=“2007-3-1”规则11:测试输入=(2007,2,29),预期结果=“日期输入错误”规则12:测
试输入=(2006,12,16),预期结果=“2006-12-17”规则13:测试输入=(2006,12,31),预期结果=“2007-1-1”决策表小结适用于以下类型的应用程序:if-then-else逻
辑突出的程序输入变量之间存在逻辑关系输入与输出之间存在因果关系具有较高的环复杂度基于决策表的测试是严格的测试。在各输入变量之间真正独立的条件下,无法体现其逻辑严谨的优势可使用多种方式,如扩展项决策表、代数简
化表增加决策表的伸缩性。3.2.3基于决策表测试用例设计法1、因果图法及其基本符号等价类划分法和边界值分析法着重考虑输入条件,而没有考虑到输入条件的各种组合;基于决策表法考虑输入条件的各种组合,但没有考虑到各个输入条件之
间的相互制约关系。因此,必须考虑采用一种适合于多种输入条件的组合,又考虑到各个输入条件之间的相互制约关系,相应产生多个动作的形式来进行测试用例的设计。因果图法是一种利用图解法分析输入的各种组合及其相互
制约关系,从而设计测试用例的方法。3.2.4因果图测试用例设计法1、因果图法及其基本符号在因果图中,通常使用4种符号来表示输入输出之间的4种因果关系,如图所示。用直线连接左右节点,其中左节点Ci表示输入状态(或称原因),右节点ei表示输出状态(或称结
果)。Ci和ei都可取值0或1,0表示某状态不出现,1表示某状态出现。3.2.4因果图测试用例设计法(a)恒等因果图的基本符号(b)非(c)或(d)与3.2.4因果图测试用例设计法1、因果图法及其基本符号图(a)表示恒等:若C1是1,则e1也是1;若C1是0,则e1为0。图(b)表示非:若C
1是1,则e1是0;若C1是0,则e1为1。图(c)表示或:若C1或C2或C3是1,则e1是1;若C1、C2、C3全为0,则e1为0。图(d)表示与:若C1和C2都是1,则e1是1;只要C1、C2、C
3中有一个为0,则e1为0。3.2.4因果图测试用例设计法1、因果图法及其基本符号输入状态或输出状态之间可能存在某些依赖关系,这种依赖关系称之为约束,如某些输入条件不可能同时出现。在因果图中,也使用特定符号标明约束,如图所示。3.2.4因果图测试用例设计法1、因果图法及其基本符号3.2.4因果
图测试用例设计法(a)异(b)或(c)惟一输入约束符号(d)要求1、因果图法及其基本符号输入约束符有四种:图(a)表示E约束(异):a和b中最多有一个可能为1,即a和b不能同时为1。图(b)表示I约束(或):a、b和c中至少有一个必须是1,即a、b和c不能同时为0。图(c
)表示O约束(唯一):a和b中必须有一个且仅有一个为1。图(d)表示R约束(要求):a是1时,b必须是1,即a是1时,b不能是0。3.2.4因果图测试用例设计法输出约束符号(e)强制1、因果图法及其基本符号输出约束只有M约束:图(e)M约束
(强制):若结果a是1,则结果b强制为0。3.2.4因果图测试用例设计法2、因果图测试用例设计步骤(1)分析软件规格说明书中的输入输出,找出所有输入和输出并编号。(2)分析规格说明语义,找出输入与输入之间,输入与输出之间的关系--是互斥还是可以同时满足。(3)将输
入与输入、输入与输出之间的对应关系连接起来,并且将其中不可能的组合情况标注成约束或者限制条件,形成因果图。(4)将因果图转换成决策表。(5)以决策表的列为依据,设计测试用例。3.2.4因果图测试用例设计法2、因果图测试用例设计步骤3.2.4因果图
测试用例设计法3、因果图法的适用场合软件的输入条件较多时,通过因果图法设计测试用例,来考虑输入的所有排列组合情况,防止遗漏。从因果图生成的测试用例中包括了所有输入数据真假值,构成的测试用例数目达到最少,
且测试用例数目随输入数据数目的增加而线性地增加。但测试用例数目大,不便于维护。3.2.4因果图测试用例设计法因果图法的示例:某软件规格说明中包含这样的要求:输入的第一个字符必须是A或B,第二个字符必须是一个数字,在此情况下进行文件的修改;但如果第一个字符不正确,则给出信息L;如果第二个字
符不是数字,则给出信息M。3.2.4因果图测试用例设计法分析程序的规格说明,列出输入和输出。输入:C1--第一个字符是AC2--第一个字符是BC3--第二个字符是一个数字输出:e1--给出信息Le2--修改文件e3--给出信息M3.2.4因果图测试用例设计法分析程序的规格说明,
列出输入与输入和输入与输出的对应关系。输入约束:C1与C2是异关系输入与输出因果:C3与e3是非关系C1、C2的异与e1是非关系C1、C2的异和C3与e2是与关系3.2.4因果图测试用例设计法将输入和输出之间的因
果关系用逻辑符号连接起来,得到因果图。其中编号为11的中间节点是导出结果的中间原因。3.2.4因果图测试用例设计法非非在因果图上施加E约束,得到具有约束的因果图。3.2.4因果图测试用例设计法非非将因果图转换成决策表。规则选项12345678条件C111110000C211001100C31
010101011111100动作e1000011e2101000e3010101不可能11测试用例A5A#B9B?X2Y%3.2.4因果图测试用例设计法设计测试用例。因为C1和C2不可能同时为1,所以应排除前两种情况。根据此
表,可以设计出6个测试用例。编号输入数据预期输出TestCase1A5修改文件TestCase2A#给出信息MTestCase3B9修改文件TestCase4B?给出信息MTestCase5X2给出信息LTestCase6Y%给出信息L和信息M3.2.4因果图测试用例设计法
129因果图法案例——奖金计算软件某奖金计算软件实现如下功能:该软件计算某公司的年终奖,该公司的员工分为普通员工和管理人员。员工表现分为普通、优秀和特殊贡献(普通员工和优秀元都可以有特殊贡献,普通员工表现普通和管理员工表现普通拿的工资是不同的)根据员工的分类和表现,将奖金分为1类奖
金、2类奖金根据员工的种类和表现,该软件就会输出相应的奖金类别。130奖金计算软件测试用例设计1.找出所有的输入条件(因)和输出条件(果),并编号输入条件员工类别:普通员工A1、管理人员A2员工表现:普通B1、
优秀B2、特殊贡献B3输出条件奖金类别:1类奖金C1、2类奖金C2、3类奖金C3、……2.分析输入和输出条件之间的关系普通员工:A1+B1——〉C1A1+B2——〉C2A1+B1+B3——〉C3A1+B2+B3——〉C43.根据输入和输出条件的分析,
编写测试用例⚫管理人员A2+B1——〉C5A2+B2——〉C6A2+B1+B3——〉C7A2+B2+B3——〉C8131奖金计算软件测试用例用例编号输入预期输出1普通员工,表现普通1类奖金2普通员工,表现优秀2类奖金3普通员工,表现普通,有特殊
贡献3类奖金4普通员工,表现优秀,有特殊贡献4类奖金5管理人员,表现普通5类奖金6管理人员,表现优秀6类奖金7管理人员,表现普通,有特殊贡献7类奖金8管理人员,表现优秀,有特殊贡献8类奖金因果图:通过图示的方法表示输入的各种组合(略)3.2.4因果图测试用例设计法
132测试思想依赖经验、直觉和简单的判断,推测程序中所有可能存在的各种错误,从而有针对性地设计测试用例。设计过程列举出程序中可能有的错误和容易发生错误的特殊情况(如特殊值);选择构造测试用例3.2.5错误猜测测试用例设计法133针对系业务流程
例如:一个B-to-C电子商务网站的流程图登录身份验证退出查询商品选择商品网上付款出货测试方法:•详细了解需求•根据需求或界面原型,找出业务流程的各个页面以及各页面之间的流转关系•画出业务流图(路径图)•设计测试用例,覆盖所有的路径分支3.2.6业务流程图测试用例设计法为了最大程度地减
少测试遗漏的缺陷,在测试实施之前,必须确定将要采用的黑盒测试策略和方法,制定详细的测试方案。如果程序中遗留的错误过多且严重,则表明测试不足,而测试不足则意味着让用户承担了隐藏错误带来的危险。但过度测试又带来资源的浪费。因此,黑盒测试策略的关键在于找到一个平衡点。
黑盒测试用例设计方法的选择一般如下:3.2.7黑盒测试用例设计方法的应用(1)等价类划分是减少工作量和提高工作效率的最有效方法。通过等价类划分(包括输入条件和输出条件)将无限测试变成有限测试。(2)在任何情况下都必须使
用边界值分析法。经验表明用该方法设计出测试用例发现程序错误的能力最强。(3)对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。如果没有达到要求的覆盖标准,应当再补充足够的测试用例。(4)如果程序的功能说明中含有输入条件的组合情况,则应在一开始就选用因果图法。3.2.7黑盒测
试用例设计方法的应用3.3.1基本路径测试法3.3.2循环测试法3.3.3逻辑覆盖测试法3.3.4数据流测试法3.3.5程序插桩测试法3.3.6白盒测试方法的综合运用3.3白合测试用例的设计工程硕士137目前白盒测试方法有基本路径测试、覆盖测试、循环测试、数据
流测试、程序插桩测试等等方法,其中主要的方法有:基本路径测试循环测试逻辑覆盖测试语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、路径覆盖数据流测试程序插桩测试3.3白合测试用例的设计工程硕士1383.3
.1基本路径测试法测试思想:根据程序的控制流图找出一个模块所需测试的基本路径,根据这些路径设计构造相应的测试用例。步骤1.根据模块逻辑构造控制流图(ControlFlowGraph);2.计算控制流图
的环复杂度(CyclomaticComplexity);3.列出包含起始节点和终止节点的基本路径;4.检查一下列出的基本路径数目是否超过控制流图的环复杂度;5.设计覆盖这些基本路径的测试用例。控制流图(FlowGraph)节点:用标有编号的圆圈表示。它代表了程序流程图中矩形框中所表示的处理、菱
形表示的判断处理以及判断处理流程相交的汇合点。边:用带箭头的弧或线表示,表明了控制的顺序。顺序if-then-elsecaseuntilwhile3.3.1基本路径测试法环复杂度(CyclomaticCompl
exity)用来衡量一个模块判定结构的复杂程度,在数量上表现为独立的路径条数,即我们需要测试的最少路径条数。计算公式:1.边的数目-节点的数目+22.判定节点数目+1(判定节点必须是二值节点,如果不是,在计算前需要转换)3.3.1基本路径测试法工程硕士路径:
是一系列边,使得对于该序列中的所有相邻边对偶<ei,ej>来说,第一条边的终止节点是第二条边的起始节点;起始节点:内度=0的节点终止(汇)节点:外度=0的节点基本路径:从起始节点到终止节点的一条路径,并且至少包含一条其
他基本路径没有包含的边。3.3.1基本路径测试法工程硕士确定基本路径示例(三角形问题)3.3.1基本路径测试法控制流图12-1516172128-292230242526-2718-20233.3.1基本路径测试法环复杂度12-1516172128-292230242526-2718-
2023⚫环复杂度⚫二值判定节点个数+1=4+1=5⚫边的数目-节点的数目+2=15-12+2=53.3.1基本路径测试法工程硕士基本路径和测试用例12-1516172128-292230242526-2718-20231.12-15->16->17->21->
22->24->26-27->30测试用例:测试输入=(68,68,56)预期结果=这是一个等腰三角形!2.12-15->16->17->21->22->24->25->30测试用例:测试输入=(68,60,56)预期结
果=这是一个不等边三角形!3.12-15->16->17->21->22->23->30相应的测试用例:测试输入=(68,68,68)预期结果=这是一个等边三角形!4.12-15->16->18-20->21->28-29->30相应的测试用例:
测试输入=(68,8,56)预期结果=这不是一个三角形!?3.3.1基本路径测试法环复杂度和基本路径数的关系:如果基本路径必须是可行的,则逻辑关系会压缩基本路径集合数量,因此环复杂度是包含起始点和终止点的基本路径数目的上限。3.3.1基本路径测试法工程硕士147测试思
想:关注循环体结构的正确性,对循环变量运用类似于边界值测试的方法以验证循环体结构的正确性。简单循环嵌套循环连接循环非结构循环3.3.2循环测试法工程硕士1481.直接跳过循环体2.只执行一遍循环体3.连续执行两遍循环体4.如果循环次数为n,执行m(m<n)遍循环体5.如果循环次数为n,那么执行n
-1遍循环体6.如果循环次数为n,那么执行n遍循环体7.如果循环次数为n,那么执行n+1遍循环体简单循环边界值方法的应用!3.3.2循环测试法工程硕士1491、从最内层测试开始,其它层的循环变量置为最小值2、按照简单
循环的测试方法测试最内层的循环体3、向外扩展循环体,外层的循环变量仍旧取最小值,内层循环体取典型值4、继续步骤3直到所有的循环体均测试完毕。嵌套循环3.3.2循环测试法工程硕士1501、如果相连接的循环体互相独立,按照简单循环测试
每一个循环体;2、如果相连接的循环体1的循环变量的最终结果是循环体2循环变量的初始值,那么采用嵌套循环的方法来测试;(靠前认为是内层循环)连接循环3.3.2循环测试法工程硕士151别测了,先改设计吧!!!!非结构循环非结构循环3.3.2循环测试法3.3
.3逻辑覆盖测试法白盒测试技术的常见方法之一就是覆盖测试,它是利用程序的逻辑结构设计相应的测试用例。测试人员要深入了解被测程序的逻辑结构特点,完全掌握源代码的流程,才能设计出恰当的用例。白盒测试是依据被测程序的逻辑结构设计测试用例,掌握测试进行到什么程度结束是关键。根据不同的测试
要求,常用的逻辑覆盖有:语句覆盖判定覆盖(分支覆盖)条件覆盖判定/分支覆盖组合覆盖路径覆盖覆盖准则语句覆盖是最常见也是最弱的逻辑覆盖准则,它要求设计若干个测试用例,使被测程序的每个语句都至少被执行一次。判定覆盖或分支覆盖
则要求设计若干个测试用例,使被测程序的每个判定的真、假分支都至少被执行一次。但判定含有多个条件时,还要求设计若干个测试用例,使被测程序的每个条件的真、假分支都至少被执行一次,即条件覆盖。在考虑对程序路径进行
全面检验时,即可使用条件覆盖准则。3.3.3逻辑覆盖测试法虽然结构测试提供了评价测试的逻辑覆盖准则,但结构测试是不完全的。如果程序结构本身存在问题,比如程序逻辑错或遗漏了规格说明书中已规定的功能,即使各覆盖率达到百分之百,也检查不出来的。因此,提高结构测试的覆盖率,仅在于增强对被测软件的
信度。3.3.3逻辑覆盖测试法工程硕士155语句覆盖判定覆盖(分支覆盖)条件覆盖判定/分支覆盖组合覆盖路径覆盖1if((A>1)&&(B==0))then2X=X/A3endif4If((A==2)||(X>1))then
5X=X+16endif12435ABDCE控制流图(A>1)&&(B==0)X=X/A(A==2)||(X>1)X=X+1TTabcFde流程图3.3.3逻辑覆盖测试法工程硕士156语句覆盖测试思想:选择足够多的测试用例,使程序中的每个可执
行语句至少执行一次。例:设计一个通过路径ace的测试用例:A=2,B=0,X=3缺点:保证每条语句都得到执行,但不能全面检查每一条语句。例:当两个判定的逻辑运算符存在问题时,上述测试用例发现不了问题。(A>1)&&(B
==0)X=X/A(A==2)||(X>1)X=X+1TTabcFde3.3.3逻辑覆盖测试法判定覆盖测试思想:通过执行足够的测试用例,使得程序中的每个判定至少都获得一次“真”值和“假”值,即使程序中的每个取“真”值分支和
取“假”值分支至少经历一次。例:测试用例如下表测试用例A,B,X(A>1)&&(B==0)(A==2)||(X>1)执行路径测试用例1203真(T)真(T)ace测试用例2101假(F)假(F)abd(A>1)&&(B==0)X=X/A(A==2)||(X>1)X=X+1TTabcFde
3.3.3逻辑覆盖测试法例:测试用例如下表特点:完成了判定覆盖的同时,也完成了语句覆盖。无法判定内部条件错误。测试用例A,B,X(A>1)&&(B==0)(A==2)||(X>1)执行路径测试用例3303真(
T)假(F)acd测试用例4211假(F)真(T)abe(A>1)&&(B==0)X=X/A(A==2)||(X>1)X=X+1TTabcFde3.3.3逻辑覆盖测试法工程硕士条件覆盖测试思想:设计若干测试用例,
在执行被测试程序以后,要使每个判定中的每个条件的可能取值至少满足一次。例:第一个判定((A>1)&&(B==0))应考虑的各种条件取值:(1)A>1为真,记为T1(2)A>1为假,记为F1(3)B==0为真,记为T2(4)B==0
为假,记为F2第二个判定((A==2)||(X>1))应考虑的各种条件取值:(1)A==2为真,记为T3(2)A==2为假,记为F3(3)X>1为真,记为T4(4)X>1为假,记为F4(A>1)&&(B==0)X=X/A(A==2)||(X
>1)X=X+1TTabcFde3.3.3逻辑覆盖测试法测试用例为问题:测试用例A,B,X执行路径覆盖条件测试用例1203aceT1,T2,T3,T4测试用例5111abdF1,F2,F3,F4测试用例A,
B,X执行路径覆盖分支覆盖条件测试用例6103abebeF1,T2,F3,T4测试用例4211abebeT1,F2,T3,F4覆盖了全部条件的测试用例不一定覆盖全部分支(A>1)&&(B==0)X=X/A(A==2)||(
X>1)X=X+1TTabcFde3.3.3逻辑覆盖测试法工程硕士161判定/分支覆盖测试思想:设计足够的测试用例,使得判定中的每个条件的所有真/假至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。例测试用例A,B,X执行路径覆盖条件((A>1)&&(B
==0))((A==2)||(X>1))测试用例1203aceT1,T2,T3,T4真假测试用例5111abdF1,F2,F3,F4假真可发现的错误:•布尔变量错误•布尔括弧错误•关系操作符错误•算术表达式错误•布尔操作符错
误(遗漏布尔操作符,布尔操作符多余或布尔操作符不正确)3.3.3逻辑覆盖测试法工程硕士162问题:测试用例不能使每一个简单判定取得各种可能的结果(真/假),如B==0为假,X>1为真没有覆盖所有的引起“真/假”取值的条件组合,如单个条件为T1,F2时,判定(A>1)&&(B==0)取假值。
3.3.3逻辑覆盖测试法工程硕士163组合覆盖测试思想:设计足够的测试用例,使得每个判定中条件的各种可能都至少出现一次。例:(A>1)&&(B==0)X=X/A(A==2)||(X>1)X=X+1TTabcFde第一个判
定((A>1)&&(B==0))包含两个条件,可能的组合(1)A>1,B==0,记为T1,T2(2)A>1,B<>0,记为T1,F2(3)A<=1,B==0,记为F1,T2(4)A<=1,B<>0,记为F1,F2
第二个判定((A==2)||(X>1))包含两个条件,可能的组合(5)A==2,X>1,记为T3,T4(6)A==2,X<=1,记为T3,F4(7)A<>2,X>1,记为F3,T4(8)A<>2,X<=1,记为F3,F43.3.3逻辑覆盖测试法工程硕士164
测试用例为:特点:同时覆盖了全部条件组合和4个分支;仅覆盖了3个路径。(A>1)&&(B==0)X=X/A(A==2)||(X>1)X=X+1TTabcFde测试用例A,B,X执行路径覆盖组合覆盖条件测试用例1203ace1,5T1,T2,T3,T4测试用例
4211abe2,6T1,F2,T3,F4测试用例5111abd4,8F1,F2,F3,F4测试用例6103abe3,7F1,T2,F3,T43.3.3逻辑覆盖测试法工程硕士165路径覆盖测试思想:设计足够的测试用例,以覆盖程序中所有可能的路径。例:
路径1(L1):ace路径2(L2):abd路径3(L3):abe路径4(L4):acd(A>1)&&(B==0)X=X/A(A==2)||(X>1)X=X+1TTabcFde3.3.3逻辑覆盖测试法工程硕士166测试用例:特
点:路径数庞大时,需压缩覆盖的路径数路径数有限的程序,即使已经作了路径覆盖,仍然不能保证程序的正确性,还需要采用其他测试方法来补充。测试用例A,B,X覆盖路径测试用例12,0,3ace(L1)测试用例21,0,1abd(L2)测试用例33,0,3abe(L4)测
试用例42,1,1acd(L3)(A>1)&&(B==0)X=X/A(A==2)||(X>1)X=X+1TTabcFde3.3.3逻辑覆盖测试法工程硕士167测试所有可执行的路径语句覆盖条件覆盖分支-条件覆盖路径覆盖分支中的每个条件所有可能至少一次,并且每个分支本身的结果也至少出现
一次分支(判定)覆盖使分支中的每个条件的各种可能的结果至少出现一次程序中的每一个分支的结果至少出现一次程序中的每条语句至少被执行一次覆盖率上升覆盖率3.3.3逻辑覆盖测试法程序1If(x>100&&y>500)then2score=score+13If(x>=1000||z>5
000)then4score=score+5逻辑运算符“&&”表示“与”的关系,逻辑运算符“||”表示“或”的关系。其程序控制流图如图2-8所示。逻辑覆盖测试示例图2-8程序流程图edbca132450环复杂度=7–6+2=2+1=3。语句覆盖
:在保证完成要求的情况下,测试用例的数目越少越好。测试用例组1:TestCase1:x=2000,y=600,z=6000TestCase2:x=900,y=600,z=5000采用TestCase1测试用例,则程序按路径a,c,e顺序执行,程序中的4个语句都被执行一次,
符合语句覆盖的要求。采用TestCase2测试用例,则程序按路径a,c,d顺序执行,程序中的语句4没有执行到,所以没有达到语句覆盖的要求。测试用例x,y,z(x>100)and(y>500)(x>=1000)or(z>5000)执行路径TestCase12000,600,600
0TrueTrueaceTestCase2900,600,5000TrueFalseacd语句覆盖用例测试了程序中的每一个语句行,好像对程序覆盖得很全面,但实际是最弱的逻辑覆盖方法。例如,第一个判断的逻辑运算符“&&”错误写成“||”,或者第二个判断的逻辑运算
符“||”错误地写成“&&”,若仅采用TestCase1测试用例是检验不出程序中的判断逻辑错误的。语句覆盖测试只是表面上的覆盖程序流程,没有针对源程序各个语句间的内在关系,设计更为细致的测试用例。判断覆盖:在保证完成要求的情况
下,测试用例的数目越少越好。测试用例组2:TestCase1:x=2000,y=600,z=6000TestCase3:x=50,y=600,z=2000采用TestCase1测试用例,程序按路径a,c,e顺序执行;采用TestCase3作为测试用例,程序按路径a,b,d
顺序执行。所以采用这一组测试用例,公共程序段的4个判断分支b,c,d,e都被覆盖到了。测试用例x,y,z(x>100)and(y>500)(x>=1000)or(z>5000)执行路径TestCase12000,600,6
000TrueTrueaceTestCase350,600,2000FalseFalseabd另外,测试用例组3:TestCase4:x=2000,y=600,z=2000TestCase5:x=2000,y=200,z=6
000采用TestCase4作为测试用例,程序沿着路径a,c,d顺序执行;采用TestCase5作为测试用例,则程序沿着路径a,b,e顺序执行。显然采用组测试用例组3同样可以满足判断覆盖。测试用例组2和3不仅达到了判断
覆盖要求,也同时满足了语句覆盖要求。所以,某种程度上可以说判断覆盖测试要强于语句覆盖测试。但如果将第二个判断条件((x>=1000)or(z>5000))中的z>5000错误定义成z的其他限定范围,由于判断条件中的两个判断式是“或”的关系,其中一个判断式错误并不影
响判断结果,所以这两组测试用例是发现不了问题的。因此,应该用具有更强逻辑覆盖能力的覆盖测试方法来测试这种内部判断条件。为实现条件覆盖,有测试用例组4:TestCase1:x=2000,y=600,z=6000TestCase
3:x=50,y=600,z=2000TestCase5:x=2000,y=200,z=6000把前面设计过的测试用例挑选出TestCase1、TestCase3、TestCase5组合成测试用例组4。组中的3个测试用例覆盖了4个内部判断式的
8种真假值情况,同时这组测试用例也实现了判断覆盖,但并不可以说判断覆盖是条件覆盖的子集。测试用例x,y,z(x>100)(y>500)(x>=1000)(z>5000)执行路径TestCase12000,600,6000TrueTrueTrueFalse
aceTestCase350,600,2000FalseTrueFalseFalseabdTestCase52000,200,6000TrueFalseTrueTrueabe测试用例x,y,z(x>100)and(y>500)(x>=1000)or(z>5000)执行路径TestCase
650,600,6000FalseTrueabeTestCase72000,200,1000FalseTrueabe测试用例x,y,z(x>100)(y>500)(x>=1000)(z>5000)执行路径TestCase650,600,6000FalseTrueF
alseTrueabeTestCase72000,200,1000TrueFalseTrueFalseabe测试用例组5:TestCase6:50,600,6000TestCase7:2000,200,1000前表表示每个判断式的真值和假值,后表表示每个判断条件的真值和假值。测试用例组5中的
2个测试用例虽然覆盖了4个内部判断式的8种真假值情况,但这组测试用例的执行路径是abe,仅是覆盖了判断条件的4个真假分支中的2个。所以,需要设计一种能同时满足判断覆盖和条件覆盖的覆盖测试方法,即判断/条
件覆盖测试。为实现判断/条件覆盖测试用例组6:TestCase1:x=2000,y=600,z=2000TestCase8:x=50,y=200,z=2000前表示每个判断式的真值和假值,后表表示每个判断条件的真值和假值。测试用例组6虽然满足了判断覆盖和条件覆盖,但是没有对每个判断
条件的内部判断式的所有真假值组合进行测试。条件组合判断是必要的,因为条件判断语句中的“与”和“或”,即“&&”和“||”,会使内部判断式之间产生抑制作用。例如,C=A&&B中,如果A为假值,那么C就为假值,测试程序就不检测B了,
B的正确与否就无法测试。同样,C=A||B中,如果A为真值,那么C就为真值,测试程序也不检测B了,B的正确与否也就无法测试。测试用例x,y,z(x>100)(y>500)(x>=1000)(z>5000)执行路径TestCase12000,60
0,6000TrueTrueTrueTrueaceTestCase850,200,2000FalseFalseFalseFalseabd测试用例x,y,z(x>100)and(y>500)(x>=1000)or(z>5000)执行路径TestCase12000,600,6000T
rueTrueaceTestCase850,200,2000FalseFalseabd为实现条件组合覆盖,采用测试用例组7:TestCase1:x=2000,y=600,z=2000TestCase6:x=2000,y=200
,z=6000TestCase7:x=2000,y=600,z=2000TestCase8:x=50,y=200,z=2000前表表示每个判断式的真值和假值,后表表示每个判断条件的真值和假值。测试用例组7虽然满足了判断覆盖、条件覆盖以及判断/条件覆盖,但是并没有覆盖程序控制流
图中全部的4条路径(ace,abe,abe,abd),只覆盖了其中3条路径(ace,abe,abd)。软件测试的目的是尽可能地发现所有软件缺陷,因此程序中的每一条路径都应该进行相应的覆盖测试,从而保证程序中
的每一个特定的路径方案都能顺利运行。能够达到这样要求的是路径覆盖测试。测试用例x,y,z(x>100)(y>500)(x>=1000)(z>5000)执行路径TestCase12000,600,6000TrueTrueTrueTrueaceTestCa
se650,600,6000FalseTrueFalseTrueabeTestCase72000,200,1000TrueFalseTrueFalseabeTestCase850,200,2000FalseFalseFalseFalseabd测试用例
x,y,z(x>100)and(y>500)(x>=1000)or(z>5000)执行路径TestCase12000,600,6000TrueTrueaceTestCase650,600,6000FalseTrueabeTestCase72000,200,10
00FalseTrueabeTestCase850,200,2000FalseFalseabd路径覆盖测试用例组8:TestCase1:x=2000,y=600,z=6000TestCase3:x=50,y=
600,z=2000TestCase4:x=2000,y=600,z=2000TestCase7:x=2000,y=200,z=1000如表2-23(a)和表2-23(b)所示,表2-23(a)表示每个判断条件的每个判断式的真值和假值,表2-23(b)表示每个判断条件的真值和
假值。测试用例组8可以达到路径覆盖。测试用例x,y,z(x>100)(y>500)(x>=1000)(z>5000)执行路径TestCase12000,600,6000TrueTrueTrueTrueaceTestCas
e350,600,2000FalseTrueFalseFalseabdTestCase42000,600,2000TrueTrueTrueFalseacdTestCase72000,200,1000TrueFalseT
rueFalseabe测试用例x,y,z(x>100)and(y>500)(x>=1000)or(z>5000)执行路径TestCase12000,600,6000TrueTrueaceTestCase350,600,2000FalseFalseab
dTestCase42000,600,2000TrueTrueacdTestCase72000,200,1000FalseTrueabe特别地例中6种覆盖测试方法所引用的公共程序只有短短4行,是一段非常
简单的示例代码。然而在实际测试程序中,其路径数目是一个庞大的数字。要对其实现路径覆盖测试是很难的。所以,路径覆盖测试是相对的,要尽可能把路径数压缩到一个可承受范围。当然,即便对某个简短的程序段做到了路径覆
盖测试,也不能保证源代码不存在其他软件问题了。其他的软件测试手段也必要的,它们之间是相辅相成的。没有一个测试方法能够找尽所有软件缺陷,只能说是尽可能多地查找软件缺陷。有分支语句:IF(A>BandC=5),它有多少种条件组合?从路径覆盖来看,是否所有条件组合都要测试吗?为什么?有分支语句:I
F(A>BandC=5),它有四种条件组合,但不需要全部测试。因为只有A>BandC=5条件是真,其余都是假,分支路径只有两条,用不同的数据测试同一条路径,根据路径覆盖准则,这属于重复。工程硕士185测试思想:根据被测模块中变量的定义和使用位置,构造其定义—使用路径设计相应
的测试用例。意义对于一些编程语言来说可以发现如变量空定义,使用未定义变量,重复定义等数据定义和使用上的错误;覆盖数据的每个定义以及该变量使用的全部路径,提供检测缺陷发生点的方法;3.3.4数据流测试用例设计法工程
硕士186假设拥有程序图G(P)的程序P和一组程序变量集V。G(P)有一个单入口节点和一个单出口节点,并且不允许有从某个节点到其自身节点的边,P中所有路径的集合是PATHS(P),有如下定义:节点n∈G(P)是变量v∈V的定义节点,记做DEF(v,n),当且仅当变量V的
值由对应节点n的程序语句处定义。该语句的执行将会改变与之相关存储单元的内容节点n∈G(P)是变量v∈V的使用节点,记做USE(v,n),当且仅当变量V的值由对应节点n的程序语句处使用。该语句的执行不会改变与之相关存储单元的内容3.3.4数据流测试用例设计法工程硕士1
87使用节点USE(v,n)是一个谓词使用(记做P-use),当且仅当语句n是谓词语句(对于谓词使用的节点永远有外度≥2);使用节点USE(v,n)是一个计算使用(记做C-use),当且仅当语句n是计算语
句(对于计算使用的节点永远有外度≤1);变量v的定义-使用路径(记做du-path)是PATHS(P)中的路径,使得对某个v∈V,存在定义和使用节点DEF(v,m)和USE(v,n),使得m和n是该路径的最初和最终节点。变量v的定
义-清除路径(记做dc-path),是具有最初节点DEF(v,m)和最终节点USE(v,n)的PATHS(P)中的路径,使得该路径中没有其它节点是v的定义节点。说明:不是定义清除的定义使用路径是潜在有问题的地方3.3.4数据流测试用例设计法工程硕士188下面代码中,哪些是X的定义节
点,哪些是X的使用节点,定义使用路径有哪些,是定义清除的吗?fooA(){1x=read();2if(x>0)3printx-1;else4printx;}定义节点:DEF(x,1)使用节点:USE(x,2),USE(x,3),USE
(x,4)定义-使用路径:1,2;1,2,3;1,2,4;234513.3.4数据流测试用例设计法工程硕士189下面代码中,哪些是X的定义节点,哪些是X的使用节点,定义使用路径有哪些,是定义清除的吗?fooA(){1x=read();2y=read(
);3if(x>0)4{5x=y;6printx-1;7}8else9printx;}定义节点:DEF(x,1),DEF(x,5)使用节点:USE(x,3),USE(x,6),USE(x,9)定义-使用路径:1,2,3;1
,2,3,4,5,6;(定义清除)1,2,3,8,9;5,6;3.3.4数据流测试用例设计法3.3.5程序插桩技术通过在被测试程序源代码中插入语句,以便进行运行信息的追踪和调试,统计有关的运行资源状况,以达到实现测试的目的。如程序中插入打印语句、判定变量特性的
语句。在程序的特定位置插入某些用以判断变量特性的语句,使得程序执行中这些语句得以证实。插入的语句称为断言(Assertion)设计插桩程序需要考虑的问题:探测哪些信息在程序的什么位置设置桩设置多少个桩建议:程序块的第一个执行
语句之前循环语句之后判定语句之后输入输出语句之后调用语句之后工程硕士190入口C1=c1+1Q=xR=yR=R-QQ=Q-RC2=c2+1C4=c4+1C3=c3+1C5=c5+1C6=c6+1Q<>RQ>R出口TFTF求整数X和Y的最大公约数程序插桩示意:语句覆盖情
况3.3.5程序插桩技术工程硕士1923.3.6白盒测试方法的综合运用设计步骤1.运用基本路径测试方法设计相关测试用例2.运用逻辑覆盖测试方法设计相关测试用例3.运用循环测试方法设计相关测试用例4.最终的测试用例集合是上面三个结果的并集5.根据程序的特点增加相应
的测试用例3.3.6白盒测试方法的综合运用工程硕士1946-101112-1314016-18192021232425-2627基本路径——控制流图工程硕士195基本路径——环复杂度⚫环复杂度⚫二值判定节点个数+1=3+1=4⚫边的数目-节点的数目+2=14-12+2=46-10111
2-1314016-18192021232425-2627工程硕士196基本路径——测试用例1.6-10->11->12-23->14->16-18->20->21->11->23->24->27相应的测试
用例:测试输入=((10,-999),0,100)预期结果=102.6-10->11->12-23->14->19->23->24->27相应的测试用例:测试输入=((-10,-999),0,100)预期结果=-9993.6-10->11->23->24->27相应的测试用例:测试输入=((-
999),0,100)预期结果=-9996-101112-1314016-18192021232425-2627工程硕士197逻辑覆盖——分支-条件测试用例(1)⚫分支和相应的测试用例⚫while((value
[i]!=-999)&&(inputNumber<100))相应的测试用例:1.测试输入=((10,-999),0,100)预期结果=102.测试输入=((-999),0,100)预期结果=-9993.测试输入=((0….100,-999),0,100)预期结果=49工程硕士198分支-条件
测试——测试用例(2)⚫分支和相应的测试用例⚫if((value[i]>=minimum)&&(value[i]<=maximum))相应的测试用例:1.测试输入=((10,-999),0,100)预期结果=102.测试输入=((-10,-999),0,100)预期结果=-9993.测试输入
=((150,-999),0,100)预期结果=-999工程硕士199分支-条件测试——测试用例(3)⚫分支和相应的测试用例⚫ifvalidNumber>0相应的测试用例:1.测试输入=((10,-999),0,100)预期结果=102.测试输入=((-
10,-999),0,100)预期结果=-999工程硕士200循环测试——测试用例(1)⚫测试用例⚫while((value[i]!=-999)&&(inputNumber<100))相应的测试用例:1.不执行循环测试输入=((-999),0,100)预期结果=-9992.只执行一遍循环体
测试输入=((10,-999),0,100)预期结果=103.执行两遍循环体测试输入=((10,20,-999),0,100)预期结果=15工程硕士201循环测试——测试用例(2)⚫测试用例4.m(m=50)遍循环体测试输入
=((0..49,-999),0,100)预期结果=245.n-1(99)遍循环体测试输入=((0..98,-999),0,100)预期结果=496.n(遍循环体测试输入=((0..99,-999),0,100)预期结果=497.n+1(101)遍
循环体测试输入=((0..100,-999),0,100)预期结果=49工程硕士202最终结果(1)⚫最终的测试用例结果是基本路径测试、分支-条件测试和循环测试所得结果的组合1.测试输入=((10,-999),0
,100)预期结果=102.测试输入=((-10,-999),0,100)预期结果=-9993.测试输入=((150,-999),0,100)预期结果=-9994.测试输入=((-999),0,100)预期结果=-9995.Twopasse
sthroughtheloop.测试输入=((10,20,-999),0,100)预期结果=15工程硕士203最终结果(2)⚫最终结果6.m(m=50)passesthroughtheloop测试输入=((0..49,-999),0,100)
预期结果=247.n-1(99)passesthroughtheloop测试输入=((0..98,-999),0,100)预期结果=498.n(100)passesthroughtheloop测试输入=((0..99,-999),0,100)预期
结果=499.n+1(101)passesthroughtheloop测试输入=((0..100,-999),0,100)预期结果=49