Ch5单元测试课件_第1页
Ch5单元测试课件_第2页
Ch5单元测试课件_第3页
Ch5单元测试课件_第4页
Ch5单元测试课件_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

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

文档简介

软件测试方法和技术

-Ch.5单元测试主讲教师:郭晓燕第四章回顾软件质量标准软件测试规范

CMM思想和结构体系建立软件测试管理和评判体系第五章单元测试5.1什么是单元测试5.2单元测试的目标和任务5.3静态测试技术的运用5.4动态测试技术的运用5.5调试与评估5.6单元测试的过程与文档管理5.7单元测试的常用工具简介5.1什么是单元测试测试的4个阶段:单元测试

集成测试

系统测试

验收测试按阶段进行测试是一种基本的测试策略单元测试的定义定义:单元测试是对软件基本组成单元进行的测试。时机:一般在代码完成后由开发人员完成,QA人员辅助.对象:软件设计的最小单位——模块(组件、单元)

为何要进行单元测试?尽早发现错误错误发现越早,成本越低.开发人员过于自信,后期复杂度高,发现解决BUG困难.检查代码是否符合设计和规范

12小时6小时3小时单元测试集成测试系统测试5.2单元测试的目标和任务目标:

单元模块被正确编码信息能否正确地流入和流出单元;在单元工作过程中,其内部数据能否保持其完整性,包括内部数据的形式、内容及相互关系不发生错误,也包括全局变量在单元中的处理和影响。在为限制数据加工而设置的边界处,能否正确工作。单元的运行能否做到满足特定的逻辑覆盖。单元中发生了错误,其中的出错处理措施是否有效。任务1:模块接口测试检查模块接口是否正确,checklist:输入的实际参数与形式参数是否一致。个数、属性、量纲调用其他模块的实际参数与被调模块的形参是否一致。个数、属性、量纲全程变量的定义在各模块是否一致。外部输入、输出文件、缓冲区、错误处理其它任务2:模块局部数据结构测试检查局部数据结构完整性Checklist:不适合或不相容的类型说明。变量无初值。变量初始化或默认值有错。不正确的变量名或从来未被使用过。出现上溢或下溢和地址异常。其它任务3:模块边界条件测试检查临界数据处理的正确性Checklist:普通合法数据的处理。普通非法数据的处理。边界值内合法边界数据的处理。边界值外非法边界数据的处理。其它任务4:模块独立执行通路测试检查每一条独立执行路径的测试。保证每条语句被至少执行一次。Checklist:算符优先级。混合类型运算。精度不够。表达式符号。循环条件,死循环。其它任务5:模块的各条错误处理通路测试预见、预设的各种出错处理是否正确有效。Checklist:输出的出错信息难以理解。记录的错误与实际不相符。程序定义的出错处理前系统已介入。异常处理不当。未提供足够的定位出错的信息。其它5.3静态测试技术的运用定义:在不执行软件的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程。有时也称为结构分析。作用:尽早发现软件缺陷,以找出动态黑盒白盒测试难以揭示或发现的软件缺陷为接受该软件测试的黑盒测试员进行测试设计测试案例提供思路,他们不必了解代码细节,但是根据审查备注,可以确定有问题或者容易存在软件缺陷的特性范围问题:认为会减慢软件开发过程。编码的标准和规范标准:建立起来,经过修补和必须遵守的规则。规范:建议最佳做法,推荐更好方法。坚持编程标准和规范的原因可靠性:事实证明按照按规范编写的代码更可靠,软件缺陷将更少;可读性/维护性:符合标准和规范的代码易于阅读,理解和维护;移植性:如果代码符合设备标准,迁移到另一个平台就会容易,甚至没有任何障碍。正式审查三部曲走查(WalkThrough)审查(Inspection)评审(Review)走查(WalkThrough)定义:编写代码的程序员向5人小组或其它类似的程序员或测试员做正式表述。注意:审查人员应该在审查之前接到软件拷贝,在走查前通读设计和编码,以便检查并编写备注和问题,在审查过程中提问。表述者现场采用讲解或模拟运行的方法解释代码如何工作。检查要点在于代码编写是否符合规范和标准,是否存在逻辑错误;限时,避免跑题。发现问题适当记录,避免现场修改。审查(Inspection)定义:是最正式的审查类型,具有高度组织化,采用讲解、提问方式进行,一般有正式的计划、流程和结果。主要方法采用缺陷检查表。注意:以会议形式,制定会议目标、流程和规则,结束后要编写报告。发现问题适当记录,避免现场修改。发现重大缺陷,改正后会议需要重开。按缺陷检查表逐项检查。检查要点是缺陷检查表,所以该表要根据项目不同不断积累完善。走查与审查的比较走查审查准备通读设计和编码应准备好需求描述文档、程序设计文档、程序的源代码清单、代码编码标准和代码缺陷检查表形式非正式会议正式会议参加人员开发人员为主项目组成员包括测试人员主要技术方法无缺陷检查表注意事项限时、不要现场修改代码限时、不要现场修改代码生成文档会议记录静态分析错误报告目标代码标准规范,无逻辑错误代码标准规范,无逻辑错误评审(Review)定义:通常在审查会后进行,审查小组根据记录和报告进行评估。注意:充分审查了所规定的代码,并且全部编码准则被遵守。审查中发现的错误已全部修改。5.4动态测试技术的运用动态测试需要真正将程序运行起来,需要设计系列的测试用例保证测试的完整性和有效性。白盒测试黑盒(灰盒)测试白盒测试方法定义:(结构化测试)利用查看代码功能(做什么)和实现方式(怎么做)得到的信息来确定哪些要测试,哪些不要测试,如何开展测试。白盒测试针对的是程序内部逻辑和数据流程的测试动态白盒测试不仅是查看代码,还包括直接测试和控制软件。白盒测试方法主要有逻辑驱动法和基本路径法。语句覆盖。判定覆盖。条件覆盖。判定/条件覆盖。条件组合覆盖。路径覆盖。循环覆盖。详细内容第14章软件测试用例的设计白盒测试用例设计方法白盒测试用例的设计方法逻辑覆盖:以程序的内部逻辑结构为基础,分为语句覆盖、判定覆盖、判定-条件覆盖、条件组合覆盖等基本路径测试:在程序控制流程的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。白盒测试用例注意事项由于测试路径可能非常多,由于时间和资源问题,选出足够多的路径测试由于深入到程序编码,通常开发人员协助测试人员书写白盒测试用例动态白盒测试与调试测试和调试是不同的。白盒测试的目标是寻找软件缺陷;调试的目的是修复软件缺陷。它们在隔离软件缺陷的位置和原因上确实存在交叉现象。测试员应该把问题缩减为能够演示软件缺陷的最简化测试案例。在白盒测试中,甚至要包含那些值得怀疑的代码行信息。进行调试的程序员从这里继续,判断到底是什么导致的软件缺陷,并设法修复。分清软件测试员和程序员的工作。程序员编写代码,修复软件缺陷;测试员寻找软件缺陷,可能还要编写一些代码来驱动测试,要进行这样的底层测试,就要使用与程序员相同的工具。具体操作方法不同

覆盖标准:使得程序中每个语句至少都能被执行一次。满足语句覆盖的情况是:执行路径:ace选择用例:[(2,0,4),(2,0,3)]用例格式,由输入数据和预期的输出结果两部分组成:[输入(A,B,X),输出(A,B,X)]1.语句覆盖a

A>1ANDB=0X:=X/A

A=2ORX>1X:=X+1bcdeYNYNX:=X/AX:=X+1程序中除判定外,还有两条语句。if((A>1)AND(B=0))X=X/A;if(A=2)OR(X>1)X:=X+1;选择用例:[(2,0,4),(4,0,3)]

如果写成:if((A>1)OR

(B=0))X=X/A;if(A=2)OR(X>1)X:=X+1;错误,但测试结果相同覆盖标准使得程序中每个判定至少为TRUE或FALSE各一次。覆盖情况:共有两个判定,应执行路径:ace∧

abd

或:acd∧abe选择用例,⑴

⑵两组用例中任选择其一⑴[(2,0,4),(2,0,3)]ace[(1,1,1),(1,1,1)]abd⑵[(2,1,1),(2,1,2)]abe[(3,0,3),(3,1,1)]acd

A>1ANDB=0X:=X/A

A=2ORX>1X:=X+1abcdeYNYN2.判定覆盖注:符号∧表示“AND”运算,符号∨表示“OR”运算。覆盖标准:使得判定中的每个条件获得各种可能的结果。应满足以下覆盖情况:判定一:A>1,A≤1,B=0,B≠0判定二:A=2,A≠2,X>1,X≤1选择用例:

[(2,0,4),(2,0,3)][(1,1,1),(1,1,1)]注意:[(1,0,3),(1,0,4)]

[(2,1,1),(2,1,2)]满足条件覆盖,但不满足判定覆盖。3.条件覆盖

A>1ANDB=0X:=X/A

A=2ORX>1X:=X+1abcdeYNYN判定一判定二应满足以下覆盖情况:条件:A>1,A≤1,B=0,B≠0 A=2,A≠2,X>1,X≤1应执行路径ace∧abd 或acd∧abe选择用例:[(2,0,4),(2,0,3)](ace)[(1,1,1),(1,1,1)](abd)

A>1ANDB=0X:=X/A

A=2ORX>1X:=X+1abcdeYNYN4.判定/条件覆盖覆盖标准: 同时满足判定覆盖和条件覆盖。即使得程序中每个判定至少为TRUE或FALSE各一次,同时使得判定中的每个条件获得各种可能的结果。5.条件组合覆盖A>1X:=X/A

A=2X:=X+1abcdeB=0

X>1YNYNYNYN例如,红线所标注的路径未被执行。编译系统下的执行情况考虑到程序在编译状态下的执行情况,可采用最深的一种覆盖标准—条件组合覆盖。ANDORc虽然采用判定/条件覆盖一般比前面几种覆盖标准要好,但若考虑在编译系统下执行时,对条件“AND”和“OR”的处理情况,部分路径未被执行。满足以下覆盖情况:①A>1,B=0②A≤1,

B≠0③A>1,B≠0

④A≤1,B=0⑤A=2,X>1

⑥A=2,X≤1

⑦A≠2,X>1

⑧A≠2,X≤1选择用例:[(2,0,4),(2,0,3)]覆盖情况

⑤[(2,1,1),(2,1,2)]

覆盖情况

⑥[(1,0,3),(1,0,4)]

覆盖情况

⑦[(1,1,1),(1,1,1)]

覆盖情况

⑧5.条件组合覆盖}判定一}判定二显然,条件组合覆盖所测试的情况最多,但是选择用例较多,相对难度也大些。部分路径未被执行

编译系统下的执行情况A>1X:=X/A

A=2X:=X+1abcdeB=0

X>1YNYNYNYN覆盖标准:使得每个判定中条件的各种可能组合都至少出现一次。语句段:

if(A&&(B||C))x=l;

elsex=O;

用例表:见右图A.①TRUE②FALSE③TRUEB.①TRUE②FALSE③FALSEC.①FALSE②FALSE③TRUED.①TRUE②TRUE③FALSE用例1用例2ATRUEFALSEB①FALSECTRUE②A&&(B||C)③FALSE逻辑路径覆盖法是白盒测试用例的重要设计方法,其中语句覆盖法是较为常用的方法,针对下面的语句段,采用语句覆盖法完成测试用例设计,测试用例见下表,对表中的空缺项(True或者False),正确的选择是______。基本路径测试Goal:exercise

eachindependentpath

atleastonce.使用代码,画出程序流程图;

(Firstdrawingtheactivitydiagramforthecodemayhelp,butisnotrequired)计算程序流程图的环路复杂性V(G)

;导出线性无关的基本程序路径集合;为基本路径集合设置测试用例.ExampleProcedure:processrecords1. DoWhilerecordsremain2.

Read

record;3.

If

recordfield1=0Then4. storeinbuffer;5. incrementcounter;6.

ElseIf

recordfield2=0Then7. resetcounter;8.

Elsestoreinfile;9.

EndIf10.

EndIf11.

EndDoEndExample(continued)1910112457836V(G)=4基本路径测试:流程图12,387694,51011流程图复杂度确定V(G)=numberofregions(areasboundedbynodesand edges—areaoutsidethegraphisalsoaregion)V(G)=numberofedges-thenumberofnodes+2V(G)=numberof(simple)predicatenodes+1

Cyclomaticcomplexity:aquantitativemeasureofthelogicalcomplexityofcode,providesanupperboundonthenumberofpathsthatneedtobetestedinthecodeV(G)modulesmodulesinthisrangearemoreerrorproneHigherCycloramicComplexity,morepossibilityinerror流程图复杂度-例子V(G)=412,378694,51011Region1Region2Region3Region4确定线性独立的路径集合

Independentpath

®anypaththatintroducesatleastonenewsetofprocessingstatementsoranewcondition

Basisset

®setofindependentpathsthroughthecode

Testcasesderivedfromabasisset

areguaranteedtoexecuteeverystatementatleastonetimeduringtestingBasissetisnotuniquePath1:1-2-3-6-7-9-10-1-11Basispathtestexample

Path2:1-2-3-6-8-9-10-1-11

Path3:1-2-3-4-5-10-1-11Path4:1-111910112458736测试用例覆盖集合中每条路径Basispathtestingdoesnottestallpossiblecombinationsofallpathsthroughthecode;itjusttestseverypathatleastonce.youdonotneedanactivitydiagram,butthepicturewillhelpwhenyoutracecomponentpathscounteachlogicaltest—compoundtestscountasthenumberofBooleanoperators+1(i.e.,counteachsimplepredicate)basispathtestingshouldbeappliedtoallcomponents,ifpossible,andtocriticalcomponentsalways基本路径法设计出的测试用例能够保证在测试中程序的每一条可执行语句至少执行一次。以下代码由C什语言书写,请按要求回答问题。

voidReadPara(CStringtemp)

{if(temp==">=")

m_oper.SetCurSel(0);

else{

if(temp==">")

m_oper.SetCurSel(1);

else{

if(temp=="==")

m_oper.SetCurSel(2);

else{

if(temp=="<=")

m_oper.SetCurSel(3);

else{

if(temp=="<")

m_oper.SetCurSel(4);

else

m_oper.SetCurSel(5);

}}}}

return;

}[问题1](6分)

请画出以上代码的控制流图。

[问题2](3分)

请计算上述控制流图的环路复杂度V(G)。

[问题3](6分)

请使用基本路径测试法为变量temp设计测试用例,使之满足基本路径覆盖要求。用例编号temp取值1>=2>3==4<=5<6除>=、>、==、<=、<之外的字符组合用例编号temp取值1>=2>3==4<=5<6除>=、>、==、<=、<之外的字符组合用例编号temp取值1>=2>3==4<=5<6除>=、>、==、<=、<之外的字符组合[问题1]

[问题2]

V(G)=6[问题3]

用例编号 temp取值>=>==<=<除>=、>、==、<=、<之外的字符组合黑盒测试方法运行单元程序有时需要基于被测单元的接口,开发相应的驱动模块和桩模块。驱动模块(drive):对底层或子层模块进行测试所编写的调用这些模块的程序。桩模块(stub):对顶层或上层模块进行测试时所编写的替代下层模块的程序。黑盒常用方法等价类划分法边界值分析法三种数据:错误推测法--正常数据因果图法--错误数据功能图法--边缘数据另外还得考虑接口测试、性能测试、内存测试性能分析内存分析5.3等价类划分在分析需求规格说明的基础上划分等价类,列出等价类表。

将程序可能的输入数据分成若干个等价区域,从中选取一个代表性的数据作为测试用例.所谓等价类是就是在该区域内每个输入数据的结果是一样的。allinputsi1i4i2i3等价类划分等价类的分类:有效等价类和无效等价类。有效等价类是有意义的、合理的输入数据,可以检查程序是否实现了规格说明中所规定的功能和性能。无效等价类与有效等价类的意义相反。设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验。经过正反的测试才能确保软件具有更高的可靠性。确定等价类的方法在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。inrangegreaterthanrangelessthanrangevaluegreaterthanvaluelessthanvalue在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类。在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类确定等价类的方法(2)notmemberofsetmemberofsetBooleanNon-Boolean确定等价类的方式(3)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。个人月收入-x

税率

x<=16000%1600<x<21005%500<=x<360010%3600<=x<660015%6600<=x<2160020%21600<=x<4160025%……>10160045%等价类测试用例-Example等价类1:Integer等价类2:Decimalfraction等价类3:Negative等价类4:Invalidinput练习:银行提款机的用户提款界面。用户输入想要取款的数码进行分析,对输入数据的规定:有效数据10~300,并以10为最小单位的数,不可以出现数字以外的任何符号和文字。边界条件程序的很多错误发生在输入或输出范围的边界上,因此针对各种边界情况设置测试用例,可以发现不少程序缺陷;边界值分析是一种补充等价划分的测试用例设计技术。设计方法:确定边界情况(选择等价类边界)选取正好等于、刚刚大于或刚刚小于边界值作为测试数据确定边界值的方法如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。

如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少一、比最大个数多一的数作为测试数据。abab确定边界值的方法(2)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。TestcasesforABS(x):classx<0,arbitraryvalue: x=-10classx>=0,arbitraryvalue x=100classesx<0,x>=0,onboundary: x=0classesx<0,x>=0,belowandabove: x=-1,x=1一些特殊的边界值数值字符位置数量速度地点尺寸First/last,First-1/Last+1Min/Max,Min-1/max+1Star/Finish,Start-1/Finish+1Empty/FullLessthanempty/morethanfullSlowest/FastestLargest/SmallestOver/Under,justOver/JustUnderShortest/Longest……Testcases:Classarbitraryvalue:X1=123123Classboundaryvalue:X2=12345Classboundaryvalue:X3=1234567Classboundaryvalue:X4=1Classboundaryvalue:X5=0Classinvalidvalue:X6=-123123Classinvalidvalue:X7=asdasdOthers?边界测试实例1测试功能:要求用户输入6位正数Classinvalidvalue:X8=000123

X9=asd123X10=Empty边界测试实例2Testcases:Classarbitraryvalue:Randomselectsomeoptions

Classboundaryvalue:Selectalloptions

Classboundaryvalue:Selectnoneoption

Classboundaryvalue:Select1option次边界条件边界问题在软件内部,最终用户看不到不要求测试员成为程序员,但要大体了解软件的工作方式。2次幂ASCII表二进制Term

RangeorValueBitNibbleByteWordKiloMegaGigaTera0or10-15<Halfbyte>0-2550-65535or0-42949672951024104857610737418241099511627776Binary:0and1,byteismadeupof8bits,wordismadeupof4bytes,…ASCIITableCharacterASCIIValueCharacter

ASCIIValueNullSpace/0129;@A0324748495057586465BYZ[‘abyz{66899091969798121122123字符编辑域默认Default空白Empty空值BlankNull零值Zero无NoneBVAExample3Testcases:Classarbitraryvalue:Randomselectsomeoptions

Classboundaryvalue:Selectalloptions

Classboundaryvalue:Selectnoneoption

Classboundaryvalue:Select1option错误推测法测试用例设计基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性地设计测试用例。发现程序经常出现的错误的方法:单元测试中发现的模块错误;产品的以前版本曾经发现的错误;输入数据为0或字符为空;当软件要求输入时(比如在文本框中),不是没有输入正确的信息,而是根本没有输入任何内容,单单按了Enter键;这种情况在产品说明书中常常忽视,程序员也可能经常遗忘,但是在实际使用中却时有发生。程序员总会习惯性的认为用户要么输入信息,不管是看起来合法的或非法的信息,要不就会选择Cancel键放弃输入,测试场景法设计测试用例现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可引入到软件测试中,可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。因果图法测试用例设计多种输入条件的组合,产生多种结果设计测试用例。设计方法:分析软件规格说明文档描述的哪些是原因(输入条件),哪些是结果(输出条件),给每个原因和结果赋予一个标示符。找出原因与结果,原因与原因之间的对应关系,划出因果图在因果图上标上哪些不可能发生的因果关系,表明约束或限制条件根据因果图,创建判定表,将复杂的逻辑关系和多种条件组合很具体明确的表示出来把判定表的每一行作为依据设计测试用例。因果图法-Sample1Validequivalenceclasses:

condition valideq.classes.

abs(N) N0,N

0

maxint kmaxint,

k>maxintTestCases: maxint N result maxint N result 55 10 55 100 0 0

54 10 error 100 -1 1

56 10 55 100 1 1

0 0 0 … … …GiveninputsmaxintandNcomputeresult:

K=0|N|kresult= ifthis<=maxint,errorotherwise

因果图法-Sample2

kmaxint

kmaxintN0N0

kerrorandxorandCauses

kmaxint

1 1 0 0Inputs

kmaxint

0 0 1 1 N0 1 0 1 0 N0 0 1 0 1Effects k 1 1 0 0Outputs error 0 0 1

1因果图法-Sample31100error00

温馨提示

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

评论

0/150

提交评论