程序员面试宝典3

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

臭名昭著的软件错误1、迪斯尼狮子王游戏(1994年)—未能对平台进行广泛的测试2、奔腾浮点除法缺陷(1994年)—(4195835/3145727)*3145727-41958353、火星极地登录者号探测器(1999年)—数据位被意外置位,机械震动会触发着陆点触点开关4、爱国者导弹(1991年)—海湾战争中失利,系统时钟累计错误,14小时后,跟踪系统不再准确5、千年虫问题(1974年)6、JPEG图片病毒7、1992年6月26日,凤凰城机场停飞一天,原因:当天气温122℉,仪器设定最高温度120℉【例】三角形的边长(整数)三角形性质异常情况a+b≤ca≤0a∈Na是字符型排列次序相关abc正常情况合理的不等边三角形合理的等边三角形合理的等腰三角形排列次序相关a=3,b=4,c=5a=3,b=3,c=4a=3,b=3,c=3测试目标其它SE阶段——“建设性”测试:找错过程——“破坏性”?改错提高软件质量——“建设性”G.Myers为了发现程序中的错误而执行程序的过程证明程序正确,没有错误?证明程序错误,暴露错误?穷尽测试(completetest)包含所有可能情况的测试a,b,c:integer计算机字长16位→可能取值有216可能的排列组合216×216×216≈3×101111ms/次3×101111万年!=仍然不是穷尽测试!不能严格证明程序正确性!无效输入的情况没有测试,更容易发生错误测试方法(I)测试技术1、白盒测试(WhiteBoxTesting)2、黑盒测试(BlackBoxTesting)结构测试功能测试ModulestubdriverinterfacelocaldatastructuresboundaryconditionsindependentpathserrorhandlingpathstestcasesRESULTSmain(){input(test_case);result=Module(test_case);output(result);}result_typeModule(test_case){……;value=stubmodule(data);……;}value_typestubmodule(data){output(data);value=fake_value();returnvalue;}测试用例设计三角形NextDate白盒测试法关注软件内部逻辑结构(controlstructure)测试每条逻辑通路,检查断点(breakpoint)状态测试方案对程序逻辑的覆盖程度决定测试的完全性程度Usethestructureoftheprogramtotest.——Structuraltesting白盒测试可能的执行通路=51+52+……+520loop=20X123453170年!365×24小时/年1毫秒/条1014条=1014条365×24小时/年穷尽测试(completetest)一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。逻辑覆盖(Logicalcoverage)白盒法测试方案的设计穷尽测试不可能选少量“最有效”的testcases,做到尽可能完备的测试Error!选择足够多的测试数据,使程序中每个可执行的语句至少执行一次。a(1)语句覆盖(Statementcoverage)例:PROCEDURESAMPAL(A,B:REAL;VARX:REAL);BEGINIF(A1)AND(B=0)THENX:=X/AIF(A=2)OR(X1)THENX:=X+1END;入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFSabcdE入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFSabcdETestcase1:A=2,B=0,X=3覆盖路径SabcdEA1ANDB=0TA=2ORX1T语句覆盖语句覆盖入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFSabcdE问题:只测试了判定表达式=T,为F时如有错误无法发现!只关心判定表达式的值,不关心判定表达式中每个条件的取不同值的情况。Testcase1:A=2,B=0,X=3很弱的逻辑覆盖若A1ANDB=0错写成A1ORB=0,无法测试出!同样,若A=2ORX1错写成A=2ORX1,无法测试出!选择足够多的测试数据,使每个判定的每个分支至少执行一次。(分支覆盖)入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFSabcdE两种方案:1.SabcdE+SacE(TT)(FF)2.SabcE+SacdE(TF)(FT)(2)判定覆盖(Branchcoverage)入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFSabcdETestcases3:①A=4,B=0,X=4(SabcE)②A=2,B=1,X=3(SacdE)问题:任一方案都只检查了全部路径的一半(2/4)无法判断内部条件的错误(如X1错写为X1)方案2.SabcE+SacdE(TF)(FT)比语句覆盖强判定覆盖入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFSabcdEA1TA≤1FB=0TB≠0FA=2TA≠2FX1TX≤1F测试用例必须覆盖这8种可能的结果!选择足够多的测试数据,使每个判定表达式中的每个条件都取到各种可能的结果。(3)条件覆盖(Conditioncoverage)入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFSabcdETestcases4:①A=2,B=0,X=4[SabcdE](满足A1,B=0;A=2,X1)TTTT②A=1,B=1,X=1[SacE](满足A1,B0;A2,X1)FFFF条件覆盖判定覆盖条件覆盖入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFSabcdETestcases5:①A=2,B=0,X=1[SabcdE](满足A1,B=0;A=2,X1)TTTF②A=1,B=1,X=2[SacdE](满足A1,B0;A2,X1)FFFT表达式(A=2ORX1)始终为T,没有覆盖分支cE,不是判定覆盖!条件覆盖不一定包含判定覆盖,判定覆盖也不一定包含条件覆盖!条件覆盖选择足够多的测试数据,使判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。(4)判定-条件覆盖入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFSabcdETestcases6:①A=2,B=0,X=4[SabcdE](满足A1,B=0;A=2,X1)TTTT②A=1,B=1,X=1[SacE](满足A1,B0;A2,X1)FFFFTestcases4问题:没能覆盖判定表达式中各条件取值的所有可能组合!若A1ANDB=0错写成A1ORB=0,无法测试出!同样,若A=2ORX1错写成A=2ANDX1,无法测试出!不一定能发现判定表达式中的逻辑错误!判定-条件覆盖选择足够多的测试数据,使每个判定表达式中条件的各种可能组合都至少出现一次。满足条件组合覆盖一定能满足判定覆盖、条件覆盖和判定—条件覆盖。(5)条件组合覆盖全部可能的条件组合为:①A1,B=0TT②A1,B0TF③A1,B=0FT④A1,B0FF⑤A=2,X1TT⑥A=2,X1TF⑦A2,X1FT⑧A2,X1FFTestcases7:①A=2,B=0,X=4(TT)SabcdE②A=2.B=1,X=1(FT)SacdE③A=1,B=0,X=2(FT)SacdE④A=1,B=1,X=1(FF)SacE问题:不能保证覆盖程序中的每一条路径!没有测试到路径SabcE(表达式TF,条件①和⑧的组合)的情形入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFSabcdE最强的逻辑覆盖条件组合覆盖5.条件组合覆盖4.判定-条件覆盖3.条件覆盖2.判定覆盖1.语句覆盖测试充分性测试代价逻辑覆盖的关系控制结构测试(I)1.基本路径测试步骤如下:第一步,根据过程设计结果画出相应的流图第二步,计算流图的环形复杂度。第三步,确定线性独立路径的基本集合。第四步,设计可强制执行基本集合中每条路径的测试用例。图7.6求平均值过程的流图图7.6求平均值过程的流图环形复杂度=6路径1:1-2-10-11-13路径2:1-2-10-12-13路径3:1-2-3-10-11-13路径4:1-2-3-4-5-8-9-2-……路径5:1-2-3-4-5-6-8-9-2-……路径6:1-2-3-4-5-6-7-8-9-2-……12345678910111213当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构。对于嵌套型分支结构,若有n个判定语句,需要n+1个测试用例;对于连锁型分支结构,若有n个判定语句,需要有2n个测试用例,覆盖它的2n条路径。条件测试路径选择循环分为4种不同类型:简单循环、连锁循环、嵌套循环和非结构循环。(1)简单循环①零次循环:从循环入口到出口②一次循环:检查循环初始值③二次循环:检查多次循环④m次循环:检查在多次循环⑤最大次数循环、比最大次数多一次、少一次的循环。循环测试路径选择例:求最小值k=i;for(j=i+1;j=n;j++)if(A[j]A[k])k=j;k=i;j=i+1;j=n?A[j]A[k]?k=jj++fdcabe循环inA[i]A[i+1]A[i+2]k路径01211iac1212iabefc21i+1abdfc13123iabefefc231i+2abefdfc321i+2abdfdfc312i+1abdfefcd改改kk的的值值,,ee不不改改kk的的值值测试用例选择①对最内层循环做简单循环的全部测试。所有其它层的循环变量置为最小值;②逐步外推,对其外面一层循环进行测试。测试时保持所有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变量取“典型”值。③反复进行,直到所有各层循环测试完毕。④对全部各层循环同时取最小循环次数,或者同时取最大循环次数(2)嵌套循环(3)连锁循环如果各个循环互相独立,则可以用与简单循环相同的方法进行测试。但如果几个循环不是互相独立的,则需要使用测试嵌套循环的办法来处理。(4)非结构循环这一类循环应该使用结构化程序设计方法重新设计测试用例。黑盒测试技术黑盒测试着重测试软件功能。它很可能发现白盒测试不易发现的其他类型的错误。黑盒测试力图发现下述类型的错误:①功能不正确或遗漏了功能;②界面错误;③数据结构错误或外部数据库访问错误;④性能错误;⑤初始化和终止错误。黑盒测试技术1、等价划分2、边界值分析1等价划分(I)等价划分是一种黑盒测试技术,这种技术把程序的输入域划分成若干个数据类,据此导出测试用例。等价类测试的关键就是选择确定类的等价关系。(1)等价划分思想:将程序的所有输入数据划分为不同的区域,同一区域中各个输入数据对于揭露程序中的错误是等价的,称为等价类。然后从每一个等价类中选取少数有代表性的数据做为测试用例。等价类有效等价类无效等价类输出等价类优点:可以滤掉同类数据,提高测试效率划分:试探性、经验划分等价类的启发式规则值的范围x∈[a,b]xa,xb值的个数x=axa,xa值约束x∈A={a1,a2,…,an}x∈A值的规则{x|P(x)}{x|┐P(x)}等价类的细化x∈ZZ+,0,Z-表格空表、一行、多行建立等价类表输入条件有效等价类无效等价类.........设计步骤划分等价类,建立等价类表设计测试用例设计一新测试方案,尽可能多覆盖尚未被覆盖的有效等价类,重复,直至全部覆盖——减少testcases设计一新测试方案,覆盖且仅覆盖

1 / 58
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功