软件测试之黑盒测试
(1)黑盒测试又称功能测试、数据驱动测试或基于规格说明书的测试,是一种从用户观点出发的测试。(2)测试人员把被测程序当作一个黑盒子。
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快
一、黑盒测试的概念
1、什么是黑盒测试
(1)黑盒测试又称功能测试、数据驱动测试或基于规格说明书的测试,是一种从用户观点出发的测试。
(2)测试人员把被测程序当作一个黑盒子。
2、黑盒测试主要测试的错误类型有
(1)不正确或遗漏的功能
(2)接口、界面错误
(3)性能错误
(4)数据结构或外部数据访问错误
(5)初始化或终止条件错误等等
3、黑盒测试用于回答以下问题
(1)如何测试功能的有效性?
(2)何种类型的输入会产生好的测试用例?
(3)系统是否对特定的输入值尤其敏感?
(4)如何分隔数据类的边界?
(5)系统能够承受何种数据率和数据量?
(6)特定类型的数据组合会对系统产生何种影响?
4、运用黑盒测试方法,可以导出满足以下标准的测试用例集
(1)所设计的测试用例能够减少达到合理测试所需的附加测试用例数。
(2)所设计的测试用例能够告知某些类型错误的存在或不存在,而不是仅仅与特定测试相关的错误。
5、用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。但这是不可能的,因为穷举测试数量太大,无法完成。
二、黑盒测试的实施过程
1、测试计划阶段
2、测试设计阶段 - 依据程序需求规格说明书或用户手册,按照一定规范化的方法进行软件功能划分和设计测试用例。
3、测试执行阶段 - 按照设计的测试用例执行测试、自由测试(作为测试用例测试的补充)。
4、测试总结阶段
三、黑盒测试的数学知识
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.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 日)”。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)