四川大学锦城学院软件测试习题•输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。程序如下,请按要求设计测试用例。要求:1、画出控制流图;2、分析复杂性;3、给出独立路径并设计测试用例;4、画出N-S图;5、计算要满足覆盖所需要的最少测试用例数;6、设计满足条件覆盖的测试用例。四川大学锦城学院软件测试#include”stdio.h”main(){charc;intletters=0,space=0,digit=0,other=0;printf(“请输入一行字符:\n”);while((c=getchar())!=’\n’){if(c=’a’&&c=’z’||c=’A’&&c=’Z’)letters++;elseif(c==’’)space++;elseif(c=’0’&&c=’9’)digit++;elseother++}printf(“其中:字母数=%d,空格数=%d,数字数=%d,其它字符数=%d\n”,letters,space,digit,other);}四川大学锦城学院软件测试1、流图;#include”stdio.h”main(){charc;intletters=0,space=0,digit=0,other=0;printf(“请输入一行字符:\n”);while((c=getchar())!=’\n’){if(c=’a’&&c=’z’||c=’A’&&c=’Z’)letters++;elseif(c==’’)space++;elseif(c=’0’&&c=’9’)digit++;elseother++}printf(“其中:字母数=%d空格数=%d数字数=%d其它字符数=%d\n”,letters,space,digit,other);}1235746891011四川大学锦城学院软件测试1243510976811nacdmihgfeblkj其它为数字为空格为字母while语句四川大学锦城学院软件测试(2)复杂性为:5(3)独立路径为:①ab②acdfn……③acegin……④acehjln……⑤acehkmn……测试用例为:序号测试用例覆盖独立路径预期结果备注1输入空串ab输出结果都为02输入“ab……”acdfn……正确给出字符个数3输入“a……”acegin……正确给出空格个数4输入“8……”acehjln……正确给出数字个数5输入“#……”acehkmn……正确给出其他字符个数四川大学锦城学院软件测试(4)N-S图(5)最少测试用例数:52:是否为空字符串5:是否为空格7:是否为数字3:是否为字母114689四川大学锦城学院软件测试(6)条件覆盖测试用例1:记c!=‘\n’为T12:-T13:记’a’=c为T24:-T25:记c=‘z’为T36:-T37:记’A’=c为T48:-T49:记c=’Z’为T510:-T511:记c==‘’为T612:-T613:记’0’=c为T714:-T715:记c=‘9’为T816:-T8序号测试用例覆盖组合预期结果1空字符串2输出结果都为02‘aB1’1,3,5,7,9,11,13,15正确输出字符数,空格数,数字数3‘&’1,4,6,8,1012,14,16正确输出其他字符个数四川大学锦城学院软件测试第5章黑盒测试及其用例的设计5.1黑盒测试法的概念5.2三角形问题与NextDate函数5.3等价类划分法5.4边界值分析法5.5因果图法5.6决策表法5.7错误推测法5.8测试方法的选择四川大学锦城学院软件测试本章教学目标•理论环节–学习理解黑盒测试方法的基本概念–学习理解黑盒测试的两个典型问题–学习掌握黑盒测试的等价类划分法–学习掌握黑盒测试的边界值分析法–学习掌握黑盒测试的因果图测试法和决策表法•实践环节–通过案例运用学习掌握运用方法解决实际问题的能力–运用等价类划分法与边界值分析法进行实际程序测试–运用因果图测试法与决策表法进行实际程序测试四川大学锦城学院软件测试5.1黑盒测试法的概念输入输出黑盒测试又称功能测试、数据驱动测试或基于规格说明书的测试,是一种从用户观点出发的测试。四川大学锦城学院软件测试•黑盒测试的目的:–检查程序功能能否按需求规格说明书的规定正常使用–测试各个功能是否有遗漏–检测性能等特性要求是否满足。–检测人机交互是否错误–检测数据结构或外部数据库访问是否错误–程序是否能适当地接收输入数据而产生正确的输出结果,并保持外部信息(如数据库或文件)的完整性–检测程序初始化和终止方面的错误四川大学锦城学院软件测试•黑盒测试可以回答以下问题:–如何测试功能的有效性?–何种类型的输入会产生好的测试用例?–系统是否对特定的输入值尤其敏感?–如何分隔数据类的边界?–系统能够承受何种数据率和数据量?–特定类型的数据组合会对系统产生何种影响?四川大学锦城学院软件测试•黑盒测试的优点:–比较简单,不需要了解程序内部的代码及实现–与软件的内部实现无关–从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题–基于软件开发文档,所以也能知道软件实现了文档中的哪些功能–在做软件自动化测试时较为方便四川大学锦城学院软件测试•运用黑盒测试方法,可以导出满足以下标准的测试用例集:1)所设计的测试用例能够减少达到合理测试所需的附加测试用例数;2)所设计的测试用例能够告知某些类型错误的存在或不存在,而不是仅仅与特定测试相关的错误。四川大学锦城学院软件测试黑盒测试的实施过程•测试计划阶段•测试设计阶段•依据程序需求规格说明书或用户手册,按照一定规范化的方法进行软件功能划分和设计测试用例。•测试执行阶段•按照设计的测试用例执行测试;•自由测试(作为测试用例测试的补充)。•测试总结阶段四川大学锦城学院软件测试5.2三角形问题与NextDate函数1、三角形问题输入三个整数a、b、c,分别作为三角形的三条边,现通过程序判断由三条边构成的三角形的类型为等边三角形、等腰三角形、一般三角形(特殊的还有直角三角形),以及构不成三角形。现在要求输入三个整数a、b、c,必须满足以下条件:条件11≤a≤100条件4ab+c条件21≤b≤100条件5ba+c条件31≤c≤100条件6ca+b四川大学锦城学院软件测试•如果输入值a、b、c不满足条件1、条件2和条件3,程序给出“边的取值超出允许范围”的信息。•如果输入值a、b、c满足条件1、条件2和条件3,则输出下列四种情况之一:(1)如果不满足条件4、条件5和条件6中的一个,则程序输出为“非三角形”。(2)如果三条边相等,则程序输出为“等边三角形”。(3)如果恰好有两条边相等,则程序输出为“等腰三角形”。(4)如果三条边都不相等,则程序输出为“一般三角形”。结论:三角形问题的复杂之处在于输入与输出之间的关系比较复杂。四川大学锦城学院软件测试2、NextDate函数NextDate函数说明另一种复杂的关系,即输入变量之间逻辑关系的复杂性。NextDate函数包含三个变量month、day和year,函数的输出为输入日期后一天的日期。要求输入变量month、day和year均为整数值,并且满足下列条件:条件11≤month≤12条件21≤day≤31条件31912≤year≤2050四川大学锦城学院软件测试5.3等价类划分法5.3.1等价类的划分原则5.3.2等价类划分法的测试用例设计5.3.3常见等价类划分测试形式5.3.4使用等价类划分法测试的实例四川大学锦城学院软件测试等价类划分法•等价类划分法是一种重要的、常用的黑盒测试方法,它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。•举例:设计这样的测试用例,来实现一个对所有实数进行开平方运算(y=sqrt(x))的程序的测试。思考方向:由于开平方运算只对非负实数有效,这时需要将所有的实数(输入域x)进行划分,可以分成:正实数、0和负实数。假设我们选定+1.4444代表正实数,-2.345代表负实数,则为该程序设计的测试用例的输入为+1.4444、0和-2.345。四川大学锦城学院软件测试等价类划分法(续)•等价类划分法是把所有可能的输入数据,即程序的输入域划分为若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。•所谓等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,它们具有等价特性,即每一类的代表性数据在测试中的作用都等价于这一类中的其它数据。这样,对于表征该类的数据输入将能代表整个子集合的输入。因此,可以合理的假定:——测试某等价类的代表值就是等效于对于这一类其它值的测试。四川大学锦城学院软件测试5.3.1等价类的划分原则•等价类是输入域的某个子集合,而所有等价类的并集就是整个输入域。因此,等价类对于测试有两个重要的意义:–完备性——整个输入域提供一种形式的完备性–无冗余性——若互不相交则可保证一种形式的无冗余性四川大学锦城学院软件测试•如何划分?–先从程序的规格说明书中找出各个输入条件,再为每个输入条件划分两个或多个等价类,形成若干的互不相交的子集。•采用等价类划分法设计测试用例通常分两步进行:–确定等价类,列出等价类表。–确定测试用例。四川大学锦城学院软件测试•划分等价类可分为两种情况:(1)有效等价类——是指对软件规格说明而言,是有意义的、合理的输入数据所组成的集合。利用有效等价类,能够检验程序是否实现了规格说明中预先规定的功能和性能。(2)无效等价类——是指对软件规格说明而言,是无意义的、不合理的输入数据所构成的集合。利用无效等价类,可以鉴别程序异常处理的情况,检查被测对象的功能和性能的实现是否有不符合规格说明要求的地方。四川大学锦城学院软件测试等价类的划分原则(续)•进行等价类划分的依据:(1)按照区间划分在输入条件规定了取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类例:程序输入条件为小于100大于10的整数x,则有效等价类为10<x<100,两个无效等价类为x≤10和x≥100。例:程序输入x取值于一个固定的枚举类型{1,3,7,15},且程序中对这4个数值分别进行了处理,则有效等价类为x=1、x=3、x=7、x=15,无效等价类为x≠1,3,7,15的值的集合。(2)按照数值划分在规定了一组输入数据(假设包括n个输入值),并且程序要对每一个输入值分别进行处理的情况下,可确定n个有效等价类(每个值确定一个有效等价类)和一个无效等价类(所有不允许的输入值的集合)四川大学锦城学院软件测试等价类的划分原则(续)(3)按照数值集合划分在输入条件规定了输入值的集合或规定了“必须如何”的条件下,可以确定一个有效等价类和一个无效等价类(该集合有效值之外)。例:程序输入条件为取值为奇数的整数x,则有效等价类为x的值为奇数的整数,无效等价类为x的值不为奇数的整数。例:程序输入条件为以字符‘a’开头、长度为8的字符串,并且字符串不包含‘a’~‘z’之外的其它字符,则有效等价类为满足了上述所有条件的字符串,无效等价类为不以‘a’开头的字符串、长度不为8的字符串和包含了‘a’~‘z’之外其它字符的字符串。(5)细分等价类在确知已划分的等价类中各元素在程序中的处理方式不同的情况下,则应再将该等价类进一步划分为更小的等价类,并建立等价类表。(4)按照限制条件或规则划分在规定了输入数据必须遵守的规则或限制条件的情况下,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)四川大学锦城学院软件测试5.3.2等价类划分法的测试用例设计•在设计测试用例时,应同时考虑有效等价类和无效等价类测试用例的设计。•根据已列出的等价类表可确定测试用例,具体过程如下:(1)首先为等价类表中的每一个等价类分别规定一个唯一的编号。(2)设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。(3)设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这一步骤,直到所有