【软件测试】第三章·软件测试基本方法(基于需求的测试方法)

🌈个人主页: 十二月的猫-CSDN博客

🔥 **系列专栏:**🏀软件测试与软件项目管理_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光

目录

[1. 前言](#1. 前言)

[2. 回顾](#2. 回顾)

[3. 软件测试的基本方法](#3. 软件测试的基本方法)

[3.1 基于直觉和经验的测试方法](#3.1 基于直觉和经验的测试方法)

[3.2 错误猜测法](#3.2 错误猜测法)

[3.3 等价类划分方法](#3.3 等价类划分方法)

[3.3.1 示例](#3.3.1 示例)

[3.4 边界值分析方法](#3.4 边界值分析方法)

[3.5 判定表法](#3.5 判定表法)

[3.5.1 判定表法术语及其应用](#3.5.1 判定表法术语及其应用)

[3.5.2 示例](#3.5.2 示例)

[3.6 因果图方法](#3.6 因果图方法)

[3.6.1 因果图的基本符号](#3.6.1 因果图的基本符号)

[3.6.2 示例](#3.6.2 示例)

[3.7 Pairwise方法](#3.7 Pairwise方法)

[3.7.1 示例](#3.7.1 示例)

[3.8 正交实验法](#3.8 正交实验法)

[3.8.1 弱覆盖法](#3.8.1 弱覆盖法)

[3.8.2 正交实验法(考试不考的,因为要查表)](#3.8.2 正交实验法(考试不考的,因为要查表))

[4. 总结](#4. 总结)


1. 前言

考试前猫猫又开始更新考试科目了(也就是开始学了bushi)。本学期更新的科目有:

  • 软件测试
  • 软件项目管理
  • 爬虫和Web数据管理
  • 数据可视化

本系列【软件测试】将针对软件测试的基础知识进行拆分讲解,既是对自己学习的一次巩固也想为后面学习的猫友们提供一些帮助。如果大家有空可以点个免费的赞和收藏呀~~你的鼓励真的对猫猫很重要。

2. 回顾

**软件缺陷是软件质量的对立面:**软件质量有好几个因素包括功能、可靠、易用、可移植、可维护等。软件缺陷就是其反义词。

软件缺陷是什么: 从产品内部看,软件缺陷是软件产品开发或维护 过程中所存在的错误、毛病 等各种问题;从外部看,软件缺陷是系统所需要实现的某种功能失效或违背

**软件测试的分类:**层次/对象(单元测试、集成测试、系统测试、验收测试)、类型(功能测试、安全性测试、可靠性测试等)、方法(静态测试和动态测试、黑盒测试和白盒测试等)

**静态测试和动态测试:**看是否运行可执行软件(静态仅仅看需求、设计文档和代码)

**主动测试和被动测试:**主动(测试人员主动操作被测对象,获得被测对象的响应情况)、被动(测试人员被动地监视在实际环境中运行的系统,从而获得系统数据)

**黑盒测试和白盒测试:**黑盒(不看具体代码,仅仅是输入数据看其输出数据是否正确)、白盒(允许看实际的代码)

**软件测试的流程:**测试需求分析、测试计划与设计、执行、结果评估

3. 软件测试的基本方法

软件测试也有许多方法,这些方法有的来源于一种哲学思想,例如辩证统一的方法,在测试中有许多对立统一体,如静态测试和动态测试、白盒测试和黑盒测试、自动化测试和手工测试等。有的来源于软件工程的方法论,例如有面向对象的开发方法就有面向对象的测试方法;有敏捷方法,就有和敏捷方法对应的敏捷测试。当然软件测试的基本方法也可以分为好几个部分,今天我们学习的是基于需求的软件测试方法!!

3.1 基于直觉和经验的测试方法

ALAC(Act like a customer)测试方法是一种基于客户使用产品的知识开发出来的测试方法,它基于下面的理论:

3.2 错误猜测法

错误推测法是测试者根据经验、知识和直觉来发现软件错误,来推测程序中可能存在的各种错误,从而有针对性的进行测试。

3.3 等价类划分方法

  • 等价类是某个输入域的子集,在该子集中每个输入数据的作用是等效的。
  • 将输入数据分成若干个等价类,从每个等价类选取一个代表性的数据作为测试用例。
  • 等价类分为有效等价类(合理的数据)和无效等价类(异常的数据)

3.3.1 示例

明确需求+划分等价类:

设计数据编写用例:

  1. 有效数据编写:尽可能一次全部覆盖有效点(同一个测试点内不同项没有办法全部覆盖)。
  2. 无效数据编写:一次只能覆盖一个无效点。另外几个测试点都要有效。

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分辨率,不影响

最终的得到的组合:

  1. windows+IE内核+2560*1440
  2. MacOS+Chrome+1920*1080
  3. Unix+Firefor+1600*900
  4. 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法等等)

如果想持续关注【软件测试】和【软件项目管理】系列文章,可以订阅:

如果想学习计算机其他方面的核心知识(都是猫猫的优质好文哦),可以订阅:

如果觉得本文对你有帮助,友友们可以点个赞,收个藏呀~

相关推荐
喵~来学编程啦1 小时前
【软件测试】第三章·软件测试基本方法(逻辑覆盖、路径覆盖)
软件测试
程序员三藏7 小时前
接口自动化测试框架(pytest+allure+aiohttp+ 用例自动生成)
自动化测试·软件测试·python·职场和发展·测试用例·pytest·接口测试
测试19981 天前
如何使用Selenium进行网页自动化?
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
测试19982 天前
Selenium无法定位元素的几种解决方案详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
川石教育2 天前
测试工程师要如何开展单元测试
软件测试·功能测试·单元测试·软件测试培训·软件测试教程
软件测试曦曦4 天前
15:00开始面试,15:06就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
第三方软件测评5 天前
科技项目验收测试对软件产品和企业分别有哪些好处?
软件测试
程序员小远7 天前
UI自动化测试方案详解
自动化测试·软件测试·selenium·测试工具·ui·职场和发展·测试用例
跟我一起学测试呀7 天前
软件测试—接口测试面试题及jmeter面试题
软件测试·jmeter·面试