《测试培训7软件结构测试.ppt》由会员分享,可在线阅读,更多相关《测试培训7软件结构测试.ppt(84页珍藏版)》请在三一办公上搜索。
1、软件结构测试,概览,在本章中,我们将学习:结构测试概述 程序结构分析 逻辑覆盖 结构性测试案例,目标,完成此课程之后,学员将具备以下能力:了解结构测试的含义进行程序结构分析使用逻辑覆盖的方法进行白盒测试 使用Devpartner进行白盒测试,课程目录,结构测试概述 程序结构分析 逻辑覆盖 结构测试案例分析结构测试工具使用,结构测试定义,把测试对象看做一个透明的盒子白盒测试是根据被测程序的内部结构设计测试用例并完成测试的一种测试方法白盒测试或逻辑驱动测试基于一个应用代码的内部逻辑知识,测试覆盖全部代码、分支、路径和条件,结构测试特点,可以构成测试数据使特定程序部分得到测试有一定的充分度量手段可获
2、得较多工具支持通常只用于单元测试,结构测试的方法,程序结构分析代码走查代码审查控制流分析数据流分析信息流分析,逻辑覆盖语句覆盖分支覆盖条件覆盖分支-条件覆盖路径覆盖,结构测试的局限,不可能查出程序是否违反了设计规范不可能查出程序中因遗漏路径而出错可能发现不了一些与数据有关的错误不易生成测试数据,代码覆盖率,采用白盒法进行测试时,考虑的是测试用例对程序内部逻辑的覆盖程度最彻底的白盒法是覆盖程序中的每一条路径,但这往往无法实现采用其它一些标准来量度覆盖的程度,并希望覆盖程度尽可能高些,课程目录,结构测试概述 程序结构分析 逻辑覆盖 结构测试案例分析结构测试工具使用,程序结构分析,代码走查代码审查控
3、制流分析数据流分析信息流分析,代码走查,含义代码走查是由一组程序和错误检查技术组成,并以代码审查组方式进行人员组长(有威信的资深程序员担任):负责分配资料、安排计划、主持会议、记录并保存被发现的错误资深程序员测试人员程序开发员(可做会议主持),代码走查,原因功能测试很难实现有太多的条件有太多的测试用例,代码审查,内容检查代码和设计的一致性检查代码对标准的遵循、可读性检查代码的逻辑表达的正确性检查代码结构的合理性,代码审查,步骤准备程序阅读审查会跟踪及报告,控制流分析,非结构化程序会给测试、排错、和程序的维护带来许多困难要求写出的程序结构良好检查程序的控制结构成为十分有意义的工作,程序流程图,1
4、,3,2,5,控制流图,1,2,4,3,5,a,b,c,d,e,f,控制流图,节点标有编号的圆圈 程序流程图中矩形框所表示的处理 菱形表示的两个甚至多个出口判断 多条流线相交的汇合点,控制流图,控制流线或弧 箭头 与程序流程图中的流线一致,表明了控制的顺序 控制流线通常标有名字,控制流图矩阵,1,2,3,4,5,1,2,3,4,5,控制流图矩阵,便于机器表示和处理控制流图 连接弧的节点的号码决定了矩阵中元素的位置注意控制流的方向两个节点没有弧线,所对应的位置也就没有元素,程序结构的基本要求,写出的程序不应包含:转向并不存在的标号 没有用的语句标号 从程序入口进入后无法达到的语句 不能达到停机语
5、句的语句,数据流分析,查找引用未定义变量等程序错误 查找对以前未曾使用的变量再次赋值等数据流异常的情况 常见的错误表现形式错拼名字名字混淆语句丢失,数据流,如果程序中某一语句执行时能改变某程序变量V的值,则称V被该语句定义如果一语句的执行引用了内存中变量V的值,则称V被该语句引用例如:X=Y+Z;if YZ then return;,控制流图与数据流表,1,2,3,4,10,6,7,5,8,9,11,信息流分析,通过对输入数据、输出数据、语句之间的关系的分析来检查程序错误整除算法例子输入:in_m是被除数,in_n是除数输出:out_q是商,out_r是余数,整除算法例子,out_q=0;ou
6、t_r=in_m;While(out_r=in_n)out_q+;out_r=out_r in_n;,信息流关系图,in_m,in_n,1,2,3,4,5,out_q,out_r,1,2,3,4,5,out_q,out_r,in_m,In_n,(1),(2),(3),信息流分析,能够列出对输入变量的所有可能的引用在程序的任何指定点检查其执行可能影响某一输出变量值的语句输入输出关系提供一种检查,看每个输出值是否由相关的输入值,而不是其他值导出,课程目录,白盒测试概述 程序结构分析 逻辑覆盖 结构测试案例分析结构测试工具使用,覆盖准则,测试到什么地步可以结束测试?覆盖准则,被测小程序,if(A 1
7、,被测程序段流程图,A 1&B=0,a,A=2|X 1,X=X/A,F,T,b,c,X=X+1,T,e,F,d,逻辑覆盖测试方法,语句覆盖 分支覆盖 条件覆盖 分支-条件覆盖 路径覆盖,语句覆盖,原理:如果语句中有错误,仅靠观察不执行可能发现不了在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次 若干个-尽量少 语句覆盖、程序段覆盖、程序块覆盖,语句覆盖率,语句覆盖率已执行的可执行语句占程序中可执行语句总数的百分比复杂的程序不可能达到语句的完全覆盖语句覆盖率越高越好,语句覆盖测试用例,达到语句覆盖100%的测试用例(路径ace)A=2 B=0 X=3,未达
8、到语句覆盖100%的测试用例(路径abe)A=2 B=1 X=3,语句覆盖的优点,检查所有语句结构简单的代码的测试效果较好容易实现自动测试代码覆盖率高 如果是程序块覆盖,则不涉及程序块中的源代码,语句覆盖不能检查出的错误,条件语句错误“A 1&B=0”-“A 0&B=0”逻辑运算(&、|)错误“A 1&B=0”-“A 1|B=0”“U=A2”-“U=A1”,语句覆盖不能检查出的错误,循环语句错误循环次数错误跳出循环条件错误,语句覆盖不能检查出的错误,循环语句例子for(i=0;i3)statement;,for(i=0;i3,语句覆盖率的问题,能达到很高的语句覆盖率语句覆盖率看似很高,却有严重
9、缺陷 if(x!=1)statements;else statement;,99句,1句,测试用例x=2语句覆盖率99%50%的分支没有达到,分支覆盖,设计若干测试用例,运行被测程序,使得程序中每个判断的真假分支至少经历一次又称判定覆盖while语句、switch语句、异常处理、跳转语句等等同样可以使用分支覆盖来测试分支覆盖率已取过“真”和“假”两个值的判定占程序中所有条件判定个数的百分比,分支覆盖测试用例,路径ace A=2 B=0 X=3 路径abd A=1 B=0 X=1,路径acd A=3 B=0 X=3 路径abe A=2 B=1 X=2,或,分支覆盖的利弊,分支覆盖要比语句覆盖查错
10、能力强一些:执行了分支覆盖,实际也就执行了语句覆盖分支覆盖与语句覆盖存在同样的缺点 不能查出条件语句错误不能查出逻辑运算错误不能查出循环次数错误不能查出循环条件错误,条件覆盖,设计若干测试用例,执行被测程序以后,要使每个判断中的每个条件的可能取值至少满足一次,条件覆盖分析,第1个判断应考虑 A 1,记为T1 A 1,记为T4 X=1,记为F4,条件覆盖测试用例,似乎执行了条件覆盖必然实现了分支覆盖?,条件覆盖测试用例,执行条件覆盖并不能实现分支覆盖,条件覆盖的利弊,能够检查所有的条件错误不能实现对每个分支的检查用例数量的增加a&b&(c|(d&e)(a|b)&(c|d)&e,分支-条件覆盖,设
11、计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次,分支-条件覆盖分析,(1)A 1,B=0,记为T1,T2(2)A 1,B!=0,记为T1,F2(3)A 1,记为T3,T4(6)A=2,X 1,记为F3,T4(8)A!=2,X=1,记为F3,F4,分支-条件覆盖测试用例,覆盖了3条路径,漏掉了路径acd,分支-条件覆盖的利弊,既考虑了每一个条件,又考虑了每一个分支,发现错误能力强于分支覆盖和条件覆盖并不能全面覆盖所有路径用例数量的增加,路径覆盖,设计足够多的测试用例,要求覆盖程序中所有可能的路径路径ace 记为L1 abd 记为L2abe 记
12、为L3acd 记为L4,路径覆盖测试用例,路径覆盖的利弊,实现了所有路径的测试,发现错误能力强某些条件错误可能无法发现路径数庞大,不可能覆盖所有路径用例数量的增加,循环测试路径覆盖,0次循环检查跳出循环 1次循环检查循环初始值 2次循环检查多次循环 m次循环检查某次循环 最大次数循环、比最大次数多一次、少一次循环检查循环次数边界,简化循环路径,循环使路径数量急剧增长简化无论循环的形式和实际执行循环体的次数多少,只考虑循环一次和0次两种情况进入循环体一次跳出循环体,循环程序流程图,C,B,C,B,(1),(2),简化循环路径图,(1)和(2)都可简化为(3),C,B,最少测试用例数计算,对于具体
13、的程序,至少要设计多少测试用例?估算最少测试用例数帮助执行测试有助于估算测试的时间,结构化程序与N-S图,结构化程序是由3种基本控制结构组成顺序型选择型(条件分支)重复型(循环)测试时考虑的结构顺序型选择型(条件分支),程序结构与测试用例数,程序结构与测试用例数,当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构对于嵌套型分支结构,若有n个判定语句,需要n+1个测试用例对于连锁型分支结构,若有n个判定语句,需要有2n个测试用例,覆盖它的2n条路径,最少测试用例数计算实例,计算最少测试用例数,最少测试用例数计算实例,最少测试用例数计算实例,测试覆盖准则,Foste
14、r的ESTCA覆盖准则错误敏感测试用例分析(Error Sensitive Test Cases Analysis)问题,ESTCA覆盖准则,对于分支A(,=,=,B的情况分别测试一次对于分支A(,C时,选择A=C小正数当AC时,选择A=C小正数对于测试用例取值,在每个测试用例中尽量不同的值或符号,覆盖率要求,对单元测试来说,语句覆盖和分支覆盖是最基本的要求由于程序中错误(异常)处理工作的重要性以及其结构相对简单,要求错误处理要做到路径覆盖对质量要求高的软件单元,可根据情况提出条件覆盖、分支-条件覆盖以及路径覆盖要求,课程目录,结构测试概述 程序结构分析 逻辑覆盖 结构测试案例分析结构测试工具
15、使用,结构测试案例,求最小值 求数组中的最小值 k=i;for(j=i+1;j=n;j+)if(Aj Ak)k=j;,程序流程图,k=i;j=i+1,j=n?,Aj Ak?,k=j,j+,a,c,b,d,e,f,最少测试用例数,3,测试用例(最少),疑问,测试用例是否足够?循环测试是否足够?在结构复杂,测试用例数非常多的情况下,这些测试用例已经可以满足测试,但并不具有充分性如何达到充分性?测试2次循环,测试用例(充分),课程目录,结构测试概述 程序结构分析 逻辑覆盖 结构测试案例分析结构测试工具使用,目前的白盒测试工具,DevPartner(Compuware)PURE(Rational)NUnitJUnitCppUnit,Devpartner的使用,演示,本课总结,结构性测试包含程序结构分析和代码覆盖测试衡量结构性测试的优劣的标准是代码覆盖率使用工具将提高结构性测试的质量和加快测试的时间,Thanks!,