目录
一、按照测试目标分类
(一)、界面测试
(二)、功能测试
(三)、性能测试
(四)、可靠性测试
(五)、安全性测试
(六)、易用性测试
二、按照执行方式分类
(一)、静态测试
(二)、动态测试
三、按照测试方法
(一)、白盒测试
(二)、黑盒测试
1、优缺点
(三)、灰盒测试
四、按照测试阶段分类
(一)、单元测试
(二)、集成测试
(三)、系统测试
1、冒烟测试(Smoke Testing)
2、回归测试(Regression Testing)
(四)、验收测试
五、按照是否手工测试
(一)、手工测试
(二)、自动化测试
1、自动化测试分类
手动测试和自动化测试的优缺点
六、按照实施组织划分
(一)、α测试-Alpha Testing/内测/a测
(二)、β测试-Beta Testing/公测/b测
α测试和β测试的区别:
七、按照测试地域划分
(一)、国际化测试
(二)、本地测试
为什么要对软件测试进行分类呢?
软件测试是软件生命周期中的一个重要环节,具有较高的复杂性,对于软件测试,可以从不同的角度加以分类,使开发者在软件开发过程中的不同层次、不同阶段对测试工作进行更好的执行和管理测试的分类方法。
一、按照测试目标分类
(一)、界面测试
界面测试(UI测试):是指按照界面的需求和界面的设计规则,对我们软件界面所展示的全部内容进行测试和检查。
一般包括:
1)验证界面内容显示的完整性、一致性、准备性、友好性;
2)验证整个界面布局和排版是否合理,不同板块字体的设计、图片的展示是否符合需求;
3)对界面不同控件的测试;
4)无效的状态是否设计合理;
5)界面的布局和色调符合当下时事的发展。
(二)、功能测试
功能测试:对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。
功能测试是为了确保程序以期望的方式运行而按功能要求对软件进行的测试,通过对一个系统的所有的特性和功能都进行测试确保符合需求和规范。
设计功能测试用例,可以参考产品规格说明书进行用例的编写,具体的测试用例需要使用黑盒设计测试用例的方法(等价类、边界值、判定表法、正交法、场景法、错误猜测法)。
(三)、性能测试
由系统性能引起的问题:软件网页打开是越来越慢、查询数据时很长时间才显示列表、软件运行越来越慢等等。
(四)、可靠性测试
可靠性(可用性):是指系统正常运行的能力或者程度,一般用正常向用户提供软件服务的时间占总时间的百分比表示。
可靠性 = 正常运行时间 / (正常运行时间 + 非正常运行时间)*100%
(五)、安全性测试
安全性:是指信息安全,是指计算机系统或者网络保护用户数据隐私,完整,保护数据正常传输和抵御黑客、病毒攻击的能力。
系统常见的安全漏洞和威胁如下
• 输入域,如输入恶性或者带有病毒的脚本或长字符串;
• 代码中的安全性问题,如SQL/XML注入;
• 不安全的数据存储或者传递;
• 数据文件,邮件文件,系统配置文件等里面有危害系统的信息或者数据;
• 有问题的访问控制,权限分配等了;
• 假冒ID:身份欺骗;
• 篡改,对数据的恶意修改,破坏数据的完整性。
安全性测试的方法:代码评审、渗透测试、安全运维等。
(六)、易用性测试
易用性测试针对用户体验、让用户获得舒适、易用的体验的方面进行测试。
易用性包含七要素:
- 标准性和规范性
- 直观性:用户界面的直观性,要求软件功能特性易懂、清晰。
- 灵活性:软件可以有不同的选项以满足不同使用习惯的用户来完成相同的功能。
- 舒适性:主要强调界面友好、美观、操作过程顺畅、色彩运用恰当等。
- 正确性和实用性
二、按照执行方式分类
(一)、静态测试
静态测试:是指不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误的过程。
静态测试方式:
- 代码走查:一般用肉眼来检查
- 代码扫描工具:语法问题、安全问题......
(二)、动态测试
动态测试:指的是实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程,所以判断一个测试属于动态测试还是静态的,唯一的标准就是看是否运行程序。
大多数软件测试工作都属于动态测试。
三、按照测试方法
(一)、白盒测试
白盒测试(结构测试/逻辑测试):一般用来分析程序的内部结构,针对程序的逻辑结构来设计测试用例进行测试。
白盒测试的目的:保证内部逻辑正确性、实现路径覆盖、检查程序状态,实际运行状态是否与预期状态一致。
白盒测试分为静态测试和动态测试。
静态测试:桌面检查、代码审查、代码走查、代码扫描工具。
动态测试方法:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
白盒测试方法的使用:
比如:
if A and Bthen action1
if C and Dthen action2
1) 语句覆盖
如果每个语句至少执行一次,则说明两个if语句都为真。

2)判定覆盖
3在上面的代码中if语句就是判定语句,if语句有两种结果要么为真、要么为假。

3)条件覆盖
A T F 得出用例:
B T F ➡️ A-T B-T C-T D-T
C T F A-F B-F C-F D-F
D T F
4)判定条件覆盖
结合判定覆盖和条件覆盖来设计测试用例 ,用例即要覆盖判定,也要覆盖到条件。
比如:判定覆盖 条件覆盖
A-T B-T C-T D-F A-T B-T C-T D-T
A-T B-F C-F D-F A-F B-F C-F D-F
⬇️
A-T B-T C-T D-T A-F B-F C-F D-F
5)条件组合覆盖
A B | C D
T T | T T
T F | T F
F T | F T
F F | F T
每一行就是一个用例,一共是四个用例。
6)路径覆盖
if(x > 0 && y > 0):语句块1
else语句块2
if(z < 0):语句块3
语句块4

将if(x > 0 && y > 0)判定: 记为P1
将if(z < 0)判定:记为P2
x>0:记为C1
y>0:记为C2
z<0:记为C3
设计测试用例:
1)判定组合覆盖
2)根据判定设计条件
3)根据条件给数据
| 数据 | C1 | C2 | C3 | P1 | P2 | 路径 |
| {x=3,y=3,z=-2} | T | T | T | T | T | a-b-d-f |
| {x=-3,y=3,z=-2} | F | T | T | F | T | a-c-d-f |
| {x=3,y=3,z=2} | T | T | F | T | F | a-b-e-f |
| {x=-3,y=15,z=2} | F | T | F | F | F | a-c-e-f |
总结:
• 白盒测试主要应用于单元测试阶段;
• 先执行静态设计用例的方法,再执行动态设计测试用例的方法;
• 设计用例⼀般使用路径测试,重点模块追加使用逻辑覆盖方法。
(二)、黑盒测试
黑盒测试:完全不考虑程序逻辑和内部结构的情况下,检查系统功能是否按照需求规格说明书的规定正常使用、是否能适当的接收输入数据而输出正确的结果,满足规范需求。
黑盒测试只注重软件的功能,又称为数据驱动测试。
黑盒测试用到的测试方法:等价类,边界值,因果图,场景法,错误猜测法等。
1、优缺点
- 优点:不需要了解程序内部的代码以及实现,不关注软件内部的实现。
- 缺点:不可能覆盖所有代码。
(三)、灰盒测试
灰盒测试多用于集成测试阶段,不仅要关注输出、输入的正确性,同时也要关注程序内部的情况。
灰盒测试是出于白盒测试和黑盒测试之间的一种测试。
总结:测试方法:黑盒测试、白盒测试、灰盒测试;
哪种方法用的比较多:开发人员主要白盒测试和灰盒测试,测试人员主要用白盒测试和黑盒测试。对于测试人员来说,相较于白盒测试,黑盒测试用的更多一些。
四、按照测试阶段分类
(一)、单元测试
单元测试针对软件最小单元来执行测试(其中“最小单元”是人为规定的),主要采用白盒测试方法,从被测对象的内部结构出发设计测试用例。
(二)、集成测试
集成测试:将最小单元集成在一起执行测试,既要保证代码没有问题,也要保证软件功能也没有问题。
集成测试的目的:检查软件单位之间的接口是否正确。
(三)、系统测试
对通过的集成测试的系统进行整体测试,验证系统功能性和非功能性需求的实现。
1、冒烟测试(Smoke Testing)
冒烟测试:是检测产品是否具备进入测试的条件。
冒烟测试设计是用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。
冒烟测试的对象:每一个新编译的需要正式测试的软件版本。
冒烟测试的目的:要确认软件主要功能和核心流程正常之后,才能进行系统测试。
冒烟测试⼀般在开发人员开发完毕后提交给测试人员来进行测试时,先进行冒烟测试,保证基本功能正常,不阻碍后续的测试。如果冒烟测试通过,则测试人员开始进行正式的系统测试,如果不通过,则测试人员可以让开发人员重新修复代码直到冒烟测试通过,再开始进行系统测试。
2、回归测试(Regression Testing)
回归测试:是指修改了旧代码后,重新进行测试确认修改没有引入新的错误或导致其他代码产生错误。
回归测试主要有人工测试和自动化测试进行的。
总结:回归测试和系统测试之间的区别
1. 冒烟测试:
- 阶段: 通常在软件开发的早期阶段进行,主要用于验证基本功能是否正常⼯作。
- 目的: 确保软件的主要功能能够基本运⾏,以便在后续的详细测试阶段发现更深层次的问题。
2. 回归测试:
- 阶段: 在软件开发的后期,通常在每次代码修改或新增功能后执行。
- 目的: 确保已有的功能仍然正常⼯作,并且新的更改没有引入新的错误。目的是防止已有功能因为代码修改而出现问题。
冒烟测试注重最基本的功能,而回归测试关注全面的功能。
(四)、验收测试
验收测试目的:确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买都展示该软件系统满足原始需求。
验收测试是部署软件之前的最后一个测试操作。
五、按照是否手工测试
(一)、手工测试
手工测试:由人去一个一个的输入用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的一个步骤。
(二)、自动化测试
自动化测试:在预设条件下运行系统或者应用程序,评估运行结果,预先条件应包括正常条件和异常条件。简单来说是将人为驱动的测试行为转化为机器执行的过程。
1、自动化测试分类
①、接口自动化测试
②、UI自动化I测试
- web界面自动化测试
- 客户端界面自动化测试
手动测试和自动化测试的优缺点
| 手动测试 | 自动化测试 | |
| 优点 | 1)对测试人员技术要求没有自动化技术要求高 2)保障软件的质量 | 1)节省成本 2)提高测试人员执行工作效率 3)保障软件的质量 |
| 缺点 | 1)效率低 2)人员、时间成本比起自动化测试都比较高 | 1)对测试人员技术要求较高 2)不能发散性测试 |
六、按照实施组织划分
在大型通用软件正式发布之前,通过需要执行Alpha和Bata测试。
(一)、α测试-Alpha Testing/内测/a测
α测试是在公司内部的用户在模拟实际操作环境下进行的测试。
α测试目的:评价软件产品的功能、可使用性、可靠性、性能和支持。
α测试不能由程序员或测试员完成。
(二)、β测试-Beta Testing/公测/b测
β测试由软件的最终用户们在一个成多个场所进行,可以理解成β测试是正式用户中的一部分,他们在任意的场合来使用软件,目的是为了发现软件是否存在一系列的问题。
α测试和β测试的区别:
| 测试的场所不同 | α测试是在公司内部进行测试的,但是β测试是在用户环境下进行测试的 α测试的环境是受开发方控制的,用户的数量相时比较少,时间比较集中 β测试的环境是不受开发方控制的,用户数量相对比较多,时间不集中 |
| 测试执行时机不同 | 通常是α测试通过后,在进行β测试 |
| 测试持续时间长短不同 | α测试时间没有β测试持续时间长 |
七、按照测试地域划分
(一)、国际化测试
测试人员需要测试软件在不同语言和地区是否能正常工作。
国际化测试目的:确保软件具备支持不同语言、地区和文化特性的能力, 使软件在全球范围内都能良好适配。
(二)、本地测试
本地测试:一般指在开发或测试人员的本地环境中进行的测试工作,主要聚焦在软件基本功能和性能等方面,本地测试更侧重于特定的、有限的环境 。
本地测试的类型有功能测试、性能测试、兼容性测试、界面测试、安全测试。
在这篇文章中,学会了测试分类,按照测试目标、执行方式、测试方法、测试阶段、是否手工测试分类以及按照实施组织划分、按照测试地域划分。