《第06章软件工程的测试》由会员分享,可在线阅读,更多相关《第06章软件工程的测试(76页珍藏版)》请在金锄头文库上搜索。
1、软件工程软件工程脸方舆谓暑赁塔翌孟拍肌蔫鱼偶戳蕊钒嘴讥茫惺饵近兄涸庭皂稚巳辣堤肪第06章软件工程的测试第06章软件工程的测试第六章第六章软件项目的测试软件项目的测试软件测试基本概念软件测试基本概念1软件测试计划与测试分析报告软件测试计划与测试分析报告5软件测试的方法软件测试的方法2软件测试的步骤软件测试的步骤3程序调试程序调试4纲卵啊纳淄岂延流渣白戎漳钢鄂删月吼五募乒苯逼韩钳滋函临溯失际奄厢第06章软件工程的测试第06章软件工程的测试6.1 软件测试基本概念软件测试基本概念测试的目的是确保软件的质量,尽量找出软件测试的目的是确保软件的质量,尽量找出软件错误并加以纠正,而不是证明软件没有错。错误
2、并加以纠正,而不是证明软件没有错。v19631963年美国飞往火星的火箭爆炸,原因是年美国飞往火星的火箭爆炸,原因是FORTRANFORTRAN程序:程序:vDO 5 I=1DO 5 I=1,3 3 误写为:误写为:DO 5 I=1. 3 DO 5 I=1. 3 损失损失10001000万美元。万美元。v19671967年苏联年苏联“联盟一号联盟一号”宇宙飞船返回时因忽略一个小数点,在进入宇宙飞船返回时因忽略一个小数点,在进入大气层时打不开降落伞而烧毁。大气层时打不开降落伞而烧毁。浅恰香扣黎啪囊穿住援辩赞丢菜汁朗拿笑淖净侈吾材诞盏嘛塑绅基亦声珊第06章软件工程的测试第06章软件工程的测试6.1
3、 软件测试基本概念软件测试基本概念v一、为什么要进行软件测试一、为什么要进行软件测试软件中存在错误是不可避免的软件中存在错误是不可避免的软件是一种高密集度的智力产品软件是一种高密集度的智力产品客观系统的复杂性客观系统的复杂性人主观认识的局限性人主观认识的局限性信息通信不一致信息通信不一致协调管理不完善协调管理不完善姜席抬乔邵才状情遵溺俗腕帖沃题莎拔军屈留嗓抚歉咬鲸随刘氰诀凌虎所第06章软件工程的测试第06章软件工程的测试6.1 软件测试基本概念软件测试基本概念v二、测试的概念二、测试的概念v1 1、软件测试、软件测试软件测试是对软件计划、软件设计、软件编码进软件测试是对软件计划、软件设计、软件
4、编码进行查错和纠错的活动(包括代码执行活动与人工行查错和纠错的活动(包括代码执行活动与人工活动)。活动)。测试的目的是找出软件设计开发全周期测试的目的是找出软件设计开发全周期中各个阶段的错误,以便分析错误的性质与位置中各个阶段的错误,以便分析错误的性质与位置而加以纠正。而加以纠正。纠正过程可能涉及到改正或者重新纠正过程可能涉及到改正或者重新设计相关的文档活动。找错活动称为设计相关的文档活动。找错活动称为测试测试,纠错,纠错活动称为活动称为调试调试。尊垦亿贰蜜摧苦煌粹篙尊太迂冗培芹焦斥伊锋逾喉销苦甥寿膝诈逗群仔蚂第06章软件工程的测试第06章软件工程的测试6.1 软件测试基本概念软件测试基本概念
5、v2 2、程序测试、程序测试程序测试是早已流行的概念。它是对编码阶段的语法程序测试是早已流行的概念。它是对编码阶段的语法错、语义错、运行错进行查找的编码执行活动。找出错、语义错、运行错进行查找的编码执行活动。找出编码中错误的代码执行活动称程序测试。纠正编码中编码中错误的代码执行活动称程序测试。纠正编码中的错误的执行活动称程序调试。通过查找编码错与纠的错误的执行活动称程序调试。通过查找编码错与纠正编码错来保证算法的正确实现。正编码错来保证算法的正确实现。 v软件测试与调试覆盖软件生存周期的整个阶段,而程序测软件测试与调试覆盖软件生存周期的整个阶段,而程序测试与调试则仅限于编码阶段,软件测试中的单
6、元测试与程试与调试则仅限于编码阶段,软件测试中的单元测试与程序测试十分相似,不同在于,单元测试还要测试模块间的序测试十分相似,不同在于,单元测试还要测试模块间的接口,并要设计与接口相关的模块。接口,并要设计与接口相关的模块。蔽滑琴乳梦谓肾靳根弊褒呀箭呢眺吐固渭使常襟唇卉鹿锗播聂膝漱馅尝敝第06章软件工程的测试第06章软件工程的测试6.1 软件测试基本概念软件测试基本概念v3 3、软件确认与程序确认、软件确认与程序确认v软件确认是广义上的软件测试,它是企图软件确认是广义上的软件测试,它是企图证明程序软件在给定的外部环境中的逻辑正确证明程序软件在给定的外部环境中的逻辑正确性的一系列活动和过程,指需
7、求说明书的确认,性的一系列活动和过程,指需求说明书的确认,程序的确认。程序确认又分成静态确认与动态程序的确认。程序确认又分成静态确认与动态确认。静态确认包括,正确性证明,人工分析,确认。静态确认包括,正确性证明,人工分析,静态分析。动态分析包括动态确认与动态测试。静态分析。动态分析包括动态确认与动态测试。推嘲丹机摇巩右搬墓圣意依输舌峦掷岩契萍歹开沸瘦冬撰稠峻胎沛萌磊闷第06章软件工程的测试第06章软件工程的测试6.1 软件测试基本概念软件测试基本概念v静态分析是不执行程序本身,分析程序正文可能导致错误静态分析是不执行程序本身,分析程序正文可能导致错误的异常情况。可以人工的进行分析,也可以用测试
8、工具静态分析的异常情况。可以人工的进行分析,也可以用测试工具静态分析程序来进行,被测试程序的正文做为输入,经静态分析程序分析程序来进行,被测试程序的正文做为输入,经静态分析程序分析得出分析结果。静态分析包括结构检查,流图分析,符号执行。得出分析结果。静态分析包括结构检查,流图分析,符号执行。v动态分析是执行被测程序,从执行结果分析程序可能出现动态分析是执行被测程序,从执行结果分析程序可能出现的错误。可以人工设计程序测试用例,也可以由测试工具动态分的错误。可以人工设计程序测试用例,也可以由测试工具动态分析程序来做检测与分析。动态测试包括功能测试和结构测试。动析程序来做检测与分析。动态测试包括功能
9、测试和结构测试。动态测试的内容包括:单元测试,也称逻辑测试,模块测试,功能态测试的内容包括:单元测试,也称逻辑测试,模块测试,功能测试。组装测试也称集成测试,综合测试,或结构测试,子系统测试。组装测试也称集成测试,综合测试,或结构测试,子系统测试。系统测试是软硬件或子系统的组装测试。测试。系统测试是软硬件或子系统的组装测试。滨悸知档佃疏穆剩蒲肆井逐幸卷锈藐入妈巾遏最授靳挪蔡音辕磅仗派途浪第06章软件工程的测试第06章软件工程的测试6.1 软件测试基本概念软件测试基本概念v4 4、各种软件错误的出现比例、各种软件错误的出现比例v功能错,占整个软件错误功能错,占整个软件错误2727,是需求分析设计
10、不完整,是需求分析设计不完整而引起的。而引起的。v系统错,占整个软件错误系统错,占整个软件错误1616,是总体设计错误而引起,是总体设计错误而引起v数据错,占整个软件错误数据错,占整个软件错误1010,由编码错误引起的,由编码错误引起的v编码错,占整个软件错误编码错,占整个软件错误4 4,程序员编码错误引起的,程序员编码错误引起的v其它错,占整个软件错误其它错,占整个软件错误1616,文档错和硬件错所引起,文档错和硬件错所引起候朵遇隋眷鞠寐皿庄屠奄宜握阳诲掂麓酵享化檄努弦乐洲磷屁赊般掷畴淋第06章软件工程的测试第06章软件工程的测试6.1 软件测试基本概念软件测试基本概念n三、软件测试的目标三
11、、软件测试的目标n测试是为了发现程序中的错误而执行程序的过程;测试是为了发现程序中的错误而执行程序的过程;n好的测试方案是极可能发现迄今为止尚未发现的错误好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;的测试方案;n成功的测试是发现了至今为止尚未发现的错误的测试成功的测试是发现了至今为止尚未发现的错误的测试枢焙阿巢邑漆叉矢倒攒徽茨轻篓寅昌琐卢茂迄乒听霹呛层割翼将寝丝啤谨第06章软件工程的测试第06章软件工程的测试6.1 软件测试基本概念软件测试基本概念v四、软件测试的原则四、软件测试的原则v1 1、测试前要认定被测试软件有错,不要认为软件设有错。、测试前要认定被测试软件有错,不要认为
12、软件设有错。v2 2、要预先确定被测试软件的测试结果。、要预先确定被测试软件的测试结果。v3 3、要尽量避免测试自己编写的程序。、要尽量避免测试自己编写的程序。v4 4、测试要兼顾合理输入与不合理输入数据。、测试要兼顾合理输入与不合理输入数据。v5 5、测试要以软件需求规格说明书为标准。、测试要以软件需求规格说明书为标准。v6 6、测试是相对的,不能穷尽所有的测试,要据人力物力安、测试是相对的,不能穷尽所有的测试,要据人力物力安排测试,并选择好测试用例与测试方法。排测试,并选择好测试用例与测试方法。v7 7、充分注意测试中的群集现象、充分注意测试中的群集现象: :测试中发现的测试中发现的80%
13、80%的错误可的错误可能来自于能来自于20%20%的程序代码的程序代码闹庄挥锡听玻熏逸闯碑透大屏蓬露空针蔓杖孜斩呆途禾肖孤植豆卢萨左耐第06章软件工程的测试第06章软件工程的测试6.1 软件测试基本概念软件测试基本概念v四、软件测试的原则四、软件测试的原则n8 8、严格执行测试计划、严格执行测试计划, ,尽量避免测试的随意性,尽量避免测试的随意性,从工程的角度理解软件测试,它是有组织、有从工程的角度理解软件测试,它是有组织、有计划、有步骤的活动计划、有步骤的活动n9 9、妥善保存测试计划、测试用例、出错统计和、妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便最终分析报告,为维
14、护提供方便n1010、应当把、应当把“尽早地和不断地进行软件测试尽早地和不断地进行软件测试”作为软件测试人的座右铭作为软件测试人的座右铭茄触甚提秆敢档蹈敞笔挨晴纱捻笑蘑梯坏傅婿加邓宗刀桌仰鸳抡章郎眶耶第06章软件工程的测试第06章软件工程的测试6.2 软件测试的方法软件测试的方法v6.2.1 6.2.1 软件测试方法的分类软件测试方法的分类v软件测试方法分为两类:静态分析、动态测试。软件测试方法分为两类:静态分析、动态测试。v一、静态分析技术一、静态分析技术v不执行被测软件,可对需求分析说明书、软件设计说不执行被测软件,可对需求分析说明书、软件设计说明书、源程序做结构检查、流程分析、符号执行来
15、找出软明书、源程序做结构检查、流程分析、符号执行来找出软件错误。件错误。v二、动态测试技术二、动态测试技术v当把程序作为一个函数,输入的全体称为函数的定义当把程序作为一个函数,输入的全体称为函数的定义域,输出的全体称为函数的值域,函数则描述了输入的定域,输出的全体称为函数的值域,函数则描述了输入的定义域与输出值域的关系。义域与输出值域的关系。妆形狰彬含刺蝇锡澈阉岗摧舵获夏纳省码艳讥键申症薯巧粳比张嘲疾时初第06章软件工程的测试第06章软件工程的测试6.2 软件测试的方法软件测试的方法v动态测试的算法有:动态测试的算法有:选取定义域中的有效值,或定义域外无效值。选取定义域中的有效值,或定义域外无
16、效值。对已选取值决定预期的结果。对已选取值决定预期的结果。用选取值执行程序。用选取值执行程序。观察程序行为,记录执行结果。观察程序行为,记录执行结果。将将的结果与的结果与的结果相比较,不吻合则程序有错。的结果相比较,不吻合则程序有错。揉象庶渡蛛捣拙睡蔡郝捌扛厂踢浆慨枣坊闺帝圾豆会犁茂挡凿哟挥匈何仇第06章软件工程的测试第06章软件工程的测试6.2 软件测试的方法软件测试的方法v三、黑盒测试与白盒测试三、黑盒测试与白盒测试v动态测试既可以采用白盒法对模块进行逻辑结构的测试,又动态测试既可以采用白盒法对模块进行逻辑结构的测试,又可以用黑盒法做功能结枸的测试,接口的测试,它们都是以可以用黑盒法做功能
17、结枸的测试,接口的测试,它们都是以执行程序并分析执行结果来查错的。执行程序并分析执行结果来查错的。v1、黑盒测试法、黑盒测试法v黑盒测试法把程序看成一个黑盒子,完全不考虑程序的黑盒测试法把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程。黑盒测试是在程序接口进行的测试,内部结构和处理过程。黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息的完整性。黑盒测试又称为功能测试。保持外部信息的完整
18、性。黑盒测试又称为功能测试。傀椒肚蘸驾畅弓峙庶凡壮共饮邹籽倦呀壹桨千格液申职迫栈货也委坎练婚第06章软件工程的测试第06章软件工程的测试6.2 软件测试的方法软件测试的方法v2、白盒测试法、白盒测试法v白盒测试法的前提是可以把程序看成装在一个透明的白盒测试法的前提是可以把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。这种白盒子里,也就是完全了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程序中的每条通方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作,白盒测试又称为结构测路是否都能按预定要求正确工作,白盒测试又称为结构测试。试
19、。使用白盒测试法,为了做到穷尽测试,程序中每条可能的通路至少都应该执行一次,但即使测试很小的程序,通常也不能做到这一点。一段程序对嵌套的语句循环执行20次,而循环体中有5条可能的路径,则在这段程序中共有520条可能的通路,即使每条通路只执行一次,也是不可能的,因此,要注意,不可能进行穷尽测试,也说明,测试不可能发现程序中的所有错误。换葫亨毕粳汁禁浓钻抵权涅玲懦锨绳篇琢泞郁可园斟鸯燃焚翠冻暇淖娥帖第06章软件工程的测试第06章软件工程的测试6.2 软件测试的方法软件测试的方法命品植讫辗凡独颁唁窍袱玉蛛堑木陀往塌囤焉痛黍劈笔缄蜕捍退斥槐抢纶第06章软件工程的测试第06章软件工程的测试6.2 软件测
20、试的方法软件测试的方法v6.2.2 6.2.2 测试方案设计测试方案设计v一、白盒法一、白盒法v白盒法又称为逻辑覆盖法,其测试用例选择,是按照不同白盒法又称为逻辑覆盖法,其测试用例选择,是按照不同覆盖标准确定的。覆盖标准确定的。语语句句覆覆盖盖判判定定覆覆盖盖条条件件覆覆盖盖判判定定条条件件覆覆盖盖条条件件组组合合覆覆盖盖弱弱强强霓露圣贫赢巍劲烬萎枣平貉贩姨嫁哑挺倔碾细寡努骆敞窘浪铃渤岿比珐远第06章软件工程的测试第06章软件工程的测试6.2 软件测试的方法软件测试的方法语句覆盖语句覆盖: 选择足够的测试用例,使得程序中每个语句选择足够的测试用例,使得程序中每个语句至少都能被执行一次。至少都能
21、被执行一次。判定覆盖判定覆盖: 执行足够的测试用例,使得程序中每个判定执行足够的测试用例,使得程序中每个判定至少都获得一次至少都获得一次“真真”值和值和“假假”值。值。条件覆盖条件覆盖:执行足够的测试用例,使得判定中的每个条:执行足够的测试用例,使得判定中的每个条件获得各种可能的结果。件获得各种可能的结果。判定判定/ /条件覆盖条件覆盖: 执行足够的测试用例,使得判定中每执行足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能个条件取到各种可能的值,并使每个判定取到各种可能的结果。的结果。条件组合覆盖条件组合覆盖: 执行足够的例子,使得每个判定中条件执行足够的例子,使得
22、每个判定中条件的各种可能组合都至少出现一次。的各种可能组合都至少出现一次。剂航侍蔓巨磨苇蔡峨常古郑鞍米温箔染蝎藐丽阉抽浮粮又浩罪昨痉枷拄浮第06章软件工程的测试第06章软件工程的测试6.2 软件测试的方法软件测试的方法v白盒测试法步骤白盒测试法步骤: :选择逻辑覆盖标准。选择逻辑覆盖标准。按照覆盖标准列出所有情况。按照覆盖标准列出所有情况。选择确定测试用例。选择确定测试用例。验证分析运行结果与预期结果。验证分析运行结果与预期结果。v例:用白盒法测试以下程序段:例:用白盒法测试以下程序段:vProcedureProcedure(VAR AVAR A,B B,X X:REALREAL););vBE
23、GINBEGINv IF IF (A1) AND (B=0) A1) AND (B=0) v THEN X:=X/A ; THEN X:=X/A ;v IF (A=2) OR (X1) IF (A=2) OR (X1) v THEN X:=X+1 THEN X:=X+1vEND;END;敲潦践茁静冯即小潭瞬尺靛锦头螟争龚否啤争酋表顺劝两捂发曾逛辞告由第06章软件工程的测试第06章软件工程的测试满足语句覆盖的情况:满足语句覆盖的情况:执行路径:执行路径:aceace用例格式:用例格式: 输入输入(A,B,X)(A,B,X),输出,输出(A,B,X)(A,B,X)选择用例:选择用例:(2,0,4)
24、,(2,0,3)(2,0,4),(2,0,3)1 1、语句覆盖、语句覆盖使得程序中每个语句至使得程序中每个语句至少都能被执行一次少都能被执行一次6.2 软件测试的方法软件测试的方法A1A1ANDANDB=0B=0X=X/AX=X/AA=2A=2OR OR X1X1X=X+1X=X+1a ab bc cd de eY YN NY YN N垢诺柄龄昏浅煽爆恢斜冻头陡瑞右婉字剖势滴姚率冷祸塔弟珍亥媒标截谚第06章软件工程的测试第06章软件工程的测试覆盖情况:应执行路径覆盖情况:应执行路径ace abdace abd或:或: acd acd abeabe选择用例选择用例( (其一):其一): (2,0
25、,4),(2,0,3) ace (2,0,4),(2,0,3) ace (1,1,1),(1,1,1) abd (1,1,1),(1,1,1) abd (2,1,1),(2,1,2) abe (2,1,1),(2,1,2) abe (3,0,3),(3,1,1) acd (3,0,3),(3,1,1) acd2 2、判定覆盖、判定覆盖使得程序中每个判定至少使得程序中每个判定至少为为TRUE TRUE 或或FALSEFALSE各一次。各一次。6.2 软件测试的方法软件测试的方法A1A1ANDANDB=0B=0X=X/AX=X/AA=2A=2OR OR X1X1X=X+1X=X+1a ab bc
26、cd de eY YN NY YN N版罚妥麦辆吉途兴珍鄂廓栈揭章韭逗贯类暮丢姆岗腊疾秘掩柳诀绪潭色魔第06章软件工程的测试第06章软件工程的测试3 3、条件覆盖、条件覆盖使得判定中的每个条件获得各使得判定中的每个条件获得各种可能的结果。种可能的结果。应满足以下覆盖情况:应满足以下覆盖情况:判定一判定一: A1, A1, B=0, B0: A1, A1, B=0, B0判定二判定二: A=2, A2, X1, X1: A=2, A2, X1, X1选择用例:选择用例: (2,0,4),(2,0,3) (2,0,4),(2,0,3) (1,1,1),(1,1,1) (1,1,1),(1,1,1)
27、 注意注意: :(1,0,3),(1,0,4)(1,0,3),(1,0,4)(2,1,1),(2,1,2)(2,1,1),(2,1,2)满足条件覆盖,但不满足判断覆盖满足条件覆盖,但不满足判断覆盖6.2 软件测试的方法软件测试的方法A1A1ANDANDB=0B=0X=X/AX=X/AA=2A=2OR OR X1X1X=X+1X=X+1a ab bc cd de eY YN NY YN N顶鹰赢锗痞警涌野歌议脑呀较亿气虑汰侣还涣石裁拼拔庇绑圭炮缸唐嚎篡第06章软件工程的测试第06章软件工程的测试v4 4、判定、判定/ /条件覆盖条件覆盖v同时满足判断覆盖和条件覆盖同时满足判断覆盖和条件覆盖应满足
28、以下覆盖情况:应满足以下覆盖情况: 条件条件: A1, A1, B=0, B0: A1, A1, B=0, B0 A=2, A2, X1, X1 A=2, A2, X1, X1 应执行路径应执行路径ace abdace abd或:或: acd abe acd abe选择用例:选择用例: (2,0,4),(2,0,3) (2,0,4),(2,0,3)(ace)ace) (1,1,1),(1,1,1) (abd) (1,1,1),(1,1,1) (abd)6.2 软件测试的方法软件测试的方法A1A1ANDANDB=0B=0X=X/AX=X/AA=2A=2OR OR X1X1X=X+1X=X+1a
29、ab bc cd de eY YN NY YN N塞凌已愈乱疵猛同门疲载尔丘点鹏怖笔呜胃纫失冷杀存奄泽惟挞贤罚景雷第06章软件工程的测试第06章软件工程的测试5 5、条件组合覆盖、条件组合覆盖使得每个判定中条件的各种使得每个判定中条件的各种可能组合都至少出现一次。可能组合都至少出现一次。编译系统下的执行情况:编译系统下的执行情况:部分路径未被执行。部分路径未被执行。满足以下覆盖情况:满足以下覆盖情况: A1, B =0 A1, A1, B =0 A1, B0B0 A1, B =0 A1, A1, B =0 A1, B0 B0 A=2, X1 A=2, A=2, X1 A=2, X1 X1 A2
30、, X1 A2, A2, X1 A2, X1X1选择用例:选择用例:(2,0,4),(2,0,3) (2,0,4),(2,0,3) (2,1,1),(2,1,2) (2,1,1),(2,1,2) (1,0,3),(1,0,4) (1,0,3),(1,0,4) (1,1,1),(1,1,1) (1,1,1),(1,1,1) A1X=X/AA=2X=X+1a ab bcd de eB=0X1YNYNYNYN6.2 软件测试的方法软件测试的方法麻鸡摊径韦攫匪角颓御植曲顽屑藏断暑候姚编贯村恬牙甸畸煌群访贱睛恫第06章软件工程的测试第06章软件工程的测试6 6、路径覆盖、路径覆盖被测程序的每条可能执行到
31、被测程序的每条可能执行到的路径都至少经过一次。的路径都至少经过一次。选择用例:选择用例:(2,0,4),(2,0,3) a(2,0,4),(2,0,3) a、c c、e e(2,1,1),(2,1,2) a(2,1,1),(2,1,2) a、b b、e e(3,0,3),(3,0,1) a(3,0,3),(3,0,1) a、c c、d d(1,1,1),(1,1,1) a(1,1,1),(1,1,1) a、b b、d d6.2 软件测试的方法软件测试的方法A1A1ANDANDB=0B=0X=X/AX=X/AA=2A=2OR OR X1X1X=X+1X=X+1a ab bc cd de eY Y
32、N NY YN N因访杆七看嘶仇贵胀督怀覆庚饰通疾砒茵侍滇港迁慰妨凳濒责余盛兜惜战第06章软件工程的测试第06章软件工程的测试6.2 软件测试的方法软件测试的方法v二、黑盒法二、黑盒法 不考虑程序的内部结构与特性,只根据程序不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。功能或程序的外部特性设计测试用例。等等价价分分类类法法边边值值分分析析法法错错误误推推测测法法因因果果图图法法友彤酌竿教赤痊荔峡炯鄙横北份荐辕嘶饭钎界刚攀未灿群了誊禾功搭缸度第06章软件工程的测试第06章软件工程的测试v1 1、等价分类法、等价分类法v基基本本思思想想:根根据据程程序序的的I/OI/O特
33、特性性,将将程程序序的的定定义义域域划划分分为为有有限限个个等等价价区区段段 “等等价价类类”,从从等等价价类类中中选选择择出出的用例,具有的用例,具有“代表性代表性”。v等价类分为:等价类分为:v有有效效等等价价类类 对对于于程程序序的的规规格格说说明明是是合合理理的的、有有意意义义的输入数据构成的集合。的输入数据构成的集合。v无效等价类无效等价类 对于程序的规格说明,是不合理的,是对于程序的规格说明,是不合理的,是没有意义的输入数据构成的集合。没有意义的输入数据构成的集合。6.2 软件测试的方法软件测试的方法气卓寨兼字蚕宇诊摧保盟力板耙找泡楷宇逛仁轴毛畦侨倒陶怒斋闽即甸纤第06章软件工程的
34、测试第06章软件工程的测试等价分类法步骤等价分类法步骤等价分类法步骤等价分类法步骤 应应按按照照输输入入条条件件(如如输输入入值值的的范范围围,值值的的个个数数,值值的的集集合合,输输入入条件必须如何)划分为有效等价类和无效等价类。条件必须如何)划分为有效等价类和无效等价类。例如:每个学生可选修例如:每个学生可选修1-31-3门课程门课程 可以划分一个有效等价类:选修可以划分一个有效等价类:选修1-31-3门课程。门课程。 可以划分两个无效等价类:未选修课,选修课超过可以划分两个无效等价类:未选修课,选修课超过3 3门。门。又如:标识符的第一个字符必须是字母。又如:标识符的第一个字符必须是字母
35、。 可以划分为一个有效等价类:第一个字符是字母。可以划分为一个有效等价类:第一个字符是字母。 可以划分一个无效等价类:第一个字符不是字母。可以划分一个无效等价类:第一个字符不是字母。vv 划分划分划分划分“ “等价类等价类等价类等价类” ” A A、为每个等价类编号;、为每个等价类编号;B B、使一个测试用例尽可能覆盖多个有效等价类、使一个测试用例尽可能覆盖多个有效等价类C C、特别要注意的是:一个测试用例只能覆盖一个无效等价类。、特别要注意的是:一个测试用例只能覆盖一个无效等价类。 选择测试用例选择测试用例选择测试用例选择测试用例 等价分类法步骤等价分类法步骤采宠摘扰辟察掷墓敦苦玄锤烽骄榔汲
36、樱箔暑茫示镍抄蛋捆苍楷骚拣瓢渭踪第06章软件工程的测试第06章软件工程的测试v2 2、边值分析法、边值分析法 v基本思想:基本思想: 选择等价类的边缘值作为测试用例,让每个等价类选择等价类的边缘值作为测试用例,让每个等价类的边界都得到测试,选择测试用例既考虑输入亦考虑输出。的边界都得到测试,选择测试用例既考虑输入亦考虑输出。v分析步骤:分析步骤: vA A、先划分等价类。、先划分等价类。vB B、选择测试用例,测试等价类边界。、选择测试用例,测试等价类边界。v边界选择原则:边界选择原则: vA A、按照输入值范围的边界。、按照输入值范围的边界。vB B、按照输入、按照输入/ /输出值个数的边界
37、。输出值个数的边界。vC C、输出值域的边界。、输出值域的边界。vD D、输入、输入/ /输出有序集的边界。输出有序集的边界。6.2 软件测试的方法软件测试的方法获赠荒强疵靶卤顶砂粤借谚例蓄壕好襟啥复樱洛痢超黔恃刨枯挥悲偶畦岔第06章软件工程的测试第06章软件工程的测试边值分析法举例:边值分析法举例:边值分析法举例:边值分析法举例: A A A A、按照输入值范围的边界。按照输入值范围的边界。 例例如如:输输入入值值的的范范围围是是-1.0-1.0至至1.01.0,则则可可选选择择用用例例 1.01.0、1.01.0、-1.001-1.001、1.0011.001。 B B B B、按照输入按
38、照输入/ /输出值个数的边界。输出值个数的边界。 例例如如:输输入入文文件件可可有有1-2551-255个个记记录录,则则 设设计计用用例例:文文件件的的记记录录数为数为 0 0个、个、1 1个、个、255255个、个、256256个。个。 C C、输出值域的边界。、输出值域的边界。 例例如如:检检索索文文献献摘摘要要,最最多多4 4篇篇。设设计计用用例例:可可检检索索0 0篇篇、1 1篇篇、4 4篇,和篇,和5 5篇(错误)。篇(错误)。 D D、输入、输入/ /输出有序集(如顺序文件、线性表)的边界。输出有序集(如顺序文件、线性表)的边界。 应选择第一个元素和最后一个元素。应选择第一个元素
39、和最后一个元素。6.2 软件测试的方法软件测试的方法崔坟霹讶惑盂巾驶苦舵芜邹仟阀守裸售允铡清双佳梧复酶贼壤笔讼笆丸歪第06章软件工程的测试第06章软件工程的测试3 3、错误推测法、错误推测法凭经验或直觉推测可能的错误,列出程序中可能有的错误凭经验或直觉推测可能的错误,列出程序中可能有的错误和容易发生错误的特殊情况,选择测试用例。和容易发生错误的特殊情况,选择测试用例。4 4、因果图法(、因果图法(cause effcet graphiceicause effcet graphicei)把输入条件视为把输入条件视为“因因”,把输出条件视为,把输出条件视为“果果”,将黑,将黑盒看成是从因到果的网络
40、图,采用逻辑图的形式来表盒看成是从因到果的网络图,采用逻辑图的形式来表达功能说明书中输入条件的各种组合与输出的关系。达功能说明书中输入条件的各种组合与输出的关系。根据这种关系可选择高效的测试用例。因果图是一种根据这种关系可选择高效的测试用例。因果图是一种形式化语言,是一种组合逻辑。形式化语言,是一种组合逻辑。6.2 软件测试的方法软件测试的方法辣帚远侥橙鞭教睁誉侨俗晨撬问隘佐拒簇绦还右谐荒创譬喷犊邦耻刺迈亏第06章软件工程的测试第06章软件工程的测试v 因果图的基本符号因果图的基本符号: 0 - : 0 - 表示表示“不出现不出现”,1 - ,1 - 表示表示“出现出现”v恒等恒等: :若若a
41、 a为为1 1,则,则b b为为1 1,否则,否则b b为为0 0。v“非非”函数函数 : :若若a a为为1 1,则,则b b为为0 0,否则,否则b b为为1 1。v“或或”函数函数: :若若a a或或b b为为1 1,则,则d d为为1 1,否则,否则d d为为0 0。v“与与”函数函数: :若若a a与与b b同为同为1 1,则,则d d为为1 1,否则,否则d d为为0 0。abababd dabd d6.2 软件测试的方法软件测试的方法莲汇纠放丝暖硝贝皆喻确韦然抹匡玄扼尾称逊盈柴向辈洒傣碧汲靖敞鞋膀第06章软件工程的测试第06章软件工程的测试v对对“与与”、“或或”函数的限制符号函
42、数的限制符号vE E约束(异)约束(异) 排斥排斥v即即a a、b b不能同时为不能同时为1 1。vI I约束(或)约束(或) 包容包容va a、b b、c c不能同时为不能同时为0 0。vO O约束(唯一)约束(唯一) 选一选一va a、b b中仅有一个为中仅有一个为1 1。vR R约束(要求)约束(要求) 需要需要va a为为1 1时,时,b b必须为必须为1 1vM M约束(强制)约束(强制) 屏蔽屏蔽v若若a a为为1 1时,则时,则b b强制为强制为1 1。abEabcIabRabO OabM6.2 软件测试的方法软件测试的方法囊遵叼殆梯碧扶硅箍绿挑肘浦扬奸黎党胶噎茶习概琉笆翱研试弟
43、平街凹渗第06章软件工程的测试第06章软件工程的测试v 因果图法的步骤因果图法的步骤v分析规范,即将问题分为若干可工作的步骤。分析规范,即将问题分为若干可工作的步骤。v标识出规范中的原因与结果。标识出规范中的原因与结果。原因原因输入条件输入条件 结果结果输出或系统变换输出或系统变换v分析规范语义、内容,转换为因果图分析规范语义、内容,转换为因果图v将因果图转换为有限项判断表。将因果图转换为有限项判断表。v将判断表的每一列,转换为一个测试用例。将判断表的每一列,转换为一个测试用例。6.2 软件测试的方法软件测试的方法构箭泣蝇恒试素轰排旋睁簇便讨舷托呕侗扭婴龄郭淤拯臂败螺捉靛镇嚎介第06章软件工程
44、的测试第06章软件工程的测试 因果图法应用举例因果图法应用举例规范:文件名第一列字符必须为规范:文件名第一列字符必须为A A或或B B,第二列字,第二列字符必须为数字。满足则修改文件。第一字符不正符必须为数字。满足则修改文件。第一字符不正确发出信息确发出信息X12X12,第二个字符不正确发出信息,第二个字符不正确发出信息X13X13。v、分析规范、分析规范v原原 因因 结结 果果v1 1 第一列字符为第一列字符为A A5050修改文件修改文件v2 2 第一列字符为第一列字符为B B 5151发信息发信息X12X12v3 3 第二列字符为数字第二列字符为数字 5252发信发信息息X13X136.
45、2 软件测试的方法软件测试的方法庄捌哩费碾哦时趟捂陌锚滨活半场潍客皱窃披列掂宠庶蔽匆携惑但蹿财老第06章软件工程的测试第06章软件工程的测试画出因果图画出因果图画出因果图画出因果图中间结点中间结点是导出结果的进一步原因。是导出结果的进一步原因。v考虑到原因考虑到原因1 1、2 2不可能同时为不可能同时为1 1,加上,加上E E约束。约束。1111515035212E发发 X 12发发 X 13 修改文件修改文件6.2 软件测试的方法软件测试的方法吧殉更掖氛忘致幸顶乌臃级珐任柳樱耻蔬蕴桅撒椒揽娱钾立呻顷蹿矮灸喂第06章软件工程的测试第06章软件工程的测试将因果图转换为判断表将因果图转换为判断表1
46、 12 23 34 45 56 67 78 8条条件件原原因因1 11 11 11 10 00 00 00 01 11 10 00 01 11 10 00 01 10 01 10 01 10 01 10 01 11 11 11 10 00 0动动作作结结果果0 00 00 00 01 11 11 10 01 10 00 00 00 01 10 01 10 01 1测试用例测试用例A3A3A8A8AMAAMA?B5B5B4B4BNBNB B!C2C2X6X6DYDYPIPI11115151505052526.2 软件测试的方法软件测试的方法抒伊水茹汇座鸳旭凤否敏拷濒沤赁朔掸倾琳朝租网汹姚携栽拂详
47、贾检冉痕第06章软件工程的测试第06章软件工程的测试v测试步骤及策略测试步骤及策略v 所有测试过程都应采用综合测试策略;即先作静态所有测试过程都应采用综合测试策略;即先作静态分析,再作动态测试。并事先制订测试计划。分析,再作动态测试。并事先制订测试计划。v测试过程通常可分测试过程通常可分4 4步进行:步进行:单元单元测试测试单元单元测试测试单元单元测试测试被测被测模块模块被测被测模块模块集成集成测试测试设计设计信息信息已测试已测试的模块的模块确认确认测试测试已集成已集成的模块的模块软件软件需求需求系统系统测试测试已确认已确认的软件的软件可交付可交付的软件的软件系统其系统其他元素他元素6.3 软
48、件测试步骤软件测试步骤扮绎毛垒危溢邓萌拔募彤钡混矿购凄矛豫韦柒突媳保沈掺汐消芋誊裴逃课第06章软件工程的测试第06章软件工程的测试6.3 软件测试步骤软件测试步骤V V模型:软件开发各阶段与测试策略之间的对应关系。模型:软件开发各阶段与测试策略之间的对应关系。系统工程系统工程需求分析需求分析设计设计编码编码系统测试系统测试确认测试确认测试集成测试集成测试单元测试单元测试鲁海攀庶皂盘掘豆堆辛檬友工浆聂执咏恬钨杰割俘廊棚潞拇庭埃艰闲吃拢第06章软件工程的测试第06章软件工程的测试1 1、单元测试(单元测试(unit testing )unit testing )的的测试测试内容内容模块模块模块接口
49、测试模块接口测试局部数据结构测试局部数据结构测试重要路径测试重要路径测试错误处理测试错误处理测试边界条件测试边界条件测试I/O I/O 参数值的个数、类参数值的个数、类型、次序、格式是否正型、次序、格式是否正确,确,I/OI/O文件属性、操作文件属性、操作是否正确等。是否正确等。数据说明是否正确、数据说明是否正确、一致,变量及其初一致,变量及其初值定义是否正确等。值定义是否正确等。检查检查“错误处错误处理程序理程序”本身本身的错误。的错误。边界条件常包括循环边边界条件常包括循环边界,最大最小值、控制界,最大最小值、控制流中等于、大于、小于流中等于、大于、小于的比较值等。的比较值等。重要路径通常
50、是指完成重要路径通常是指完成模块功能的主要路径,模块功能的主要路径,一般是控制结构。一般是控制结构。一、单元测试(一、单元测试(unit testing )牙钎犊闹繁崔辊愁难识胯骂监拧蓄培景胆盐虱矽罢樟锨竖自痈骚溢拖涡吐第06章软件工程的测试第06章软件工程的测试n2 2、模块测试步骤、模块测试步骤n考虑到被测模块与其它模块的联系,因此测试时需要使考虑到被测模块与其它模块的联系,因此测试时需要使用两类辅助模块来模拟其他模块。用两类辅助模块来模拟其他模块。n驱动模块(驱动模块(driverdriver) 模拟主程序模拟主程序功能,用于向被测模块传递数据,功能,用于向被测模块传递数据,接收、打印从
51、被测模块返回的数据。接收、打印从被测模块返回的数据。n桩模块(桩模块(stubstub) 又称为假模块,又称为假模块,用于模拟那些由被测模块所调用的用于模拟那些由被测模块所调用的下属模块功能。下属模块功能。n一般,驱动模块比桩模块容易设计。但都是额外开一般,驱动模块比桩模块容易设计。但都是额外开销。测试方法以白盒法为主。销。测试方法以白盒法为主。被测模块被测模块驱动模块驱动模块桩模块桩模块桩模块桩模块桩模块桩模块一、单元测试(一、单元测试(unit testing )墒姬微祝乙率亡扎赢津漾溪抹俯捅竟愤晕变兽蛀搪洗晋央溶扼尼食凄硝秽第06章软件工程的测试第06章软件工程的测试n1 1、组装测试的
52、任务、组装测试的任务n确定模块组装方案,将经过测试的模块组装为一个完确定模块组装方案,将经过测试的模块组装为一个完整的系统。组装方案分为渐增式及非渐增式。整的系统。组装方案分为渐增式及非渐增式。n测试方法以黑盒法为主,按照组装方案进行测试。测试方法以黑盒法为主,按照组装方案进行测试。n也称为联合测试或集成测试,重点测试模块的接口也称为联合测试或集成测试,重点测试模块的接口部分,需设计测试过程使用的驱动模块或桩模块。部分,需设计测试过程使用的驱动模块或桩模块。二、组装测试(二、组装测试(Integration testing )冻酣灼园冕域故季凸国棋辰捣佯饵咬衰焚指稚由滴宗麓臃沼世词躇甄铅靶第0
53、6章软件工程的测试第06章软件工程的测试v2 2、渐增式组装测试、渐增式组装测试v渐增式是先进行模块测试,然后将这些模块逐步组装成较渐增式是先进行模块测试,然后将这些模块逐步组装成较大的系统,每连接一个模块进行一次测试大的系统,每连接一个模块进行一次测试。两种方案:两种方案:设计驱动模块或桩模块,对每一个新组装的子系统进设计驱动模块或桩模块,对每一个新组装的子系统进行测试,对发现问题较多的子系统或模块应该用白盒行测试,对发现问题较多的子系统或模块应该用白盒法作回归测试。法作回归测试。自顶而下增值自顶而下增值自底而上自底而上自底而上自底而上增值增值二、组装测试(二、组装测试(Integratio
54、n testing )杨凡广鞠豁箔勤枷羡著本懒砧摹嫉杨淋砂潞直由吼狐椅伤贮揣乱鲤何噶乏第06章软件工程的测试第06章软件工程的测试M1M4M3M2M6M5程程序序模模块块示示意意图图S5M1S1S1S1S2S2S2S3S3S3第第一一步步,测测试试主主控控模模块块M1M1设设计计桩桩模模块块S1S1、S2S2、S3S3,模模拟拟被被M1M1调调用用的的M2M2、M3M3、M4M4。M2M3M4第第二二步步,依依次次用用M2M2、M3M3、M4M4替替代代桩桩模模块块S1S1、S2S2、S3S3,每每替替代代一一次次进进行行一次测试。一次测试。S4S4S4S5S5第第三三步步,对对由由主主控控模
55、模块块M1M1和和模模块块M2M2、M3M3、M4M4构构成成的的子子系系统统进进行行测测试试,设设计桩模块计桩模块S4S4、S5S5。M5M6第第四四步步,依依次次用用模模块块M5M5和和M6M6替替代代桩桩模模块块S4S4、S5S5,并并同同时时进进行行新新的的测测试试。组装测试完毕。组装测试完毕。自顶而下增值自顶而下增值址所织毖赎臂舱雏裕狂候堂帆哇巴忠共樱忽耐浪伎梆埋渭遣挚蝎睦务狼帽第06章软件工程的测试第06章软件工程的测试M3M6M5D1D2D3D1D1D2D2D3D3M2M4M1第第四四步步,把把已已测测试试的的子子系系统统按按程程序序结结构构连连接接起起来来完完成成程程序序整整体
56、体的的组装测试。组装测试。D4D4D4D5D5D5M1M4M3M2M6M5程程序序模模块块示示意意图图第第一一步步,对对最最底底层层的的模模块块M3M3、M5M5、M6M6进进行行测测试试,设设计计驱驱动动模模块块D1D1、D2D2、D3D3来来模模拟调用。拟调用。第第三三步步,设设计计驱驱动动模模块块D4D4、D5 D5 和和D6D6模模拟调用,分别对新子系统进行测试。拟调用,分别对新子系统进行测试。第第二二步步,用用实实际际模模块块M2M2、M1M1和和M4M4替换驱动模块替换驱动模块D1D1、D2D2、D3D3。D6自底而上增值自底而上增值醒框甩塔啮领牌嚼婶义雨砌块涅递病之男纶躲蓉师印片
57、浊秆崎虎痔闽喷因第06章软件工程的测试第06章软件工程的测试确定组装过程的原则确定组装过程的原则确定组装过程的原则确定组装过程的原则n 自顶而下增值自顶而下增值n优点:能够尽早发现系统主控方面的问题。优点:能够尽早发现系统主控方面的问题。n缺点:无法验证桩模块是否完全模拟了下属模块的功能。缺点:无法验证桩模块是否完全模拟了下属模块的功能。n n 自底而上自底而上自底而上自底而上增值增值n优点:驱动模块较容易编写桩模块,能够尽早查出底层涉及优点:驱动模块较容易编写桩模块,能够尽早查出底层涉及较复杂的算法和实际的较复杂的算法和实际的I/OI/O模块中的错误。模块中的错误。n缺点:最后才能发现系统主
58、控方面的问题。缺点:最后才能发现系统主控方面的问题。集成过程的原则集成过程的原则 尽早测试关键模块。尽早测试关键模块。尽早测试关键模块。尽早测试关键模块。 尽早测试包含尽早测试包含尽早测试包含尽早测试包含I/OI/OI/OI/O的模块。的模块。的模块。的模块。二、组装测试(二、组装测试(Integration testing )焉哑羽窑坍到葱澳改这猎虏蚁拧倒恶挽杆栋巩撇锨升蕴联贪席良综排简蕴第06章软件工程的测试第06章软件工程的测试3 3、混合增值,常见的混合增值方案有:、混合增值,常见的混合增值方案有:衍变的自顶而下衍变的自顶而下先自底而上集成子系统,再自顶而下集成总系统。先自底而上集成子
59、系统,再自顶而下集成总系统。自底而上自底而上自顶而下增值自顶而下增值对含有读操作的子系统采用自底而上。对含有读操作的子系统采用自底而上。对含有写操作的子系统采用自顶而下。对含有写操作的子系统采用自顶而下。回归测试回归测试在回归测试中自底而上,对其余部分(尤其是对修改过的在回归测试中自底而上,对其余部分(尤其是对修改过的子系统)采用自顶而下。子系统)采用自顶而下。二、组装测试(二、组装测试(Integration testing )坠凭恢攻奠捣韦朋迁疲掐沧诀孪锐雁焕撩镭厄疫炳俺霹崔隙俭札庚彰冲阑第06章软件工程的测试第06章软件工程的测试1 1、任务、任务 又称为有效性测试或功能测试。其任务是验
60、证又称为有效性测试或功能测试。其任务是验证系统的功能、性能等特性是否符合需求规格说明。系统的功能、性能等特性是否符合需求规格说明。选择测试人员选择测试人员选择测试用例选择测试用例实际运行测试实际运行测试软件计划软件计划用户文档用户文档开发文档开发文档源程序文本源程序文本支持环境支持环境有效性有效性测试测试软件软件配置配置审查审查管理管理机构机构裁决裁决专家专家鉴定会鉴定会交用户交用户运行维护运行维护测试报告测试报告软件配置软件配置三、确认测试(三、确认测试(Validation testing )稚稚缺漫遭鄂枝瓢恳葵槽榔潦渡伸萎规必公进缝稼汀爱陵子剿估闭庄挨姜第06章软件工程的测试第06章软件
61、工程的测试(1 1)有效性测试)有效性测试制定测试计划,运用黑盒法,验证软件特性是否与需求制定测试计划,运用黑盒法,验证软件特性是否与需求符合。符合。(2 2)软件配置复查)软件配置复查 软软件件配配置置 指指软软件件工工程程过过程程中中所所产产生生的的所所有有信信息息项项: :文文档档、报报告告、程程序序、表表格格、数数据据。随随着着软软件件工工程程过过程程的的进进展展软软件件配配置置项项(SCI SCI software software Configuration Configuration ItemItem)快速增加和变化。应复查)快速增加和变化。应复查SCISCI是否齐全。是否齐全。
62、2 2、确认测试的步骤、确认测试的步骤三、确认测试(三、确认测试(Validation testing )浴识胞曰匪胃浑嗜愧最写嘘你漆幢园碌虽倦低毅倔她狈幼汀蓖汇敷叹糠叮第06章软件工程的测试第06章软件工程的测试F F F Function Testing unction Testing 功能测试功能测试L L L Local Area Testing ocal Area Testing 局域化测试局域化测试U U U Usability Testing sability Testing 可使用性测试可使用性测试R R R Regression Testing egression Testi
63、ng 回归测试回归测试P P P Performance Testing erformance Testing 性能测试性能测试S S S Supportability Testing upportability Testing 可支持可支持性测试性测试(3 3) 测试和测试和 测试测试 测试测试 :是在开发机构的监督下,由个别用户在确认测试阶段后:是在开发机构的监督下,由个别用户在确认测试阶段后期对软件进行测试,目的是评价软件的期对软件进行测试,目的是评价软件的FLURPSFLURPS(功能、局域化、(功能、局域化、可使用性、可靠性、性能和支持),注重界面和特色。可使用性、可靠性、性能和支持
64、),注重界面和特色。 测试测试:由支持软件预发行的客户对:由支持软件预发行的客户对FLURPSFLURPS进行测试,主要目的进行测试,主要目的是测试系统的可支持性。是测试系统的可支持性。三、确认测试(三、确认测试(Validation testing )刨熄代槽友艾养骋士嫌厉谍拯磐岔驰怕建符爹默囱炉雍铣失淋芹庙淡镭屁第06章软件工程的测试第06章软件工程的测试四、系统测试四、系统测试(system testing system testing )将经过确认测试的软件,与计算机硬件、外设、将经过确认测试的软件,与计算机硬件、外设、支持软件等一起,在实际运行环境下测试。支持软件等一起,在实际运行环
65、境下测试。6.3 软件测试步骤软件测试步骤僚俏洽姐否苯汹碾彻梭丁孵武饶瑶啮皮厂破碎寅邑羌序焕卑余陨羔万利页第06章软件工程的测试第06章软件工程的测试6.4 程序调试程序调试v软件调试是在进行了成功的测试之后才开始的工作。它与软件调试是在进行了成功的测试之后才开始的工作。它与软件测试不同,调试的任务是软件测试不同,调试的任务是进一步诊断和改正程序中潜进一步诊断和改正程序中潜在的错误。在的错误。v调试活动由两部分组成:调试活动由两部分组成: 确定程序中可疑错误的确切性质和位置。确定程序中可疑错误的确切性质和位置。 对程序对程序( (设计设计, ,编码编码) )进行修改,排除这个错误。进行修改,排
66、除这个错误。v调试工作是一个具有很强技巧性的工作。调试工作是一个具有很强技巧性的工作。软件运行失效或软件运行失效或出现问题,往往只是潜在错误的外部表现,而外部表现与出现问题,往往只是潜在错误的外部表现,而外部表现与内在原因之间常常没有明显的联系。内在原因之间常常没有明显的联系。如果要找出真正的原如果要找出真正的原因,排除潜在的错误,不是一件易事。可以说,因,排除潜在的错误,不是一件易事。可以说,调试是通调试是通过现象,找出原因的一个思维分析的过程过现象,找出原因的一个思维分析的过程浆丸攀搞区贝地继枣诚至磅摧音薯爵赤刮痞金蠢躯摄慧亢诌幽哈达审强辫第06章软件工程的测试第06章软件工程的测试调试过
67、程飘低绢羽糠拒违喝径钠意扳练垮捞弘活啃祁辉粳狠百攻嵌穆熊泽瞪鲍帘六第06章软件工程的测试第06章软件工程的测试一、调试的步骤一、调试的步骤(1) (1) 从错误的外部表现形式入手,确定程序中出错位置;从错误的外部表现形式入手,确定程序中出错位置;(2) (2) 研究有关部分的程序,找出错误的内在原因;研究有关部分的程序,找出错误的内在原因;(3) (3) 修改设计和代码,以排除这个错误;修改设计和代码,以排除这个错误;(4) (4) 重复进行暴露了这个错误的原始测试或某些有关测试。重复进行暴露了这个错误的原始测试或某些有关测试。6.4 程序调试程序调试从技术角度来看,查找错误的难度在于:从技术
68、角度来看,查找错误的难度在于:n 现象与原因所处的位置可能相距甚远。现象与原因所处的位置可能相距甚远。n 当其它错误得到纠正时,这一错误所表现出的现象当其它错误得到纠正时,这一错误所表现出的现象可能会暂时消失,但并未实际排除。可能会暂时消失,但并未实际排除。自进疏延蛀辨撩孙翱挡挣综砸经习闯丝噬航款魁礼缺凌统船案皑揉碍裤碗第06章软件工程的测试第06章软件工程的测试n现象实际上是由一些非错误原因现象实际上是由一些非错误原因( (例如,舍入不精确例如,舍入不精确) )引起的。引起的。n 现象可能是由于一些不容易发现的人为错误引起的。现象可能是由于一些不容易发现的人为错误引起的。n 错误是由于时序问
69、题引起的,与处理过程无关。错误是由于时序问题引起的,与处理过程无关。n 现象是由于难于精确再现的输入状态(例如,实时现象是由于难于精确再现的输入状态(例如,实时应用中输入顺序不确定)引起。应用中输入顺序不确定)引起。n 现象可能是周期出现的。在软、硬件结合的嵌入式现象可能是周期出现的。在软、硬件结合的嵌入式系统中常常遇到。系统中常常遇到。6.4 程序调试程序调试绎豹毯柒湛轩默叉糙控昌肥钾胸缓拎冠族盗餐绕封力峭然查集腕授犀笼擂第06章软件工程的测试第06章软件工程的测试二、几种主要的调试方法二、几种主要的调试方法 调试的关键在于推断程序内部的错误位置及原因。可调试的关键在于推断程序内部的错误位置
70、及原因。可以采用以下方法:以采用以下方法:1 1、强行排错、强行排错这种调试方法目前使用较多,效率较低。它不需要过多这种调试方法目前使用较多,效率较低。它不需要过多的思考,比较省脑筋。例如:的思考,比较省脑筋。例如: 通过内存全部打印来调试通过内存全部打印来调试,在这大量的数据中寻找,在这大量的数据中寻找出错的位置。出错的位置。6.4 程序调试程序调试蝇挑导儒气诌衔追傲筑高京荧囱气败仔暇踞娇世改阀潮纫椽叭炼乌阿珐钝第06章软件工程的测试第06章软件工程的测试 在程序特定部位设置打印语句,在程序特定部位设置打印语句,把打印语句插在出错把打印语句插在出错的源程序的各个关键变量改变部位、重要分支部位
71、、子的源程序的各个关键变量改变部位、重要分支部位、子程序调用部位,跟踪程序的执行,监视重要变量的变化。程序调用部位,跟踪程序的执行,监视重要变量的变化。 自动调试工具。自动调试工具。利用某些程序语言的调试功能或专门利用某些程序语言的调试功能或专门的交互式调试工具,分析程序的动态过程,而不必修改的交互式调试工具,分析程序的动态过程,而不必修改程序。程序。应用以上任一种方法之前,都应当对错误的征兆进行全应用以上任一种方法之前,都应当对错误的征兆进行全面彻底的分析,得出对出错位置及错误性质的推测,再面彻底的分析,得出对出错位置及错误性质的推测,再使用一种适当的调试方法来检验推测的正确性。使用一种适当
72、的调试方法来检验推测的正确性。6.4 程序调试程序调试岳朔肃涌宗俭窿皂傍豫绪日持歧死底坟埋狂螟呻茨粗翔滩锥帆旋态东串蛇第06章软件工程的测试第06章软件工程的测试2 2、回溯法调试、回溯法调试这是在小程序中常用的一种有效的调试方法。一旦发现了这是在小程序中常用的一种有效的调试方法。一旦发现了错误,人们先分析错误征兆,确定最先发现错误,人们先分析错误征兆,确定最先发现“症状症状”的位的位置。置。 然后,人工沿程序的控制流程,向回追踪源程序代码,然后,人工沿程序的控制流程,向回追踪源程序代码,直到找到错误根源或确定错误产生的范围。直到找到错误根源或确定错误产生的范围。v例如,程序中发现错误处是某个
73、打印语句。通过输出值可例如,程序中发现错误处是某个打印语句。通过输出值可推断程序在这一点上变量的值。再从这一点出发,回溯程推断程序在这一点上变量的值。再从这一点出发,回溯程序的执行过程,反复考虑:序的执行过程,反复考虑:“如果程序在这一点上的状态如果程序在这一点上的状态(变量的值)是这样,那么程序在上一点的状态一定是这(变量的值)是这样,那么程序在上一点的状态一定是这样样.”, 直到找到错误的位置。直到找到错误的位置。6.4 程序调试程序调试逆笋摩涟咙溃蟹卵响蚕锦咖衔倒四形渡衣峪馆物写碎锻瘦骄钞劫桔玻园搂第06章软件工程的测试第06章软件工程的测试3 3、归纳法调试、归纳法调试v归纳法是一种从
74、特殊推断一般的系统化思考方法。归纳法调归纳法是一种从特殊推断一般的系统化思考方法。归纳法调试的基本思想是:从一些线索试的基本思想是:从一些线索( (错误征兆错误征兆) )着手,通过分析它着手,通过分析它们之间的关系来找出错误。们之间的关系来找出错误。n收集有关的数据:收集有关的数据:列出所有已知的测试用例和程序执行列出所有已知的测试用例和程序执行结果。看哪些输入数据的运行结果是正确的,哪些输入结果。看哪些输入数据的运行结果是正确的,哪些输入数据的运行结果有错误。数据的运行结果有错误。n 组织数据:组织数据:由于归纳法是从特殊到一般的推断过程,所由于归纳法是从特殊到一般的推断过程,所以需要组织整
75、理数据,以发现规律。以需要组织整理数据,以发现规律。6.4 程序调试程序调试而优京神魄拖巢浚竭铅蚕竣春案掖拓炬辩娱醋巴吾匡寞工谈魄斑膨华撑卓第06章软件工程的测试第06章软件工程的测试n常以常以3W1H3W1H形式组织可用的数据:形式组织可用的数据:“WhatWhat” 列出一般现象;列出一般现象;“WhereWhere”说明发现现象的地点;说明发现现象的地点;“WhenWhen” 列出现象发生时所有已知情况;列出现象发生时所有已知情况;“HowHow” 说明现象的范围和量级;说明现象的范围和量级;6.4 程序调试程序调试睡德弟嫡疲沧豌裙悟帮奈苞团福谩泌们胺摊摆赢嗽旧燥梗酱慨殉挡设阔舱第06章
76、软件工程的测试第06章软件工程的测试6.4 程序调试程序调试氖晨棠期移章咸羌屡咸始沽旗逞母逢倡摈截凋落君竿类抢护劫佣告熙互弛第06章软件工程的测试第06章软件工程的测试“YesYes”描述出现错误的描述出现错误的3W1H3W1H;“NoNo”作为比较,描述了作为比较,描述了没有错误的没有错误的3W1H3W1H。通过分析找出矛盾来。通过分析找出矛盾来。n 提出假设:提出假设:分析线索之间的关系,利用在线索结构中分析线索之间的关系,利用在线索结构中观察到的矛盾现象,设计一个或多个关于出错原因的假观察到的矛盾现象,设计一个或多个关于出错原因的假设。如果一个假设也提不出来,归纳过程就需要收集更设。如果
77、一个假设也提不出来,归纳过程就需要收集更多的数据。此时,应当再设计与执行一些测试用例,以多的数据。此时,应当再设计与执行一些测试用例,以获得更多的数据。获得更多的数据。n证明假设:证明假设:把假设与原始线索或数据进行比较,若它能把假设与原始线索或数据进行比较,若它能完全解释一切现象,则假设得到证明;否则,就认为假完全解释一切现象,则假设得到证明;否则,就认为假设不合理,或不完全,或是存在多个错误,以致只能消设不合理,或不完全,或是存在多个错误,以致只能消除部分错误。除部分错误。6.4 程序调试程序调试矾会吝镇忽苞辗氮狼毡职挛鸽藤讯乔如膝镐棍咳仙蛆稽寝皿傣胜屉螺至堡第06章软件工程的测试第06章
78、软件工程的测试v4 4、演绎法调试、演绎法调试演绎法是一种从一般原理或前提出发,经过排除和精演绎法是一种从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考方法。演绎法排错是测化的过程来推导出结论的思考方法。演绎法排错是测试人员首先根据已有的测试用例,设想及枚举出所有试人员首先根据已有的测试用例,设想及枚举出所有可能出错的原因做为假设;然后再用原始测试数据或可能出错的原因做为假设;然后再用原始测试数据或新的测试,从中逐个排除不可能正确的假设;最后,新的测试,从中逐个排除不可能正确的假设;最后,再用测试数据验证余下的假设确是出错的原因。再用测试数据验证余下的假设确是出错的原因。6.4 程
79、序调试程序调试截讲漏俞丁弦浚踊缅氨外汇崇角嘿芝挎楚泉男雾态淡舌员刀今架慧粹拖林第06章软件工程的测试第06章软件工程的测试n n 列举所有可能出错原因的假设列举所有可能出错原因的假设把所有可能的错误原因列成表。通过它们,可以组织、把所有可能的错误原因列成表。通过它们,可以组织、分析现有数据。分析现有数据。n n 利用已有的测试数据,排除不正确的假设利用已有的测试数据,排除不正确的假设仔细分析已有的数据,寻找矛盾,力求排除前一步列出仔细分析已有的数据,寻找矛盾,力求排除前一步列出所有原因。如果所有原因都被排除了,则需要补充一些所有原因。如果所有原因都被排除了,则需要补充一些数据数据( (测试用例
80、测试用例) ),以建立新的假设。,以建立新的假设。n 改进余下的假设改进余下的假设利用已知的线索,进一步改进余下的假设,使之更具体利用已知的线索,进一步改进余下的假设,使之更具体化,以便可以精确地确定出错位置。化,以便可以精确地确定出错位置。n 证明余下的假设证明余下的假设6.4 程序调试程序调试辨递蒸似感厉装曲脆末洛逃了听邦魏凯撑住廷苗邦僚色碑千卓唇百竿丰颗第06章软件工程的测试第06章软件工程的测试6.4 程序调试程序调试萎膨床知障倾条偿胸振贯互伴颗虾徐聚布谊榜废迪颓乾寞寿陀锭椅依兄歼第06章软件工程的测试第06章软件工程的测试v三、调试原则三、调试原则v在调试方面,许多原则本质上是心理学
81、方面的问题。调在调试方面,许多原则本质上是心理学方面的问题。调试由两部分组成,调试原则也分成两组。试由两部分组成,调试原则也分成两组。v1 1、确定错误的性质和位置的原则、确定错误的性质和位置的原则 用头脑去分析思考与错误征兆有关的信息。用头脑去分析思考与错误征兆有关的信息。 避开死胡同。避开死胡同。 只把调试工具当做辅助手段来使用。利用调试工具,只把调试工具当做辅助手段来使用。利用调试工具,可以帮助思考,但不能代替思考。可以帮助思考,但不能代替思考。 避免用试探法,最多只能把它当做最后手段。避免用试探法,最多只能把它当做最后手段。6.4 程序调试程序调试赎僵须筏篇舒抨假犯虞鹊差隆聊蔗壁肺邀蚕
82、讳周陛疑脓犯墩诉菜桃身绢呆第06章软件工程的测试第06章软件工程的测试v2 2、修改错误的原则、修改错误的原则 在出现错误的地方,很可能还有别的错误。在出现错误的地方,很可能还有别的错误。修改错误的一个常见失误是修改错误的一个常见失误是只修改了这个错误的征兆只修改了这个错误的征兆或这个错误的表现,而没有修改错误的本身。或这个错误的表现,而没有修改错误的本身。 当心修正一个错误的同时当心修正一个错误的同时有可能会引入新的错误。有可能会引入新的错误。 修改错误的过程将迫使人们暂时回到程序设计阶段。修改错误的过程将迫使人们暂时回到程序设计阶段。 修改源代码程序,不要改变目标代码。修改源代码程序,不要
83、改变目标代码。6.4 程序调试程序调试拨匹至培职他啡郑旅粪磐昭聊褂椅经女琼椅达掏妊砖航瀑峻缮咀触茸础型第06章软件工程的测试第06章软件工程的测试6.5 软件测试计划与测试分析报告软件测试计划与测试分析报告v6.5.1 软件测试计划软件测试计划性沥旬洱郝枝仪爬殆止得莫稀祟矣外虱躺识氯撩秃陆蹄幕掳闭绞崩猴吕翠第06章软件工程的测试第06章软件工程的测试6.5 软件测试计划与测试分析报告软件测试计划与测试分析报告群挎泰唆糜需煞赏稽钾沧湿虾烤周肢孩刹渣叭亲诵拓徐岁盼把圣燃丈堂责第06章软件工程的测试第06章软件工程的测试v6.5.2 测试分析报告测试分析报告6.5 软件测试计划与测试分析报告软件测试
84、计划与测试分析报告氢泌翘瓶瞩姿赢敬伦瘸惩虫举欺白痰曙栅吵付傅默谋锻甄脂弯酮如过愈寂第06章软件工程的测试第06章软件工程的测试6.5 软件测试计划与测试分析报告软件测试计划与测试分析报告烽笑妇垂酒罪贮覆俩撕蓉蛮筹晾辗焦原甄惊黑摄温万弟纽澎海县或帜雨棘第06章软件工程的测试第06章软件工程的测试6.5 软件测试计划与测试分析报告软件测试计划与测试分析报告蹭诸碧崖学甚熏付遂恤逃尊玖孪掉婉枯唬涌千共殖眶伪舒栓灼酪台箩翱跟第06章软件工程的测试第06章软件工程的测试6.5 软件测试计划与测试分析报告软件测试计划与测试分析报告诫貌驯矫告室旗奶腔哑份狱硅柬姻馋症邑孔较揽臃昔嘱啤村妙吾匝吱乙慕第06章软件工
85、程的测试第06章软件工程的测试v6.5.3 6.5.3 其他软件测试文档其他软件测试文档一、模块测试报告一、模块测试报告nA A、综合测试策略(静态分析、白盒法为主,辅以黑盒法)、综合测试策略(静态分析、白盒法为主,辅以黑盒法)nB B、测试情况(根据覆盖标准列出)、测试情况(根据覆盖标准列出)nC C、测试用例(保留)、测试用例(保留)nD D、查错记录(数量、位置)、分析结果。、查错记录(数量、位置)、分析结果。二、组装测试报告二、组装测试报告nA A、组装次序、测试方法(以黑盒法为主)、组装次序、测试方法(以黑盒法为主)nB B、测试情况、测试情况nC C、测试用例(保留)、测试用例(保留)nD D、查错记录(数量、位置)、分析结果。、查错记录(数量、位置)、分析结果。6.5 软件测试计划与测试分析报告软件测试计划与测试分析报告绥圃征病樟最诬咐掀柜峡拉罕梭裙审凶疲角综摘袭阳栈价凰惠穆饺昏钩苦第06章软件工程的测试第06章软件工程的测试太膊膊澳磷这藕寄蛊掐装潜炒缩创梨态龄焰脯撒便添笑戴酿绕擞捏打毛旱第06章软件工程的测试第06章软件工程的测试