软件工程第六章软件测试.ppt

上传人:夺命阿水 文档编号:235733 上传时间:2023-03-10 格式:PPT 页数:66 大小:481KB
返回 下载 相关 举报
软件工程第六章软件测试.ppt_第1页
第1页 / 共66页
软件工程第六章软件测试.ppt_第2页
第2页 / 共66页
软件工程第六章软件测试.ppt_第3页
第3页 / 共66页
软件工程第六章软件测试.ppt_第4页
第4页 / 共66页
软件工程第六章软件测试.ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《软件工程第六章软件测试.ppt》由会员分享,可在线阅读,更多相关《软件工程第六章软件测试.ppt(66页珍藏版)》请在课桌文档上搜索。

1、第6讲 软件测试,6.1 软件测试的基本概念6.2 测试的原则、类型和文档6.3 黑盒测试方法6.4 白盒测试方法6.5 软件测试的基本过程6.6 软件纠错,(1)什么是软件测试?其目的是什么?(2)什么是成功的测试?什么是失败的测试?(3)什么是好的软件测试?(4)穷举测试能够把所有的错误找完吗?(5)通过测试能够证明软件无错吗?(6)测试的基本工作有哪些?(7)什么是测试用例?(8)测试由谁来完成?(9)测试与纠错有何关系?(10)纠错由谁来完成?(11)测试的信息流之间有何关系?,6.1 软件测试的基本概念,(1)什么是软件测试?其目的是什么?,测试的定义软件(程序)测试是为了发现错误而

2、执行程序的过程。测试的目的发现程序的错误。,测试为什么重要,ARIANE火箭耗资70亿美元,1996年发射37秒后爆炸,beginsensor_get(vertical_veloc_sensor);sensor_get(horizontal_veloc_sensor);vertical_veloc_bias:=integer(vertical_veloc_sensor);horizontal_veloc_bias:=integer(horizontal_veloc_sensor);.exceptionwhen numeric_error=calculate_vertical_veloc();w

3、hen others=use_irs1();end;,发射失败的原因 程序中试图将64位浮点数转换成16位整数时的溢出错误 如果看其浮点转换程序,并没有任何问题。问题在于他们复用了Ariane 4的部分软件需求文档因而软件工程师不知道其Ariane 5的水平加速度比Ariane 4快5倍因此要求额外3位整数存储,所以其背后的真正原因是系统需求。,测试为什么重要,测试为什么重要,爱国者导弹第一次海湾战争期间,美国爱国者导弹系统拦截伊拉克飞毛腿导弹失败。导弹摧毁了一个美军兵营,造成28名士兵死亡,100人受伤。,起因 导弹拦截软件的取整错误导致计时不正确,令爱国者忽略了飞毛腿导弹,(2)什么是成功

4、的测试?什么是失败的测试?,什么是成功的测试?能够找到至今尚未发现的错误。什么是失败的测试?没有找到至今尚未发现的错误。(3)什么是好的软件测试?用最少的代价能够找到至今尚未发现的更多的错误。测试工作反映了经济学的观点。,(4)穷举测试能够把所有的错误找完吗?,例1 对于程序内部路径的测试如图中所示从A到B的中间有一个20次的循环,循环中有5条路径,那么从A到B的独立路径数约为1014(即52051951)例2 对于程序功能的测试一个程序需要3个整型数的输入。假设计算机字长是16位,则每个整数可能取值有216个,那么3个输入整数的各种可能值的情况约为216 216 216 248 3 1014

5、,(5)通过测试能够证明软件无错吗?,穷举测试是不可取的。通过测试不可能把所有的软件错误找完。因此,通过测试不可能证明软件不存在错误。测试只能证明错误存在,而不能证明错误不存在(不彻底性)。(6)测试的基本工作有哪些?制定测试计划建立测试环境设计测试用例执行测试结果分析完成测试报告,(7)什么是测试用例?,测试用例(Test Case)测试数据+期望的结果测试用例的重要作用:测试用例是连接测试计划与实施测试的桥梁。设计测试用例是搞好软件测试的关键。(8)测试由谁来完成?一般情况下,应该由非程序员或非程序开发机构来完成。这样做的主要原因主要:从心理学的角度考虑;从质量的观点看,应该有专门的机构或

6、组织来完成。,(9)测试与纠错有何关系?,纠错的目的和任务:根据测试所发现的错误,确定错误发生的位置、性质,并纠正这些错误。纠错的过程就是程序调试的过程。测试是纠错/排错/调试的基础和依据;纠错需要测试所发现的错误现象,才能确定错误发生的性质、位置,并纠正这些错误。(10)纠错由谁来完成?程序员,(测试数据),(11)测试的信息流之间有何关系?,测试过程的输入测试过程中需要3类输入(见上图):软件配置包括软件需求规格说明、软件设计规格说明、源代码等。测试配置包括测试计划、测试用例、测试驱动程序等。测试工具为测试的实施提供某种服务,以减轻完成测试任务中的手工劳动。测试工具测试数据自动生成程序静态

7、分析程序动态分析程序测试结果分析程序驱动测试的测试数据库等等。,分析测试结果测试完成后,要对所有的测试结果进行分析,如果发现软件有错误,就要排错并修正有关文档,接着再测试,直到通过为止。如果经常出现需要修改设计的严重错误,则软件质量与可靠性值得怀疑,需进一步测试。如果测试未发现错误,则应重新审查测试配置。,6.2 测试的原则、类型和文档,1)测试原则(1)所有的测试都应追溯到用户需求。软件测试的目标在于揭示错误。而最严重的错误是那些导致程序无法满足需求的错误。(2)充分注意测试中的群集现象。在被测程序段中,若发现错误数目多,则残存错误数目也比较多。因此,应当对错误群集的程序段进行重点测试,以提

8、高测试投资的效益。,(3)测试应从“小规模”开始,逐步转向”大规模”。(4)测试应该由非程序员或非开发机构来进行。(5)对于非法的和非预期的输入情况也要象正常测试一样,编写测试用例。检查程序是否做了要做的事仅仅是成功的一半,另一半是看程序是否做了不该做的事。(6)妥善保存测试计划、测试用例、出错统计和最终分析报告。回归测试,2)软件测试方法(1)静态分析:通过对被测程序的静态检查,发现代码中潜在的错误。静态分析包括2种方式:静态分析器分析(自动方式);如PMD 扫描java源代码,查找潜在的问题:可能的bugs,如空的try/catch/finally/switch声明 死亡的代码,没有使用的

9、本地变量,参数和私有方法 过于复杂的表达式,如不必要的if表达式 重复的代码,拷贝、粘贴的代码 代码评审(人工方式),包括代码会审、走查、办公桌检查等。(2)动态测试(简称测试):将被测程序在机器上运行来发现程序中的错误。动态测试包括2类方式:黑盒测试(测试程序的功能)白盒测试(测试程序的结构),3)测试的文档,(1)测试计划主体是测试内容说明。包括:测试项目名称,各项测试的目的、步骤、进度,测试用例的设计等。(2)测试报告主体是测试结果。包括:测试项目名称,实测结果与期望结果的比较,发现的问题,测试达到的效果等。(3)测试用例,(1)黑盒测试的基本概念不考虑程序的内部结构和处理过程,只在程序

10、的接口处进行测试,以检查程序功能是否能按规格说明书中的要求正常实现。黑盒测试又称为功能测试,其主要目的是为了发现程序在功能方面的错误。,6.3 黑盒测试方法,黑盒法分类,等价类化分法,边界值分析法,错误猜测法,因果图法,(2)等价类划分法基本思想:根据程序的I/O特性,将程序的输入域划分为有限个等价区段“等价类”,并从等价类中选出最有“代表性”的用例。等价类:是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值就等价于对这一类其它值的测试。如果一个测试用例不能检测出某个错误,那么等价类中其它测试用例也不能发现这一错误。等价类分为:有效等价类 对

11、于程序的规格说明是合理的、有意义的输入数据构成的集合。无效等价类 对于程序的规格说明,是不合理的,是没有意义的输入数据构成的集合。,等价类划分法的步骤划分等价类合理的(有效的)、不合理的(无效的)2类找出测试用例给每个等价类规定一个惟一的编号;设计一个新的测试用例,使其尽可能多地覆盖未被覆盖的有效等价类,直到所有合理等价类被覆盖完为止;设计一个测试用例,使其仅仅覆盖一个未被覆盖的无效等价类,直到所有不合理等价类被覆盖完为止。,例 如下是一个程序的功能描述,用等价类划分法设计测试用例。,功能描述:某城市的电话号码由3部分组成。假定被测程序能接收一切符合下述规定的电话号码,拒绝所有不符合规定的电话

12、号码。地区码:空白或3位数字;前缀:非0或1开头的3位数字;后缀:4位数字。,测试用例的设计:,(3)边界值分析基本思想:人们从长期的测试工作中发现,大量的错误是发生在输入或输出范围的边界,而不是在输入范围的内部。因此,针对各种边界情况设计测试用例,可以查出更多的错误。边界条件相对于输入与输出等价类直接在其边缘上,稍高于或稍低于其边界的这些状态条件。,边界值分析方法与等价类划分方法的区别:边界值不是从某个等价类中随便挑选一个作为代表,而是选出一个或几个元素,使得这个等价类的每个边界都要作为测试对象;边界值分析不仅仅考虑输入条件,同时还要考虑输出条件(即输出等价类)。边界值分析方法选择测试用例的

13、步骤首先应确定边界情况。其次,选取测试数据。应当选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。,例 边界值分析模块bubblesort(a,n)是对数组a中的n个整型数从小到大进行排序。假设n为10。那么可以用5组数据进行测试:0个数据1个数据9个数据10个数据11个数据,(4)错误猜测法 基本思想:根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误地测试用例。例:模块bubblesort(a,n)是对数组a中的n个整型数从小到大进行排序。假设n为10。那么可以用3组数据进行测试:0个数据已经从小到大排好序的10个

14、数据从大到小的10个逆序数据,(5)因果图法等价类划分和边界值分析方法,都是着重考虑输入条件,而未考虑输入条件之间的联系。如果在测试时必须考虑输入条件的各种组合则可能又会产生一些新的情况。因此,必须考虑使用一种适合于多种条件组合的动态测试方法,这就是因果图法把输入条件视为“因”,把输出条件视为“果”,采用逻辑图的形式来表达功能说明书中输入条件的各种组合与输出的关系。因果图方法最终生成的是判定表,它适合于检查程序输人条件的各种组合情况。,因果图方法实例某电力公司有A、B、C、D四类收费标准,并规定:居民用电 100度/月 按A类收费 100度/月按B类收费动力用电 10000度/月,非高峰,B类

15、收费 10000度/月,非高峰,C类收费 10000度/月,高峰,C类收费 10000度/月,高峰,D类收费,1,I1,2,B,4,A,C,3,5,D,I4,I3,I2,居民用电,动力用电,100度/月,10000度/月,高峰,把因果图转换为判定表,(1)白盒测试的基本概念白盒测试以程序的结构为依据进行测试,也称结构测试。(2)2类白盒测试:逻辑覆盖测试:将注意力放在流程图的各个判定框,使用不同的逻辑覆盖标准来表达对程序进行测试的详尽程度;路径覆盖测试:注意力放在程序执行路径,用程序图来代替流程图设计测试用例。,6.4 白盒测试方法,逻辑覆盖测试的5种覆盖准则:语句覆盖判定覆盖条件覆盖判定/条

16、件覆盖多重条件覆盖路径覆盖测试的3种覆盖准则:结点覆盖边覆盖路径覆盖,(3)白盒法设计测试用例的步骤1)选择逻辑覆盖标准。2)按照覆盖标准列出所有情况。3)选择确定测试用例。4)验证分析运行结果与预期结果。,(4)逻辑覆盖测试举例逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。主要利用流程图设计测试用例,重点是依据流程图中的判定框。语句覆盖测试数据如下表所示,满足语句覆盖准测。PROCEDURE EXAMPLE(A,B:REAL;VAR X:REAL)BEGIN IF(A1)AND(B=0)THEN X:=X/A;IF(A=2)OR(X1)THEN X:=X+1 END;,判定覆盖期

17、望结果应该有具体的值,这里用有颜色的线表示。测试数据如下表所示,满足判定覆盖准测。,判定1,判定2,条件覆盖期望结果应该有具体的值,这里用有颜色的线表示。测试数据如下表所示,满足条件覆盖准测。,判定1,判定2,判定/条件覆盖期望结果应该有具体的值,这里用有颜色的线表示。测试数据如下表所示,满足判定/条件覆盖准测。,判定1,判定2,多重条件覆盖期望结果应该有具体的值,这里用有颜色的线表示。测试数据如下表所示,满足多重条件覆盖准测。共8种组合条件:(1)A1,B=0(2)A1,B0(3)A1,B=0(4)A1,B0(5)A=2,X1(6)A=2,X1(7)A2,X1(8)A2,X1,注意:测试数据

18、对该情况并未测试到!,(5)路径覆盖测试举例结点覆盖:相当于语句覆盖边覆盖:相当于判定覆盖路径覆盖:每条可能的路径至少执行一次。如有循环至少进入一次。路径覆盖测试举例将流程图转换为程序图。确定路径。测试数据如下表所示,满足路径覆盖准测。路径覆盖准测是相当强的一种覆盖准则。,路径测试的特征满足结构测试的最低要求:即满足“完全覆盖”。完全覆盖(白盒测试的最低要求):完全覆盖:语句覆盖判定覆盖满足路径覆盖即满足完全覆盖完全覆盖被认为是白盒测试的最低要求。有利于安排循环路径的测试,综合例子 一个程序(由小到大对数组排序)如右图。要求:画出程序流程图将程序流程图转换为程序图计算该程序图的环域复杂度用白盒

19、法设计测试用例使其分别满足语句覆盖准则判定覆盖准则用边界值分析法设计用例用猜测法设计测试用例,sort(int a,int n)int i,j,temp;for(i=0;iaj+1)temp=aj;aj=aj+1;aj+1=temp;,解程序流程图程序图环域复杂度V(G)=m-n+2(连通图)=12-10+2=4V(G)=m-n+2=M-N+1(强连通图)=13-10+1V(G)=判定结点数1=3+1=4V(G)即为独立路径数。请补冲路径覆盖准则的测试。,解(续)设计测试用例使其满足语句、判定覆盖准则A=6,4,n=2A=6,2,4,n=3用边界值分析法设计测试用例A=4,n=1先给A赋值6个

20、数,A=8,4,6,5,7,1,但令n=7先给A赋值6个数,A=8,4,6,5,7,1,但令n=5用猜测法设计测试用例A=8,7,6,5,4,3,n=6A=1,2,3,4,5,6,n=6,6.5 软件测试的基本过程,(1)单元测试单元测试的目的在于发现各模块内部可能存在的各种差错,表明模块与其规范相矛盾。单元测试的优点:便于错误的定位单元测试需要从程序的内部结构出发设计测试用例。为提高效率,单元测试可以并行地独立进行。,单元测试的内容,模块,模块接口测试,局部数据结构测试,重要路径测试,错误处理测试,边界条件测试,I/O 参数值的个数、类型、次序、格式是否正确,I/O文件属性、操作是否正确等。

21、,数据说明是否正确、一致,变量及其初值定义是否正确等。,检查“错误处理程序”本身的错误。,边界条件常包括循环边界,最大最小值、控制流中等于、大于、小于的比较值等。,重要路径通常是指完成模块功能的主要路径,一般是控制结构。,单元测试的“测试环境”考虑到被测模块与其它模块的联系,因此测试时需要使用两类辅助模块(驱动模块、桩模块)来模拟其他模块。,驱动模块和桩模块驱动模块:模拟调用程序功能,用于向被测模块传递数据,接收、打印从被测模块返回的数据。桩模块:用于模拟那些由被测模块所调用的下属模块功能。驱动模块和桩模块的编写会给测试带来额外开销。因为它们在软件交付时不做为产品的一部分一同交付,而它们的编写

22、需要一定的工作量。特别是桩模块,不能只简单地给出“曾经进入”的信息。为了能够正确地测试软件,桩模块可能需要模拟实际子模块的功能,否则被测模块可能失败。,(2)集成测试单元测试进行完之后,就可以根据设计规定的软件体系结构,将经过单元测试的模块组装成具有良好一致性的结构完整的程序。集成测试的目的主要针对软件的结构设计,发现模块联接过程中出现的问题(即界面问题),以及集成后的模块的功能是否符合预定的功能等。测试的主要内容参数的个数、顺序、名称、传递方式、范围、类型等是否正确穿越模块接口的数据是否会丢失;各个子功能组合起来,能否达到预期要求的父功能;一个模块是否会对另一个模块的功能产生不利的影响;全局

23、数据结构,数据库接口是否有问题;单个模块的误差积累是否会放大,达到不可接受的程度。,集成测试的实施对于单元测试需要考虑的问题:对每个模块独立进行单元测试,然后集成?(非增量式)把一个待测模块组合到已经测试过的那些模块中?(增量式)增量式集成测试:自顶向下测试由底向上测试混合方式测试:是前面2种方式的结合。,自顶向下测试将模块按系统体系结构,沿控制层次自顶向下进行集成。,由底向上测试从最底层模块开始组装和测试。,不同集成策略的比较自顶向下集成测试优点较早地验证了主要的控制和判断点。如果主要控制有问题,尽早发现它能够减少以后的返工。功能可行性较早得到证实,还能够给开发者和用户带来成功的信心。缺点需

24、编制较多的桩模块,工作量较大,且桩模块很难真实模拟实际模块全部功能,部分测试内容只能在换上真实模块后再补充测试。使用较多的桩模块也增加了设计测试用例的困难。由底向上集成测试优点设计测试用例较容易。缺点主要的控制和判断点的验证较迟,功能可行性较不能较早得到证实,存在着返工较大的风险。,(3)确认测试 确认测试必须有用户积极参与,或者以用户为主进行。目的:确认组装完毕的程序是否满足SRS的要求。,确认测试内容,1)有效性测试 用黑盒测试来验证软件功能与需求是否一致;2)配置复审 目的是保证软件配置的所有元素(文档、报告、程序、表格、数据)都已经被正确地开发和分类;,Alpha 测试和Beta测试

25、如果一个软件是为大众开发的,让每个客户都进行正式的验收测试是不现实的。Alpha 测试:是开发者在场进行指导的情况下,用户进行的测试。由开发者用户使用中出现的错误和其它问题。Beta测试:是用户在自己的场所进行的测试。由用户记录遇到的问题,并定期报告给开发者。只有当Alpha 测试达到一定的可靠程度时,才能开始Beta测试,(4)系统测试 系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。系统测试的目的在于通过与系统的需求定义作比较,发现软件与系

26、统的定义不符合或与之矛盾的地方。,系统测试的种类批量测试:让程序处理大量的数据。强度测试:短时间内处理最多的数据。可使用性测试:力图发现使用上的问题或人为因素。性能测试:在一定负荷下的响应时间及处理速度。存储量测试:程序所需内、外、临时文件的大小。配置测试:每一类硬件的配置都要测试。可修改性测试可靠性测试安全性测试可恢复性测试,6.6 软件纠错,(1)程序错误的类型语法错误:编译是发现语法错误的最好工具。结构性错误:包括:结构异常、结构不全、结构多余等错误。结构性错误可以通过代码评审发现,也可以通过专门工具对代码作静态分析来发现。而编译是不能发现结构性错误的。功能性错误:程序功能与用户需求不相

27、符合的错误。产生功能性错误的原因:需求规格说明不清晰;或设计时对需求理解有错。功能性错误主要通过动态测试来发现。接口错误:,(1)程序错误的类型(续)接口错误:接口错误的主要症状有对全局变量的引用不当;调用子程序或函数时实际参数的类型、个数、顺序与形式参数不一致;模块对全局性数据的说明相互矛盾。接口错误是集成测试所检测的重点(即主要通过集成测试发现),也可以通过代码评审发现。系统错误:与被测软件程序赖以运行的计算机系统有关的、影响程序的测试与运行的情况。分为:系统本身有错的情况;对系统使用不当的情况。,(2)软件纠错 软件纠错也称为软件调试。软件纠错与软件测试不同。软件测试的目的是尽可能多地发

28、现软件中的错误。进一步诊断和改正程序中潜在的错误,则是纠错的任务。软件纠错活动由两部分组成:确定程序中可疑错误的确切性质和位置。对程序(设计,编码)进行修改,排除这个错误。,软件纠错的基本方法插入显示/打印语句,显示程序执行的中间结果、相关变量的内容;设置断点,以便查看程序运行的轨迹如设置某个断点后,程序并未停下来(即表明该程序段并没有运行);检查断点处的数据状态、变量值等。掩蔽部分不需要检查的程序段,以降低查错的难度和时间;蛮力纠错:打印存储器和寄存器的全部内容,然后在其中寻找出错的位置。虽然有时可以获得成功,但是更多的情况是浪费了机时、纸张和人力。,软件纠错的基本方法(续)试凑法:根据测试

29、发现的错误状况,和以往的经验设定一个可疑区域,然后采用一些简单的纠错手段(如增加一些重要变量值的动态显示等),进一步获取出错的细节信息,若找到出错原因,就进行修改,若未找到,则另设定一个可疑区域,继续找错。仅适用于结构较简单的程序。跟踪法:包括正向跟踪、反向跟踪。大体做法是:让程序分步执行,每执行完一条语句就暂停,然后检查当前的结果是否正确,若正确再继续分步执行。,软件纠错的基本方法(续)归纳法:从归纳法是一种从特殊推断一般的系统化思考方法。归纳法调试的基本思想是:从一些线索(错误征兆)着手,通过分析它们之间的关系以提出假设,如果假设被证明成立,则纠错,否则继续提出假设。演绎法:根据出错症状,先列出一些可能的出错原因,排除其中矛盾的的出错原因,然后对其它剩下的原因进行证实,从而确定真正的出错原因。,本讲小结,本讲主要介绍了教材第9章的内容。测试是软件工程中重要的内容。因此,同学门应该很好地加以学习,为将来从事软件质量保证、软件管理打下良好的基础。测试的基本概念、测试的基本方法(白、黑)、测试的基本过程中各阶段的任务和目的是本章的重点,也是考核的重点。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号