【文档说明】软件结构性测试课件.ppt,共(85)页,330.599 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45304.html
以下为本文档部分文字说明:
软件结构性测试概览在本章中,我们将学习:–结构性测试概述–程序结构分析–逻辑覆盖–结构性测试案例目标完成此课程之后,学员将具备以下能力:–了解结构性测试的含义–进行程序结构分析–使用逻辑覆盖的方法进行白盒测试–使用Devpartner进行白盒测试课程目录结构测试概述程序结构分析逻辑覆盖结
构测试案例分析结构测试工具使用结构测试定义把测试对象看做一个透明的盒子白盒测试是根据被测程序的内部结构设计测试用例并完成测试的一种测试方法白盒测试或逻辑驱动测试基于一个应用代码的内部逻辑知识,测试覆盖全部代码、分支、路径和条件结构测试特点可以构成测试数据使特定程序部分得到测试有一
定的充分性度量手段可获得较多工具支持通常只用于单元测试结构测试的方法程序结构分析–代码走查–代码审查–控制流分析–数据流分析–信息流分析逻辑覆盖–语句覆盖–分支覆盖–条件覆盖–分支-条件覆盖–路径覆盖结构测试的局限不可能查出程序是否违反了设计规范不可能查出程序中因遗漏路径而出
错可能发现不了一些与数据有关的错误不易生成测试数据代码覆盖率采用白盒法进行测试时,考虑的是测试用例对程序内部逻辑的覆盖程度最彻底的白盒法是覆盖程序中的每一条路径,但这往往无法实现采用其它一些标准来量度覆盖的程度,并希望覆盖程度尽可能高些课程目录结构测试概述
程序结构分析逻辑覆盖结构测试案例分析结构测试工具使用程序结构分析代码走查代码审查控制流分析数据流分析信息流分析代码走查含义–代码走查是由一组程序和错误检查技术组成,并以代码审查组方式进行人员–组长(有威信的资
深程序员担任):负责分配资料、安排计划、主持会议、记录并保存被发现的错误–资深程序员–测试人员–程序开发员(可做会议主持)代码走查原因–功能性测试很难实现>有太多的条件>有太多的测试用例代码审查内容–检查代码和设计的一致性
–检查代码对标准的遵循、可读性–检查代码的逻辑表达的正确性–检查代码结构的合理性代码审查步骤–准备–程序阅读–审查会–跟踪及报告控制流分析非结构化程序会给测试、排错、和程序的维护带来许多困难要求写出的程序结构良好检查程序的控制结构成为十分有意义的工作程序流程图1325控制流图1243
5abcdef控制流图节点–标有编号的圆圈–程序流程图中矩形框所表示的处理–菱形表示的两个甚至多个出口判断–多条流线相交的汇合点控制流图控制流线或弧–箭头–与程序流程图中的流线一致,表明了控制的顺序–控制流线通常标有名字控制流图矩阵acbdef1234512345控制流图矩阵便于机器表示和
处理控制流图连接弧的节点的号码决定了矩阵中元素的位置注意控制流的方向两个节点没有弧线,所对应的位置也就没有元素程序结构的基本要求写出的程序不应包含:–转向并不存在的标号–没有用的语句标号–从程序入口进入后无法达到的语句–不能达到停
机语句的语句数据流分析查找引用未定义变量等程序错误查找对以前未曾使用的变量再次赋值等数据流异常的情况常见的错误表现形式–错拼名字–名字混淆–语句丢失数据流如果程序中某一语句执行时能改变某程序变量V的值,则称V被该语句定义如果一语句的执行引用了
内存中变量V的值,则称V被该语句引用例如:–X=Y+Z;–ifY>Zthenreturn;控制流图与数据流表1234106758911节点被定义变量被引用变量1X,Y,Z2XW,X3X,Y4Y,Z5YV,Y6ZV,Z7VX8WY9ZV10ZZ11Z信息流分析通过对输入数据、输出数据、语
句之间的关系的分析来检查程序错误整除算法例子输入:in_m是被除数,in_n是除数输出:out_q是商,out_r是余数整除算法例子1out_q=0;2out_r=in_m;3While(out_r>=in_n)4{
4out_q++;5out_r=out_r–in_n;6}信息流关系图√√√√√√√in_min_n12345√√√√√√√√out_qout_r12345√√√√out_qout_rin_mIn_n(1)(2)(3)信息流分析能够列出对输入变量的所有可能的引用在程序的任
何指定点检查其执行可能影响某一输出变量值的语句输入输出关系提供一种检查,看每个输出值是否由相关的输入值,而不是其他值导出课程目录白盒测试概述程序结构分析逻辑覆盖结构测试案例分析结构测试工具使用覆盖准则测试到什么地步可以结束测试?–覆盖准则被测小程序if(A>1&&B==0)X=X/A
;if(A==2||X>1)X=X+1;被测程序段流程图A>1&&B==0aA==2||X>1X=X/AFTbcX=X+1TeFd逻辑覆盖测试方法语句覆盖分支覆盖条件覆盖分支-条件覆盖路径覆盖语句覆
盖原理:如果语句中有错误,仅靠观察不执行可能发现不了在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次若干个->尽量少语句覆盖、程序段覆盖、程序块覆盖语句覆盖率语句覆盖率–已执行的可执行语句占程序中可执行语句总数的
百分比复杂的程序不可能达到语句的完全覆盖语句覆盖率越高越好语句覆盖测试用例达到语句覆盖100%的测试用例(路径ace)A=2B=0X=3未达到语句覆盖100%的测试用例(路径abe)A=2B=1X=3语句覆盖的优点检查所有语句结构简单的代码的测试效果较好容易实现自动
测试代码覆盖率高如果是程序块覆盖,则不涉及程序块中的源代码语句覆盖不能检查出的错误条件语句错误–“A>1&&B==0”->“A>0&&B==0”逻辑运算(&&、||)错误–“A>1&&B==0”->“A>1||B==0”–
“U=A<1||B>2”->“U=A<1”语句覆盖不能检查出的错误循环语句错误–循环次数错误–跳出循环条件错误语句覆盖不能检查出的错误循环语句例子for(i=0;i<10;i++){statement;}While(x>3){statement;}
for(i=0;i<=10;i++){statement;}While(x>3&&x<7){statement;}语句覆盖率的问题能达到很高的语句覆盖率语句覆盖率看似很高,却有严重缺陷if(x!=1){statements;
……;}else{statement;}}99句}1句测试用例x=2语句覆盖率99%50%的分支没有达到分支覆盖设计若干测试用例,运行被测程序,使得程序中每个判断的真假分支至少经历一次又称判定覆盖while语句、switch语句、异常处理、跳转语句等等同样可以使用分支覆盖
来测试分支覆盖率–已取过“真”和“假”两个值的判定占程序中所有条件判定个数的百分比分支覆盖测试用例路径aceA=2B=0X=3路径abdA=1B=0X=1路径acdA=3B=0X=3路径abeA=2B=1X=2或分支覆盖的利弊分支覆盖要比语句覆盖查错能力强一些:执行了分支
覆盖,实际也就执行了语句覆盖分支覆盖与语句覆盖存在同样的缺点–不能查出条件语句错误–不能查出逻辑运算错误–不能查出循环次数错误–不能查出循环条件错误条件覆盖设计若干测试用例,执行被测程序以后,要使每个判断
中的每个条件的可能取值至少满足一次条件覆盖分析第1个判断应考虑A>1,记为T1A<=1,即记为F1B==0,记为T2B!=0,记为F2第2个判断应考虑A==2,记为T3A!=2,记为F3X>1,记为T4X<=1,记为F4条件覆盖测试用例用例编号ABX路径覆盖条件1203aceT1,T
2,T3,T42101abdF1,T2,F3,F43211abeT1,F2,T3,F4似乎执行了条件覆盖必然实现了分支覆盖?条件覆盖测试用例用例编号ABX路径覆盖条件1103abeF1,T2,F3,T42211abeT1,F2,T3,F4执行条件覆盖并不
能实现分支覆盖条件覆盖的利弊能够检查所有的条件错误不能实现对每个分支的检查用例数量的增加–a&&b&&(c||(d&&e))–((a||b)&&(c||d))&&e分支-条件覆盖设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,
并且每个判断本身的判定结果也至少出现一次分支-条件覆盖分析(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(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,F4分支-条件覆盖测试用例用例编号ABX覆盖组合号路径覆盖条件1203(1)(5)aceT1
,T2,T3,T42211(2)(6)abcT1,F2,T3,F43103(3)(7)abeF1,T2,F3,T44111(4)(8)abdF1,F2,F3,F4覆盖了3条路径,漏掉了路径acd分支-条件覆盖的利弊既考虑了每一个条件,又考虑了每一个分支,发现错误能力强于分支覆盖和条件覆
盖并不能全面覆盖所有路径用例数量的增加路径覆盖设计足够多的测试用例,要求覆盖程序中所有可能的路径路径–ace记为L1–abd记为L2–abe记为L3–acd记为L4路径覆盖测试用例用例编号ABX覆盖路径
1203ace(L1)2101abd(L2)3211abe(L3)4301acd(L4)路径覆盖的利弊实现了所有路径的测试,发现错误能力强某些条件错误可能无法发现路径数庞大,不可能覆盖所有路径用例数量的增加循环测试路径覆盖0次循环–检查跳出循环1次循环–检查循环
初始值2次循环–检查多次循环m次循环–检查某次循环最大次数循环、比最大次数多一次、少一次循环–检查循环次数边界简化循环路径循环使路径数量急剧增长简化–无论循环的形式和实际执行循环体的次数多少,
只考虑循环一次和0次两种情况–进入循环体一次–跳出循环体循环程序流程图CBCB(1)(2)简化循环路径图(1)和(2)都可简化为(3)CB最少测试用例数计算对于具体的程序,至少要设计多少测试用例?估算最少测试用例数–帮助执
行测试–有助于估算测试的时间结构化程序与N-S图结构化程序是由3种基本控制结构组成–顺序型–选择型(条件分支)–重复型(循环)测试时考虑的结构–顺序型–选择型(条件分支)程序结构与测试用例数程序结构与测试用例数当程序中判定多
于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构对于嵌套型分支结构,若有n个判定语句,需要n+1个测试用例对于连锁型分支结构,若有n个判定语句,需要有2n个测试用例,覆盖它的2n条路径最少测试用例数计算实例计算最少测试用例数最少测试用例数计算实例最少测试用例数计算
实例测试覆盖准则Foster的ESTCA覆盖准则–错误敏感测试用例分析(ErrorSensitiveTestCasesAnalysis)–问题ESTCA覆盖准则对于分支A(>,=,<,>=,<=)B,测试时应选择A<B,A=B,A>B的情况分别测试一
次对于分支A(>,<)C,A是变量,C是常量–当A>C时,选择A=C+小正数–当A<C时,选择A=C-小正数对于测试用例取值,在每个测试用例中尽量不同的值或符号覆盖率要求对单元测试来说,语句覆盖和分支覆盖是最基本的要求由于程序
中错误(异常)处理工作的重要性以及其结构相对简单,要求错误处理要做到路径覆盖对质量要求高的软件单元,可根据情况提出条件覆盖、分支-条件覆盖以及路径覆盖要求课程目录结构测试概述程序结构分析逻辑覆盖结构测试案例分析结构测试工具使用结构测试案例求最
小值求数组中的最小值k=i;for(j=i+1;j<=n;j++){if(A[j]<A[k])k=j;}程序流程图k=i;j=i+1j<=n?A[j]<A[k]?k=jj++acbdef最少测试用例数3测试用例(最少)用例编号输入输出循环inA[i]A[i+1]路
径k10111ac1211212abefc1311221abdfc2疑问测试用例是否足够?循环测试是否足够?–在结构复杂,测试用例数非常多的情况下,这些测试用例已经可以满足测试,但并不具有充分性如何达到充分性?–测试2次循环测试用例(充分)用例编号输入输出循环inA[i]A[i+1
]A[i+2]路径k10111ac1211212abefc1311221abdfc24213123abefbefc15213213abdfbefc26213231abefbdfc37213321abdfbdfc3课程目录结构测试概述程序结构分析逻辑覆盖结构测试案例分析结构测试工具使用目前
的白盒测试工具DevPartner(Compuware)PURE(Rational)NUnitJUnitCppUnitDevpartner的使用演示本课总结结构性测试包含程序结构分析和代码覆盖测试衡量结构性测试的优劣的标
准是代码覆盖率使用工具将提高结构性测试的质量和加快测试的时间Thanks!