黑盒测试和白盒测试的区别
一. 软件测试方法 1. 软件测试方法:白盒测试、黑盒测试、灰盒测试、静态测试、动态测试 2. 白盒测试:是一种测试用例设计方法,在这里盒子指的是被测试的软件,白盒,顾名思义即盒子是可视的,你可以清楚盒子内部的东西以及里面是如何运作的,因此白盒测试需要你对系统内部的结构和工作原理有一个清楚的了解,并且基于这个知识来设计你的用例。 白盒测试技术一般可被分为静态分析和动态分析两类技术。 静态分析主要有:控制流分析技术、数据流分析技术、信息流分析技术。 动态分析主要有:逻辑覆盖率测试(分支测试、路径测试等),程序插装等。 白盒测试优点:迫使测试人员去仔细的思考软件的实现;可以检测代码中的每条分支和路径;揭示隐藏在代码中的错误;对代码的测试比较彻底;最优化。 白盒测试缺点:昂贵;无法检测代码中遗漏的路径和数据敏感性错误;不验证规格的正确性。 3. 黑盒测试又叫功能测试,这是因为在黑盒测试中主要关注被测软件的功能实现,而不是内部逻辑。在黑盒测试中,被测对象的内部结构,运作情况对测试人员是不可见的,测试人员对被测产品的验证主要是根据其规格,验证其与规格的一致性。 在绝大多数没有用户参与的黑盒测试中,最常见的测试有:功能性测试、容量测试、安全性测试、负载测试、恢复性测试、标杆测试、稳定性测试、可靠性测试等。 4. 灰盒测试:白盒测试和黑盒测试往往不是决然分开的,一般在白盒测试中交叉使用黑盒测试的方法,在黑盒测试中交叉使用白盒测试的方法。灰盒测试就是这类界于白盒测试和黑盒测试之间的测试。 最常见的灰盒测试是集成测试。 5. 静态测试:是一种不通过执行程序而进行测试的技术。它的关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义。 6. 动态测试:包含了程序在受控的环境下使用特定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正确。 单元测试属于白盒测试范畴;集成测试属于灰盒测试范畴;系统测试属于黑盒测试范畴。 二. 单元测试 1. 概念:单元测试(Unit Testing)是对软件基本组成单元进行的测试,如函数或是一个类的方法。这里的单元,就是软件设计的最小单位。 单元测试的两个步骤:人工静态检查法与动态执行跟踪法。 人工静态检查是测试的第一步,这个阶段工作主要是保证代码算法的逻辑正确性(尽量通过人工检查发现代码的逻辑错误)、清晰性、规范性、一致性、算法高效性,并尽可能的发现程序中没有发现的错误。 第二步是通过设计测试用例,执行待测程序来跟踪比较实际结果与预期结果来发现错误。 2. 人工检查: (1)、检查算法的逻辑正确性:确定所编写的代码算法、数据结构定义(如:队列、堆栈等)是否实现了模块或方法所要求的功能。 (2)、模块接口的正确性检查:确定形式参数个数、数据类型、顺序是否正确;确定返回值类型及返回值的正确性。 (3)、输入参数有没有作正确性检查:如果没有作正确性检查,确定该参数是否的确无需做参数正确性检查,否则请添加上参数的正确性检查。 (4)、调用其他方法接口的正确性:检查实参类型正确与否、传入的参数值正确与否、个数正确与否,特别是具有多态的方法。返回值正确与否,有没有误解返回值所表示的意思。最好对每个被调用的方法的返回值用显示代码作正确性检查,如果被调用方法出现异常或错误程序应该给予反馈,并添加适当的出错处理代码。 (5)、出错处理:模块代码要求能预见出错的条件,并设置适当的出错处理,以便一旦程序出错时,能对出错程序重做安排,保证其逻辑的正确性,这种出错处理应当是模块功能的一部分。若出现下列情况之一,则表明模块的错误处理功能包含有错误或缺陷:出错的描述难以理解;出错的描述不足以对错误定位,不足以确定出错的原因;显示的错误信息与实际的错误原因不符;对错误条件的处理不正确;在对错误进行处理之前,错误条件已经引起系统的干预等。 (6)、保证表达式、SQL语句的正确性:检查所编写的SQL语句的语法、逻辑的正确性。对表达式应该保证不含二义性,对于容易产生歧义的表达式或运算符优先级(如:<、=、 >、 &&、||、 、 --等)可以采用扩号“()”运算符避免二义性,这样一方面能够保证代码的正确可靠,同时也能够提高代码的可读性。 (7)、检查常量或全局变量使用的正确性:确定所使用的常量或全局变量的取值和数值、数据类型;保证常量每次引用同它的取值、数值和类型的一致性。 (8)、表示符定义的规范一致性:保证变量命名能够见名知意,并且简洁但不宜过长或过短、规范、容易记忆、最好能够拼读。并尽量保证用相同的表示符代表相同功能,不要将不同的功能用相同的表示符表示;更不要用相同的表示符代表不同的功能意义。 (9)、程序风格的一致性、规范性:代码必须能保证符合企业规范,保证所有成员的代码风格一致、规范、工整。例如对数组做循环,不要一会儿采用下标变量从下到上的方式(如:for(i=0;i ;i<10)),一会儿又采用从上到下的方式(如:for(i=10;i--;i>0));应该尽量采用统一的方式,或则统一从下到上,或则统一从上到下。建议采用for循环和While循环,不要采用do{}while循环等。 (10)、检查程序中使用到的神秘数字是否采用了表示符定义:神秘的数字包括各种常数、数组的大小、字符位置、变换因子以及程序中出现的其他以文字形式写出的数值。在程序源代码里,一个具有原本形式的数对其本身的重要性或作用没提供任何指示性信息,它们也导致程序难以理解和修改。对于这类神秘数字必须采用相应的标量来表示;如果该数字在整个系统中都可能使用到务必将它定义为全局常量;如果该神秘数字在一个类中使用可将其定义为类的属性(Attribute),如果该神秘数字只在一个方法中出现务必将其定义为局部变量或常量。 (11)、检查代码是否可以优化、算法效率是否最高:如:SQL语句是否可以优化,是否可以用1条SQL语句代替程序中的多条SQL语句的功能,循环是否必要,循环中的语句是否可以抽出到循环之外等。 (12)、检查您的程序是否清晰简洁容易理解:注意:冗长的程序并不一定不是清晰的。 (13)、检查方法内部注释是否完整:是否清晰简洁;是否正确的反映了代码的功能,错误的注释比没有注释更糟;是否做了多余的注释;对于简单的一看就懂的代码没有必要注释。 (14)、检查注释文档是否完整:对包、类、属性、方法功能、参数、返回值的注释是否正确且容易理解;是否会落了或多了某个参数的注释,参数类型是否正确,参数的限定值是否正确。特别是对于形式参数与返回值中关于神秘数值的注释,如:类型参数 应该指出 1.代表什么,2.代表什么,3.代表什么等。对于返回结果集(Result Set)的注释,应该注释结果集中包含那些字段及字段类型、字段顺序等。 3. 动态执行跟踪:动态执行测试通常分为黑盒测试与白盒测试。对于单元测试来说主要应该采用白盒测试法对每个模块的内部作跟踪检查测试。对于单元白盒测试,应该对程序模块进行如下检查:(1)、对模块内所有独立的执行路径至少测试一次;(2)、对所有的逻辑判定,取“真”与“假”的两种情况都至少执行一次;(3)、在循环的边界和运行界限内执行循环体;(4)、测试内部数据的有效性等等。 4. 单元测试的目的:在于发现各模块内部可能存在的各种错误,主要是基于白盒测试。 单元测试的目的主要有3方面:验证单元代码和详细设计文档的一致性;跟踪详细设计文档中设计的实现,发现详细设计文档中存在的错误;发现在编码过程中引入的错误。 5. 单元的常见错误:(1)、单元接口;(2)、局部数据结构;(3)、独立路径;(4)、出错处理;(5)、边界条件。 6. 单元测试策略:有三种,独立的单元测试策略,自顶向下的单元测试策略和自底向上的单元测试策略。 独立的测试策略:不考虑每个模块与其他模块之间的关系,为每个模块设计桩模块和驱动模块。每个模块进行独立的单元测试。 自顶向下的测试策略:先对最顶层的单元进行测试,把顶层所调用的单元做成桩模块。其次对第二层进行测试,使用上面已测试的单元做驱动模块。如此类推直到测试完所有模块。 自底向上测试:先对模块调用层次图上最低层的模块进行单元测试,模拟调用该模块的模块做驱动模块。然后再对上面一层做单元测试,用下面已被测试过的模块做桩模块。依次类推,直到测试完所有模块。 7. 单元测试过程:计划(测什么)、设计(测试方案、策略)、实现(写测试用例、代码)、执行(测试报告)四个阶段。 判断测试是否完全的一个主要评测方法是基于需求的覆盖,而这又是以确定、实施和/或执行的测试用例的数量为依据的。 (1)、白盒技术:白盒测试是结构测试,所以被测对象基本上是源程序,以程序的内部逻辑为基础设计测试用例。 白盒测试的测试用例设计:一般采用逻辑覆盖法和基本路径法进行设计。 逻辑覆盖是以程序内部的逻辑结构为基础的测试用例设计技术,这一方法要求测试人员对程序的逻辑结构有清楚的了解。逻辑覆盖可分为:语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖与路径覆盖。 语句覆盖:在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次。 判定覆盖法:在测试时,首先设计若干个测试用例,然后运行被测程序,使得程序中的每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足。 条件覆盖法:在测试时,首先设计若干个测试用例,然后运行被测程序,要使每个判断中每个条件的可能取值至少满足一次。 判定条件覆盖法:在测试时,首先设计若干个测试用例,然后运行被测程序,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果至少出现一次。 路径覆盖法:在测试时,首先设计若干个测试用例,然后运行被测程序,要求覆盖程序中所有可能的路径。 循环路径测试:基本路径覆盖法将循环限制在最多一次,这样虽然大大降低了需要覆盖的路径的条数,但对循环的测试却不充分了,因此还需要对循环路径进行测试。循环路径测试包含,简单循环的测试和嵌套循环的测试。 (2)、黑盒技术:等价划分类、边界值分析、错误推测、因果图、综合策略 4. 测试类设计:一个模块或一个方法(Method)并不是一个独立的程序,在考虑测试它时要同时考虑它和外界的联系,用些辅助模块去模拟与所测模块相联系的其他模块。这些辅助模块分为两种: (1)、驱动模块(driver):相当于所测模块的主程序。它接收测试数据,把这些数据传送给所测模块,最后再输出实际测试结果; (2)、桩模块(stub):用于代替所测模块调用的子模块。桩模块可以做少量的数据操作,不需要把子模块所有功能都带进来,但不容许什么事情也不做。 所测模块与它相关的驱动模块及桩模块共同构成了一个“测试环境”。 (1)、测试用例文档:编写测试用例文档应有文档模板,须符合内部的规范要求。 (2)、测试用例的设置:按功能设置用例、按路径设置用例、按功能、路径混合模式设置用例; (3)、设计测试用例:测试用例可以分为基本事件、备选事件和异常事件。 (1)、目的:保证程序创建的类与接口的完整与正确,以及程序模块单独正常运行。保证局部模块功能完备性,运行正确性与稳定性。 (3)、测试依据:A、需求规格说明书、用例描述清单;B、设计文档;C、编码规范;D、开发命名标准。 (4)、通过的准则:创建的类、接口、方法、属性应与《设计文档》保持一致;程序的各种命名、注释、代码行的格式等应符合《程序开发命名标准》和《编码规范》;程序模块能独立稳定运行。 错误是指计算值、观测值、测量值之间,或条件与真值之间,不符合规定的或理论上的正确值或条件。 故障是指功能部件不能执行所要求的功能。故障可能由错误、缺陷或失效引起。 |
黑盒测试和白盒测试的区别相关推荐
- 黑盒测试、白盒测试、灰盒测试的区别
1. 黑盒测试 黑盒测试也称功能测试.数据驱动测试或基于规格说明书的测试,它是通过测试来检测每个功能是否都能正常使用.在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况 ...
- 黑盒测试、白盒测试、灰盒测试区别与详细功能描述
一.黑盒测试.灰盒测试.白盒测试概念 黑盒测试:黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检验每个功能都是否能够正常使用. 白盒测试:白盒测试也称结构测试或逻辑驱动测 ...
- 白盒测试与黑盒测试的联系与区别
软件测试的方法有很多,比如白盒测试,黑盒测试,静态测试,动态测试等等,但主要的还是白盒测试和黑盒测试. 白盒测试主要是指实际运行被测程序,通过程序的源代码进行测试而不使用用户界面.这种类型的测试需要从 ...
- 黑盒测试和白盒测试定义及区别
简单了解一下黑盒测试和白盒测试 一.定义 1.1黑盒测试 黑盒测试又称为功能测试,主要检测软件的每一个功能是否能够正常使用.在测试过程中,将程序看成不能打开的黑盒子,不考虑程序内部结构和特性的基础上通 ...
- 黑盒测试与白盒测试区别
黑盒测试与白盒测试区别 黑盒测试 白盒测试 主要区别 黑盒测试 不考虑内部的逻辑结构和具体运作,依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明要求,检测输出结果是否符合 白盒测试 与黑盒 ...
- 一文告诉你黑盒测试、白盒测试、集成测试和系统测试的区别与联系
于开发人员来说,往往对各种测试方法感到疑惑.特别是在整合代码的时候,我们就能深刻感觉受到测试的重要性.很多开发人员只注重写代码,轻视测试的重要性.总是代码一写完提交然后就交给测试组测试了,没多久测试组 ...
- 黑盒测试和白盒测试区别
一.黑盒测试和白盒测试 黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求. 白盒测试:已知产品的内部工作过程,可以进行测试证明每种内部操作是否符合设计规格要求,所有内部成 ...
- 黑盒测试和白盒测试的概念和区别你知道吗?
目录 前言 黑盒测试 黑盒功能测试 非功能黑盒测试 回归黑盒测试 白盒测试 出于安全原因 解决性能问题 检查链路 需要黑盒和白盒测试的结合 前言 软件测试是软件开发过程中的基本活动.黑盒测试和白盒测试 ...
- 黑盒测试、白盒测试你知道他们的区别吗?
软件测试是软件开发过程中的基本活动.黑盒测试和白盒测试是两种不同类型的软件测试策略,它们具有同样强大的功能,并且结合使用时甚至更好. 黑盒测试 在软件中,黑盒测试很方便,可以减少灾难性(软件)崩溃的风 ...
- 黑盒测试比白盒测试技术要求更高吗?
几个月前我还在谈论黑盒测试不一定比白盒测试技术含量低,现在我却可以比较肯定地说,黑盒测试比白盒测试更难,技术要求更高.道理其实非常简单,黑盒,白盒测试的本质区别在于源代码的访问权利,白盒测试具有这种权 ...
最新文章
- php 调用php webservice
- java磁盘读写b 树_原来你是这样的B+树
- [ZJOI2007] 时态同步(拓扑序)
- Properties类与IO流
- C语言常用字符串函数
- vue快速复制快捷键_⌨️ Vue项目给应用优雅的绑定快捷键
- 使用validate验证数据库
- 相乘的c语言,c语言矩阵相乘
- 怎么用python输入计算公式_如何从python3中的用户输入计算min和max
- (14)数据结构-二叉排序树
- not optimal php,PHP错误提示It is not safe to rely on the system……的解决方法
- 嘉兴 机器人仓库 菜鸟_投资 2.1 亿!又一高端智能装备项目落户嘉兴科技城
- xp系统安装金蝶k3服务器配置,xp安装金蝶k3安全设置.doc
- java 日期 中文_JAVA的时间类型转换为中文大写方法
- win10 电脑内存占用率过高解决
- 1807520-99-5,DNP-PEG4-alcohol含有二硝基苯和羟基的PEG连接剂
- 重磅!《中国医学影像人工智能发展报告2021-2022》
- 代号记忆之数字和英文总结
- 概率编程——未来也可以这样预测
- python post请求传body参数,报参数错误解决方案——菜鸟的笨拙排雷之路