概述
白盒测试
白盒测试也称为结构测试,主要用于检测软件编码过程中的错误。程序员的编程经验、对编程软件的掌握程度、工作状态等因素都会影响到编程质量,导致代码错误。软件程序基本的语法错误在程序调试时,就能够很及时地发现,然后及时进行改正。但是软件程序在运算顺序、逻辑判断以及运行路径上的错误很难发现,在实际的软件程序代码编写上,没有程序员能够保证代码编写结构不出现任何错误,即使是水平很高的程序员也不能保证。白盒测试下,软件程序被看做是一个打开的盒子,盒子里有测试软件的源程序,还能够分析盒子内部的结构,所以这种测试方法能够全面地测试程序代码结构。
黑盒测试
黑盒测试又称为功能测试,主要检测软件的每一个功能是否能够正常使用。在测试过程中,将程序看成不能打开的黑盒子,不考虑程序内部结构和特性的基础上通过程序接口进行测试,检查程序功能是否按照设计需求以及说明书的规定能够正常打开使用。
一、测试方式不同
黑盒测试:功能测试,是通过测试来检测每个功能是否都能正常使用。
(一)等价类划分法
等价类划分法是一种典型的、重要的黑盒测试方法,它将程序所有可能的输入数据划分为若干个等价类。然后从每个部分中选取具有代表性的数据当做测试用例。测试用例由有效等价类和无效等价类的代表数据组成,从而保证测试用例具有完整性和代表性。使用该方法设计测试用例主要有两个步骤:(1)确定等价类;(2)生成测试用例。
(二)边界值分析法
边界值分析法是对程序输入或输出的边界值进行测试的一种黑盒测试方法。实际的测试工作证明,考虑了边界条件的测试用例比那些没有考虑边界条件的测试用例具有更高的测试回报率。这里所说的边界条件,是指输入和输入等价类中那些恰好处于边界、或超过边界、或在边界以下的状态。
(三)因果图法
因果图法也是较常用的一种黑盒测试方法,是一种简化了的逻辑图。因果图能直观地表明输入条件和输出动作之间的因果关系,能帮助测试人员把注意力集中到与程序功能有关的输入组合上。因果图法是一种适合于描述对于多种输入条件组合的测试方法,根据输入条件的组合、约束关系和输出条件的因果关系,分析输入条件的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况
(四)错误推测法
错误推测法是基于以往的经验和直觉,参照以往的软件系统出现的错误,推测当前被测程序中可能存在的缺陷和错误,有针对性地设计测试用例。
用错误推测法设计测试用例的基本思想是:列举出程序中可能犯出现的错误或容易发生错误的特殊情况的清单,然后根据清单和已经设计好的测试用例来编写特定的测试用例。例如,程序中出现的输入数据为“0”或者字符为空就是一种错误易发情况;在出现输入或输出的数量不定的地方,数量为“没有”和“一个”也是错误易发情况。特别需要注意的是,在阅读规格说明时联系程序员可能做的假设来确定测试用例,测试人员要站在用户的角度来考虑输入信息,而不必去管这些信息对于被测程序是合理还是不合理的输入。
白盒测试:称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。
1.是程序结构分析,根据源代码可以首先绘制程序的流程图,然后根据流程图分析程序的结构。
2.是逻辑覆盖方测试,根据程序的内部结构,对所有的路径进行测试,是一种穷举路径的测试方法。
3.是基本路径测试,根据程序的逻辑判断,分析程序中的路径,再进行用例的设计。
白盒测试是软件测试中比较重要的一种测试方法,可以分为四个步骤实施,第一步,撰写测试计划。根据需求说明书,制定软件测试的进度,确定人员、范围、技术、风险等,形成测试计划或测试方案。第二步,撰写测试用例。根据源代码及其分析,按照一定规范化的方法进行软件结构划分,并进行测试用例的设计,形成测试用例表。第三步,执行测试用例。按照之前写好的测试用例,进行系统测试的执行,并且记录测试结果,形成缺陷表和缺陷报告。第四步,撰写测试总结。将前期的测试工作做总结,分析用例的数量、发现的高、中、低缺陷数,评价本系统,形成完整的总结报告。
二、测试目的不同
1、黑盒测试:把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试与白盒测试相反,软件设计程序被看做一个打不开的盒子,盒子里的程序代码测试人员不能看到,只能看到软件或者是某些模块的简单功能描述,这种测试方法主要是验证软件或者是功能的实现度。
2、白盒测试:通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试。在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。
三、测试原则不同
1、黑盒测试:以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身设计有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。
2、白盒测试:一个模块中的所有独立路径至少被测试一次。所有逻辑值均需测试true和false两种情况。
四、优缺点对比
黑盒测试 白盒测试
优点 1) 比较简单,不需要了解程序的内部的代码及实现 2) 与软件的内部实现无关 3) 从用户的角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题 4) 基于软件开发文档,所以也能知道软件实现了文档中的哪些功能 5) 在做软件自动化测试时较为方便 1) 不可能覆盖所有的代码, 覆盖率较低,大概只能达到总代码量的30%2) 自动化测试的复用性较低。
缺点 1) 帮助软件测试人员增大代码的覆盖率。 提供代码的质量,发现代码中隐藏的问题 1) 程序运行会有很多不同的路径,不可能测试所有的运行路径2) 测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求3) 系统庞大时,测试开销会非常大。
五、测试用例设计
白盒测试用例设计
白盒测试关注的是测试用例执行的程度或覆盖程序逻辑结构(源代码)的程度。完全的白盒测试是将程序中每条路径都执行到,然而对一个带有循环的程序来说,完全的路径测试并不切合实际。白盒测试的特点:依据软件设计说明书进行测试、对程序内部细节的严密检验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试。
语句覆盖是最起码的结构覆盖要求,语句覆盖要求设计足够多的测试用例,使得程序中每条语句至少被执行一次。可以很直观地从源代码得到测试用例,无须细分每条判定表达式。由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。(遗漏隐藏的逻辑分支)
判定覆盖要求必须编写足够的测试用例,使得每一个判断都至少有一个为“真”和为“假”的输出结果。判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。(遗漏组合判定中的某些条件取值)
条件覆盖要求设计足够多的测试用例,使得判定中的每个条件获得各种可能的结果,即每个条件至少有一次为真值,有一次为假值。要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。
判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身所有可能结果也至少出现一次。判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足。判定/条件覆盖准则的缺点是未考虑条件的组合情况。
多重条件覆盖要求设计足够多的测试用例,使得每个判定中条件结果的所有可能组合至少出现一次。多重条件覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。更改的判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。缺点是线性地增加了测试用例的数量。
路径覆盖要求设计足够的测试用例,覆盖程序中所有可能的路径。由于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。而在有些情况下,一些执行路径是不可能被执行的,这样不仅降低了测试效率,而且大量的测试结果的累积,也为排错带来麻烦。
黑盒测试用例设计
等价类划分是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。等价类分为有效等价类和无效等价类,
等价类划分有以下原则:
在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。
在输入条件规定了输入值的集合或者规定了"必须如何"的条件的情况下,可确立一个有效等价类和一个无效等价类。
在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。
在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。
在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);
在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。
在确立了等价类后,可建立等价类表,列出所有划分出的等价类输入条件:有效等价类、无效等价类,然后从划分出的等价类中按以下三个原则设计测试用例:
为每一个等价类规定一个唯一的编号;
设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;
设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。
因果图是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。
场景法通过流程图描述用户的使用场景
适用场景:多个功能组合场景的测试
判定表
01、适用场景:有多个输入与输出,并且输入与输入之间有组合关系,输入与输出之间有依赖关系
02、组成部分:条件桩(所有的输入条件,次序无关)、动作桩(输入条件对应可能的结果)
03、 条件项(条件对应的取值,一般是真假值)、动作项(取值全组合,每一列组合得到的结果)
04、 规则(每列条件项和动作项构成一条规则)
05、设计用例步骤:明确需求、画出判定表、根据规则编写用例
六、结语
凡事要趁早,特别是技术行业,一定要提升技术功底,丰富自动化项目实战经验,这对于你未来几年职业规划,以及测试技术掌握的深度非常有帮助。
下面全都是小编辛苦整理的资料
如果文章对你有帮助,麻烦伸出发财小手点个赞,感谢您的支持,你的点赞是我持续更新的动力,也大家可以进群交流(644956177),里面有各种软件测试资源和技术交流。
加油吧,测试员!任凭风吹雨打,只要一直走下去,不放弃,远方的路终将清晰。路就在脚下,成功就在明天!