软件测试方法软件测试方法概述本章教学要点教学目标对测试设计方法有一个完整的概念,为后续的一个个测试设计方法展开垫定基础。教学重点与难点理解测试设计4步法的过程。理解各种测试覆盖标准含义、不同覆盖标准之间的关系对测试方法分类体系有一个初步认识。难点:测试覆盖标准的覆盖要求。引子:一道经典测试题输入三个整数值,分别代表了三角形三边的长度。输出提示信息,表明该三角形究竟是不规则三角形、等腰三角形还是等边三角形。请设计一组测试用例集,来测试下面的程序。来源:《软件测试的艺术》,Myers参考:Myers给出的答案1.是否有这样的测试用例,代表了一个有效的不规则三角形?2.是否有这样的测试用例,代表一个有效的等边三角形?3.是否有这样的测试用例,代表一个有效的等腰三角形?4.是否有这样的测试用例,代表等腰三角形两边相等的所有3种可能情况?(如3,3,4;3,4,3;4,3,3)5.是否有这样的测试用例,某边的长度等于0?6.是否有这样的测试用例,某边的长度为负数?7.是否有这样的测试用例,三个整数皆大于0,其中两个整数之和等于第三个?8.是否至少有3个第7类的测试用例,列举了一边等于另外两边之和的全部可能情况(如1,2,3;1,3,2;3,1,2)9.是否有这样的测试用例,三个整数皆大于0,其中两个整数之和小于第三个整数?10.是否至少有3个第9类的测试用例,列举了一边大于另外两边之和的全部可能情况?(如1,2,4;1,4,2;4,1,2)11.是否有这样的测试用例,三边长度皆为0(0,0,0)?12.是否至少有一个这样的测试用例,输入的边长为非整数值(如2.5,3.5,5.5)13.是否至少有一个这样的测试用例,输入的边长个数不对(如仅输入了两个而不是三个整数)?14.对于每一个测试用例,除了定义输入值之外,是否定义了程序针对该输入值的预期输出值?参考:郑人杰教授给出的答案来源:《计算机软件测试技术》,郑人杰两位测试前辈给出的参考答案不尽相同,怎么来理解?目录测试设计过程简介1软件测试覆盖标准32软件测试方法分类测试设计过程:四步法ModelsCreatebasetestcasesSuppementwithtestdataAdvancedtesting测试对象建模控制流图数据流图模型覆盖图覆盖填充数据典型值边界值来源:Ryber《Essentialtestdesign》流程图用例图状态图因果图判定表逻辑覆盖……Model外的Step1Step2Step3Step4输入域覆盖……逻辑测试用例物理测试用例……错误推测Adhoc测试……示例:测试设计四步法测试需求:航空公司在飞机起飞前1小时停止办理在线值机业务。后续逻辑处理当前时间起飞时间-1hourYN填充数据,物理用例起飞时间20:20,当前时间19:20起飞时间20:20,当前时间19:21起飞时间20:20,当前时间19:19起飞时间20:20,当前时间19:00路径覆盖,逻辑用例当前时间≥起飞时间-1小时当前时间起飞时间-1小时补充用例起飞时间晚8:20,当前时间晚8:20起飞时间晚8:20,当前时间早7:21起飞时间晚0:20,当前时间晚11:20对象建模ModelsCreatebasetestcasesSuppementwithtestdataAdvancedtesting测试对象建模模型覆盖填充数据Model外的停止办理逻辑测试用例和物理测试用例的概念逻辑测试用例:又叫概要测试用例,highleveltestcase,测试用例以逻辑值所体现,没有具体的输入数据和预期结果输出值例:Testcase(当前时间,起飞时间)物理测试用例:又叫详细测试用例,lowleveltestcase,测试用例以实际值所体现,有具体的输入数据和预期结果输出值。例:Testcase(20:20,20:20)名词术语来源:《ISTQB软件测试专业术语对照表》测试对象模型X0andY10X-10orY0Y=Y/XY=-(Y+X)TTFFabcde返回YOpenedClosedLockedCloseDoorOpenDoorUnlockDoorlockDoor(Unlocked)i1i4i2i31234条件桩感到疲倦YNNN感兴趣—YYN糊涂—YN—动作桩重读√继续√跳下一章√休息√一年工作日非工作日非工作时工作时000001010100011101110111A∨B∨C12354ABCDEF图覆盖逻辑覆盖输入域划分覆盖测试覆盖的概念测试覆盖:testcoverage,用于确定测试集合对测试范围的覆盖程度,通常用百分比表示。测试范围往往以覆盖项的形式出现,例:代码语句数、分支数、路径数等。覆盖项往往又取决于覆盖标准,它代表覆盖的深度。例:语句覆盖代表每条语句至少被执行一次判定覆盖代表每个判定的真/假分支至少被执行一次覆盖程度往往以覆盖率的形式出现。例:语句覆盖率100%名词术语案例:测试覆盖假如你一份令人羡慕的工作——测试袋装的软心糖豆,每种糖的口味如何。假如袋里一共装有120颗糖,6种口味,4种颜色:10个梨子口味(白色)10个开心果口味(绿色)10个橘子口味(橙色)20个哈密瓜口味(橙色)30个柠檬口味(黄色)40个杏仁口味(黄色)测试范围:袋里糖果覆盖标准:覆盖每颗糖,120个,覆盖率最大100%覆盖每种口味,6-64个,覆盖率最大100%覆盖每种颜色,4个,覆盖率最大67%测试数据通过测试数据,逻辑测试用例-物理测试用例,它代表一次可执行的测试。广义的测试数据包括:测试输入、测试状态、测试环境等,一切测试执行前就存在的数据,它对被测对象产生影响。不同测试数据的测试覆盖范围、发现BUG的能力不一样。选择测试数据的技术包括:等价类、边界值、随机数据、数据周期、数据流等。目录测试设计过程简介1软件测试覆盖标准32软件测试方法分类图覆盖图是一个二元组(V,E),其中:V称为顶点集。E称为边集。E的元素是一个二元组数对,用(x,y)表示,其中x,y∈V测试路径:一个节点序列,其中任一对相邻节点连线存在于边集。测试路径的长度代表包含的边的数目。起始于某个节点,终止于某个节点。允许长度为0的测试路径。123ABC图的覆盖标准:基本节点覆盖:每个节点至少覆盖一次边覆盖:每个可到达的长度=1的路径至少覆盖一次。边-对覆盖:每个可到达的长度=2的路径至少覆盖一次。Path(t1)=[1,2,3,4,5]Path(t2)=[1,2,3,5]Path(t3)=[1,3,5]Path(t4)=[1,3,4,5]节点覆盖={t1}边覆盖={t1,t3}边-对覆盖={t1,t2,t3,t4}12354节点集={1,2,3,4,5}边集={[1,2],[1,3],[2,3],[3,4],[3,5],[4,5]}边-对集={[1,2,3],[1,3,4],[1,3,5],[2,3,4],[2,3,5],[3,4,5]}【例】图的覆盖标准:复杂(带环路)准备知识:独立路径:至少包含1条在其它独立路径中从未出现过的边的路径。简单路径:除了第1个和最后1个节点可能是同一节点,没有节点在路径中出现多于1次。主路径:最长的简单路径。13254独立路径={[1,2,3],[1,2,3,4,2,5]}简单路径={[1,2,5],[1,2,3,4],[2,3,4,2],[3,4,2,3],[4,2,3,4],[3,4,2,5]}【例】图的覆盖标准:复杂(带环路)完全路径覆盖:覆盖所有测试路径独立路径覆盖:覆盖每一条独立路径主路径覆盖:覆盖每一条主路径13254完全路径覆盖:假如[1,2,3,4,2,3,4,2,3,4….5],带环路不可行独立路径覆盖={t1,t2}主路径覆盖={t1,t3}Path(t1)=[1,2,5]Path(t2)=[1,2,3,4,2,5]Path(t3)=[1,2,3,4,2,3,4,2,5]独立路径={[1,2,5],[1,2,3,4,2,5]}简单路径={[1,2,5],[1,2,3,4],[2,3,4,2],[3,4,2,3],[4,2,3,4],[3,4,2,5]}【例】练习:图覆盖(1)列出满足节点覆盖但不满足边覆盖的测试路径(2)列出满足边覆盖但不满足边对覆盖的测试路径(3)列出满足独立路径覆盖但不满足主路径覆盖的测试路径①节点集={1,2,3,4}边集={[1,2],[1,4],[2,3],[3,2],[2,4]}边-对集={[1,2,3],[1,2,4],[2,3,2],[3,2,3],[3,2,4]}②独立路径={[1,4],[1,2,4],[1,2,3,2,4]}主路径={[1,4],[1,2,3],[1,2,4],[2,3,2],[3,2,3],[3,2,4]}③Path(t1)=[1,4]Path(t2)=[1,2,4]Path(t3)=[1,2,3,2,4]Path(t4)=[1,2,3,2,3,2,4]节点覆盖={t3}边覆盖={t1,t3}边对覆盖={t2,t4}独立路径覆盖={t1,t2,t3}主路径覆盖={t1,t2,t4}t3t1,t3t1,t2,t31324逻辑覆盖逻辑表达式(谓词):运算结果是布尔值的表达式,由逻辑运算符构成内部结构,例:∨,∧¬,⊕,→,↔子句:不含任何逻辑运算符。((ab)∨C∧p(x)子句谓词【例】列出所有零售价在100美元以上或库存超过20件的无线鼠标。再列出售价在50美元以上的无线鼠标abc(a∨b)∧c请采用逻辑表达式表达此需求逻辑覆盖标准谓词覆盖(分支覆盖):每个分支的真假至少覆盖一次子句覆盖(条件覆盖):每个条件的真假至少覆盖一次完全子句覆盖(条件组合覆盖):每个条件真假组合至少覆盖一次有效子句覆盖(MCDC):对于每个主子句的真假,选择次子句,使得主子句决定谓词真假。000111aba∨b000011aba∨b000011101111aba∨b000011101000aba∨b谓词覆盖子句覆盖组合覆盖有效子句覆盖【例】a∨b练习:逻辑覆盖对于逻辑表达式(a∨b)∧c,列出满足谓词覆盖的所有配对列出满足子句覆盖的所有配对列出满足组合覆盖的所有配对列出满足有效子句覆盖的所有配对abc(a∨b)∧c00000111谓词覆盖abc(a∨b)∧c00001111子句覆盖组合覆盖abc(a∨b)∧c00000010010001111000101111001111abc(a∨b)∧c00101011001001111000101101000111有效子句覆盖输入空间划分输入空间建模输入域:输入参数可能值全体,往往以属性、特征形式出现。划分:输入域分成N块分离性:块块之间不能重叠完整性:划分覆盖整个域。【例】文件排序方式={升序,降序,乱序}这样的划分成是否合适?升序降序(10)(11)(01)(00)i1i4i2i3输入空间划分覆盖标准完全组合覆盖:所有属性的每个块组合至少覆盖一次T-Wise组合覆盖:每个属性的每个块至少被组合到。单个选择覆盖:每个属性的每个块至少覆盖一次。基本选择覆盖:基本测试由每个基本选择块组成,非基本测试则除了基本选择块外,其它属性使用非基本选择块。【例】三个属性的划分块P1=[A,B],P2-[1,2],P3=[x,y](A,1,x)(A,1,y)(A,2,x)(A,2,y)(B,1,x)(B,1,y)(B,2,x)(B,2,y)(A,1,x)(A,2,y)(B,1,y)(B,2,x)(A,1,x)(B,2,y)(A,1,x)(A,2,y)(B,1,y)(B,2,x)完全组合覆盖T-wise组合覆盖每个选择覆盖基本选择覆盖各种测试覆盖标准间的包含关系完全子句覆盖有效子句覆盖子句覆盖谓词覆盖完全路径覆盖主路径覆盖独立路径覆盖节点覆盖边覆盖完全组合覆盖T-Wise覆盖基本选择覆盖单个选择覆盖图覆盖逻辑覆盖输入域覆盖边-对覆盖测试覆盖标准的应用单元测试集成测试系统测试代码接口业