软件工程-第十四章-软件测试

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

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

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

资源描述

软件工程SoftwareEngineering第十四章软件测试14.1软件测试概述14.2测试方法14.3测试用例的设计14.4测试过程14.5调试小结14.1软件测试概述软件测试就是在软件投入运行前,对软件的需求分析、设计、实现编码进行最终审查。软件测试是为了发现错误而执行程序的过程。14.1.1软件测试的目的软件测试要求认定刚开发的软件是错误的,它的目的是找出错误所在,而不是“说明程序能正确地执行它应有的功能”,也不是“表明程序没有错误”。14.1.2软件测试的原则(1)测试用例由输入数据和预期的输出数据两部分组成。(2)在输入数据的选择上,不仅要选择合理的输入数据,还要选择不合理的输入数据。(3)要穷举测试是不可能的。(4)应该在真正的测试工作开始之前很长时间内,就根据软件的需求和设计来制定测试计划,在测试工作开始后,要严格执行,排除随意性。(5)长期保留测试用例。(6)对发现错误较多的程序段,应进行更深入的测试。(7)为了达到最佳的测试效果,应该有第三方来构造测试用例。14.2测试方法软件测试方法一般分为动态方法与静态测试方法。动态测试方法中又根据测试用例的设计方法不同,分为黑盒测试与白盒测试两类。14.2.1静态测试与动态测试1.静态测试静态测试是采用人工检测和计算机辅助静态分析的手段对程序进行检测,方法如下:(1)人工测试:是指不依靠计算机运行程序,而靠人工审查程序或评审软件。(2)计算机辅助静态分析:指利用静态分析软件工具对被测试程序进行特性分析,从程序中提取一些信息。2.动态测试动态测试与静态测试相反,主要是设计一组输入数据,然后通过运行程序来发现错误。14.2.2黑盒测试法与白盒测试法1.黑盒法该方法把被测试对象看成一个黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件的界面上进行测试,用来证实软件功能的可操作性,检查程序是否满足功能要求,是否能很好的接收数据,并产生正确的输出。2.白盒法该方法把测试对象看作一个透明的盒子,测试人员能了解程序的内容结构和处理过程,以检查处理过程为目的,对程序中尽可能多的逻辑路径进行测试,在所有的点检验内部控制结构和数据结构是否和预期相同。14.3测试用例的设计14.3.1白盒技术14.3.2黑盒技术14.3.1白盒技术由于白盒测试是结构测试,所以一般都是以程序的内部逻辑结构为基础来设计测试用例。1.逻辑覆盖追求程序内部的逻辑结构覆盖程序,当程序中有循环时,覆盖每条路径是不可能的,要设计使覆盖程序较高的或覆盖最有代表性的路径的测试用例。下面根据图14--1所示的程序,分别讨论几种常用的覆盖技术。图14--1一个被测试程序的流程图1)语句覆盖为了发现程序中的错误,程序中的每个语句都应该执行一次。语句覆盖是指使用足够多的测试数据,使被测试程序中每个语句至少执行一次。如图14--1是一个被测程序的程序流程图。如果选择的测试数据可以执行路径124,就保证程序流程图中的四个语句至少执行一次,根据条件,选择a=2,b=0,x=3作为测试数据,就能达到语句覆盖的测试标准。2)判定覆盖相对语句覆盖技术中无法对检查出判定条件中的错误,判定覆盖则设计出足够多的测试用例,使得被测程序中每个判定表达式都执行一次“真”和一次“假”的运行,从而使程序的每一个分支至少都通过一次,因此判定覆盖也称分支覆盖。对图14—1的观察,只要测试用例能通过路径124,135或者125,134,就可以让每个分支都被执行一次。为了达到这个测试目的,可以选择两组数据:a=3,b=0,x=1(通过路径125)a=2,b=1,x=2(通过路径134)3)条件覆盖条件覆盖测试将使得判定表达式中每个条件的各种可能的值都至少出现一次。在上述程序中有4个条件:a>1,b=0,a=2,x>1条件覆盖测试要求选择足够的数据,使得第一个判定表达式有下述各种结果出现:a>1,b=0,a≤1,b≠0并使第二个判定表达式出现如下的结果:a=2,x>1,a≠2,x≤1才能达到条件覆盖的标准。选择以下两组测试数据,就可满足上述要求:a=2,b=0,x=3(满足a>1,b=0,a=2,x>1,通过路径124)a=1,b=1,x=1(满足a≤1,b≠0,a≠2,x≤1,通过路径135)4)判定/条件覆盖该覆盖标准指设计足够的测试用例,使得判定表达式中的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次。对于上述程序,选择以下两组测试用例:a=2,b=0,x=3a=1,b=1,x=1该组测试数据不仅能满足判定条件覆盖要求,也满足条件覆盖的测试要求。5)条件组合覆盖条件组合覆盖是比较强的覆盖标准,顾名思义,按此标准设计的测试用例,使得每个判定表达式中条件的各种可能的值的组合都至少出现一次。上述程序中,两个判定表达式共有4个条件,因此有8种组合:①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下面4组测试用例就可以满足条件组合覆盖标准:a=0,b=0,x=2覆盖条件组合①和⑤,通过路径124a=2,b=1,x=1覆盖条件组合②和⑥,通过路径134a=1,b=0,x=2覆盖条件组合③和⑦,通过路径134a=1,b=1,x=1覆盖条件组合④和⑧,通过路径1356)路径覆盖因为存在选择语句,因此从输入到输出有多条路径。路径覆盖就是要求设计足够多的测试数据,可以覆盖被测程序中所有可能的路径。该程序中,共有4条路径,选择以下测试用例,就可以覆盖程序中的4条路径:a=2,b=0,x=2覆盖路径124,覆盖条件组合①和⑤a=2,b=1,x=1覆盖路径134,覆盖条件组合②和⑥a=1,b=1,x=1覆盖路径135,覆盖条件组合④和⑧a=3,b=0,x=1覆盖路径125,覆盖条件组合①和⑧可看出满足路径覆盖却未满足条件组合覆盖。表14-1列出了这6种覆盖标准的要求。表14–16种覆盖标准的对比发弱现错误能力强语句覆盖每条语句至少执行一次判定覆盖每个判定的每个分支至少执行一次条件覆盖每个判定的每个条件应取到各种可能的值判定/条件覆盖同时满足判定覆盖和条件覆盖条件组合覆盖每个判定中各条件的每一种组合至少出现一次路径覆盖使程序中每一条可能的路径至少执行一次在前5种测试技术中,都是针对单个判定或判定的各个条件值上,其中条件组合覆盖发现错误能力最强,凡满足其标准的测试用例,也必然满足前4种覆盖标准。2.循环覆盖除了选择结构外,循环也是程序的主要逻辑结构,要覆盖含有循环结构的所有路径是不可能的,但可通过限制循环次数来测试,一般有以下的方法来设计对循环结构的测试。1)单循环。设n为可允许执行循环的最大次数。可设计测试数据实现下列的情况:(1)跳过循环。(2)只执行循环一次。(3)执行循环m次,其中m<n。(4)执行循环n次和n+1次。2)嵌套循环对嵌套循环结构的测试步骤为:(1)将外循环固定,对内层进行单循环测试。(2)由里向外,进行下一层的循环测试。3.基本路径测试在实际问题中,一个不太复杂的程序路径都是一个庞大的数字。将覆盖的路径数压缩到一定的限度内可简化测试,例如,循环体只执行一次。基本路径测试就是在程序流程图的基础上,通过分析导出基本路径集合,从而设计测试用例,保证这些路径至少通过一次。设计基本路径测试的步骤为:(1)以详细设计或源程序为基础,导出程序流程图的拓朴结构——程序图。程序图是简化了的程序流程图,它是反映程序流程的有向图,其中小圆圈称为结点,代表了流程图中每个处理符号(矩形、菱形框),用箭头的连线表示控制流向,称为程序图中的边或路径。图14--2(a)是一个程序流程图,可以将它转换成图14--2(b)的程序图(假设菱形框表示的判断内设有复合的条件)。图14--2程序流程图和程序图(a)程序流程图(b)程序图在转换时注意:一条边必须终止于一结点,在选择结构中的分支汇聚处即使无语句也应有汇聚结点;若判断中的逻辑表达式是复合条件,应分解为一系列只有单个条件的嵌套判断,如对于图14--3(a)的复合条件的判定应画成图14--3(b)所示的程序图。图14--3复合条件的程序图(a)程序(b)程序图(2)程序图G的环路复杂性V(G)的计算。McCabe定义程序图的环路复杂性为此平面图中区域的个数。区域个数为边和结点圈定的封闭区域数加上图形外的区域数1。例如图14--2(b)的V(G)=4,还可以按如下两种方法计算:V(G)=判定结点数+1=3+1=4。V(G)=边的数量-节点数量+2=11-9+2=4。(3)确定只包含独立路径的基本路径集。环路复杂性可导出程序基本路径集合中的独立路径条数,这是确保程序中每个执行语句至少执行一次所必需的测试用例数目的上界。例如,在图14--2(b)所示的图中,一组独立的路径是:path1:1—11path2:1—2—3—4—5—10—1—11path3:1—2—3—6—8—9—10—1—11path4:1—2—3—6—7—9—10—1—11从例中可知,一条新的路径必须包含有一条新边。(4)设计测试用例,确保基本路径集合中每条路径的执行。14.3.2黑盒技术黑盒测试是注重于测试软件的功能需求,因此需要研究需求说明和概要设计说明中有关程序功能或输入、输出之间的关系等信息,并且要根据功能得到预期的输出结果,从而与测试后的结果进行分析比较。1.等价类划分等价类划分是选择测试子集的办法。它将输入数据域按有效的或无效的(也称合理的或不合理的)划分成若干个等价类,认为测试等价类的代表值的结果就等于对该类其他值的测试。从程序的功能说明(如需求说明书)中找出每个输入条件(通常是一句话或一个短语),然后将每一个输入条件划分成为两个或多个等价类,将其列表,其格式为表14–2所示。表14–2等价类表输入条件合理等价类不合理等价类………表14–2中合理等价类是指各种正确的输入数据,不合理的等价类是其他错误的输入数据。2)确定测试用例完成等价类的划分后,就可以按以下步骤设计测试用例:(1)为每一个等价类编号。(2)设计一个合理等价类的测试用例,对于各个输入条件,使其尽可能多地覆盖尚未被覆盖过的合理等价类。(3)设计一个不合理等价类的测试用例。例如:有一报表处理系统,要求用户输入处理报表的日期。假设日期限制在1990年1月至1999年12月,即系统只能对该段时期内的报表进行处理。如果用户输入的日期不在此范围内,则显示输入错误信息。该系统规定日期由年、月的6位数字字符组成,前4位代表年,后两位代表月。现用等价类划分法设计测试用例,来测试程序的“日期检查功能”。①划分等价类并编号:划分成3个有效等价类,7个无效等价类,如表14–3所示。表14–3“报表日期”的输入条件的等价类表输入等价类合理等价类不合理等价类报表日期的类型及长度1.6位数字字符2.有非数字字符3.少于6个数字字符4.多于6个数字字符年份范围5.在1990~1999之间6.小于19907.大于1999月份范围8.在1~12之间9.等于010.大于12②为合理等价类设计测试用例,对于表中编号为1,5,8对应的3个合理等价类,用一个测试用例覆盖。测试数据期望结果覆盖范围199905输入有效1,5,8③为每一个不合理等价类至少设计一个测试用例:测试数据期望结果覆盖范围99MAY输入无效219995输入无效31999005输入无效4198912输入无效6200001输入无效7199900输入无效9199913输入无效10在不合理的测试用例中,不能出现相同的测试用例,否则相当于一个测试用例覆盖了一个以上不合理等价类,比如不能用99MAY来同时覆盖2和3。否则即使出错,也不知道原因是2还是3。2.边界值分析边界值是指输入等价类或

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

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

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

×
保存成功