您好,欢迎访问三七文档
软件测试两种软件测试目的从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。从软件开发者的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心。测试的目的想以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷。如果我们成功地实施了测试,我们就能够发现软件中的错误。测试的附带收获是,它能够证明软件的功能和性能与需求说明相符合。实施测试收集到的测试结果数据为可靠性分析提供了依据。测试不能表明软件中不存在错误,它只能说明软件中存在错误。软件测试的原则1.应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。2.测试用例应由测试输入数据和对应的预期输出结果这两部分组成。3.程序员应避免检查自己的程序。4.在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。5.充分注意测试中的群集现象。经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。6.严格执行测试计划,排除测试的随意性。7.应当对每一个测试结果做全面检查。8.妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。软件测试的对象软件测试并不等于程序测试。软件测试应贯穿于软件定义与开发的整个期间。需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应成为软件测试的对象。为把握软件开发各个环节的正确性,需要进行各种确认和验证工作。测试与软件开发各阶段的关系软件开发过程是一个自顶向下,逐步细化的过程测试过程是依相反顺序安排的自底向上,逐步集成的过程测试模型黑盒测试这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。黑盒测试又叫做功能测试或数据驱动测试。黑盒测试的作用黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:是否有不正确或遗漏了的功能?在接口上,输入能否正确地接受?能否输出正确的结果?是否有数据结构错误或外部信息(例如数据文件)访问错误?性能上是否能够满足要求?是否有初始化或终止性错误?黑盒测试的局限用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。但这是不可能的。示例假设一个程序P有输入量X和Y及输出量Z。在字长为32位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试:可能采用的测试数据组:232×232=264如果测试一组数据需要1毫秒,一年工作365×24小时,完成所有测试需5亿年。白盒测试此方法把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试的作用软件人员使用白盒测试方法,主要想对程序模块进行如下的检查:对程序模块的所有独立的执行路径至少测试一次;对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次;在循环的边界和运行界限内执行循环体;测试内部数据结构的有效性,等。白盒测试的局限对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。给出一个小程序的流程图,它包括了一个执行20次的循环。包含的不同执行路径数达520条,对每一条路径进行测试需要1毫秒,假定一年工作365×24小时,要想把所有路径测试完,需3170年。白盒测试与黑盒测试对比黑盒测试白盒测试优点适用于各测试阶段从产品功能角度测试容易入手生成测试数据可以构成测试数据使特定程序部分得到测试有一定的充分性度量手段可获得较多工具支持缺点某些代码段得不到测试如果规格说明有误则无法发现不易进行充分性度量不易生成测试数据无法对未实现规格说明得部分测试工作量大,通常只用于单元测试,有引用局限性质是一种确认技术,回答“我们在构造一个正确得系统吗?”是一种验证技术,回答“我们在正确地构造一个系统吗?”白盒测试控制流(逻辑)测试语句覆盖分支覆盖条件覆盖条件组合覆盖路径覆盖数据流测试全定义使用路径全使用路径全定义路径数据流异常状态图测试覆盖率采用白盒法进行测试时,考虑的是测试用例对程序内部逻辑的覆盖程度。最彻底的白盒法是覆盖程序中的每一条路径,但这往往大到无法实现。因此采用其它一些标准来量度覆盖的程度,并希望覆盖程度尽可能高些。例子func(intA,B,X){if((A1)&&(B=0)){X:=X/A};if((A=2)||(X1)){X:=X+1};}A1andB=0A=2ORX1X=X/AX=X+1YESYESNONOabced路径L1(ace)={(A1)and(B=0)}and{(A=2)or(X/A1)}=(A1)and(B=0)and(A=2)or(A1)and(B=0)and(X/A1)=(A=2)and(B=0)or(A1)and(B=0)and(X/A1)L2(abd)=not{(A1)and(B=0)}andnot{(A=2)or(X1)}={not(A1)ornot(B=0)}and{not(A=2)andnot(X1)}=not(A1)andnot(A=2)andnot(X1)ornot(B=0)andnot(A=2)andnot(X1)L3(abe)=not{(A1)and(B=0)}and{(A=2)or(X1)}={not(A1)ornot(B=0)}and{(A=2)or(X1)}=not(A1)and(A=2)ornot(A1)and(X1)ornot(B=0)and(A=2)ornot(B=0)and(X1)L4(acd)={(A1)and(B=0)}andnot{(A=2)or(X/A1)}=(A1)and(B=0)andnot(A=2)andnot(X/A1)逻辑覆盖测试的4种标准发现错误的能力标准含义1(弱)语句覆盖每条语句至少执行一次2判定覆盖每一判定的每个分支至少执行一次3条件覆盖每一判定中的每个条件,分别按“真”、“假”至少各执行一次4(强)条件组合覆盖求出判定中所有条件的各种可能组合值,每一可能的条件组合至少执行一次测试覆盖率示例(1)覆盖标准程序结构举例测试用例应满足的条件语句覆盖A^B=.T.判定覆盖A^B=.T.A^B=.F.A^BTFA^BTF测试覆盖率示例(2)覆盖标准程序结构举例测试用例应满足的条件条件覆盖A=.T.A=.F.B=.T.B=.F.条件组合覆盖A=.T.^B=.T.A=.T.^B=.F.A=.F.^B=.TA=.F.^B=.F.A^BTFA^BTF语句覆盖语句覆盖:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。语句覆盖率:已执行的可执行语句占程序中可执行语句总数的百分比。语句覆盖例测试用例的设计格式如下【输入的(A,B,X),输出的(A,B,X)】正好所有的可执行语句都在路径L1上测试用例【(2,0,4),(2,0,3)】A1andB=0A=2ORX1X=X/AX=X+1YESYESNONOabced分支覆盖分支覆盖又称判定覆盖。分支覆盖:执行足够的测试用例,使得程序中每个判定都获得一次“真”值和“假”值,或者说使得程序中的每一个分支至少都通过一次。分支覆盖率:已取过“真”和“假”两个值的判定占程序中所有条件判定个数的百分比。分支覆盖例选择路径L1和L2【(2,0,4),(2,0,3)】覆盖ace【L1】【(1,1,1),(1,1,1)】覆盖abd【L2】或选择路径L3和L4【(2,1,1),(2,1,2)】覆盖abe【L3】【(3,0,3),(3,0,1)】覆盖acd【L4】A1andB=0A=2ORX1X=X/AX=X+1YESYESNONOabced条件覆盖条件覆盖:执行足够的测试用例,使得判定中的每个子条件都获得所有可能的结果。条件覆盖例判断条件取真值取假值判断(一)A1T1T1B=0T2T2判断(二)A=2T3T3X1T4T4设条件的取值标记判定/条件覆盖可选取的测试用例如下表测试用例通过路径条件取值覆盖分支【(1,0,3),(1,0,4)】abe(L3)b,e【(2,1,1),(2,1,2)】abe(L3)b,eT1T2T3T4T1T2T3T4A1andB=0A=2ORX1X=X/AX=X+1YESYESNONOabced条件组合覆盖条件组合覆盖:执行足够的测试用例,使得每个判定中各条件的所有可能的组合都出现一次。条件组合覆盖例条件标记第一个判断取真假分支A1B=0A1B≠0A≯1B=0A≯1B≠0判断条件取真值取假值判断(一)A1T1T1B=0T2T2判断(二)A=2T3T3X1T4T4设条件的取值标记T1T2①取真分支T1T2T1T2②取假分支③取假分支④取假分支T1T2A1andB=0A=2ORX1X=X/AX=X+1YESYESNONOabced条件组合覆盖例判断条件取真值取假值判断(一)A1T1T1B=0T2T2判断(二)A=2T3T3X1T4T4设条件的取值标记条件标记第二个判断取真假分支A=2X1A=2X≯1A≠2X1A≠2X≯1T3T4⑤取真分支T3T4T3T4⑥取真分支⑦取真分支⑧取假分支T3T4A1andB=0A=2ORX1X=X/AX=X+1YESYESNONOabced条件组合覆盖例测试用例通过路径条件取值覆盖组合号【(2,0,4),(2,0,3)】aceL1T1T2T3T4①,⑤【(2,1,1),(2,1,2)】abeL3T1T2T3T4②,⑥【(1,0,3),(1,0,4)】abeL3T1T2T3T4③,⑦【(1,1,1),(1,1,1)】abdL2T1T2T3T4④,⑧设条件的取值标记条件标记第一个判断取真假分支A1B=0T1T2①取真分支A1B≠0T1T2②取假分支A≯1B=0T1T2③取假分支A≯1B≠0T1T2④取假分支A1andB=0A=2ORX1X=X/AX=X+1YESYESNONOabced路径覆盖路径测试就是设计足够的测试用例,覆盖程序中每一条可能的程序执行路径至少测试一次。路径覆盖例测试用例通过路径条件取值【(2,0,4),(2,0,3)】aceL1T1T2T3T4【(1,1,1),(1,1,1)】abdL2【(1,1,2),(1,1,3)】abeL3【(3,0,3),(3,0,1)】acdL4T1T2T3T4T1T2T3T4T1T2T3T4A1andB=0A=2ORX1X=X/AX=X+1YESYESNONOabced覆盖率要求对单元测试来说,语句覆盖和分支覆盖是最基本的要求。由于程序中错误(异常)处理工作的重要性以及其结构相对简单,要求错误处理要做到路径覆盖。对质量要求高的软件单元,可根据情况提出条件覆盖、条件组合覆盖以及其它更高的覆盖要求。黑盒测试功能分解等价类划分边值分析因果图猜错法功能分解使用功能抽象的方法把程序分解为功能单元使用数据抽象的方法产生测试每个功能单元的数据注意测试功能序列组合和输入数据组合等价类划分等价类划分是一种典型的黑盒测试方法,使用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。划分等价类所谓等价分类,就是把输入数据的可能值划分为若干等价类(等价类是指某个输入域的子集合。在该集合中,各个输入数据对于揭露程序中的错误都是等价的)。因此,可以把全部输入数据合理地划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,这
本文标题:软件工程测试
链接地址:https://www.777doc.com/doc-3876690 .html