🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏:🏀软件测试与软件项目管理_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. 前言
考试前猫猫又开始更新考试科目了(也就是开始学了bushi)。本学期更新的科目有:
- 软件测试
- 软件项目管理
- 爬虫和Web数据管理
- 数据可视化
本系列【软件测试】将针对软件测试的基础知识进行拆分讲解,既是对自己学习的一次巩固也想为后面学习的猫友们提供一些帮助。如果大家有空可以点个免费的赞和收藏呀~~你的鼓励真的对猫猫很重要。
2. 回顾
软件缺陷是软件质量的对立面:软件质量有好几个因素包括功能、可靠、易用、可移植、可维护等。软件缺陷就是其反义词。
软件缺陷是什么:从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。
软件测试的分类:层次/对象(单元测试、集成测试、系统测试、验收测试)、类型(功能测试、安全性测试、可靠性测试等)、方法(静态测试和动态测试、黑盒测试和白盒测试等)
静态测试和动态测试:看是否运行可执行软件(静态仅仅看需求、设计文档和代码)
主动测试和被动测试:主动(测试人员主动操作被测对象,获得被测对象的响应情况)、被动(测试人员被动地监视在实际环境中运行的系统,从而获得系统数据)
黑盒测试和白盒测试:黑盒(不看具体代码,仅仅是输入数据看其输出数据是否正确)、白盒(允许看实际的代码)
软件测试的流程:测试需求分析、测试计划与设计、执行、结果评估
3. 软件测试的基本方法
软件测试也有许多方法,这些方法有的来源于一种哲学思想,例如辩证统一的方法,在测试中有许多对立统一体,如静态测试和动态测试、白盒测试和黑盒测试、自动化测试和手工测试等。有的来源于软件工程的方法论,例如有面向对象的开发方法就有面向对象的测试方法;有敏捷方法,就有和敏捷方法对应的敏捷测试。当然软件测试的基本方法也可以分为好几个部分,今天我们学习的是基于需求的软件测试方法!!
3.1 基于直觉和经验的测试方法
ALAC(Act like a customer)测试方法是一种基于客户使用产品的知识开发出来的测试方法,它基于下面的理论:
3.2 错误猜测法
错误推测法是测试者根据经验、知识和直觉来发现软件错误,来推测程序中可能存在的各种错误,从而有针对性的进行测试。
3.3 等价类划分方法
- 等价类是某个输入域的子集,在该子集中每个输入数据的作用是等效的。
- 将输入数据分成若干个等价类,从每个等价类选取一个代表性的数据作为测试用例。
- 等价类分为有效等价类(合理的数据)和无效等价类(异常的数据)
3.3.1 示例
明确需求+划分等价类:
设计数据编写用例:
- 有效数据编写:尽可能一次全部覆盖有效点(同一个测试点内不同项没有办法全部覆盖)。
- 无效数据编写:一次只能覆盖一个无效点。另外几个测试点都要有效。
3.4 边界值分析方法
很多错误发生在输入或输出范围的边界上,因此针对各种边界情况设置测试用例,可以更有效地发现缺陷。设计方法:
- 确定边界情况 (输入或输出等价类的边界)
- 选取正好等于、刚刚大于或小于边界值作为测试数据
一个练习:
3.5 判定表法
在前面的等价类划分中,我们可以看到一次我们只能验证一个测试点是否有效(账号或密码)。但是有时候我们需要验证的是测试点组合起来是否有效,也就是说所有测试点本身都有效,但是组合起来的结果并不一定满足要求,因此这个组合也是我们需要测试的,这个时候就需要使用判定表方法。
3.5.1 判定表法术语及其应用
- 条件桩:问题的所有条件。
- 动作桩:针对问题所采取的动作。
- 条件项:所列条件的具体赋值。
- 动作项:在条件项组合情况下应采取的动作。
- 规则:任何一个条件组合的特定取值及其相应的动作。
3.5.2 示例
判定表尤其适用于简单的情况:
3.6 因果图方法
判定表本质:用“与”关系表达所有规则。
因果图的原因:这在情况不复杂的情况下很好用,因为“与”关系是最直观的关系表达,是人类最容易理解的方式。但是一旦事物之间的情况变复杂后,“与”关系的表达能力就比较弱了,会让表达显得很复杂。因此我们就引入了因果图:“与”关系+“或”关系+“非”关系。同时因果图对条件本身的关系也新增了描述。
- 条件——动作:除了“与”关系还加入“或”关系 和 “非”关系。
- 条件之间:M(互斥)、I(包含)、O(唯一)、R(要求)、M(屏蔽)、IR(无关)
3.6.1 因果图的基本符号
条件到动作:
条件之间:
3.6.2 示例
1. 先不考虑条件关系写出所有可能性。
2. 把不满足条件关系的项去除。
3.7 Pairwise方法
背景:大部分缺陷是在两个变量取值冲突的测试时被发现的。也就是三个及以上变量组合导致冲突可能性低,大部分都是两个组合导致的冲突。如果两两组合都没有冲突,那么大概率也不会冲突。即ab、bc、ac不冲突,那么abc大概率也不冲突。
定义:确保某个变量取值和另一个变量取值组成的对都会被覆盖即可,不保证3个及以上组合会被覆盖。
3.7.1 示例
假设有3个维度,每个维度有几个因子。如下:
浏览器:M,O,P
操作平台:W(windows),L(linux),i(ios)
语言:C(chinese),E(english)
求解:
使用pairwise算法,有多少个测试case?具体是什么case?我们沿用数学做题的格式。
解:
如果不用pairwise算法,我们需要 3*3*2=18个测试case。下面是具体的case:
1,M W C
2,MW E
3,M L C
4,M L E
5,M I C
6,M I E
7,O W C
8,O W E
9,O L C
10,O L E
11,O I C
12,O I E
13,P W C
14,P W E
15,P L C
16,P L E
17,P I C
18,P I E
一共有18个,很繁琐。但是这是100%的测试覆盖率,缺陷率也是100%。现在我们使用pairwise,看看结果如何?首先咱们从最下方一个18号开始,它是 P I E,两两组合是 PI ,PE ,IE。看这3个组合在以上的相同位置出现过没有,PI在17号,PE在16号,IE在12号出现过。所以18这个case就可以舍去。最终剩下的如下:
1、MWC
4、MLE
6、MIE
7、OWE
9、OLC
11、OIC
14、PWE
15、PLC
17、PIC
共计9个测试case,节省了50%的测试case。现在我们从上面开始重新做一次。1号是MWC,两两组合是MW MC WC 都出现过,去掉。最终剩下的是:
2、MWE
4、MLE
5、MIC
8、OWE
10、OLE
11、OIC
13、PWC
15、PLC
18、PIE
这样也是剩下9个测试case,但是具体的case内容不一样。经过L. L. Thurstone证明,pairwise算法最终剩下的测试case个数肯定相同,但是可以有不同的case组合。
可以说Pairwise方法完全是基于统计学的经验
3.8 正交实验法
背景:和Pairwise类似。都是穷举法穷尽所有可能的测试点太复杂,因此选择有代表性的测试点,从而合理安排实验的一种方法。
3.8.1 弱覆盖法
如下的Web应用兼容性测试案例:
测试条件
操作系统:Windows,MacOS,Unix,Linux
浏览器:IE内核,FireFor内核,Chnome内核,Safari内核
分辨率:1920*1080,2560*1440,1600*900
这个测试的等价类全组合为:4*4*3=48,太多了,如何降低测试规模,并保证测试典型性?
我们现在能想到的方法是利用弱覆盖标准来设计等价类组合。
坐标轴演示
第一次覆盖:横轴为操作系统,有1、2、3、4四个值;纵轴为浏览器,有1、2、3、4四个值
- 现在就是覆盖到了8个组合条件(4+4=8)
- 这里用xy轴,暂时不引入第三个条件,因为引入第三个条件之后,就是三维空间了,不好控制。
- 弱覆盖标准下只需在这些数值交点上取相应组合就行,不重复的前提下最终得到4个组合,这四个组合再与另外一个条件进行第二次覆盖。当然可以随意取值,一个点就是两个变量,只要都覆盖到就可以
第二次覆盖:横轴为第一步取到的4种组合,分别设定为1、2、3、4;纵轴为分辨率,有1、2、 3三个值,弱覆盖标准下只需在这些数值交点上取相应组合就行;最终得到4个组合。覆盖7(4+3)个组合条件。这里x轴第四个重复了2k分辨率,不影响
最终的得到的组合:
- windows+IE内核+2560*1440
- MacOS+Chrome+1920*1080
- Unix+Firefor+1600*900
- Linux+Safari+2560*1440
但是,弱覆盖不能保证测试的结果安全性,所以以上这种方法并不可取。它没有覆盖到所有条件组合的关系,只覆盖到了原有的11个条件类,而没有覆盖到这11个类的组合。在等价类方面,为了确保测试用例的典型性,就要用到正交试验法。
3.8.2 正交实验法(考试不考的,因为要查表)
正交实验表都已经被人设计好了,我们需要做的仅仅是去查表。明确我们的测试对象需要用哪一张正交表去测试即可。
每一个正交表(普通正交表)如下:
或者混合正交表如下:
如果我们确认n、q、s也就确认了使用哪一张正交表。
- 因素s: 输入条件 (因素)的个数(例如上个例子中,有三个条件,分别是操作系统,浏览器,分辨率)
- 水平q: 每个实验因素的取值个数、即每个因素的实验点的个数(也就是取值个数)
- 实验总个数n:表示测试用例的总个数,也就是这个正交表生产的测试用例的数目
对于s和q很好确定,对于测试对象需要的测试用例总数确定公式如下:
如上面这个例子最后n为9=1+3+3+2。
4. 总结
本篇文章作为【软件测试】系列的第三篇文章,算是软件测试中的一个重点内容——基本测试方法。主要讲的是基本测试方法中的基于需求的测试(等价类划分、边界值法、因果图法、判定表法还有正交法、Pairwise法等等)
如果想持续关注【软件测试】和【软件项目管理】系列文章,可以订阅:
如果想学习计算机其他方面的核心知识(都是猫猫的优质好文哦),可以订阅:
- 计算机网络_十二月的猫的博客-CSDN博客
- 软件工程与面向对象_十二月的猫的博客-CSDN博客、
- 操作系统与数据库_十二月的猫的博客-CSDN博客
- 编译原理_十二月的猫的博客-CSDN博客
- 算法启示录_十二月的猫的博客-CSDN博客
如果觉得本文对你有帮助,友友们可以点个赞,收个藏呀~