第6章 软件测试(1) pwq_第1页
第6章 软件测试(1) pwq_第2页
第6章 软件测试(1) pwq_第3页
第6章 软件测试(1) pwq_第4页
第6章 软件测试(1) pwq_第5页
已阅读5页,还剩169页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023/2/40第6章软件测试(1)软件工程2023/2/41本章目录一、测试概述

二、测试方法三、测试级别四、测试管理流程五、测试自动化六、测试过程七、案例分析2023/2/42软件测试---测试概述2023/2/43本节要点一、测试概述

二、测试方法简述三、测试级别简述四、测试管理流程简述2023/2/44什么是测试?

为了发现软件系统的错误而运行或测试某个系统的过程。破坏的过程软件测试是质量控制的重要手段定义:2023/2/45测试概述

软件测试是对软件需求分析、设计、编码实现的审查。 软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。

2023/2/46什么是测试?

(4195835/3145727)×3145727-4195835爱国者导弹防御系统千年虫软件错误典型案例:2023/2/47什么是测试?(1)测试是程序的执行过程,目的在于发现错误;(2)一个好的测试用例在于能发现至今未发现的错误;(3)一个成功的测试是发现了至今未发现的错误的测试。保证产品质量!Myers软件测试目的2023/2/48软件测试的原则1.应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。2.测试用例应由测试输入数据和对应的预期输出结果这两部分组成。3.程序员应避免检查自己的程序。4.在设计测试用例时,应包括合理的输入条件和不合理的输入条件。2023/2/495.充分注意测试中的群集现象。

经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。6.严格执行测试计划,排除测试的随意性。7.应当对每一个测试结果做全面检查。8.妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。

2023/2/410什么是测试?软件测试的实践性大于理论性软件测试理论体系尚不成熟软件测试工具尚不成熟软件测试效果对于个人的依赖性比较大现状:2023/2/411基本术语(1/2)•

错误(Error)–错误是指导致系统可能包含故障的人的行为,如输入错误、需求错误、设计错误等。•

缺陷(Defect,Bug)–缺陷是错误的表现,包括过错缺陷和遗漏缺陷。•

故障(Fault)–故障是指系统的规格说明与其行为之间的偏差,通常由一个或多个缺陷引起。2023/2/412基本术语(2/2)•

验证(Verification)–我们是否在正确地制造产品?–软件验证试图证明在软件生存周期的各个阶段,软件产品或中间产品是否能够满足客户需求,包括一致性、完整性和正确性。•

确认(Validation)–我们是否在制造正确的产品?–软件确认的目的是保证所开发的最终软件产品能够符合用户的需求。•

说明:验证强调对于过程的检验,确认强调对于结果的检验。2023/2/413软件错误或缺陷•

软件错误(或软件缺陷)的表现–软件未达到产品说明书标明的功能;–软件出现了产品说明书指明不会出现的错误;–软件功能超出了产品说明书指明的范围;–软件未达到产品说明书虽未指出但应达到的目标;–软件测试人员认为软件难以理解、不易使用、运行速度缓慢、或者最终用户不满意。•

有错是软件的属性,而且是无法改变的。因此,关键在于如何避免错误的产生和消除已经产生的错误,使程序中的错误密度达到尽可能低的程度。2023/2/414验证与确认2023/2/415这是什么?2023/2/416错误的状态2023/2/417算法错误2023/2/418机械错误2023/2/419处理错误或缺陷:验证?2023/2/420处理错误或缺陷:冗余?2023/2/421处理错误或缺陷:特性?2023/2/422处理错误或缺陷:补丁?2023/2/423处理错误或缺陷:测试?2023/2/424另一种观点•错误预防(在系统发布之前实施)–使用好的程序设计方法来减少复杂性–使用版本控制来防止系统的不一致–应用验证技术来防止算法错误•错误检测(当系统运行时实施)–测试:以事先规划的方式发现错误–调试:假设从意外故障着手可以找到错误–监控:发送状态信息,发现性能错误•错误恢复(一旦系统发布后出现错误时实施)–数据库系统:提供从故障中恢复的基本事务处理–模块冗余:将不止一个组件分配执行同一个操作–恢复程序:该程序处理错误信息,使系统从故障中恢复过来2023/2/425本节要点一、测试概述二、测试方法简述三、测试级别简述四、测试管理流程简述2023/2/426测试方法软件测试方法动态测试静态测试黑盒测试白盒测试在不知道程序内部结构,只知道程序规格的情况下采用的测试技术或策略。在知道程序内部结构的情况下采用的测试技术或策略。黑盒测试方法和白盒测试方法综合的策略。不实际运行程序,而是通过检查和阅读等手段来发现错误并评估代码质量的软件测试技术。也称为静态分析技术。实际运行程序,并通过观察程序运行的实际结果来发现错误的软件测试技术。白盒测试灰盒测试2023/2/427本节要点一、测试概述二、测试方法简述三、测试级别简述四、测试管理流程简述2023/2/428测试的级别概要设计详细设计编码集成测试单元测试代码审查需求分析系统测试回归测试验收测试2023/2/429本节要点一、测试概述二、测试方法简述三、测试级别简述四、测试管理流程简述2023/2/430测试管理流程测试计划测试设计、开发测试执行测试记录分析测试总结完毕缺陷跟踪针对测试目标,规定测试任务、资源分配、人员角色、进度安排等。根据测试计划,设计测试用例,包括:测试步骤、测试场景、测试代码、测试数据(包括预期结果)。根据测试计划,配置测试环境,并手动或者自动执行测试设计。根据测试计划,忠实地记录测试执行的过程和结果。分析测试记录,如果发现与预期结果不同,确定并重现缺陷。检查测试设计是否全部执行完毕,缺陷是否全部关闭。记录、分发、评估、关闭缺陷报告。分析测试过程和缺陷报告,评估测试质量和测试效果,给出是否通过测试的建议。2023/2/431软件测试---测试方法2023/2/432本节要点一、静态测试方法二、动态测试方法三、面向对象测试2023/2/433静态测试(分析)定义:不实际运行程序,而是通过检查和阅读等手段来发现错误并评估代码质量的软件测试技术。也称为静态测试技术。方法:走查:WalkThrough审查:Inspection评审:ReviewMichaelFaganIBM(1976)2023/2/434静态分析-走查定义:开发组内部进行的,主要是个人通过检查和阅读等手段来查找错误的活动。经验:限时,一般2-3小时避免跑题不要现场修改检查要点逻辑错误代码标准/规范/风格2023/2/435静态分析-审查定义:开发组内部进行的,分配了相关的角色,采用讲解、提问并使用Checklist方式进行的查找错误的活动。经验:以会议的形式,制定会议目标、流程和规则,结束后要编写报告参加人员经验丰富的开发人员和本模块相关的开发人员本项目组的新人由另外一名开发者进行讲解、其他开发者主要按照Checklist进行提问并填表、本模块开发者回答问题并记录不要现场修改检查要点设计需求代码标准/规范/风格2023/2/436静态分析-评审定义:开发组、测试组和相关人员(QA、产品经理等)联合进行的,采用讲解、提问并使用Checklist方式进行的查找错误的活动。一般有正式的计划、流程和结果报告。经验:以会议的形式,制定会议目标、流程和规则,结束后要编写报告。相关资料要在会议前下发并阅读。参加人员经验丰富的开发人员和本模块相关的开发人员测试组和相关人员由另外一名开发者进行讲解、其他开发者主要按照Checklist进行提问并填表、本模块开发者回答问题并记录不要现场修改检查要点设计需求代码标准/规范/风格文档的完整性和一致性2023/2/437同行(对等)评审

(PeerReview)对等技术评审是由与工作产品开发人员具有同等背景和能力的人员对工作产品进行的一种评审,目的是早期和有效的消除软件工作产品中的缺陷,并可对软件工作产品和其中可预防的缺陷有更好的理解。2023/2/438本节要点一、静态测试方法二、动态测试方法三、面向对象测试2023/2/439动态测试白盒测试黑盒测试2023/2/440白盒测试基于代码的测试2023/2/441白盒测试基本的逻辑覆盖其它的逻辑覆盖准则2023/2/442基本逻辑覆盖测试语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖2023/2/443语句覆盖

选择足够的测试用例,使得程序中每一条可执行语句至少被执行一次。语句覆盖率=(至少被执行一次的语句数量)/(可以执行的语句总数)2023/2/444语句覆盖实例1.ifConditionthenDo_something;EndifAnother_Statement;TestCase:ConditionTrue2023/2/445判定覆盖选择足够的测试用例,使得程序中每一个判断的每一种可能结果都至少被执行一次。判定覆盖也叫分支覆盖。判定覆盖率=(判定结果被评价的次数)/(判定结果的总数)2023/2/446判定覆盖实例1.ifConditionthenDo_something;EndifAnother_Statement;TestCase:1、ConditionTrue2、ConditionFalse2023/2/447判定覆盖实例1.ifConditionthenDo_something;ElseDo_something_Else;EndifAnother_Statement;TestCase:ConditionTrueTestCase:ConditionFalse2023/2/448判定覆盖实例1. IfAandBthenDo-SomethingEndif判断:1.A=T,B=T=>AandB=T2.A=T,B=F=>AandB=FTestCaseABAandBTestCase1TTTTestCase2TFF2023/2/449条件覆盖

选择足够的测试用例,使得程序中每一个判断中的每一个条件的可能结果都至少被执行一次条件覆盖率=(条件操作数值至少被评价一次的数量)/(条件操作数值的总数)2023/2/450条件覆盖实例1. IfAandBthenDo-SomethingEndifTestCaseABAandBTestCase1TFFTestCase2FTF2023/2/451条件覆盖例如:if(A>1)and(B=0)thenX=X/A;if(A=2)and(X>1)thenX=X+1;A>1,A<=1A=2,A<>2

B=0,B<>0X>1,X<=12023/2/452条件覆盖条件:A>1T1;A<=1F1B=0T2;B<>0F2A=2T3;A<>2F3X>1T4;X<=1F4TestcaseABX Case1、103 Case2、211 if(A>1)and(B=0)thenX=X/A;if(A=2)and(X>1)thenX=X+1;2023/2/453判定条件覆盖

选择足够的测试用例,使得同时满足判定覆盖和条件覆盖。判定条件覆盖率=(条件操作数值或者判定结果至少被评价一次的数量)/(条件操作数值总数+判定结果的总数)2023/2/454判定条件覆盖-实例1. IfAandBthenDo-SomethingEndif判断:1.AandB=T2.AandB=FTestCase

A

B

AandBTestCase1TTTTestCase2FFF条件:1.A=T2.A=F3.B=T4.B=F2023/2/455判断条件覆盖-实例判断(A>1)and(B=0)A>1,B=0=>TrueA>1,B<>0=>FalseA<=1,B=0=>FalseA<=1,B<>0=>False(A=2)and(X>1)A=2,X>1=>TrueA=2,X<=1=>FalseA<>2,X>1=>FalseA<>2,X<=1=>False条件:A>1T1;A<=1F1B=0T2;B<>0F2A=2T3;A<>2F3X>1T4;X<=1F4A、B、X2、0、31、1、1if(A>1)and(B=0)thenX=X/A;if(A=2)and(X>1)thenX=X+1;2023/2/456判断条件覆盖-案例冗余判断(A>1)and(B=0)A>1,B=0=>TrueA>1,B<>0=>FalseA<=1,B=0=>FalseA<=1,B<>0=>False(A=2)and(X>1)A=2,X>1=>TrueA=2,X<=1=>FalseA<>2,X>1=>FalseA<>2,X<=1=>False条件:A>1T1;A<=1F1B=0T2;B<>0F2A=2T3;A<>2F3X>1T4;X<=1F4A、B、X2、0、31、1、1if(A>1)and(B=0)thenX=X/A;if(A=2)and(X>1)thenX=X+1;1、0、32、1、12023/2/457条件组合覆盖

选择足够的测试用例,使得程序中每一个分支判断中的每一个条件的每一种可能组合结果都至少被执行一次。条件组合覆盖率=(被评价的分支条件组合数量)/(分支条件组合总数)2023/2/458条件组合覆盖1. IfAandBthenDo-SomethingEndifTestCase

A

B

AandBTestCase1TTTTestCase2FFFTestCase3TFFTestCase4FTF2023/2/459条件组合覆盖条件组合A>1,B=0A>1,B<>0A<=1,B=0A<=1,B<>0A=2,X>1A=2,X<=1A<>2,X>1A<>2,X<=1条件:(A>1)and(B=0)A>1A<=1B=0B<>0(A=2)and(X>1)A=2A<>2X>1X<=11、0、3A、B、X2、1、12、0、31、1、1if(A>1)and(B=0)thenX=X/A;if(A=2)and(X>1)thenX=X+1;2023/2/460路径覆盖

选择足够的测试用例,使得程序中所有的可能路径都至少被执行一次。路径覆盖率=(至少被执行一次的路径数)/(总的路径数)2023/2/461路径覆盖(A>1)and(B=0)X=X/A(A=2)or(X>1)X=X+1cTrueFalsebTrueFalseedaTestcaseABX覆盖路径Case1103abeCase2211abeCase3203aceCase4111abdTestcaseABX覆盖路径Case5601acdif(A>1)and(B=0)thenX=X/A;if(A=2)or(X>1)thenX=X+1;2023/2/462三角形程序实现的数据流图2023/2/463三角形程序的伪代码ProgramTriangle2Dima,b,casintegerDimIsATriangleAsBoolean Step1:GetInputOutput(“Enter3integerswhicharesidesoftriangle”)Input(a,b,c)Output(“SideAis”,a)Output(“SideBis”,b)Output(“SideCis”,c) Step2:IsaTriangle?If(a<b+c)and(b<a+c)and(C<a+b)ThenIsATriangle=TrueElseIsATriangle=falseEndif2023/2/464三角形程序的伪代码 Step3:DetermineTriangleTypeIfIsATriangleThenif(a=b)AND(b=c)ThenOutput(“Equilateral”)Elseif(a<>b)AND(a<>c)AND(b<>c)ThenOutput(“Scalene”)ElseOutput(“Isosceles”)EndifEndifElseOutput(“NotaTriangle”)EndifEndtriangle22023/2/465三角形程序图2023/2/466DD-路径

(Decision-to-DecisionPaths)判断(决策)到判断(决策)的路径判断(决策):一个序列语句开始位置是一个判断(决策)的开始,结束位置是下一个判断(决策)语句的开始。序列语句没有分支2023/2/467三角形的DD-路径2023/2/468DD-路径覆盖DD路径覆盖率=(至少被执行一次的决策路径数)/(系统中总的决策路径数)E.F.Miller发现:DD-路径覆盖可以发现全部缺陷的85%2023/2/469McCabe的基路径方法线性独立路径数:V(G)=e-n+2e:边数n:节点数

BDAEFGCV(G)=10-7+2=52023/2/470保险金程序-需求保险金=基本保险费率×年龄系数-安全驾驶折扣年龄系数是投保人年龄的函数,如果投保人驾驶执照上的当前点数(根据交通违规次数确定)低于与年龄有关的门限,则给予安全驾驶折扣。书面保险政策的驾驶人年龄范围为从16-100岁,如果投保人有12点,则驾驶人的执照就会被吊销(因此不需要保险)。基本保险费率随时间变化,是每半年500美元。

年龄范围年龄系数门限点数安全驾驶折扣〔16,25)2.8150〔25,35)1.8350〔35,45)1.05100〔45,60)0.87150〔60,100)1.552002023/2/471保险金程序图2023/2/472保险金程序路径?V(G)=112023/2/473路径覆盖覆盖路径P1的案例年龄:17,点数:1覆盖路径P2的案例年龄:16,点数:0。。。。。。。2023/2/474基本逻辑覆盖测试方法语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖2023/2/475动态测试基本逻辑覆盖其它逻辑覆盖准则2023/2/476其它测试覆盖准则ESTCA(ErrorSensitiveTestCasesAnalysis)MC/DC(ModifiedConditional/DecisionCoverage)2023/2/477ESTCA的引入

逻辑覆盖的出发点似乎是合理的。所谓“覆盖”,就是想要作到全面,而无遗漏。但事实表明,它并不能真的作到无遗漏。面对这类情况我们应该从中吸取的教训是测试工作要有重点,要多针对容易发生问题的地方设计测试用例。

K.A.Foster从测试工作实践的教训出发,吸收了计算机硬件的测试原理,提出了一种经验型的测试覆盖准则,较好地解决了上述问题。

Foster的经验型覆盖准则是从硬件的早期测试方法中得到启发的。我们知道,硬件测试中,对每一个门电路的输入、输出测试都是有额定标准的。通常,电路中一个门的错误常常是“输出总是0”,或是“输出总是1”。与硬件测试中的这一情况类似,我们常常要重视程序中谓词的取值,但实际上它可能比硬件测试更加复杂。Foster通过大量的实验确定了程序中谓词最容易出错的部分,得出了一套错误敏感测试用例分析ESTCA(ErrorSensitiveTestCasesAnalysis)规则。IF(I=0)错写为IF(I>0)IF(I>1)错写为IF(I>0)IF(I=X)错写为IF(I=0)2023/2/478ESTCA

(ErrorSensitiveTestCasesAnalysis)规则1:

对于ArelB(rel可以是<,=和>)型的分支谓词,应适当地选择A与B的值,使得测试执行到该分支语句时,A<B,A=B和A>B的情况分别出现一次。规则2:ArelC:Rel为<、>;A是变量,C是常量(M是距C最小的容许正数,若A和C均为整型时,M=1)。Rel为<时,适当选择A,使A=C-MRel为>时,适当选择A,使A=C+M规则3:对外部输入变量赋值,使其每一测试用例均有不同的值和符号,并与同一组测试用例中其它变量的值与符号不一致。显然,上述规则1是为了检测rel的错误,规则2是为了检测“差一”之类的错误(如本应是“IFA>1”而错成“IFA>0”),而规则3则是为了检测程序语句中的错误(如应引用一变量而错成引用一常量)。

2023/2/479MC/DC覆盖(修订的条件/判定覆盖)

(ModifiedConditional/DecisionCoverage)定义:在每个判定中的每个条件都曾独立的影响判定的结果至少一次,(独立影响意思是在其他的条件不变的情况下,改变一个条件)。即:每个条件对结果都独立起作用。

2023/2/480condition和decision的概念:

if(AorB)andCthen

Statement;

else

Statement2;

A,B,C都是一个条件,而(AorBandC)叫一个Decision,如果是判定覆盖的话只需两个case就能覆盖,就是让这个decision为true和false各一次就能达到即为011,010

如果是MC/DC的话就得四个case。比如A对结果起作用的话,B必须为false,C必须为true--101

和001,这样结果就独立受A的值影响.同理如果B对结果独立起作用的话,A必须为false,C必须为true,两种情况B为true,false各一.即为011

和001而C独立对结果起作用的话就是让(AorB)为true,为了减少case,上面的case已经含有这样的case了,我们就取A为false,B为true,这样c独体起作用的case为:011

和010

可以看出每个条件各走了一次true和false,这样三个变量条件就会有六个case,我们看出其中里面还有两个是重复的。

2023/2/481MC/DC覆盖-实例If{XandY}then{block1}Else{block2}TestCaseXYResultTestCase1TTTTestCase2TFFTestCase3FTF2023/2/482MC/DC覆盖-实例练习:(Xand(YorZ))TestcaseXYZResultTestcaseTTTTTestcaseFTTFTestcaseTTFTTestcaseTFFFTestcaseTFTT2023/2/483C/DC和MC/DC之间的差异1)选取两种方法的条件不同

当以下的需求在程序测试中遇到时,需要考虑用MC/DC方法:每一个程序模块的输入和输出点都要考虑至少出现1次,每个程序的判定到所有可能的结果值要至少实现1次;程序的判定被分解为通过逻辑操作符(AND,OR,etc.)连接为BOOL条件,每一个条件对于判定的结果值是独立的,或者说单个条件的变化将导致判定的最后变化.2)两者的测试集不同3)两者在测试中的覆盖面不同4)两者的用途不同

由于MC/DC在寻找测试集时的要求比C/DC要严格,所以相比较下在测试时为了寻找出测试集合所花费的时间多,由此而引起的人力、物力、财力三重开销也会直接攀升,但是MC/DC测试错误的准确率却是特别地高,因此MC/DC适合那些大型的并且要求测试非常精确的软件测试所用.为达到用户的目的和一个较高的信价比,近年来MC/DC方法主要应用于大型的航空航天软件程序的测试上.对比而言C/DC方法要求较低,开销少,而覆盖率也低,所以比较适合对于例如C++,JAVA等小型的程序的测4试当中使用,这正是因为小型程序所拥有的项目经费较少、语句代码少则导致相应地寻找错误也比较容易.此时使用C/DC方法足以测试软件.2023/2/484黑盒测试基于需求的测试2023/2/485黑盒测试需求的覆盖率=(被验证的需求的数量)/(总的需求的数量)2023/2/486黑盒测试方法边界值分析等价类规范导出错误猜测基于故障的测试因果图法2023/2/487边界值分析a<=X1<=b||c<=X2<=dX12023/2/488边界值测试原理1.定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。2023/2/489边界值分析边界值分析方法的考虑:长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。

使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。2023/2/490边界值分析-基本思想边界值最小值:Min略高于最小值::Min+正常值:Normal略低于最大值:Max-最大值:Max正常取值范围2023/2/491边界值分析-健壮性测试边界值略低于最小值:Min-最小值:Min略高于最小值::Min+正常值:Normal略低于最大值:Max-最大值:Max略高于最大值:Max+2023/2/492边界值分析-健壮性测试2023/2/493边界值分析-最坏情况多缺陷假设多个变量取极值的情况2023/2/494边界值分析-最坏情况两变量函数的最坏情况测试用例:2023/2/495边界值分析-最坏情况两变量函数的健壮最坏情况测试用例2023/2/496保险金程序-需求保险金=基本保险费率×年龄系数-安全驾驶折扣年龄范围年龄系数门限点数安全驾驶折扣〔16,25)2.8150〔25,35)1.8350〔35,45)1.05100〔45,60)0.87150〔60,100)1.552002023/2/497边界值测试-最坏情况2023/2/498细化的最坏情况测试2023/2/499细化的最坏情况测试2023/2/4100常见的边界值1)对16-bit的整数而言32767和-32768是边界

2)屏幕上光标在最左上、最右下位置

3)报表的第一行和最后一行

4)数组元素的第一个和最后一个

5)循环的第0次、第1次和倒数第2次、最后一次2023/2/4101边界值分析—边界划分(1/6)

1)边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。

例:测试计算平方根的函数

--输入:实数

--输出:实数

--规格说明:当输入一个0或比0大的数的时候,返回其正平方根;当输入一个小于0的数时,显示错误信息“平方根非法-输入值小于0”并返回0;库函数Print-Line可以用来输出错误信息。

2023/2/4102边界值分析—边界划分(2/6)

2)等价类划分:

3)边界值分析:

划分(ii)的边界为0和最大正实数;划分(i)的边界为最小负实数和0。由此得到以下测试用例:

a、输入{最小负实数}b、输入{绝对值很小的负数}c、输入0d、输入{绝对值很小的正数}e、输入{最大正实数}

I.可以考虑作出如下划分II.测试用例有两个a、输入(i)<0和(ii)>=0b、输出(a)>=0和(b)Errora、输入4,输出2。对应于(ii)和(a)。b、输入-10,输出0和错误提示。对应于(i)和(b)。2023/2/4103边界值分析—边界检验(3/6)4)通常情况下,软件测试所包含的边界检验有几种类型:数字、字符、位置、重量、大小、速度、方位、尺寸、空间等。

5)相应地,以上类型的边界值应该在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、

最短/最长、空/满等情况下。

2023/2/4104

项边界值测试用例的设计思路字符起始-1个字符/结束+1个字符假设一个文本输入区域允许输入1个到255个字符,输入1个和255个字符作为有效等价类;输入0个和256个字符作为无效等价类,这几个数值都属于边界条件值。数值最小值-1/最大值+1假设某软件的数据输入域要求输入5位的数据值,可以使用10000作为最小值、99999作为最大值;然后使用刚好小于5位和大于5位的数值来作为边界条件。空间小于空余空间一点/大于满空间一点例如在用U盘存储数据时,使用比剩余磁盘空间大一点(几KB)的文件作为边界条件。

边界值分析—

利用边界值作为测试数据(4/6)2023/2/4105边界值分析—内部边界值分析(5/6)

在多数情况下,边界值条件是基于应用程序的功能设计而需要考虑的因素,可以从软件的规格说明或常识中得到,也是最终用户可以很容易发现问题的。然而,在测试用例设计过程中,某些边界值条件是不需要呈现给用户的,或者说用户是很难注意到的,但同时确实属于检验范畴内的边界条件,称为内部边界值条件或子边界值条件。

内部边界值条件主要有下面几种:

a)数值的边界值检验:计算机是基于二进制进行工作的,因此,软件的任何数值运算都有一定的范围限制。b)字符的边界值检验:在计算机软件中,字符也是很重要的表示元素,其中ASCII和Unicode是常见的编码方式。2023/2/4106项范围或值位(bit)0或1字节(byte)0~255字(word)0~65535(单字)或0~4294967295(双字)千(K)1024兆(M)1048576吉(G)1073741824字符ASCII码值字符ASCII码值空(null)0A65空格(space)32a97斜杠(/)47Z90048z122冒号(:)58单引号(‘)96@64

a)数值的边界值检验:b)字符的边界值检验:2023/2/4107

1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。

例如,如果程序的规格说明中规定:“重量在10公斤至50公斤范围内的邮件,其邮费计算公式为……”。作为测试用例,我们应取10及50,还应取10.01,49.99,9.99及50.01等。

2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。

比如,一个输入文件应包括1~255个记录,则测试用例可取1和255,还应取0及256等。

3)将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。

例如,某程序的规格说明要求计算出“每月保险金扣除额为0至1165.25元”,其测试用例可取0.00及1165.24、还可取一0.01及1165.26等。

再如一程序属于情报检索系统,要求每次“最少显示1条、最多显示4条情报摘要”,这时我们应考虑的测试用例包括1和4,还应包括0和5等。

4)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。

5)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。

6)分析规格说明,找出其它可能的边界条件。

边界值分析—

基于边界值分析方法选择测试用例的原则

(6/6)2023/2/4108实战演习1.现有一个学生标准化考试批阅试卷,产生成绩报告的程序。其规格说明如下:程序的输入文件由一些有80个字符的记录组成,如右图所示,所有记录分为3组:说明2023/2/4109①标题:这一组只有一个记录,其内容为输出成绩报告的名字。

②试卷各题标准答案记录:每个记录均在第80个字符处标以数字“2”。该组的第一个记录的第1至第3个字符为题目编号(取值为1一999)。第10至第59个字符给出第1至第50题的答案(每个合法字符表示一个答案)。该组的第2,第3……个记录相应为第51至第100,第101至第150,…题的答案。③每个学生的答卷描述:该组中每个记录的第80个字符均为数字“3”。每个学生的答卷在若干个记录中给出。如甲的首记录第1至第9字符给出学生姓名及学号,第10至第59字符列出的是甲所做的第1至第50题的答案。若试题数超过50,则第2,第3……纪录分别给出他的第51至第100,第101至第150……题的解答。然后是学生乙的答卷记录。④学生人数不超过200,试题数不超过999。

⑤程序的输出有4个报告:a)按学号排列的成绩单,列出每个学生的成绩、名次。

b)按学生成绩排序的成绩单。c)平均分数及标准偏差的报告。d)试题分析报告。按试题号排序,列出各题学生答对的百分比。

2023/2/4110解答:分别考虑输入条件和输出条件,以及边界条件。给出下表所示的输入条件及相应的测试用例。2023/2/4111

输出条件及相应的测试用例表。

⑤程序的输出有4个报告:a)按学号排列的成绩单,列出每个学生的成绩、名次。

b)按学生成绩排序的成绩单。c)平均分数及标准偏差的报告。d)试题分析报告。按试题号排序,列出各题学生答对的百分比。2023/2/4112测试用例abc预期输出Test1Test2Test3Test4Test560606050506060605050126099100等腰三角形等腰三角形等边三角形等腰三角形非三角形Test6Test7Test8Test960605050129910060605050等腰三角形等腰三角形等腰三角形非三角形Test10Test11Test12Test1312991006060505060605050等腰三角形等腰三角形等腰三角形非三角形

练习:三角形问题的边界值分析测试用例。在三角形问题描述中,除了要求边长是整数外,没有给出其它的限制条件。在此,我们将三角形每边边长的取范围值设值为[1,100]。2023/2/4113

练习:NextDate函数的边界值分析测试用例在NextDate函数中,隐含规定了变量mouth和变量day的取值范围为1≤mouth≤12和1≤day≤31,并设定变量year的取值范围为1912≤year≤2050。测试用例mouthdayyear预期输出Test1Test2Test3Test4Test5Test6Test766666661515151515151519111912191319752049205020511911.6.161912.6.161913.6.161975.6.162049.6.162050.6.162051.6.16Test8Test9Test10Test11Test12Test13666666012303132200120012001200120012001day超出[1…31]2001.6.22001.6.32001.7.1输入日期超界day超出[1…31]Test14Test15Test16Test17Test18Test19012111213151515151515200120012001200120012001Mouth超出[1…12]2001.1.162001.2.162001.11.162001.12.16Mouth超出[1…12]2023/2/4114一、分析输入的情形。二、分析输出情形。R>1000<R<=100R<=0P>100R<=P<=100P<RN50=1N50=04>N10>=1N10=0N5=1N5=04>N1>=1N1=0找零钱最佳组合:假设商店货品价格(R)皆不大於100元(且为整数),若顾客付款在100元内(P),求找给顾客之最少货币个(张)数?(货币面值50元(N50),10元(N10),5元(N5),1元(N1)四种)2023/2/4115三、分析规格中每一决策点之情形,以RR1,RR2,RR3表示计算要找50,10,5元货币数时之剩余金额。R>100R<=0P>100P<RRR1>=50RR2>=10RR3>=5四、由上述之输入/输出条件组合出可能的情形。R>100R<=00<R<=100,P>1000<R<=100,P<R0<R<=100,R<=P<=100,RR=500<R<=100,R<=P<=100,RR=490<R<=100,R<=P<=100,RR=100<R<=100,R<=P<=100,RR=90<R<=100,R<=P<=100,RR=50<R<=100,R<=P<=100,RR=40<R<=100,R<=P<=100,RR=10<R<=100,R<=P<=100,RR=0五、为满足以上之各种情形,测试资料设计如下:1.货品价格=1012.货品价格=03.货品价格=-14.货品价格=100,付款金额=1015.货品价格=100,付款金额=996.货品价格=50,付款金额=1007.货品价格=51,付款金额=1008.货品价格=90,付款金额=1009.货品价格=91,付款金额=10010.货品价格=95,付款金额=10011.货品价格=96,付款金额=10012.货品价格=99,付款金额=10013.货品价格=100,付款金额=1002023/2/4116保险金程序案例变量最小值略大于最小值正常值略小于最大值最大值年龄16175499100点数01611122023/2/4117黑盒测试方法边界值分析等价类规范导出错误猜测基于故障的测试因果图法2023/2/4118等价类1.定义

是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。X1的输入域是[a,d],区间[a,b),[b,c),[c,d]X2的输入域是[e,g],区间[e,f),(f,g]abcdfgeX2X12023/2/4119等价类测试原理通过每个等价类中的一个元素标识测试用例降低测试用例之间的冗余例如:三角型测试{5,5,5}与{10,10,10}是一个等价类2023/2/4120弱一般等价类单缺陷假设abcdfgeX1X22023/2/4122强一般等价类多缺陷假设abcdfgeX1X22023/2/4123弱健壮等价类单缺陷假设无效输入abcdfgeX1X22023/2/4124强健壮等价类多缺陷假设无效输入abcdfgeX1X22023/2/4125保险金程序-需求保险金=基本保险费率×年龄系数-安全驾驶折扣年龄范围年龄系数门限点数安全驾驶折扣〔16,25)2.8150〔25,35)1.8350〔35,45)1.05100〔45,60)0.87150〔60,100)1.552002023/2/4126等价类年龄A1=〔16,25)A2=〔25,35)A3=〔35,45)A4=〔45,60)A5=〔60,100)点数P1={0,1}P2={2,3}P3={4,5}P4={6,7}P5={8,9,10,11,12}2023/2/4127弱等价类测试2023/2/4128强等价类测试2023/2/41292.划分等价类:

等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试,因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得较好的测试结果。等价类划分可有两种不同的情况:有效等价类和无效等价类。

1)有效等价类

是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。

2)无效等价类

与有效等价类的定义恰巧相反。无效等价类指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。

设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。

2023/2/41303.划分等价类的标准:1)完备测试、避免冗余;

2)划分等价类重要的是:集合的划分,划分为互不相交的一组子集,而子集的并是整个集合;

3)并是整个集合:完备性;

4)子集互不相交:保证一种形式的无冗余性;

5)同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到"相同的执行路径"。2023/2/41314.划分等价类的方法2)在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类;

3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。

4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。

例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。

5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);

6)在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。

1)在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。如:输入值是学生成绩,范围是0~100;

2023/2/41325.设计测试用例

在确立了等价类后,可建立等价类表,列出所有划分出的等价类输入条件:有效等价类、无效等价类,然后从划分出的等价类中按以下三个原则设计测试用例:

1)为每一个等价类规定一个唯一的编号;

2)设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;

3)设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。

2023/2/4133实战演习1.某程序规定:“输入三个整数a、b、c分别作为三边的边长构成三角形。通过程序判定所构成的三角形的类型,当此三角形为一般三角形、等腰三角形及等边三角形时,分别作计算…

”。用等价类划分方法为该程序进行测试用例设计。(三角形问题的复杂之处在于输入与输出之间的关系比较复杂。)

分析题目中给出和隐含的对输入条件的要求:

(1)整数

(2)三个数

(3)非零数

(4)正数

(5)两边之和大于第三边

(6)等腰

(7)等边

如果a、b、c满足条件(1)~(4),则输出下列四种情况之一:

1)如果不满足条件(5),则程序输出为"非三角形"。

2)如果三条边相等即满足条件(7),则程序输出为"等边三角形"。

3)如果只有两条边相等、即满足条件(6),则程序输出为"等腰三角形"。

4)如果三条边都不相等,则程序输出为"一般三角形"。

列出等价类表并编号

2023/2/4134覆盖有效等价类的测试用例3

45(1)-(7)445

(1)-(7)(8)455

(1)-(7)(9)545

(1)--(7)(10)444

(1)--(7)(11)abc覆盖等价类号码2023/2/4135覆盖无效等价类的测试用例:2023/2/4136

练习:2.设有一个档案管理系统,要求用户输入以年月表示的日期。假设日期限定在1990年1月~2049年12月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月。现用等价类划分法设计测试用例,来测试程序的"日期检查功能"。2023/2/41371)划分等价类并编号,下表等价类划分的结果输入等价类有效等价类无效等价类日期的类型及长度①6位数字字符②有非数字字符③少于6位数字字符④多于6位数字字符年份范围⑤在1990~2049之间⑥小于1990⑦大于2049月份范围⑧在01~12之间⑨等于00⑩大于122023/2/41382)设计测试用例,以便覆盖所有的有效等价类在表中列出了3个有效等价类,编号分别为①、⑤、⑧,设计的测试用例如下:

测试数据

期望结果

覆盖的有效等价类

200211

输入有效

①、⑤、⑧

3)为每一个无效等价类设计一个测试用例,设计结果如下:

测试数据

期望结果

覆盖的无效等价类

95June

无效输入

20036

无效输入

2001006

无效输入

198912

无效输入

200401

无效输入

200100

无效输入

200113

无效输入

2023/2/41393.NextDate函数包含三个变量:month、day和year,函数的输出为输入日期后一天的日期。例如,输入为2006年3月7日,则函数的输出为2006年3月8日。要求输入变量month、day和year均为整数值,并且满足下列条件:

①1≤month≤12

②1≤day≤31

③1920≤year≤2050

1)有效等价类为:

M1={月份:1≤月份≤12}

D1={日期:1≤日期≤31}

Y1={年:1812≤年≤2012}

2)若条件①~③中任何一个条件失效,则NextDate函数都会产生一个输出,指明相应的变量超出取值范围,比如"month的值不在1-12范围当中"。显然还存在着大量的year、month、day的无效组合,NextDate函数将这些组合作统一的输出:"无效输入日期"。其无效等价类为:

M2={月份:月份<1}

M3={月份:月份>12}

D2={日期:日期<1}

D3={日期:日期>31}

Y2={年:年<1812}

Y3={年:年>2012}

弱一般等价类测试用例

月份

日期

预期输出

6

15

1912

1912年6月16日

强一般等价类测试用例同弱一般等价类测试用例

注:弱--有单缺陷假设;健壮--考虑了无效值

2023/2/4140

(一)弱健壮等价类测试

用例ID

月份

日期

预期输出

WR1

6

15

1912

1912年6月16日

WR2

-1

15

1912

月份不在1~12中

WR3

13

15

1912

月份不在1~12中

WR4

6

-1

1912

日期不在1~31中

WR5

6

32

1912

日期不在1~31中

WR6

6

15

1811

年份不在1812~2012中

WR7

6

15

2013

年份不在1812~2012中

(二)强健壮等价类测试

用例ID

月份

日期

预期输出

SR1

-1

15

1912

月份不在1~12中

SR2

6

-1

1912

日期不在1~31中

SR3

6

15

1811

年份不在1812~2012中

SR4

-1

-1

1912

两个无效一个有效

SR5

6

-1

1811

两个无效一个有效

SR6

-1

15

1811

两个无效一个有效

SR7

-1

-1

1811

三个无效

2023/2/4141黑盒测试方法边界值分析等价类规范导出错误猜测基于故障的测试因果图法2023/2/4142规范导出根据相关规范描述来设计测试用例,每个测试用例被用来测试一个或多个规范陈述句。基本上是根据陈述规范所用语句的顺序来相应地为被测断垣设计测试用例。这个方法在用例和规范陈述之间做到了很好的对应。加强了规范的可读性和可维护性。是一种正向的测试技术,需要逆向的测试技术对测试用例进行补充。例如:规范输入一个大于等于0的实数,返回正的平方根输入一个小于0的实数,显示错误信息“平方根非法-输入值小于0”Print_Line库函数可以用来输出错误信息2023/2/4143规范导出测试用例Testcase1:输入4,输出2Testcase2:输入-1,输出“平方根非法-输入值小于0”2023

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论