第3天 软件测试方法_第1页
第3天 软件测试方法_第2页
第3天 软件测试方法_第3页
第3天 软件测试方法_第4页
第3天 软件测试方法_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

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

文档简介

软测基础理论软件测试方法内容复习软件的定义软件测试的定义软件的生命周期软件测试的生命周期一条缺陷报告包括哪些主要内容一条用例包括哪些主要内容测试计划包括哪些内容V模型缺陷的管理流程软件测试的相关原则软件测试的分类软件测试可按照不同的角度,有不同的分类方法。按照开发阶段划分——单元测试、集成测试、确认测试、系统测试和验收测试。按照测试实施组织划分——开发方测试、用户测试和第三方测试。按照测试技术划分——白盒测试、黑盒测试和灰盒测试。按照测试方式划分——静态测试和动态测试、手工测试、自动测试。按照测试目的划分——功能测试、健壮性测试、性能测试、压力测试、用户界面测试、可靠性测试、安全性测试、文档测试、恢复测试、兼容性测试等、冒烟测试、回归测试、安装测试。2.1软件测试方法概述2.2静态测试与动态测试2.3黑盒测试2.4白盒测试2.5黑盒测试与白盒测试比较小结第2章软件测试方法软件测试的策略和方法静态测试方法动态测试方法人工测试方法计算机辅助静态分析方法白盒测试方法黑盒测试方法2.1软件测试方法概述1.从是否需要执行被测软件的角度分类静态测试——通过对被测程序的静态审查,发现代码中潜在的错误。它一般用人工方式脱机完成,故亦称人工测试或代码评审(CodeReview);也可借助于静态分析器在机器上以自动方式进行检查,但不要求程序本身在机器上运行。动态测试——使用和运行被测软件,通常意义上的测试。动态测试的对象必须是能够由计算机真正运行的被测试的程序,它包含黑盒测试和白盒测试。

2.从软件测试用例设计方法的角度分类黑盒测试——从用户角度出发的测试,又称为功能测试、数据驱动测试和基于规格说明的测试。

把被测试程序当作一个黑盒,忽略程序内部的结构的特性,测试者在只知道该程序输入和输出之间的关系或程序功能的情况下,依靠能够反映这一关系和程序功能需求规格的说明书,来确定测试用例和推断测试结果的正确性。白盒测试——基于产品的内部结构来进行测试,又称为结构测试,逻辑驱动测试或基于程序的测试。主要检查内部操作是否按规定执行,软件各个部分功能是否得到充分利用,即根据被测程序的内部结构设计测试用例,测试者需要预先了解被测试程序的结构。3.从软件测试的策略和过程的角度分类。单元测试——针对每个单元的测试,它确保每个模块能正常工作,主要采用白盒测试方法,用以发现内部错误。集成测试——对已测试过的模块进行组装后的测试,主要检验与软件设计相关的程序结构问题。主要采用黑盒测试和白盒测试两种方法,来验证多个单元模块集成到一起后是否能够协调工作。确认测试——检验所开发的软件能否满足所有功能和性能需求的最后手段,通常采用黑盒测试方法。系统测试——是检测被测软件与系统的其他部分的协调性,通常采用黑盒测试方法。验收测试——是软件产品质量的最后一关,主要从用户的角度着手,其参与者主要是用户和少量的程序开发人员,通常采用黑盒测试方法。2.1软件测试方法概述2.2静态测试与动态测试2.3黑盒测试2.4白盒测试2.5黑盒测试与白盒测试比较小结第2章软件测试方法根据程序是否运行而分。2.2静态测试与动态测试静态方法的主要特征是对软件进行分析、检查和审阅,不实际运行被测试的软件。因此,静态方法常称为“分析”,静态分析是对被测程序进行特性分析的一些方法的总称。所谓静态分析,就是不需要执行所测试的程序,而只是通过扫描程序正文,对程序的数据流和控制流等信息进行分析,找出系统的缺陷,得出测试报告。通过静态测试,可找出30~70%的逻辑设计错误。2.2.1静态测试静态测试包括:代码检查静态结构分析代码质量度量它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。静态测试的内容:软件配置(需求规格说明书、软件设计说明书、源程序等)做检查和审阅,包括:是否符合标准和规范;通过结构分析、流图分析、符号执行指出软件缺陷;

动态方法是通过运行软件来检验软件的动态行为和运行结果的正确性。

动态测试是真正运行被测程序,在执行过程中,通过输入有效的测试用例,对其输入与输出的对应关系进行分析,以达到检测的目的。两个基本要素:被测试程序、测试数据(测试用例)2.2.2动态测试动态测试方法的基本步骤:选取定义域的有效值,或选取定义域外的无效值;对已选取值决定预期的结果;用选取值执行程序;执行结果与预期的结果相比,不吻合则说明程序有错。不同的测试方法各自的目标和侧重点不一样,在实际工作中要将静态测试和动态测试结合起来,以达到更加完美的效果。在动态测试中,又可有基于程序结构的白盒测试(或称为覆盖测试)和基于功能的黑盒测试。2.1软件测试方法概述2.2静态测试与动态测试2.3黑盒测试2.4白盒测试2.5黑盒测试与白盒测试比较小结第2章软件测试方法黑盒测试(Black-boxTesting)又称为功能测试、数据驱动测试和基于规格说明的测试。2.3.1黑盒测试方法概述2.3黑盒测试方法软件输入输出“黑盒”可理解为程序或软件装在一个漆黑的盒子里,故盒子内的程序内部结构和内部特性对测试人员是不可见的,只明确要做到什么。测试人员根据软件的需求规格说明书设计测试用例,依靠被测程序输入和输出之间的关系或程序的功能设计,对程序功能和程序接口进行测试。黑盒测试是从用户角度出发进行的测试。很明显,如果外部特性本身有问题或规格说明书的规定有误,用黑盒测试方法是发现不了的。黑盒测试主要是为了发现以下错误:是否有不正确或遗漏了的功能;在接口上,输入能否正确地接受,能否输出正确的结果;是否有数据结构错误或外部信息(例如数据文件)访问错误;性能上是否能够满足要求;是否有初始化或终止性错误。黑盒测试的优点:黑盒测试不考虑软件的具体实现过程,当在软件实现的过程发生变化时,测试用例仍然可以使用;黑盒测试用例的设计可以和软件实现同时进行,这样能够压缩总的开发时间,从而加快了软件测试与开发的速度。黑盒测试不仅能够找到大多数其他测试方法无法发现的错误,而且一些外购软件、参数化软件包以及某些自动生成的软件,由于无法得到源程序,在一些情况下只能选择黑盒测试。黑盒测试的局限性:从程序的界面上进行测试,有时难以查找出错误的具体原因和位置;无法发现需求规格说明本身存在的问题。典型的黑盒测试方法包括主要包括等价类划分法、边界值分析法、错误推测法、因果图法、决策表表法、正交试验法、场景法等。这些方法是比较实用的,在项目中采用什么方法,在设计具体的测试方案时自然要针对开发项目的特点对设计方法进行适当的选择。1.等价类划分法概述

等价类划分法是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。2.3.2等价类划分法等价类是被测程序输入域的一个子集合,该输入集合中的数据对于揭露程序中的错误是都是等效的,它们具有等价特性,所有等价类的并集就是整个输入域。对某等价类中的代表值的测试就相当于对等价类中所有值的测试。如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能发现同样的错误;如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误。使用等价类划分法时,应仔细分析需求规格说明书来划分等价类。软件不能只接收合理有效的数据,也要具有处理异常数据的功能,因此,等价类又分为有效等价类和无效等价类。有效等价类是指该等价类中的输入数据是符合需求规格说明的。利用有效等价类可以检验程序是否满足规格说明所规定的功能和性能。无效等价类是指该等价类中的数据是违反需求规格说明的。利用无效等价类可以检验程序异常情况的处理。有效等价类和无效等价类都是使用等价类法时所必需的。使用等价类划分法设计测试用例步骤:首先必须在分析需求规格说明的基础上划分等价类;然后建立等价类表,列出所有划分出的等价类;再根据已列出的等价类表,按以下步骤确定测试用例:为每一个等价类规定一个唯一的编号;设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这个过程,直至所有的有效等价类均被测试用例所覆盖;设计一个新的测试用例,使其仅覆盖一个无效等价类,重复这个过程,直至所有的无效等价类均被测试用例所覆盖。划分等价类的规则:

(1)如果输入条件规定了取值范围,可定义一个有效等价类和两个无效等价类。例如,

输入值是学生成绩,范围是0~1000100

有效等价类0≤成绩≤100无效等价类成绩>100无效等价类

成绩<0(2)如果输入条件代表集合的某个元素,则可定义一个有效等价类和一个无效等价类。例如,程序要进行平方根函数的运算,则“≥0”的数为有效等价类,“<0”的数为无效等价类。(3)如规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个允许的输入值是一个有效等价类,并有一个无效等价类(所有不允许的输入值的集合)。例如,说明学历输入条件可为:专科、本科、硕士、博士四种之一,则分别取这四个值作为四个有效等价类,把四种学历之外的任何学历作为无效等价类。以三角形问题为例,输入条件是:三个数,分别作为三角形的三条边都是整数取值范围在1~100之间认真分析上述的输入条件,可以得出相关的等价类表(包括有效等价类和无效等价类),如下表所示。2.常见等价类划分形式(1)标准等价类测试标准等价类测试不考虑无效数据值,测试用例使用每个等价类中的一个值。通常,标准等价类测试用例的数量和最大等价类中元素的数目相等。(2)健壮等价类测试健壮等价类测试主要考虑了无效等价类。对有效输入,测试用例从每个有效等价类中取一个值;对无效输入,一个测试用例有一个无效值,其他值均取有效值。健壮等价类测试存在两个问题:需要花费精力定义无效测试用例的期望输出;对强类型的语言没有必要考虑无效的输入

。(3)对等区间划分它将被测对象的输入/输出划分成一些区间,被测软件对一个特定区间的任何值都是等价的。形成测试区间的数据不只是函数/过程的参数,也可以是程序可以访问的全局变量、系统资源等,这些变量或资源可以是以时间形式存在的数据,或以状态形式存在的输入/输出序列。对等区间划分假定位于单个区间的所有值对测试都是对等的,应为每个区间的一个值设计一个测试用例。【例】某报表处理系统要求用户输入处理报表的日期,日期限制在2003年1月至2008年12月,即系统只能对该段期间内的报表进行处理,如日期不在此范围内,则显示输入错误信息。系统日期规定由年、月的6位数字字符组成,前四位代表年,后两位代表月。如何用等价类划分法设计测试用例,来测试程序的日期检查功能?第一步:等价类划分“报表日期”输入条件的等价类表第二步:为有效等价类设计测试用例对表中编号为1,2,3的3个有效等价类用一个测试用例覆盖:(1)6位数字字符(2)年在2003~2008之间(3)月在1~12之间第三步:为每一个无效等价类设至少设计一个测试用例不能出现相同的测试用例1.边界值分析法概述大量的测试实践表明,很多错误是发生在输入或输出数据范围的边界上。因而针对各种边界情况设计测试用例,有利于揭露程序中的错误。

如判断三角形类型的例子中,若此3条边能构成一个普通的三角形,必须满足A>0、B>0、C>0、A+B>C、B+C>A、A+C>B,对于等价类A>0,其边界是A=0,可针对此边界设计测试用例,以验证程序在A=0时的输出是否正确,若A=0时程序的输出仍为普通三角形,则说明程序中存在错误。2.3.3边界值分析法边界值分析法与等价类划分法区别:(1)边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。着重测试的边界情况(2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况边界值分析法(BVA)是一种对等价类划分法的补充。使用边界值分析法时,应针对等于、刚好大于或刚好小于各输入等价类和输出等价类边界值的情况设计测试用例。如果在悬崖峭壁边可以自信地安全行走,平地就不在话下。

如果软件在能力达到极限时能够运行,那么在正常情况下就不会出什么问题。软件边界与悬崖很类似应用边界值分析法设计测试用例应遵循的原则:如果输入条件规定了值的范围,则应该选取刚达到这个范围的边界值,以及刚刚超过这个范围边界的值。如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少1、比最大个数多1的数。根据规格说明的每一个输出条件,分别使用以上两个原则。如果程序的规格说明给出的输入域或者输出域是有序集合(如有序表、顺序文件等),则应选取集合的第一个元素和最后一个元素。如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界值作为测试用例。分析规格说明,找出其他可能的边界条件。边界值分析法是对输入的边界值进行测试。在测试用例设计中,需要对输入的条件进行分析并且找出其中的边界值条件,应当选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。2.边界条件与次边界条件提出边界条件时应注意:测试临近边界的合法数据,以及刚超过边界的非法数据。越界测试:对于最大值简单地加1或很小的数对于最小值简单地减1或很小的数在多数情况下,边界值条件是基于应用程序的功能设计而需要考虑的因素,可以从软件的规格说明或常识中得到,也是最终用户通常最容易发现问题的。然而,在测试用例设计过程中,某些边界值条件是不需要呈现给用户的,或者说用户是很难注意到这些问题,但这些边界条件同时确实属于检验范畴内的边界条件,称为内部边界值条件或次边界值条件。主要有下面几种:如果软件测试问题包含确定的边界,那么数据类型可能是:数值字符位置数量速度地址尺寸……还要考虑数据类型的特征:第一个/最后一个最小值/最大值开始/完成空/满最慢/最快相邻/最远超过/在内……位、字节、字、千、兆、吉、太ASCII和Unicode3.边界值分析法测试用例

以三角形问题为例,要求输入三个整数a、b、c,分别作为三角形的三条边,取值范围在1~100之间,判断由三条边构成的三角形类型为等边三角形、等腰三角形、一般三角形(包括直角三角形)以及非三角形。如表2-9所示给出了边界值分析测试用例。表2-9边界值分析测试用例“报表日期”边界值分析法测试用例2.3.4决策表法1.决策表法概述在一些数据处理问题中,某些操作是否实施依赖于多个逻辑条件的取值。在这些逻辑条件取值的组合所构成的多种情况下,分别执行不同的操作。决策表是分析和表达多个逻辑条件下执行不同操作情况的工具,能表示输入条件的组合以及与每一输入组合相对应的动作组合。可以把复杂逻辑关系和多种条件组合的情况表达的比较明确。决策表通常由四部分组成条件桩条件项动作桩动作项规则列出了问题的所有可能的条件,条件的先后次序无关紧要。列出了问题规定的可能采取的操作,这些操作的排列顺序没有约束。针对条件桩给出的条件列出所有的条件取值组合。有若干个条件项,每一条件项为一个条件取值组合。与条件项紧密相关,列出在条件项的各组取值情况下应该采取的动作。动作项的数目与条件项相等。一种条件取值组合和与其对应的动作组合(即判定表中贯穿条件项和动作项的一列)构成了判定表中的一个规则。条件取值组合的数目就是规则的数目。根据软件规格说明,建立决策表的步骤如下:确定规则的个数。假如有n个条件,每个条件有两个取值(由于每个原因可取0或1),故有2n种规则;列出所有的条件桩和动作桩;填入条件项;填入动作项,得到初始决策表;化简。合并相似规则(相同动作)。在简化并得到最终决策表后,只要选择适当的输入,使决策表每一列的输入条件得到满足即可生成测试用例。以下列问题为例给出构造决策表的具体过程。如果某产品销售好并且库存低,则增加该产品的生产;如果该产品销售好,但库存量不低,则继续生产;若该产品销售不好,但库存量低,则继续生产;若该产品销售不好,且库存量不低,则停止生产。确定规则的个数。有2个条件(销售、库存),故有22=4种规则。列出所有的条件桩和动作桩。填入条件项。填入动作项,得到初始决策表,如下表所示。2.决策表法的应用决策表能够将复杂的问题按照各种可能的情况全部列举出来,因此能够设计出完整的测试用例集合。条件——输入动作——输出分析如下:确定规则的个数。三角形问题的决策表有4个条件,每个条件可以取两个值(真值和假值),所以应该有24=16种规则。列出所有条件桩和动作桩。以三角形问题为例,要求输入三个整数a、b、c,分别作为三角形的三条边,取值范围在1~100之间,判断由三条边构成的三角形类型为等边三角形、等腰三角形、一般三角形(包括直角三角形)以及非三角形。填写条件项。填写动作项,从而得到初始决策表。简化决策表。合并相似规则后得到三角形问题的简化决策表。根据决简化后的决策表,可设计如下测试用例:2.3.5因果图法1.因果图法等价类划分法、边界值分析法在对输入条件的考虑中,并未重视输入条件的组合和各个输入条件之间的相互制约关系。当输入存在若干种可能的组合时,相应能产生多个动作,因此,必须对这些组合加以考虑,测试程序在某种输入组合的情况下能否完成规格说明书中预先规定的功能。因果图是一种描述输入条件的组合及每种组合对应的输出的图形化工具。可在因果图的基础上设计测试用例。它适合于检查程序输入条件的各种情况的组合。在因果图中使用4种符号分别表示4种因果关系。用直线连接左右节点,其中左节点Ci表示输入状态(或称原因),右节点ei表示输出状态(或称结果)。Ci和ei都可取值0或1,0表示某状态不出现,1表示某状态出现。表示恒等。若C1是1,则e1也是1;若C1是0,则e1为0。表示非。若C1是1,则e1是0;若C1是0,则e1为1。表示或。若C1或C2或C3是1,则e1是1;若C1、C2、C3全为0,则e1为0。表示与。若C1和C2都是1,则e1是1;只要C1、C2、C3中有一个为0,则e1为0。在实际问题中,输入状态相互之间还可能存在某些依赖关系,我们称之为约束。例如,某些输入条件不可能同时出现。输出状态之间也往往存在约束,在因果图中,以特定的符号标明这些约束。表示E约束(异)。a和b中最多有一个可能为1,即a和b不能同时为1。表示I约束(或)。a、b和c中至少有一个必须是1,即a、b和c不能同时为0。表示O约束(唯一)。a和b中必须有一个且仅有一个为1。表示R约束(要求)。a是1时,b必须是1,即a是1时,b不能是0。对输出条件的约束只有M约束。M约束(强制):若结果a是1,则结果b强制为0。因果图法最终要生成决策表。因果图法生成测试用例的步骤:分析出等价类输入与输入输入与输出软件规格说明书将对应的输入与输入之间,输入与输出之间的关系连接起来,并且将其中不可能的组合情况标注成约束或者限制条件,形成因果图。将决策表的每一列作为依据,设计测试用例。2.因果图法测试用例某软件规格说明中包含这样的要求:输入的第一个字符必须是A或B,第二个字符必须是一个数字,在此情况下进行文件的修改;但如果第一个字符不正确,则给出信息L;如果第二个字符不是数字,则给出信息M。(1)分析程序的规格说明,列出原因和结果。原因:C1----第一个字符是AC2----第一个字符是BC3----第二个字符是一个数字结果:e1----给出信息L

e2----修改文件

e3----给出信息M(2)将原因和结果之间的因果关系用逻辑符号连接起来,得到因果图。因为C1和C2不可能同时为1,即第一个字符不可能既是A又是B,在因果图上可对其施加E约束,得到具有约束的因果图。(3)将因果图转换成决策表。(4)设计测试用例。因为C1和C2不可能同时为1,所以排除决策表中同时为1的情况,可以设计出6个测试用例。黑盒测试法除此之外,还有错误推测法、正交试验法、场景法、功能图法等。错误推测法:根据经验、直觉和预感来进行测试。缺省值、空白、空值、零值、无输入条件正交试验设计方法:从大量的试验数据中挑选适量的、有代表性的数据,从而合理安排测试的一种试验设计方法。它能缩减测试用例数目。场景法:运用场景来对系统的功能点或业务流程的描述,从而提高测试效果。一般包含基本流和备用流,从一个流程开始,通过描述经过的路径来确定的过程,经过遍历所有的基本流和备用流来完成整个场景。2.3.6各种黑盒测试方法的选择在测试实施之前,必须确定将要采用的黑盒测试策略和方法,并以此为依据制定详细的测试方案。确定黑盒测试方法时应该遵循以下原则:根据程序的重要性和一旦发生故障将造成的损失程度来确定测试等级和测试重点。认真选择测试策略,以便能尽可能少地使用测试用例,发现尽可能多的程序错误。测试需要找到一个平衡点。黑盒测试方法的综合使用策略:(1)首先进行等价类划分,包括输入条件和输出条件的等价划分,将无限测试变成有限测试。等价类划分也常是边界值方法的基础。(2)在任何情况下都必须使用边界值分析方法。经验表明用这种方法设计出的测试用例发现程序错误的能力最强。(3)测试人员可以根据经验用错误推测法追加一些测试用例。(4)如果程序的功能说明中含有输入条件的组合情况,则可选用因果图法和判定表法。(5)对于参数配置类的软件,要用正交试验法选择较少的组合方式达到最佳效果。(6)对于业务流清晰的系统,可以利用场景法。2.1软件测试方法概述2.2静态测试与动态测试2.3黑盒测试2.4白盒测试2.5黑盒测试与白盒测试比较小结第2章软件测试方法2.4白盒测试白盒测试也称作结构测试、逻辑驱动测试、开盒测试、玻璃盒测试、基于覆盖的测试。“白盒”将程序形象地比喻为放在一个透明的盒子里,故测试人员了解被测程序的内部结构。测试人员利用程序的内部逻辑结构和相关信息设计测试用例,对程序的内部结构和每条路径进行测试,力求提高测试覆盖率;检验内部动作是否按照规格说明书的规定正常进行。例如:一个执行20次的循环的小程序。包含的不同执行路径数达520条,对每一条路径进行测试需要1毫秒,假定一年工作365×24小时,要想把所有路径测试完,需3170年。白盒方法和黑盒方法一样,也不能做到穷举测试。对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。所以,当程序中有循环时,覆盖每条路径是不可能的,要设计出覆盖程度较高的或覆盖最有代表性的路径的测试用例。在白盒测试中,测试人员必须在仔细研究程序的内部结构的基础上,从数量极大的可用测试用例中精心挑选尽可能少的测试用例,来覆盖程序的内部结构。白盒测试的主要方法有逻辑覆盖、基本路径测试等,主要用于软件验证。白盒测试方法的分类:静态测试方法代码检查法、静态结构分析法、代码质量度量法动态测试方法逻辑覆盖法、基本路径测试法、控制结构测试、程序插装等主要检查代码和设计的一致性,代码是否遵循标准,代码的可读性,代码的逻辑正确性,代码结构的合理性等。代码检查应在编译和动态测试之前进行,并且应尽早进行。包括桌面检查、代码审查和走查等。主要以图形的方式表现程序的内部结构,供测试人员分析。通过使用测试工具分析程序源代码的系统结构、数据结构、数据接口、内部控制逻辑等内部结构,生成函数调用关系图、模块控制流图、内部文件调用关系图、子程序表、宏和函数参数表等各类图形图表,以清晰地表示程序的内部结构,供测试人员对其进行分析,进而查找程序中的错误。根据ISO/IEC9126国际标准的定义,对软件质量的功能性、可靠性、可用性、效率、可维护性、可移植性六个方面构造软件的静态质量度量模型,通过量化的数据评估被测程序的质量。2.4.1逻辑覆盖测试逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。要求测试者完全了解程序的结构和处理过程,按照程序内部的逻辑测试,检验程序中的每条通路是否都能按预定要求正确工作。常用的逻辑覆盖测试方法有:语句覆盖、判定覆盖、条件覆盖、“判定-条件”覆盖、条件组合覆盖及路径覆盖。假设有如下程序段:IF((A>1)AND(B=0))

THENX=X/AIF((A=2)OR(X>1))

THENX=X+1a、b、c、d、e是控制流程图上的若干程序点。1.语句覆盖:设计足够多的测试用例,使被测程序中的每条可执行语句至少执行一次。在上述程序段中若要做到语句覆盖,程序的执行路径应是ace,为此可设计如下的测试用例:A=2,B=0,X=4。注意:A、B、X的值这里为输入值,严格说来,测试用例还应包括预期输出,在此省略,下同。思考:1、第一个判定的运算符“AND”错成运算符“OR”或是第二个判定中的运算符“OR”错成运算符“AND”,仍使用上面的测试用例,路径是怎么样的?2、第二个条件语句中X>1误写成X>0,路径是怎么样的?程序仍将按流程图上的路径ace执行,上述测试用例也不能发现错误!语句覆盖是比较弱的覆盖标准。2.判定覆盖:设计足够的测使用例,使程序中的每个判定至少都获得一次“真”和“假”值,或者说使得程序中的每一个取“真”分支和取“假”分支至少经历一次,也称为分支覆盖。若要实现判定覆盖,则需覆盖ace和abd两条路径,或覆盖acd和abe两条路径,可设计如下两组测试用例:A=2,B=0,X=3(覆盖路径ace)A=1,B=0,X=1(覆盖路径abd)测试用例:A=2B=0X=3A=1B=0X=1但是如果程序段中的第2个判定条件X>1如果错写为X<1,使用上述测试用例,照样能按原路径执行(abe),而不影响结果。也就是说,只达到判定覆盖仍无法确定判断内部条件的错误。注意:上述两组测试用例不仅满足了判定覆盖,同时还做到了语句覆盖。所以,若实现了判定覆盖,则必然实现了语句覆盖。从这一点看“判定覆盖”比“语句覆盖”更强一些。3.条件覆盖:指设计若干个测试用例,使每个判定中的每个条件的可能取值至少出现一次。两个判定中共有4个条件。条件覆盖应使以下8种结果成立:A>1,A≤1,B=0,B≠0,A=2,A≠2,X>1,X≤1为覆盖这8种结果,可设计如下两组测试用例:A=2,B=0,X=4(覆盖A>1、B=0、A=2、X>1,执行路径ace)A=1,B=1,X=1(覆盖A≤1、B≠0、A≠2、X≤1,执行路径abd)两个测试用例A=2B=0X=4和A=1B=1X=1在覆盖了4个条件的8种情况的同时,把两个判断的4个分支b、c、d和e也覆盖了。是否可以说,达到了条件覆盖,也就必然实现了判定覆盖呢?假定使用测试用例A=1B=0X=3和A=2B=1X=1可以看出,覆盖了条件的测试用例不一定能覆盖分支。事实上,它只覆盖了4个分支中的两个(b和e)。判定覆盖却只关心整个判定表达式的值。4.判定—条件覆盖:设计足够的测使用例,使得判定中每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。若要实现判定—条件覆盖,可设计如下两组测试用例:A=2,B=0,X=4(执行路径ace)A=1,B=1,X=1(执行路径abd)若实现了判定—条件覆盖,则必然也实现了判定覆盖和条件覆盖。从表面上看上述两组测试可以满足覆盖图中的4个判断分支和8个条件取值。但是它们正好是为了满足条件覆盖的测试用例,而第1组测试用例也是语句覆盖的测试用例,若第二个判断表达式中的条件“A=2ORX>1”错写成了“A=2ORX<1”,当A=2的测试为真的时候,是不可能发现这个逻辑错误的。原因在于含有AND和OR的逻辑表达式中,某些条件将抑制其他条件,如逻辑条件表达式AANDB,如果A为“假”,则整个表达式的值为“假”,这个表达式中另外的几个条件就不起作用了,所以就不再检查条件B了,这样B中的错误就发现不了。5.条件组合覆盖:设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。

在上面的例子中的每个判定包含有两个条件,这两个条件在判定中有8种可能的组合:1)A>1,B=0 记为T1,T22)A>1,B≠0记为T1,F23)A≤1,B=0记为F1,T24)A≤1,B≠0记为F1,F25)A=2,X>1 记为T3,T46)A=2,X≤1记为T3,F47)A≠2,X>1记为F3,T48)A≠2,X≤1记为F3,F44个测试用例,用以覆盖8种条件组合在条件组合覆盖中:对某被测程序,若实现了条件组合覆盖,则一定实现了判定覆盖、条件覆盖及判定—条件覆盖。但条件组合覆盖不一定能覆盖程序中的每条路径。上述4组测试用例就没有覆盖到路径acd。6.路径覆盖:设计足够的测试用例,覆盖被测程序中所有可能的路径。设计以下测试用例,覆盖四条路径:2.4.2路径分析测试在实际应用中,一个不太复杂的程序可能会出现多重循环嵌套,那么其路径数可能就是一个非常大的数字,所以必须将测试的路径数目压缩到一定范围内。为解决这一难题,可以采用基本路径测试方法,它也是一种白盒测试技术。基本路径测试是在程序的流图基础上,确定程序的环路复杂性,导出基本路径的集合,进而在其基础上设计测试用例,这些测试用例能覆盖到程序中的每条可执行语句。2.4.2.1流图流图也称为程序图,实际上就是一个有向图,就是把程序流程图中每个处理符号都看作一个结点,原来联结不同处理符号间的流程线看作连接不同结点的有向弧。它仅仅描绘程序的控制流程,完全不表现对数据的具体操作以及分支或循环的具体条件。通常称程序图中开始点后面的结点为入口点,称停止点前面的结点为出口点。1.控制流图的特点具有唯一入口节点(源节点),表示程序段的开始语句;具有唯一出口节点(汇节点),表示程序段的结束语句;结点由带有标号的圆圈表示,表示一个或多个无分支的源程序语句。控制边由带箭头的直线或弧表示,代表控制流的方向。在流图中一条边必须终止于一个结点。由边和结点围成的面积称为区域,当计算区域数时应该包括图外部未被围起来的那个区域。用任何方法表示的过程设计结果,都可以翻译成流图。程序流程图中的一个顺序的处理框序列和一个菱形判定框,可以映射成流图中的一个结点。当过程设计中包含复合条件时,即条件中包含了一个或多个布尔运算符(OR,AND,NOR),生成流图的方法稍微复杂一些。应该把复合条件分解为若干个简单条件,每个简单条件对应流图中一个结点。包含条件的结点称为判定节点,从每个判定结点引出两条或多条边。2.程序环路复杂性

程序的环路复杂性又称为圈复杂性,是一种描述程序逻辑复杂度的标准。在进行基本路径测试时,确定了程序的环路复杂性,则可在其基础上确定程序基本路径集合的独立路径数目,这个数目是确保程序中每条可执行语句至少执行一次的测试用例数目的最小值。可用下述3种方法中的任何一种来计算环形复杂度。(1)流图中的区域数等于环形复杂度。(2)流图G的环形复杂度:V(G)=E–N+2,

其中,E是流图中边的条数,N是结点数。(3)流图G的环形复杂度:V(G)=P+1,

其中,P是流图中判定结点的数目例如要对软件测试课程成绩进行统计。连续输入学生成绩,最后以负分结束。规定成绩在60分以下的为不及格、60分以上为及格、80分以上为优秀。该程序统计并输出不及格、及格、优秀的人数及总人数。算出该程序的环路复杂度。开始S,S1,S2,S30输入XX≥0?X≥60?X≥80?S1=S1+1S2=S2+1S3=S3+1S=S+1输出S,S1,S2,S3结束sabc1defghc2c3FFFTTT(a)程序流程图sabc1c2edc3fghend1234567891011121314R1R2R3入口点出口点(b)程序图弧数m=14,结点数n=12,则有V(G)=m-n+2=14-12+2=4程序图中的区域数为4,所以V(G)=4。判定结点的数目P是3,则V(G)=P+1=3+1=4。2.4.2.2独立路径测试对于一个较为复杂的程序要做到完全的路径覆盖测试是不可能实现的。独立路径测试就是对所有独立路径进行测试,也就是说检验了程序的每一条语句,从而达到语句覆盖。独立路径是一条含有以前未处理的语句或判断的路径。在流图中,独立路径表现为至少含有一条其他独立路径中均没有的边的路径。使用独立路径测试的步骤:(1)根据程序代码或程序流程图,画出相应的程序图。(2)计算程序图的环路复杂度。(3)确定只包含独立路径的基本路径集。⑷设计测试用例,保证基本路径集合中每条路径的执行。环路复杂度V(G)为4。因此对应的一组独立路径是:路径1:S—a—b—c1—d—end路径2:S—a—b—c1—c2—e—h—b—c1—d—end路径3:S—a—b—c1—c2—c3—f—h—b—c1—d—end路径4:S—a—b—c1—c2—c3—g—h—b—c1—d—end开始S,S1,S2,S30输入XX≥0?X≥60?X≥80?S1=S1+1S2=S2+1S3=S3+1S=S+1输出S,S1,S2,S3结束sabc1defghc2c3FFFTTT(a)程序流程图sabc1c2edc3fghend1234567891011121314R1R2R3入口点出口点(b)程序图下面通过一个C语言程序实例来具体说明独立路径测试的设计流程。1 main()2 {3 intnum1=0,num2=0,score=100;4 inti;5 charstr;6 scanf(“%d,%c\n”,&i,&str);7 while(i<5)8 {9 if(str=’T’)10 num1++;11 elseif(str=’F’)12 {13 score=score-10;14 num2++;15 }16 i++;17 }printf(“num1=%d,num2=%d,score=%d\n”,num1,num2,score);19 }1.导出程序控制流图2.求出程序环形复杂度公式1:V(G)=10-8+2=4公式2:V(G)=3+1=4公式3:V(G)=4因此,控制流图G的环形复杂度是4。就是说至少需要4条独立路径组成基本路径集合,并由此得到能够覆盖所有程序语句的测试用例。3.设计测试用例根据上面环形复杂度的计算结果,源程序的基本路径集合中有4条独立路径:path1:7->18path2:7->9->10->16->7->18path3:7->9->11->15->16->7->18path4:7->9->11->13->14->15->16->7->18根据上述4条独立路径,设计了测试用例。测试用例中的4个测试用例作为程序输入数据,能够遍历这4条独立路径。对于源程序中的循环体,测试用例中的输入数据使其执行零次或一次。注意:环路复杂度V(G)可导出程序基本集合中的独立路径条数,从该基本集合导出的测试用例可以保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。这是确保程序中每个执行语句至少执行一次所必需的测试用例数目的上界。一条新的路径必须包含一条新边,V(G)是构

温馨提示

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

评论

0/150

提交评论