黑盒(功能)测试基本方法

news2024/11/14 13:31:55

1、黑盒测试的概念

1、什么是黑盒测试

(1)黑盒测试又称功能测试、数据驱动测试或基于规格说明书的测试,是一种从用户观点出发的测试。

(2)测试人员把被测程序当作一个黑盒子。

2、黑盒测试主要测试的错误类型有

(1)不正确或遗漏的功能

(2)接口、界面错误

(3)性能错误

(4)数据结构或外部数据访问错误

(5)初始化或终止条件错误等等

3、黑盒测试用于回答以下问题

(1)如何测试功能的有效性?

(2)何种类型的输入会产生好的测试用例?

(3)系统是否对特定的输入值尤其敏感?

(4)如何分隔数据类的边界?

(5)系统能够承受何种数据率和数据量?

(6)特定类型的数据组合会对系统产生何种影响?

4、运用黑盒测试方法,可以导出满足以下标准的测试用例集

(1)所设计的测试用例能够减少达到合理测试所需的附加测试用例数。

(2)所设计的测试用例能够告知某些类型错误的存在或不存在,而不是仅仅与特定测试相关的错误。

5、用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。但这是不可能的,因为穷举测试数量太大,无法完成。

2、黑盒测试的实施过程

1、测试计划阶段

2、测试设计阶段 - 依据程序需求规格说明书或用户手册,按照一定规范化的方法进行软件功能划分和设计测试用例。

3、测试执行阶段 - 按照设计的测试用例执行测试、自由测试(作为测试用例测试的补充)。

4、测试总结阶段

3、黑盒测试的数学知识

1、集合论

(1)集合与成员

M30 ={ 4月,6月,9月,11月}

(2)集合的定义

列出集合元素 如M30

给出集合元素判定规则 - 如 Y={年| 1900<年<2199}

(3)空集的表示

Φ

Φ = {年:1812≤年≤2022}

Φ, {φ} 是不同的

(4)集合的关系

A 是 B 的 子集 A Í B

A 是 B 的 真子集 A Ì B

A 和 B 是 相等集合A=B

(5)集合的划分

A1,A2,…,An是集合A的子集

A1,A2,…,An是集合A的一个划分

A1∪A2∪…∪An=A 且Ai ∩Aj…= Φ (i != j)

(6)测试

完备性

无冗余性

2、函数

(1)任何程序都可以看成将其输出与输入关联起来的函数,因此函数是开发测试的核心概念。

1-1函数

多对1函数

(2)程序实现的功能大多数是多对一的函数 - 这对测试很重要(多对一测试可选代表等价类1对1,功能相似也可分等价类)。

4、测试用例设计技术

4.1、等价类划分方法

1、划分等价类

(1)有效等价类 - 是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。

(2)无效等价类 - 无效等价类指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。

2、划分等价类的标准

(1)完备测试、避免冗余

(2)划分等价类重要的是

a.并是整个集合 - 完备性

b.子集互不相交 - 保证一种形式的无冗余性

(3)同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到“相同的执行路径”。

3、划分等价类的方法 - 六条确定等价类的原则

(1)在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。

(2)在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类。

(3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。

(4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。

(5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。

(6)在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。

4、设计测试用例

(1)在确立了等价类后,可建立等价类表,列出所有划分出的等价类输入条件。

a.有效等价类

b.无效等价类

(2)划分出的等价类中按以下三个原则设计测试用例

a.为每一个等价类规定一个唯一的编号。

b.设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止。

c.设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。

5、举例

例:某程序规定:“输入三个整数 a 、 b 、 c 分别作为三边的边长构成三角形。通过程序判定所构成的三角形的类型,当此三角形为一般三角形、等腰三角形及等边三角形时,分别作计算 … ”。用等价类划分方法为该程序进行测试用例设计

分析题目中给出和隐含的对输入条件的要求

(1)整数 (2)三个数 (3)非零数 (4)正数 (5)两边之和大于第三边 (6)等腰 (7)等边

如果 a 、 b 、 c 满足条件( 1 ) ~ ( 4 ),则输出下列四种情况之一:

a.如果不满足条件(5),则程序输出为 “ 非三角形 ”。

b.如果三条边相等即满足条件(7),则程序输出为 “ 等边三角形 ”。

c.如果只有两条边相等、即满足条件(6),则程序输出为 “ 等腰三角形 ”。

d.如果三条边都不相等,则程序输出为 “ 一般三角形 ”。

6、NextDate 函数等价类测试用例

(1)NextDate 函数包含三个变量

month

day

year

(2)要求输入变量 month 、 day 和 year 均为整数值,并且满足下列条件

1≤month≤12

1≤day≤31

1920≤year≤2050

(3)有效等价类为

M1={月份:1≤月份≤12}

D1={日期:1≤日期≤31}

Y1={年:1812≤年≤2012}

(4)无效等价类为

M2={月份:月份<1}

M3={月份:月份>12}

D2={日期:日期<1}

D3={日期:日期>31}

Y2={年:年<1812}

Y3={年:年>2012}

4.2、边界值分析法

1、边界值分析方法是对等价类划分方法的补充

(1)边界值分析方法的考虑

a.大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误。

b.使用边界值分析方法设计测试用例,首先应确定边界情况。

(2)基于边界值分析方法选择测试用例的原则

a.如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。

b.如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。

c.将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。

d.如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。

e.如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。

f.分析规格说明,找出其它可能的边界条件。

2、与等价划分的区别

(1)边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。

(2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。

4.3、错误推测法

1、错误推测法 - 基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。

2、错误推测方法的基本思想 - 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。

3、采用错误推测法还可补充设计一些测试用例。

4、测试一个对线性表(比如数组)进行排序的程序,可推测列出以下几项需要特别测试的情况。

(1)输入的线性表为空表

(2)表中只含有一个元素

(3)输入表中所有元素已排好序

(4)输入表已按逆序排好

(5)输入表中部分或全部元素相同

4.4、因果图方法

1、因果图方法

(1)等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等。

(2)考虑输入条件之间的相互组合,可能会产生一些新的情况. 但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多. 因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例。

(3)采用因果图方法能够帮助我们按一定步骤,高效率地选择测试用例,同时还能为我们指出,程序规格说明描述中存在着什么问题。

(4)利用因果图生成测试用例的基本步骤

a.分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符。

b.分析软件规格说明描述中的语义.找出原因与结果之间, 原因与原因之间对应的关系。根据这些关系,画出因果图。

c.由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不不可能出现. 为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件。

d.把因果图转换为判定表。

e.把判定表的每一列拿出来作为依据,设计测试用例。

2、因果图介绍

(1)4种符号分别表示了规格说明中向4种因果关系

a.恒等

b.与

c.或

d.非

(2)因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。

(3)Ci表示原因,通常置于图的左部;ei表示结果,通常在图的右部。ci和ei均可取值0或1,0表示某状态不出现,1表示某状态出现。

3、因果图概念

(1)关系

恒等:若ci是1,则ei也是1;否则ei为0

与:若c1和c2都是1,则ei为1;否则ei为0。“与”也可有任意个输入

或:若c1或c2或c3是1,则ei是1;否则ei为0。“或”可有任意个输入

非:若ci是1,则ei是0;否则ei是1

(2)约束

a.输入状态相互之间还可能存在某些依赖关系,称为约束。

b.某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。

c.在因果图中,用特定的符号标明这些约束。

(3)输入条件的约束有以下4类

E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1。

I约束(或):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0。

O约束(唯一):a和b必须有一个,且仅有1个为1。

R约束(要求):a是1时,b必须是1,即不可能a是1时b是0。

(4)输出条件约束类型

输出条件的约束只有M约束(强制):若结果a是1,则结果b强制为0。

4、因果图方法小结

(1)因果图方法是一个非常有效的黑盒测试方法,它能够生成没有重复性的且发现错误能力强的测试用例,而且对输入、输出同时进行了分析。

(2)从因果图生成的测试用例(局部,组合关系下的)包括了所有输入数据的取TRUE与取FALSE的情况,构成的测试用例数目达到最少,且测试用例数目随输入数据数目的增加而线性地增加。

(3)如果哪个开发项目在设计阶段就采用了判定表,也就不必再画因果图,而是可以直接利用判定表设计测试用例了。

4.5、判定表驱动测试方法

1、判定表组成 - 判定表通常由四个部分组成

(1)条件桩 - 列出了问题的所有条件,通常认为列出得条件的次序无关紧要。

(2)动作桩 - 列出了问题规定可能采取的操作,这些操作的排列顺序没有约束。

(3)条件项 - 列出针对它左列条件的取值,在所有可能情况下的真假值。

(4)动作项 - 列出在条件项的各种取值情况下应该采取的动作。

2、规则及规则合并

(1)规则

a.任何一个条件组合的特定取值及其相应要执行的操作称为规则。

b.在判定表中贯穿条件项和动作项的一列就是一条规则。

c.显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列。

(2)化简

就是规则合并有两条或多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系。

3、判定表的建立步骤

(1)确定规则的个数.假如有n个条件。每个条件有两个取值(0,1),故有2n种规则。

(2)列出所有的条件桩和动作桩。

(3)填入条件项。

(4)填入动作项。等到初始判定表。

(5)简化.合并相似规则(相同动作)。

4、NextData函数的精简决策表

(1)NextData函数的精简决策表

M1={月份, 每月有30天}

M2={月份, 每月有31天}

M3={月份, 2月}

D1={日期,1~28}

D2={日期,29}

D3={日期,30}

D4={日期,31}

Y1 ={年:年是闰年}

Y2 ={年:年不是闰年}

(2)改进为

M1={月份:每月有30天}

M2={月份:每月有31天, 12月除外}

M4={月份:12月}

M3={月份:2月}

D1={日期:1<=日期<=27}

D2={日期:28}

D3={日期:29}

D4={日期:30}

D5={日期:31}

Y1 ={年:年是闰年}

Y2 ={年:年不是闰年}

5、判定表在功能测试中的应用

(1)一些软件的功能需求可用判定表表达得非常清楚,在检验程序的功能时判定表也就成为一个不错的工具。

(2)判定表的优点和缺点

a.优点 - 它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏。

b.缺点 - 不能表达重复执行的动作,例如循环结构。

(3)B. Beizer 指出了适合使用判定表设计测试用例的条件

a.规格说明以判定表形式给出,或很容易转换成判定表。

b.条件的排列顺序不会也不影响执行哪些操作。

c.规则的排列顺序不会也不影响执行哪些操作。

d.每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则。

e.如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要。

6、Myers测试方法选择的综合策略 - Myers提出了使用各种测试方法的综合策略

(1)在任何情况下都必须使用边界值分析方法。经验表明用这种方法设计出测试用例发现程序错误的能力最强。

(2)必要时用等价类划分方法补充一些测试用例。

(3)用错误推测法再追加一些测试用例。

(4)对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。如果没有达到要求的覆盖标准,应当再补充足够的测试用例。

(5)如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法。

7、NextDate 函数等价类测试用例 - NextDate 函数中有两种复杂性的输入来源

(1)一是所讨论的输入域的复杂性。

(2)二是确定闰年的规则,并要增加 “ 额外天( 2 月 29 日)”。

最后: 可以在公众号:伤心的辣条 ! 自行领取一份216页软件测试工程师面试宝典文档资料【免费的】。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

现在我邀请你进入我们的软件测试学习交流群:746506216】,备注“入群”, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!

软件测试工程师自学教程:

这才是2022最精细的自动化测试自学教程,我把它刷了无数遍才上岸字节跳动,做到涨薪20K【值得自学软件测试的人刷】

接口性能测试 — 软件测试人必会618实战场景分析

软件测试工程师月薪2W以上薪资必学技能 — Python接口自动化框架封装.

美团面试真题_高级测试25K岗位面试 — 软件测试人都应该看看

测试开发之全面剖析自动化测试平台 — 软件测试人的必经之路

软件测试必会_Jmeter大厂实战 — 仅6步可实现接口自动化测试

Jmeter实战讲解案例 — 软件测试人必会

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/441000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVisualVM、Visual GC

JVisualVM JVisualVM Java VisualVM 是一款 JDK 自带免费的性能分析工具 public class JVisualVM {public static void main(String[] args) {Thread t1 new Thread(() -> {while (!Thread.currentThread().isInterrupted()) {}}, "JVisualVM测试子线程");t1.…

flinkcdc 动态的增加新的同步表到同一个作业中

背景 flinkcdc 2.0版本上线了一个新功能–支持动态加表这个是很有用的feature&#xff0c;本文介绍在开发中如何使用。 设想下假如你一个 CDC pipeline 监控了 4 张表&#xff0c;突然有天业务需求需要再加几张表&#xff0c;你肯定不想另起作业 (浪费资源)&#xff0c;那么这…

大数据——HDFS(分布式文件系统)

一&#xff0c;分布式系统概述 Hadoop的两大核心组件 HDFS&#xff08;Hadoop Distributed Filesystem&#xff09;&#xff1a;是一个易于扩展的分布式文件系统&#xff0c;运行在成百上千台低成本的机器上。HDFS具有高度容错能力&#xff0c;旨在部署在低成本机器上。HDFS主…

日撸 Java 三百行day34

文章目录 说明Day34 图的深度优先遍历1.思路2.代码3.总结1.在广度遍历中借助了队列2.在深度优先遍历借助了栈。 说明 闵老师的文章链接&#xff1a; 日撸 Java 三百行&#xff08;总述&#xff09;_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护&#xff1a…

Android 开发之核心技术点——性能优化篇(带面试题)~

性能优化对于Android开发的重要性非常大。随着Android设备的不断升级&#xff0c;用户对应用的要求也越来越高&#xff0c;包括应用的运行速度、响应速度、流畅度等方面。如果应用的性能不能满足用户的需求&#xff0c;很可能会导致用户流失、差评以及应用被卸载等情况。 另外…

boot-admin整合flowable官方editor-app进行BPMN2.0建模

boot-admin整合flowable官方editor-app源码进行BPMN2.0建模 正所谓百家争鸣、见仁见智、众说纷纭、各有千秋&#xff01;在工作流bpmn2.0可视化建模工具实现的细分领域&#xff0c;网上扑面而来的是 bpmn.js 这个渲染工具包和web建模器&#xff0c;而笔者却认为使用flowable官…

2023零基础快速跟上人工智能第一梯队

写在前面&#xff1a;有关人工智能学什么&#xff0c;怎么学&#xff0c;什么路线等一系列问题。我决定整理一套可行的规划路线&#xff0c;希望帮助准备入门的朋友们少走些弯路。 下面我会推荐一个比较快速可行的学习模板&#xff0c;并附上我认为比较好的学习资料。 新手不建…

git使用规范文档

git使用规范文档 Git使用规范流程图 开发人员操作步骤&#xff1a; 第一步&#xff1a;clone代码 在你的本地代码库进行从远程仓库clone代码操作&#xff08;100%表示clone完成&#xff09; 进入项目文件&#xff0c;右键Git Bash Here 切换到你所进行开发的分支上 拉取该分…

JavaSE学习进阶day05_02 常见的数据结构和List接口

第三章 数据结构&#xff08;掌握&#xff09; 3.1 数据结构介绍 数据结构 : 数据用什么样的方式组合在一起。 科班出身的同学我想你对数据结构一点也不陌生&#xff0c;不知道你记不记得&#xff0c;当时学习数据结构的逻辑结构中的集合时&#xff0c;只是简单了解它&#…

hackathon 复盘:niche 海外软件工具正确的方法 6 个步骤

上周末&#xff0c;去参加了北京思否 hackathon&#xff0c;两天时间内从脑暴 & 挖掘软件 IDEA -> Demo 研发路演&#xff0c;这次经历让我难忘。这里我的看法是每个开发者圈友&#xff0c;都应该去参加一次 hackathon ~ 做 niche 软件正确的方法 这边先说结论&#xf…

vmware下Ubuntu系统中安装vscode

文章目录 前言&#xff1a;在线下载&#xff1a;离线下载包&#xff1a;配置C/C环境 前言&#xff1a; 这篇博客是为后面交叉编译程序放到树莓派上运行做的准备。同时也是自己在装过程中的一个记录。 在线与离线安装的唯一不同就是获取安装包是在线下载还是别的地方拷贝过来以…

【数据结构】- 链表之单链表(中)

文章目录 前言一、单链表(中)1.1 头删1.2尾删1.2.1第一种方法&#xff1a;1.2.2第二种方法&#xff1a;1.2.3多因素考虑 二、完整版代码2.1 SList.h2.2 SList.c2.3 Test.c 总结 前言 千万不要放弃 最好的东西 总是压轴出场 本章是关于数据结构中的链表之单链表(中) 提示&#…

数据结构与算法基础(王卓)(26)线性表的查找(2):顺序查找(二分查找、分块查找)

二、折半查找&#xff08;二分或对分查找) 前置条件和前面一样 最开始根据PPT示(实)例写出的程序框架&#xff1a; 一开始&#xff1a; low&#xff1a;第一位 high&#xff1a;最后一位 mid&#xff1a;正中间 查找数小于mid&#xff1a; 把high移动到mid前面一位&#xff08;…

从0搭建Vue3组件库(四): 如何开发一个组件

本篇文章将介绍如何在组件库中开发一个组件,其中包括 如何本地实时调试组件如何让组件库支持全局引入如何在 setup 语法糖下给组件命名如何开发一个组件 目录结构 在packages目录下新建components和utils两个包,其中components就是我们组件存放的位置,而utils包则是存放一些…

观看js编程范式笔记(函数式编程)

js为什么鼓励函数式编程&#xff1f; JavaScript&#xff08;简称 JS&#xff09;是一种面向对象和函数式编程语言&#xff0c;但它在语言层面上更加鼓励函数式编程。以下是几个原因&#xff1a; 函数是一等公民&#xff1a;在 JavaScript 中&#xff0c;函数被视为一等公民&a…

HANA SDA连接外部数据库到BW的步骤

咱都知道&#xff0c;我们不能直接从BW连接到外部数据库。第一步得从HANA database通过SDA去建一个到外部DB的连接。 数据库连接好了&#xff0c;那么接下来别忘了&#xff0c;还得建一个源系统。 也就是说第一步&#xff0c;我们要用HANA SDA通过Linux ODBC driver去连接外部…

Vue3表格(Table)

Vue2表格&#xff08;Table&#xff09; 可自定义设置以下属性&#xff1a; 表格列的配置项&#xff08;columns&#xff09;&#xff0c;类型&#xff1a;Array<{title?: string, width?: number, dataIndex?: string, slot?: string}>&#xff0c;默认 [] 表格数…

史上最全面的苹果公司PMO的运作模式详解

01 苹果公司PMO的发展历程 1. 初期阶段&#xff1a; 在苹果公司刚创立的早期&#xff0c;没有明确的PMO组织。项目经理直接向CEO Steve Jobs汇报&#xff0c;项目管理在公司内部较为分散。 2. 1997年-2001年&#xff1a; 在这段时间内&#xff0c;苹果公司开始成立项目管理…

PasteSpider之关于字符串模板占位字符等的说明

PasteSpider中&#xff0c;构建&#xff0c;部署等都是通过命令执行的&#xff0c;为了更加的灵活&#xff0c;引入了不同的变量&#xff0c;以便适合不同的需求使用。 命令占位符 注&#xff01;&#xff01;&#xff01;&#xff0c;占位符的格式为{{对象.属性}},他们之间没有…

【LeetCode: 1691. 堆叠长方体的最大高度 | 暴力递归=>记忆化搜索=>动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…