精华内容
下载资源
问答
  • 重点掌握黑盒测试和白盒测试黑盒由白盒的区别: 黑盒测试: 检查程序各功能是否能实现,检查功能错误; 黑盒测试与软件的具体实现过程无关,只关心结果; 所以又被称为功能测试。 白盒测试: 检查内部操作...

    目的是为了应付期末考试,期末考试肯定会考测试的习题。

    一、概述

    先总览一下测试的分类:
    总览
    重点掌握黑盒测试和白盒测试。

    黑盒由白盒的区别:
    黑盒白盒
    黑盒测试

    • 检查程序各功能是否能实现,检查功能错误;
    • 黑盒测试与软件的具体实现过程无关,只关心结果;
    • 所以又被称为功能测试。

    白盒测试

    • 检查内部操作是否按规定执行,各功能是否得到充分的使用;
    • 所以又被称为结构测试。

    二、黑盒测试方法

    有很多种方法,这里主要讲解两种比较常用常考的方法,分别是等价类划分、边界值分析。

    2.1 等价类划分

    先来一个引例:
    NextDate 函数问题:

    • 是有三个变量 monthdayyear 的函数;
    • 输出为输入日期后一天的日期。

    例如:输入为1986年6月9日,则该函数的输出应为1986年6月10日。

    这个问题涉及到闰年的问题,因为闰年的日期是不一样的。


    等价类划分法是把程序的 输入域 划分为若干部分,然后从每个部分中选取少数代表性数据当作测试用例。

    引例中的输入域可以分为:年、月、日。

    划分等价类可分为两种情况:

    1. 有效等价类:是指有意义的、合理的输入数据所组成的集合。
    2. 无效等价类:是指无意义的、不合理的输入数据所构成的集合。

    在确立了等价类之后,建立 等价类表 ,列出所有划分出的等价类。

    日期问题的等价类表

    然后设计测试用例:

    • 首先为等价类表中的每一个等价类分别规定一个唯一的编号;
    • 设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。
    • 重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。
    • 设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。
    • 重复这一步骤,直到所有的无效等价类均被测试用例所覆盖。

    现在我们总结一下等价类划分法的步骤:

    1. 确定输入域;
    2. 划分等价类;
    3. 建立 等价类表
    4. 对等价类进行 编号
    5. 设计测试用例覆盖所有的等价类。

    下面给一个例子,我们使用总结的方法完成这道题目。

    例题:某“调整工资”处理模块接受一个“职称”的变量,根据职称的不同(助教,讲师,副教授,教授)作不同的处理,其中若是助教还必须输入工龄,只有工龄超过两年才能调整工资。请用 等价类划分法 设计测试用例 。

    首先确定输入域:用户可以输入职称、职称兼工龄。

    划分等价类,等价类分为合理等价类和不合理等价类:合理等价类为教授、副教授、讲师、助教并且工龄大于2年。

    建立等价类表并进行编号:
    等价类表
    设计可以覆盖所有等价类的测试用例:
    测试用例

    2.2 边界值分析

    边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。

    步骤如下:

    1. 首先确定边界情况;
    2. 选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据。

    举个例子:测试计算平方根的函数。

    ——输入:实数
    ——输出:实数
    ——规格说明:
           当输入一个 0 或比 0 大的数的时候,返回其正平方根;
           当输入一个小于 0 的数时,显示错误信息“平方根非法-输入值小于 0 ”并返回 0 ;
           库函数 Print-Line 可以用来输出错误信息。
    

    等价类划分:

    输入 (i) < 0(ii) >= 0
    输出 (a) >= 0(b) Error 
    

    测试用例:

    输入 4 ,输出 2 。对应于 (ii)(a) 。
    输入 -10 ,输出错误提示。对应于 (i)(b)
    边界值分析:划分 (ii) 的边界为 0 和最大正实数;
    划分 (i) 的边界为最小负实数和 0 。
    由此得到以下测试用例:
    	 输入 {最小负实数}
    	 输入 {绝对值很小的负数}
    	 输入 0
    	 输入 {绝对值很小的正数}
    	 输入 {最大正实数}
    

    例1:有二元函数 f(x,y),其中 x∈[1,12]y∈[1,31]

    采用边界值分析法设计的测试用例是:

    { <1,15>, <2,15>, <11,15>, <12,15>, <6,15>, <6,1>, <6,2>, <6,30>, <6,31> }
    

    推论:对于一个含有 n 个变量的程序,采用边界值分析法测试程序会产生 4n+1 个测试用例。

    例二:有函数 f(x,y,z) ,其中 x∈[1900,2100]y∈[1,12]z∈[1,31]

    采用边界值分析法设计的测试用例是:

    {
    <2000,6,1>, <2000,6,2>, <2000,6,30>, <2000,6,31>,
    <2000,1,15>, <2000,2,15>, <2000,11,15>, <2000,12,15>,
    <1900,6,15>, <1901,6,15>, <2099,6,15>, <2100,6,15>, 
    <2000,6,15>
    } 
    

    三、白盒测试方法

    白盒测试用到控制流图:控制流图(可简称流图)是对程序流程图进行简化后得到的,它可以更加突出的表示过程控制流的结构。

    主要使用到两种图形符号:节点和控制流线。

    流程图都可以转化为控制流图:
    转化
    下面介绍逻辑覆盖测试方法,也是常考的内容,要掌握。

    逻辑覆盖测试方法分为:

    • 语句覆盖;
    • 判定覆盖;
    • 条件覆盖;
    • 判定/条件覆盖;
    • 组合覆盖;
    • 路径覆盖。

    例如:程序

    If(A > 1 && B = 0)
       X = X / A;
    If(A = 2 || X > 1)
       X = X + 1;
    

    流程图

    L1 ( a → c → e )
    = {(A>1) and (B=0)} and {(A=2) or (X/A>1)}
    = (A>1) and (B=0) and (A=2) or (A>1) and (B=0) and (X/A>1)
    = (A=2) and (B=0) or (A>1) and (B=0) and (X/A>1)
    
    L2 ( a → b → d )
    = not {(A>1) and (B=0)} and  not {(A=2) or (X>1)}
    = { not (A>1) or not (B=0) } and { not (A=2) and not (X>1) }
    = not (A>1) and not (A=2) and not (X>1) or not (B=0) and not (A=2) and not (X>1)
    = not (A>1) and not (X>1) or not (B=0) and not (A=2) and not (X>1)
    
    L3 ( a → b → e)
    = not {(A>1) and (B=0)} and {(A=2) or (X>1)}
    = { not (A>1) or not (B=0)} and {(A=2) or (X>1)}
    = not (A>1) and (A=2) or not (A>1) and (X>1) or not (B=0) and (A=2) or not (B=0) and (X>1)
    
    L4 ( a → c → d )
    = {(A>1) and (B=0)} and not {(A=2) or (X/A>1)}
    = (A>1) and (B=0) and not (A=2) and not (X/A>1)
    

    3.1 语句覆盖

    语句覆盖就是设计足够多个测试用例,运行被测程序,使得每一可执行语句至少执行一次。

    在图例中,正好所有的 可执行语句 都在路径 L1 上,所以选择路径 L1 设计测试用例,就可以覆盖所有的可执行语句。

    测试用例
    测试用例流程图

    3.2 判定覆盖(分支覆盖)

    判定覆盖就是设计若干个测试用例,运行被测程序,使得程序中 每个判断的取真分支和取假分支 至少经历一次。

    对于图例,如果选择路径 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】
    

    分支覆盖流程图

    3.3 条件覆盖

    条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的 每个条件的可能取值 至少执行一次。

    在图例中,我们事先可对所有条件的取值加以标记。例如:

    对于第一个判断:

    • 条件 A>1 取真为 T1,取假为F1;
    • 条件 B=0 取真为 T2,取假为 F2;

    对于第二个判断:

    • 条件 A=2 取真为 T3,取假为条件F3;
    • X>1 取真为 T4,取假为 F4
    测试用例           		   覆盖分支    		  条件取值
    【(2, 0, 4),(2, 0, 3)】    L1(c, e)  		T1 T2 T3 T4
    【(1, 0, 1),(1, 0, 1)】    L2(b, d)  		F1 T2 F3 F4
    【(2, 1, 1),(2, 1, 2)】    L3(b, e)			T1 F2 T3 F4
    
    或者:
    【(1, 0, 3),(1, 0, 4)】    L3(b, e) 			F1 T2 F3 T4
    【(2, 1, 1),(2, 1, 2)】    L3(b, e) 			T1 F2 T3 F4
    

    3.4 判定/条件覆盖

    设计足够多的测试用例,使得程序中 每个判定包含的每个条件的所有情况 (真/假)至少出现一次,并且 每个判定本身 的判定结果(真/假)也至少出现一次。

    满足判定/条件覆盖的测试用例一定同时满足判定覆盖和条件覆盖。

    测试用例           		   覆盖分支    		  条件取值
    【(2, 0, 4),(2, 0, 3)】    L1(c, e)  		T1 T2 T3 T4
    【(1, 1, 1),(1, 1, 1)】    L2(b, d)  		F1 F2 F3 F4
    

    3.5 组合覆盖

    通过执行足够的测试用例,使得程序中 每个判定的所有可能的条件取值组合 都至少出现一次。

    满足组合覆盖的测试用例一定满足判定覆盖、条件覆盖和判定/条件覆盖。

    1、A>1,B=0  作 T1 T2
    2、A>1,B≠0  作 T1 F2
    3、A≯1,B=0  作 F1 T2
    4、A≯1,B≠0  作 F1 F2
    5、A=2,X>1  作 T1 T3
    6、A=2,X≯1  作 T1 F3
    7、A≠2,X>1  作 F1 T3
    8、A≠2,X≯1  作 F1 F3
    
    测试用例          			覆盖条件     				覆盖组合
    【(2, 0, 4),  (2, 0, 3)】    (L1)	    	            1, 5
    【(2, 1, 1),  (2, 1, 2)】    (L3)	    	            2, 6
    【(1, 0, 3),  (1, 0, 4)】    (L3)	    	            3, 7
    【(1, 1, 1),  (1, 1, 1)】    (L2)	    	            4, 8
    

    就相当于是排列组合中的那个组合,把所有的情况都罗列出来。

    3.6 路径覆盖

    设计足够多的测试用例,要求覆盖程序中所有可能的路径。 从流程图和控制流图上可以看出,其中有 4 条可能的路径,分别是L1L2L3L4

    展开全文
  • 题目 : 学校考试评测系统规定按照学生成绩给出学生得优秀良好 及格等评价输入成绩 90-1 0 分为优秀 ,80 8分为良好 ,7 79 分为一般 606分为及格 06分为不及格 一 白盒测试 流程图 开始 X 大于等于 0 且小于等于 10
  • 实验一: 白盒测试 一、实验目的 巩固白盒测试知识,对于给定的待测程序,能熟练应用基本控制流覆盖方法设计测试用例;能够执行白盒测试过程,并撰写白盒测试分析报告。
  • 白盒测试一、语句覆盖(Statement Coverage)二、判定覆盖(Decision Coverage)三、条件覆盖(Condition Coverage)四、判定条件覆盖(Decision/Condition Coverage)五、组合覆盖(Branch Condition Combination ...

    白盒测试

    白盒测试用例设计的一个很重要的评估标准就是对代码的覆盖度。
    白盒测试中常见的覆盖有六种:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖。

    一、语句覆盖(Statement Coverage)

    语句覆盖,顾名思义就是针对代码语句。它的含义是我们设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。。通常语句覆盖被认为是“最弱的覆盖”,原因是它仅仅考虑对代码中的执行语句进行覆盖而没有考虑各种条件和分支,因此在实际运用中语句覆盖很难发现代码中的问题。举例:

    在这里插入图片描述

    if (A>1) and (B=0)
    	then x=x/A
    end if
    if (A=2) or (x>1)
    	then x=x+1
    end if
    

    在图例中,正好所有的可执行语句都在路径L1上,所以选择路径 L1设计测试用例,就可以覆盖所有的可执行语句

    测试数据不止一种情况,只是满足这个要求的判定

    二、判定(分支)覆盖(Decision Coverage)

    判定覆盖也被成为分支覆盖(Branch Coverage),即要设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。用上面的例子,选择的路径:
    在这里插入图片描述

    判定覆盖比语句覆盖强一些,能发现一些语句覆盖无法发现的问题。但是往往一些判定条件都是由多个逻辑条件组合而成的,进行分支判断时相当于对整个组合的最终结果进行判断,这样就会忽略每个条件的取值情况,导致遗漏部分测试路径。

    三、条件覆盖(Condition Coverage)

    条件覆盖与分支覆盖不同,条件覆盖设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次

    判定覆盖是每个判断都取真取假,条件覆盖是每个判定的条件都取真取假。
    满足条件覆盖一定满足语句覆盖。
    满足条件覆盖不一定满足判定覆盖
    ,此两种之间不怎么相互交叉,条件覆盖通常比判定强

    使用上述例子:
    在这里插入图片描述
    通常而言条件覆盖比判定覆盖强,因为条件覆盖使得判定中的每一个条件都取到了不同的结果,这一点判定覆盖则无法保证。但条件覆盖也有缺陷,因为它只能保证每个条件都取到了不同结果,但没有考虑到判定结果,因此有时候条件覆盖并不能保证判定覆盖

    四、判定条件覆盖(Decision/Condition Coverage)

    判定条件覆盖,说白了就是我们设计的测试用例可以使得判断中每个条件所有的可能取值至少执行一次(条件覆盖),同时每个判断本身所有的结果也要至少执行一次(判定覆盖)。不难发现判定条件覆盖同时满足判定覆盖和条件覆盖,弥补了两者各自的不足,但是判定条件覆盖并未考虑条件的组合情况。
    在这里插入图片描述

    五、组合覆盖(Branch Condition Combination Coverage)

    组合覆盖也叫做条件组合覆盖。设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。显然,满足条件组合覆盖的测试用例一定是满足判定覆盖、条件覆盖和判定条件覆盖的。

    条件组合覆盖能够同时满足判定、条件和判定条件覆盖,覆盖度较高,但是组合覆盖的测试用例数量相对来说也是比较多的。

    六、路径覆盖

    路径覆盖,意思是说我们设计的测试用例可以覆盖程序中所有可能的执行路径。这种覆盖方法可以对程序进行彻底的测试用例覆盖,比前面讲的五种方法覆盖度都要高。那么这种方法是不是就一定最好呢?当然不能讲得这么绝对,它的缺点也是显而易见的:由于需要对所有可能的路径全部进行覆盖,那么我们需要设计数量非常巨大的而且较为复杂的测试用例,用例数量将呈现指数级的增长。所以理论上来讲路径覆盖是最彻底的测试用例覆盖,但实际上很多时候路径覆盖的可操作性不强。

    黑盒测试

    测试对象看做一个盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的,功能说明。又叫做功能测试或数据驱动测试

    等价类划分

    基本思想:
    把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据作为测试用例。

    等价类:某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。

    1. 有效等价类:对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合
    2. 无效等价类:对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。

    等价类划分5个原则

    • 原则1: 如果输入条件规定了取值范围,或值的个数,则可以确立一个有效等价类和两个无效等价类在这里插入图片描述
    • 原则2:如果输入条件规定了输入值的集合,或者规定了“必须如何”的条件,这时可确立一个有效等价类和一个无效等价类。在这里插入图片描述
    • 如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类在这里插入图片描述
    • 如果规定了输入数据的一组值,而且要对每个输入值分别进行处理。可为每一个输入值确立一个有效等价类,所有不允许的输入值集合为一个无效类在这里插入图片描述
    • 原则5:如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)在这里插入图片描述

    等价类划分步骤

    1. 确定等价类
    2. 建立等价类表,列出所有划分出的等价类
    3. 为每一个等价类规定一个唯一编号;
    4. 设计一个新的测试用例,尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;
    5. 设计一个新的测试用例,仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到
      所有的无效等价类都被覆盖为止


    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    边界值分析

    选取正好等于,刚刚大于,或刚刚小于边界的值做为测试数据做为测试数据。
    相当于输入、输出等价类而言,稍高、低于其边界值的一些特定情况
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 软考软件测试黑盒测试白盒测试讲解ppt,可供软考复习,和软件工程期末复习使用
  • 软件工程--软件测试(黑盒测试、白盒测试、测试用例)
  • 记录 软件工程-软件测试技术课件 文章目录著名的软件错误案例研究1、迪斯尼的狮子王2、美国航天局火星基地登陆,19993、爱国者导弹防御系统,19914、千年虫,大约1974软件测试的定义和目标定义目标软件测试与软件...

    记录 软件工程北大-软件测试技术课件

    著名的软件错误案例研究

    1、迪斯尼的狮子王

    1994年秋天,迪斯尼公司发布了第一个面向儿童的多媒体光盘游戏LionKing
    Animated Storybook(狮子王动画故事书)。这次是迪斯尼公司首次进军游戏市场。他们进行了大力宣传促销。结果,销售额非常可观。该游戏成为孩子们那个夏季的“必买游戏”。后来却飞来横祸。12月26日,圣诞节后的一天,迪斯尼公司的客户支持部电话开始响个不停。很快,电话支持部门就淹没在愤怒的家长和哭诉玩不成游戏的孩子们的电话狂潮之中。报纸和电视中涌现了各种故事。

    原因:迪斯尼公司没有对市场上投入使用的各种PC机型进行正确的测试。软件在少数系统中工作正常——例如迪斯尼的程序员用于开发游戏的系统——但在大众使用的常见系统中却不行。

    没有在各种PC上正确的测试,软件只能在少数机器上正常运行。

    兼容性测试

    2、美国航天局火星基地登陆,1999

    1999年12月3日,美国航天局的火星基地登陆飞船在试图登陆火星表面时失踪。错误修正委员会观测到故障,并认定出现误动作的原因极可能是某一个数据被意外更改。

    大家一致声讨,问题为什么没有在内部测试时解决。

    从理论上看,登陆计划是:当飞船降落在火星表面时,它将打开降落伞减缓飞船的下落速度。降落伞打开后的几秒种内,飞船的三条腿将迅速撑开,并在预定地点着陆。当飞船离地面1800米时,它将丢弃降落伞,点燃登陆推进器,在余下的高度缓缓降落地面。
    美国航天局为了省钱,简化了确定何时关闭推进器的装置。为了替代其他太空船上使用的贵重雷达,他们在飞船的脚上装了一个廉价的触点开关,在计算机中设置一个数据位来关掉燃料。即,飞船的脚不“着地”,引擎就会着火。
    错误修正委员会在测试中发现,当飞船的脚迅速撑开并准备着陆时,机械震动在大多数情况下也会触发着地开关,设置错误的数据位。设想飞船开始着陆时,计算机极有可能关闭推进器,而火星登陆飞船下坠1800米之后冲向地面,撞成碎片。

    原因:登陆飞船经过了两个小组测试,其中一个小组测试飞船的脚落地过程,另一个小组测试此后的着陆过程。前一个小组不去注意着地数据位是否置位,后一个小组总是在开始测试之前重置计算机、清除数据位。双方独立工作很好,但从未在一起进行集成测试。

    单个测试 从未在一起进行集成测试。

    3、爱国者导弹防御系统,1991

    ​ 美国爱国者导弹防御系统是里根总统提出的主动战略防御(即星球大战)程序的缩略版本。它首次应用在海湾战争中对抗伊拉克飞毛腿导弹的防御战争中。尽管关于此系统的赞誉不绝于耳,但是它确实在几次对抗导弹战役中失利,其中一枚在沙特阿拉伯的多哈击毙28名美国士兵。

    原因:存在一个软件缺陷。一个很小的系统时钟错误积累起来就可能拖延14小时,造成跟踪系统失去准确度。在多哈袭击战中,系统被拖延100多小时。

    缺陷 错误的累积 一直积累 最终影响很大很大。

    4、千年虫,大约1974

    4、千年虫,大约1974
    20世纪70年代某位程序员——假设他叫Dave——负责本公司的工资系统。他使用的计算机存储空间很小,迫使他尽量节省每一个字节。Dave自豪地将自己的程序压缩得比其他人都小。
    他使用的其中一个办法是把4位数日期,例如1973缩减为2位数,例如73。因为工资系统极度依赖数据处理,Dave得以节省可观的存储空间。他认为只有在到达2000年时程序计算00或01这样的年份时才会出现问题。他知道这样会出问题,但是在25年之内程序肯定会更改或升级,而且眼前的任务比现在计划遥不可及的未来更加重要。
    这一天毕竟是要到来的。1995年,Dave的程序仍然在使用,而Dave退休了,谁也不会想到进入程序检查2000年兼容问题,更不用说去修改了。
    估计世界各地更换或升级类似Dave程序以解决原有2000年错误的费用以及超过数亿美元了。

    尽可能节省空间 四位数日期 减为二位 到00年时程序计算会出错,还有几十年不要紧软件程序会升级修改的,眼前的任务要求更重要,那一天到了,00兼容问题。

    软件测试的定义和目标

    定义

    软件测试:检测和评价软件以确定其质量的过程和方法,即评价软件或程序的属性和能力,以确定它是否满足所需结果的过程与方法。

    软件测试可分为静态分析和动态测试:

    只是检查和审阅 运行和使用软件

    (1)进行静态分析时,不必运行软件,只是通过对源代码进行分析,检测程序的控制流和数据流,以及发现执行不到的“死代码”、无限循环、未初始化的变量、未使用的数据、重复定义的数据等;也可能包括对多种复杂性度量值的计算。静态分析虽然不能取代动态测试,但它是动态测试开始前有用的质量检测手段。
    (2)动态测试技术借助于输入样例(即测试用例)来执行软件,一般又分为功能测试(即黑盒测试)以及结构测试(即白盒测试)。

    From:《计算机科学技术百科全书》(第二版),张效祥主编,清华大学出版社,2005年11月。

    目标

    软件测试目标:
    (1)预防错误
    (2)发现错误

    发现错误 预防错误

    一般只有符合下列5个规则才叫软件错误:
    1.软件未达到产品说明书标注的功能.
    2.产品出现了产品说明书指明不会出现的错误.
    3.软件功能超出产品说明书的范围.
    4.软件未达到产品说明书虽未指出但应达到的目标.
    5.软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好。
    From:《软件测试》,(美)Patton, R.著,北京:机械工业出版社,2002.2.

    满足不了产品说明书的要求

    软件测试与软件调试的区别

    软件调试

    软件调试:发现所编写软件中的错误,确定错误的位置并加以排除,使之能由计算机或相关软件正确理解与执行的方法与过程。

    ​ 在进行调试工作以前,首先要发现存在着某种错误的迹象。随后的调试过程通常分为两步:

    (1)确定问题的性质并且找到该错误在软件中所处的位置;

    (2)修正这一错误。

    From:《计算机科学技术百科全书》(第二版),张效祥主编,清华大学出版社,2005年11月。

    发现所编写程序错误,确定位置加以改正。

    确定问题的性质找到错误位置,修正这一错误。

    软件测试和软件调试的主要区别:

    (1)测试从一个侧面证明程序员的“失败”,而调试是为了证明程序员的正确。
    (2)测试以已知条件开始,使用预先定义的程序,且有预知的结果,不可预见的仅是程序是否通过测试。调试一般是以不可知的内部条件开始,除统计性调试外,结果是不可预见的。
    (3)测试是有计划的,并要进行测试设计;而调试是不受时间约束的。
    (4)测试是一个发现错误、改正错误、重新测试的过程;而调试是一个推理过程。
    (5)测试的执行是有规律的,而调试的执行往往要求程序员进行必要推理以至知觉的“飞跃”。
    (6)测试经常是由独立的测试组在不了解软件设计的条件下完成的;而调试必须由了解详细设计的程序员完成。
    (7)大多数测试的执行和设计可由工具支持,而调试时,程序员能利用的工具主要是调试器。

    证明 推理 调试器 未知

    软件测试过程模型

    在这里插入图片描述

    软件测试过程所涉及的要素,以及这些要素之间的关系 。

    环境:包括支持其运行的硬件、固件和软件;
    被测对象模型:为了测试,形成被测对象的简化版本。不同的测试技术,对同一被测对象(程序),可产生不同的对象模型:
    简化注重程序的控制结构---形成“白盒”测试
    简化注重程序的处理过程---形成“黑盒”测试
    错误模型:为了统一认识,定义“什么是错误”。

    不同的测试,可产生不同的对象模型

    控制结构 白盒测试

    处理过程 黑盒测试

    什么是错误?

    几个关键性的概念:

    错误 error

    错误(error)是指“与所期望的设计之间的偏差,该偏差可能产生不期望的系统行为或失效”。

    期望

    失效 failure

    失效(failure)是指“与所规约的系统执行之间的偏差”。失效是系统故障或错误的后果。

    失效 系统故障 错误的后果

    故障 fault

    故障(fault)是指“导致错误或失效的不正常的条件”。故障可以是偶然性的或是系统性的。

    故障 不正常或导致错误的条件

    三者的关系

    三者关系:
    程序员编写程序,在这个过程中,他无意或有意地犯一个错误(error)。故障(fault)是一个或多个错误的表现。
    当执行程序中那段有故障的代码时,就会引起失效(failure),导致程序出现不正确的状态,影响程序的输出结果。

    一个个错误 表现故障了 引起失效

    error fault failure

    软件测试的原则

    软件测试的原则
    (1)所有的测试都应当追朔到用户需求。软件测试的目的在于发现错误,而从用户角度看,最严重的错误就是那些致使程序无法满足需求的错误。

    无法满足需求的错误 这软件不能做到我想要的结果 解决我要解决的问题

    (2)在测试工作开始前,要进行测试计划的设计。测试计划可以在需求分析一完成时开始,详细的测试用例定义可以在设计模型被确定后立即开始。

    测试计划 需求分析 测试用例 设计模型

    (3)测试应从小规模开始,逐步转向大规模。最初的测试通常放在单个程序模块上,测试焦点逐步转移到在集成的模块簇内寻找错误,最后在整个系统中寻找错误。

    小 到 大 单个模块 集成模块 整个系统 找错误

    (4)穷举测试是不可能的。一个大小适度的程序,其路径排列的数量是惊人的。

    穷举测试是不可能的 适度的

    (5)为了尽可能发现错误,应由独立的第三方来测试。

    第三方来测试 独立的

    (6)在一般情况下,在分析、设计、实现阶段的复审和测试工作能够发现和避免80%的bug, 而系统测试又能找出其余一些bug,最后剩下的bug可能只能在用户的大范围、长时间的使用后才会暴露。因此测试只能保证尽可能多地发现错误,无法保证能够发现所有的错误。

    尽早找出错误

    软件测试技术

    黑盒测试

    黑盒测试:
    黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。

    功能 数据驱动 测试 已知功能来测试检测功能正常使用

    不考虑程序内部结构 内部特性 直接根据功能来测试

    程序功能是否正常使用 接收输入数据产生正确的输出

    ​ 黑盒测试方法主要有等价类划分、边界值分析、因果图、错误推测等,主要用于软件确认测试。
    ​ “黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。

    等价类划分 边界值分析 黑盒测试 软件确认测试

    穷举输入方测试 尽可能多的输入 测试 合法的 不合法 输入

    黑盒测试试图发现以下错误类型:
    (1)功能不对或遗漏;
    (2)界面错误;
    (3)数据结构或外部数据库访问的错误;
    (4)性能错误;
    (5)初始化和终止错误.

    功能不对 遗漏 界面 数据结构 访问数据库 性能 初始化 终止

    问题:黑盒测试依据是什么?

    白盒测试

    白盒测试:

    ​ 白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能.
    ​ 白盒测试的主要方法有逻辑覆盖、基本路径测试等,主要用于软件验证。

    问题:白盒测试依据什么?

    结构 逻辑驱动 知道内部工作过程 测试来检测产品内部动作

    程序中每条通路是否按预定要求正确工作。

    逻辑覆盖 基本路径测试 用于软件验证

    白盒测试技术

    依据程序的逻辑结构-白盒测试技术

    (1)关于建立被测对象模型

    ​ 控制流程图:一种表示程序控制结构的图形工具,其基本元素是节点、判定、过程块。
    其中:过程块是既不能由判定、也不能由节点分开的一组程序语句;
    ​ 判定:是一个程序点,此处控制流可以分叉;
    ​ 节点:是一个程序点,此处控制流可以结合。
    ​ 、在这里插入图片描述

    例如:以下为一个程序流程图,其中该例子中有两个判断,
    每个判断都包含复合条件的逻辑表达式。

    在这里插入图片描述

    在这里插入图片描述

    (2)各种测试方法

    该控制流程图有4条不同的路径。4条路径可表示为:
    L1(a→c→e)简写ace 、L2(a→b→d)简写abd
    L3(a→b→e)简写abe 、L4(a→c→d)简写acd
     路径测试(PX):执行所有可能的穿过程序的控制
    流程路径。
    一般来说,这一测试严格地限制为所有可能的入口/出
    口路径。如果遵循这一规定,则我们说达到了100%路径覆盖
    率。在路径测试中,该策略是最强的,但一般是不可实现的。
    针对该例子,要想实现路径覆盖,可选择以下一组测试
    用例(规定测试用例的设计格式为:【输入的(A,B,X),
    输出的(A,B,X)】)。

    在这里插入图片描述

    语句测试(P1):至少执行程序中所有语句一次。

    如果遵循这一规定,则我们说达到了100%语句覆盖率(用C1表达)。
    在该例子中,只要设计一种能通过路径ace的测试用例,
    就覆盖了所有的语句。所以可选择测试用例如下:
    【(2,0,4),(2,0,3)】 覆盖L1
    语句覆盖是最弱的逻辑覆盖准则。

    问题:就该程序而言,如果两个判断的逻辑运算写错,

    例如,第一个判断中的逻辑运算符“∧”错写成了“∨”,或
    者第二个判断中的逻辑运算符“∨”错写成了“∧”,利用上面
    的测试用例,仍可覆盖其中2个语句,而发现不了判断中逻辑
    运算符出现的错误。

     分支测试(P2):至少执行程序中每一分支一次。如果
    遵循这一规定,则我们说达到了100%分支覆盖率(用C2表示)。
    分支覆盖是一种比语句覆盖稍强的逻辑覆盖。但若程序中
    分支的判定是由几个条件联合构成时,它未必能发现每个条件
    的错误。
    例如对于以上例子,如果选择路径L1和L2,就可得到实现
    分支覆盖的测试用例:
    【(2,0,4),(2,0,3)】 覆盖L1
    【(1,1,1),(1,1,1)】 覆盖L2
    如果选择路径L3和L4,还可得另一组可用的测试用例:
    【(2,1,1),(2,1,2)】 覆盖L3
    【(3,0,3),(3,1,1)】 覆盖L4
    问题:分支覆盖还不能保证一定能查出在判断的条件中存
    在的错误。例如,在该例子中,若第二个分支X>1错写成X<1,
    利用上述两组测试用例进行测试,无法查出这一错误。因此,
    需要更强的逻辑覆盖准则去检验判定的内部条件。

     条件组合测试
    条件组合测试是一种具有更强逻辑覆盖的测试。
    条件组合测试,就是设计足够的测试用例,使每个判定
    中的所有可能的条件取值组合至少执行一次。如果遵循这一
    规定,则我们说就实现了条件组合覆盖。只要满足了条件组
    合覆盖,就一定满足分支覆盖。
    在条件组合覆盖技术发展过程中,最初,在设计测试用
    例时,人们只考虑使分支中各个条件的所有可能结果至少出
    现一次。但发现该测试技术未必能覆盖全部分支。例如,在
    上图的例子中,程序段中有四个条件:A>1,B=0,A=2,X>1。
    条件A>1 取真值标记为T1,取假值标记为F1
    条件B=0 取真值标记为T2,取假值标记为F2
    条件A=2 取真值标记为T3,取假值标记为F3
    条件X>1 取真值标记为T4,取假值标记为F4
    在设计测试用例时,要考虑如何选择测试用例实现T1、
    F1、T2、F2、T3、F3、T4、F4的全部覆盖:

    例如,可设计如下测试用例实现条件覆盖:
    测 试 用 例 通过路径 条件取值 覆盖分支

    【(1,0,3),(1,0,4)】 L3 F1 T2 F3 T4 b,e
    【(2,1,1),(2,1,2)】 L3 T1 F2 T3 F4 b,e
    从上面的测试用例,可以看到该组测试用例虽然实现了
    判定中各条件的覆盖,但没有实现分支覆盖,因为该组测试
    用例只覆盖了第一个判断的取假分支和第二个判断的取真分
    支。为此,人们又进一步提出了条件组合覆盖技术。
    例如,在该例子中,前一个判定有4种条件组合:
    (1)(A>1),(B=0), 标记为 T1 、T2;
    (2)(A>1),(B≠0),标记为 T1 、F2,;
    (3)(A≤1),(B=0), 标记为 F1 、T2;
    (4)(A≤1),(B≠0),标记为 F1 、F2;
    后一个判定又有4种条件组合:
    (5)(A=2), (X>1), 标记为 T3、T4;
    (6)(A=2), ( X≤1),标记为 T3、F4;
    (7)(A≠2),( X>1),标记为 F3、T4;
    (8)(A≠2),( X≤1),标记为 F3、F4。

    在这里插入图片描述

    在这里插入图片描述

    黑盒测试(功能测试)-依据软件行为的描述的测试

    黑盒测试(功能测试)-依据软件行为的描述的测试

    事务流测试技术

    ( 1 )基本概念:
    事务:以用户的角度所见的一个工作单元。
    一个事务由一系列操作组成。其中某些操作可含有系统执行成分,或含有设备执行成分,它们共同协作,完成用户的一项工作。
    事务处理流程(图):系统行为的一种表示方法,为功 能测试建立了软件动作模式。其中使用了白盒测试中的一些概念,例如:操作(如下图1、3、6、5)、分支(下图2),节点(下图7),链(下图中 )等。

    在这里插入图片描述

    在这里插入图片描述

    (3)测试步骤
    第一步:获取事务流程图,即建立被测对象模型;
    第二步:浏览与复审
    主要对事务进行分类,为设计用例奠定基础;
    第三步:用例设计
    设计足够测试用例,实现基本事务覆盖。
         涉及:覆盖策略,事务选取等;
    第四步:测试设备开发:
    路径分析器,测试用例数据库,
    测试执行调度器, …
    第五步:测试执行;
    第六步:测试结果比较。

    等价类划分技术

    等价类划分技术
    (1) 基本概念
    等价类:输入域的一个子集,在该子集中,各个输入
    数据对于揭示程序中的错误都是等效的。即:以等价类中
    的某代表值进行的测试,等价于对该类中其他取值的测试。
    有效等价类:指那些对于软件的规格说明书而言,是
    合理的、有意义的输入数据所构成的集合。
    -用于实现功能和性能的测试。
    无效等价类:指那些对于软件的规格说明书而言,是
    不合理的、无意义的输入数据所构成的集合。
    -用于测试那些所实现的功能和性能不符合规格说明
    书的要求。

    (2)等价类划分原则(指南)

    在这里插入图片描述

    如果输入条件是一个布尔量,则可以确定一个有效等价
    类和一个无效等价类。
    如果输入条件规定了输入值必须符合的条件,则可以确定
    一个有效等价类(符合条件)和一个无效等价类(不符合条件)。
    例如:“标识符是一字母打头的…串。” 则
    字母打头的–为一个有效等价类,而
    其余的–为一个无效等价类

    注意:如果在已确定的等价类中各元素在软件中的处理方
    式不同,则应根据需要对等价类进一步进行划分。

    在这里插入图片描述
    ​ (3)设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。

    问题:为什么设计无效等价类的测试用例时仅包括一个未被覆盖的无效等价类?

    因为某些程序中对某一输入错误的检查往往会屏蔽对其它输入错误的检查。因此设计无效等价类的测试用例时应该仅包括一个未被覆盖的无效等价类。

    边界值分析

    边界值分析
    边界值分析是一种最常用的黑盒测试技术。因为测试工作经验表明,大量的错误经常发生在输入或输出范围的边界上。因此设计一些测试用例,使程序运行在边界情况附近,这样揭露错误的可能性比较大。

    边界值分析 最常用 黑盒测试技术 大量的错误经常发生在输入或输出范围的边界上 设计一些测试用例 边界上 设计一些测试用例 揭露错误 可能性比较大

    ​ 使用边界值分析设计测试用例可遵循以下原则:
    (1)如果某个输入条件规定了输入值的范围,则应选择正好等于边界值的数据,以及刚刚超过边界值的数据作为测试数据。
    (2)如果某个输入条件规定了值的个数,则可用最大个数、最小个数、比最大个数多1、比最小个数少1的数作为测试数据。
    (3)根据规格说明的每个输出条件,使用前面的原则(1)。
    (4)根据规则说明的每个输出条件,使用前面的原则(2)。

    (5)如果程序的规格说明中,输入域或输出域是一个有序集合,在实践中,则经常选取集合的第一个元素、最后一个元素以及典型元素作为测试用例。
    (6)如果程序中使用了内部数据结构,则应选择这个内部数据结构的边界上的值作为测试用例。
    (7)分析规则说明,找出其他可能的边界条件。

    边界范围 超一点

    因果图

    因果图
    因果图:是设计测试用例的一种工具,它着重检查各种输入条件的组合。例如,两个输入值的乘积超过了存储器的限制,程序将发生错误。等价划分和边界值分析够不能发现这类错误,因为它们未考虑输入情况的各种组合。
    因果图的基本原理是通过画因果图,把用自然语言描述的功能说明转换为判定表,最后为判定表的每一列设计一个测试用例。

    输入条件的组合 各种组合

    判定表

    参考资料

    [1]-北京大学软件工程 http://www.icourses.cn/sCourse/course_6305.html

    [2] 张海藩,吕云翔. 软件工程(第4版)[M]. 北京:人民邮电出版社,2013 软件工程

    展开全文
  • 软件工程的白盒和黑盒测试归纳 APP测试中 黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。 白盒测试:已知产品的内部工作过程,可以进行测试证明每种内部操作是否符合设计规格...
  • 关于软件测试方面,适合考试和自学,内容比较详细
  • 软件工程-软件测试 动态测试 黑盒测试 黑盒测试也称功能测试,不考虑软件的内部结构和特性,测试软件的外部特性 等价类(集合A中的元素a测试结果等同于集合A中的所有元素进行测试)划分:用等价类划分法将程序输入...

    软件工程-软件测试

    动态测试

    黑盒测试

    黑盒测试也称功能测试,不考虑软件的内部结构和特性,测试软件的外部特性

    • 等价类(集合A中的元素a测试结果等同于集合A中的所有元素进行测试)划分:用等价类划分法将程序输入域划分为若干等价类,用少量具有代表性的测试用例去测试等价类,注意一个测试用例只能覆盖一个无效类

    • 边界值分析:处理边界情况时最容易出错,选取数据应该恰好等于、稍小于或稍大于边界值

    • 错误检测:基于经验,穷举可能出现的错误,一一排查

    • 因果图 :if…else条件检验

    例题

    小张帮朋友开发一个成绩分级程序,90-100优秀,80-89良,70-79中,60-69及格,0-59不及格;对此我们若采用等价类划分以及边界值分析,如何设计测试用例

    思路
    1. 我们画出一条轴,标明边界(0 59 69 79 89 )—>(59~69)()…是一个等价类
    2. ,选取比0的边界稍大或稍小或等于的数据(-1 0 1) …等等稍大或稍小的元素进行测试

    白盒测试(结构测试)

    白盒测试要根据程序的内部结构和逻辑来设计测试用例

    • 语句覆盖

    • 判定覆盖

    • 条件覆盖

    • 条件判定覆盖

    • 路径覆盖

    静态测试

    • 桌前检查: 对源程序代码进行分析、检验,根据相关的文档,检验程序中是否有错误的过程
    • 代码审查:形成小组,需程序员配合参与
    • 代码走查:形成小组,检查人员检查

    与瀑布V字测试模型相关的测试

    [外链图片转存失败,源站可能有防盗链机制,å»ºè®®å°†å›¾ç‰‡ä¿å­˜ä¸‹æ¥ç›´æŽ¥ä¸Šä¼ (img-Eon2N565-1573021559772)(C:\Users\JunSIr\AppData\Roaming\Typora\typora-user-images\image-20191106123353537.png)]

    • 单元测试:针对局部数据结构(模块内),针对编码,以详细设计为依据
    • 集成测试:针对模块间的接口和通信,针对详细设计,以概要设计为依据
    • 系统测试:模拟真实环境进行测试,针对概要设计,以需求建模为依据
    • 验收测试:以用户为主导,针对需求设计
    • 注重测试,开发与测试同时进行

    回归测试

    经测试返工后再进行的测试

    负载测试

    性能测试,测试并发量

    压力测试

    计算机数量较少或系统资源匮乏的条件下运行测试

    McCabe复杂度(环路复杂度)

    McCabe方法是一种软件质量度量方法,它是基于对拓扑结构 程序复杂度的分析

    • 计算有向图G的环路复杂度公式为V(G)=边数-节点数+2
    • 计算有向图G的环路复杂度公式为V(G)=闭环(不考虑重叠)+1

    V(G) = 最少测试用例

    软考同学请注意,如果给出程序段问McCabe复杂度,我们需要还原成图的形式,再进行计算

    int find_max(int i ,int j,int k){
    int max ;             // 1
    if(i>j)then			//2
    	if(i>k)			//3
    	then max = i ;	//5
    	else max = k    //6
    	else if (j>k) 		//4
    	then max = j;		//7
    	 else max = k ; 	//8
    	 return max ; 		//9
    }
    

    还原成如下图

    在这里插入图片描述

    根据环路复杂度计算公式计算即可

    展开全文
  • 黑盒白盒测试

    2009-08-27 21:27:22
    黑盒测试和白盒测试 郑人杰著《软件工程》学习笔记 作者:雷神 版权所有:雷神 转载请联系作者 任何工程产品(注意是任何工程产品)都可以使用以下两种方法之一进行测试。 黑盒测试:已知产品的功能设计...
  • 一、黑盒测试和白盒测试 黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。 白盒测试:已知产品的内部工作过程,可以进行测试证明每种内部操作是否符合设计规格要求,所有内部...
  • 不是的,为了确保软件不会出现不必要的差错,还需要经过重重测试的。 目录 软件测试的目的 软件测试的原则 软件测试的方法有哪些? 测试过程的4个步骤 调试技术 软件测试与开发个阶段的关系 软件测试的...
  • 关于软件工程白盒黑盒测试

    千次阅读 2018-12-28 18:46:52
    白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,而白盒指的盒子是透明可见的,我们可以清楚盒子内部的东西以及它们是如何运作。“白盒”法采用的是穷举路径测试,在使用这一方法之前,测试者必须检查程序...
  • 白盒测试又称结构测试,这种方法把测试对象看作一个透明的盒子,测试人员根据程序内部的逻辑结构及有关信息设计测试用例,检查程序中所有逻辑路径是否都按预定的要求正确地工作。 白盒测试主要用于对程序模块的测试...
  • 软件测试实验报告黑盒测试白盒测试逻辑覆盖法等价类划分法
  • 代码链接:... ... 1、黑盒测试 主要就是测试代码的功能与输入有效性在问题, 以便于了解或使用系统的内部结构及知识。 2、白盒测试 在设计测试的过程中,我们...
  • 黑盒测试 白盒测试

    2017-11-09 15:10:00
    黑盒测试(Black-box Testing,又称为功能测试或数据驱动测试)是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的...黑盒测试并不是白盒测试的替代品,而是用于辅助白盒测试发现其他...
  • 软件测试中,最常听到“黑盒测试”与“白盒测试”,它们是软件测试中最基本的测试方法。  那么究竟何为“黑盒”,何为“白盒”呢?下面就对其概念与常用方法进行一下介绍。 黑盒测试: 也称功能测试、数据驱动测试...
  • 软件测试方法之黑盒测试与白盒测试 摘要:黑盒测试与白盒测试都是软件测试的重要方法。白盒测试是通过程序的源代码进行测试而不使用用户界面,它主要用于检测软件编码过程中的错误;而黑盒测试是是通过使用整个软件...
  • 软件测试技术之: 白盒测试黑盒测试

    万次阅读 多人点赞 2016-06-01 16:02:18
    白盒测试黑盒测试的区别和基本方法。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,596
精华内容 3,838
关键字:

软件工程黑盒白盒测试