1 什么是软件测试
软件测试就是实际输出结果和预期结果的比较过程。
百度定义:

2 软件测试的发展历程
第一阶段:软件测试就是验证软件是正确的;
第二阶段:软件测试是去证明软件是错误的;
第三阶段:软件是保证软件的质量是符合用户需求的一系列手段。
由于计算机的迅速发展,软件开发急剧增长,软件系统的规模和复杂性都越来越大,导致软件的可靠性问题也越来越突出。
在这样的背景下,软件测试的基础理论和实用技术开始形成。
一开始软件测试是指示为了验证一个软件系统的功能是否实现,例如一个登陆界面,输入正确的用户名和密码就能成功登陆。后来软件测试被定义为:“测试是为发现错误而执行程序的过程”。这样考虑到错误的情况可以发现更多的软件问题。现在更常认为软件测试是一系列保证软件质量的手段,考虑到软件的方方面面,包括软件开发、软件工程、组织和流程。
3 软件测试的职业发展
软件测试的最基础的工作就是功能测试。
然后根据个人的兴趣和能力可以有以下发现路线:
4 软件测试的分类
4-1 方法
黑盒测试、白盒测试、灰盒测试
-
黑盒测试
黑盒测试又称为 数据驱动的测试 或 输入/输出驱动测试 。
特点:将程序视为一个黑盒子,测试目标和程序的内部机制和结构完全无关,只关心程序的实际输出是否和预计输出是否一致。
-
白盒测试
白盒测试又称为逻辑驱动测试。
特点:检查程序的内部结构是否正确,仿佛程序是透明的。
-
灰盒测试
灰盒测试就是介于白盒测试和黑盒测试之间的测试方法,或者说是两者的结合。
4-2 方向
功能测试、性能测试、安全测试
-
功能测试
功能测试简单来说就是测试程序的功能。
百度定义:Functional testing(功能测试),也称为behavioral testing(行为测试),根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。【https://baike.baidu.com/item/%E5%8A%9F%E8%83%BD%E6%B5%8B%E8%AF%95 】
注意:功能测试≠黑盒测试
功能测试通常是采用黑盒测试,黑盒测试是执行功能测试的一种方法。就好比功能测试就是吃饭,用筷子吃饭是黑盒测试,用勺子吃饭是白盒测试,用叉子吃饭是灰盒测试,而通常用的最多的就是筷子吃饭。
-
性能测试
性能测试简单来说就是测试程序(服务器)的能力大小。
百度定义:性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试【https://baike.baidu.com/item/%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95 】
性能测试又分为:
a. 压力测试
压力测试用来发现软件的性能瓶颈。
类比:一个人最多能举起的重量,如60kg。
b. 负载测试
负载测试是对软件能承受一定负载或强度的检验,涉及到时间因素。负载测试通常不采用压力测试的峰值,而是取峰值的80%~90%。
类比:一个人最多能举起60kg,负载测试就是看这个人举50kg能坚持的时间。
c. 并发测试
百度定义:主要指当测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题,如内存泄漏、线程锁、资源争用问题,几乎所有的性能测试都会涉及并发测试。【https://baike.baidu.com/item/%E5%B9%B6%E5%8F%91%E6%B5%8B%E8%AF%95 】
例如:淘宝双十一活动、大学教务网选课、12306抢票
在百度百科中,压力测试、负载测试、强度测试混为一谈。这里压力测试强调是一个峰值(性能瓶颈),而负载测试则是强调“一段时间”。
-
安全测试
安全测试就是设计测试用例来突破成功程序安全检查的过程。其目的就是提升软件的安全质量,在发布前找到安全漏洞并予以修复,防止被不法入侵或其他因素干扰。
通俗来讲是防止黑客攻击,盗取信息。
4-3 阶段
单元测试、集成测试、系统测试、验收测试
-
单元测试
单元测试(unit testing)是指对软件中的最小可测试单元进行检查和验证。
例如:C语言中函数、Java中的类和方法等。
单元测试通常由开发人员自己完成,通常是白盒测试。
软件在开发过程是从开发单元开始的,单元就是一个代码块。不同的单元有不同的作用,多个单元组成一个功能模块。
-
集成测试
百度定义:集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。【https://baike.baidu.com/item/%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95 】
集成测试的重点是接口测试,即测试模块和模块之间连接得是否正确。而接口就是模块之间数据传送的通道。
-
系统测试
所有的模块集成之后就形成了一个软件系统,系统测试就是将系统(或程序)与初始目标进行比较。
系统测试又可以进一步分为:
a. 功能测试 点击跳转
b. 性能测试 click click
c. 安全测试 点我
d. 兼容性测试
兼容性测试分为WEB测试和APP测试。
-
WEB测试
由于不同浏览器的选软引擎有去边,即使使用同样的渲染引擎,经过个性化修改后也会有所差别。兼容性测试就是测试软件在不同的浏览器上的表现,例如:Chrome、IE、Edge、FireFox、360…
-
APP测试
根据手机系统又分为Android系统和IOS系统。
APP兼容性测试主要是测试软件在各个版本的软件系统上的表现。
e. 易用性测试
易用性测试又称为用户体验测试。(主观判断)
百度定义:易用性测试是指用户使用软件时是否感觉方便,比如是否最多点击鼠标三次就可以达到用户的目的。【https://baike.baidu.com/item/%E6%98%93%E7%94%A8%E6%80%A7%E6%B5%8B%E8%AF%95 】
f. 稳定性测试
狭义的稳定性测试,是指被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一段较长时间,以此检测系统是否稳定,一般稳定性测试时间为 7 × 24 7\times 24 7×24小时。【参考:https://blog.csdn.net/test_xhz/article/details/79354628】
g. UI测试
UI测试又称界面测试。
【百度定义】测试用户界面的功能模块的布局是否合理、整体风格是否一致、各个控件的放置位置是否符合客户使用习惯,此外还要测试界面操作便捷性、导航简单易懂性,页面元素的可用性,界面中文字是否正确,命名是否统一,页面是否美观,文字、图片组合是否完美等。(主观判断)
……
-
-
验收测试
验收测试也称交付测试。
【百度定义】验收测试是部署软件之前的最后一个测试操作。在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。【https://baike.baidu.com/item/%E9%AA%8C%E6%94%B6%E6%B5%8B%E8%AF%95/10914477 】
验收测试是一项确定产品是否能够满足合同或用户所规定需求的测试。
4-4 对象
- APP测试
- WEB测试
- 物联网测试
- 车联网测试
- 小程序测试
- 嵌入式测试
- 大数据测试
-
AI测试
……
4-5 状态
静态测试、动态测试
-
静态测试
百度定义:静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。【https://baike.baidu.com/item/%E9%9D%99%E6%80%81%E6%B5%8B%E8%AF%95 】
特点:主要是白盒测试方法。
-
动态测试
百度定义:动态测试方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能。
这种方法由三部分组成:构造测试用例、执行程序、分析程序的输出结果。【https://baike.baidu.com/item/%E5%8A%A8%E6%80%81%E6%B5%8B%E8%AF%95 】
特点:主要是黑盒测试方法或灰盒测试方法。
4-6 其他
冒烟测试、回归测试、α测试、β测试
-
冒烟测试
百度:在软件中,“冒烟测试”这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程。在检查了代码后,冒烟测试是确定和修复软件缺陷的最经济有效的方法。冒烟测试设计用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。【https://baike.baidu.com/item/%E5%86%92%E7%83%9F%E6%B5%8B%E8%AF%95 】
冒烟测试非正式的测试流程,用来检测软件是否具备可测试性。若不可测试,则直接退回给开发部门。
所谓不可测试性,例如:
(1)登陆界面无法登陆;
(2)APP无法安装
-
回归测试
百度定义:回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。【https://baike.baidu.com/item/回归测试 】
-
α测试
α测试是内测,又称为非正式验收测试。
百度定义:α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。α测试的目的是评价软件产品的FLURPS(即功能、局域化、可用性、可靠性、性能和支持)。
-
β测试
β测试又称为公测,有实际用户参与进来使用。
β测试:β测试指软件开发公司组织各方面的典型用户在日常工作中实际使用β版本,即发放一部分给用户进行测试,并要求用户报告异常情况、提出批评意见,然后软件开发公司再对β版本进行改错和完善。
5 互联网公司的研发团队结构
- 项目经理
【软件测试】测试基础1 什么是软件测试2 软件测试的发展历程3 软件测试的职业发展4 软件测试的分类5 互联网公司的研发团队结构6 研发管理模型7 软件是什么8 测试的流程9 测试方法10 测试应用 - 产品经理
【软件测试】测试基础1 什么是软件测试2 软件测试的发展历程3 软件测试的职业发展4 软件测试的分类5 互联网公司的研发团队结构6 研发管理模型7 软件是什么8 测试的流程9 测试方法10 测试应用 - 开发
- 前端
【软件测试】测试基础1 什么是软件测试2 软件测试的发展历程3 软件测试的职业发展4 软件测试的分类5 互联网公司的研发团队结构6 研发管理模型7 软件是什么8 测试的流程9 测试方法10 测试应用 -
后端
参考:https://cloud.tencent.com/developer/article/1030257
- 前端
- 测试
- 运维
【软件测试】测试基础1 什么是软件测试2 软件测试的发展历程3 软件测试的职业发展4 软件测试的分类5 互联网公司的研发团队结构6 研发管理模型7 软件是什么8 测试的流程9 测试方法10 测试应用 - 运营
【软件测试】测试基础1 什么是软件测试2 软件测试的发展历程3 软件测试的职业发展4 软件测试的分类5 互联网公司的研发团队结构6 研发管理模型7 软件是什么8 测试的流程9 测试方法10 测试应用 -
设计
主要是指UI设计。
【软件测试】测试基础1 什么是软件测试2 软件测试的发展历程3 软件测试的职业发展4 软件测试的分类5 互联网公司的研发团队结构6 研发管理模型7 软件是什么8 测试的流程9 测试方法10 测试应用 - ……
6 研发管理模型
瀑布流、V字型、W字型、敏捷模型、螺旋形、H字型
- 瀑布流
【软件测试】测试基础1 什么是软件测试2 软件测试的发展历程3 软件测试的职业发展4 软件测试的分类5 互联网公司的研发团队结构6 研发管理模型7 软件是什么8 测试的流程9 测试方法10 测试应用
-
特点
A. 从上一项活动接受本项活动的工作对象,作为输入;
B. 利用这一输入实施本项活动应完成的内容;
C.给出本项活动的工作成果,作为输出传给下一项活动。
- 使用场合:在需求不明确的情况下,就无法采用瀑布模型。
-
优点
□ 强调开发的阶段性;
□ 强调早期计划及需求调查;
□ 强调产品测试。
-
缺点
□ 依赖于早期进行的唯一一次需求调查,不能适应需求的变化;
□ 由于时单一流程,开发中的经验教训不能反馈应用于本产品的过程;
□ 风险往往迟至后期的开发阶段才显露,因而失去即使纠正的机会。
- V字型
【软件测试】测试基础1 什么是软件测试2 软件测试的发展历程3 软件测试的职业发展4 软件测试的分类5 互联网公司的研发团队结构6 研发管理模型7 软件是什么8 测试的流程9 测试方法10 测试应用
- 明确地标注了测试过程中存在的不同类型的测试,并且清楚地描述了这些测试阶段和开发过程期间各阶段的对应关系;
-
V模型指出,单元和集成测试应检测程序的执行是否满足软件设计的要求;
系统测试应检测系统功能、性能的质量特性是否达到系统要求的指标;
验收测试确定软件的实现是否满足用户需要或合同的要求。
- 局限性:仅仅把测试作为在编码之后的一个阶段,未在需求阶段就进入测试。
- W字型
【软件测试】测试基础1 什么是软件测试2 软件测试的发展历程3 软件测试的职业发展4 软件测试的分类5 互联网公司的研发团队结构6 研发管理模型7 软件是什么8 测试的流程9 测试方法10 测试应用
- W模型增加了软件各开发阶段中应同步进行的验证和确认活动。W模型由两个V字模型组成,分别代表测试和开发过程,图中明确表示出测试与开发的并行关系。
- 特点:测试对象不仅是程序,需求、设计等同样要测试,测试与开发是同步进行。
-
优点:
A. 有利于尽早地全面地发现问题。
例如:需求分析完成后,测试人员就应该参与带对需求的验证和确认活动中,以尽早地找出缺陷所在。
B. 同时,对需求的测试也有利于及时了解项目难度和测试风险,及早指定应对措施,显著减少总体测试时间,加快项目进度。
- 局限性:需求、设计、编码等活动被视为串行的;测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束才可正式开始下一个阶段工作。无法支持迭代的开发模型。对于当前软件开发复杂多变的情况,W模型并不能解除测试管理面临的困惑。
-
敏捷模型
处于探索阶段,每个公司情况不同。
-
特点:
高效的工作
及时的沟通
-
工作形式
工作日报、白板、早会/站立会、集中办公
7 软件是什么
百度定义:计算机软件( Software,也称软件)是指计算机系统中的程序及其文档,程序是计算任务的处理对象和处理规则的描述;文档是为了便于了解程序所需的阐明性资料。程序必须装入机器内部才能工作,文档一般是给人看的,不一定装入机器。
所以软件由三部分组成:
- 程序
- 文档
- 数据
一个优秀的测试养成攻略:测试→文档→编程
8 测试的流程
8-1 需求分析阶段
Step1:需求分析
需求分析有三种表现形式:
- 需求文档:【https://baike.baidu.com/item/%E4%BA%A7%E5%93%81%E9%9C%80%E6%B1%82%E6%96%87%E6%A1%A3/22740526?fromtitle=PRD&fromid=11013752#1 】
- 产品原型:由产品经理来画,产品原型可以让人对产品有直观的感受,例如“墨刀”上的原型分型“慕课网APP”【https://free.modao.cc/posts/9643 】
- 口述:不靠谱!
Step2:学习业务流程
即拿到产品原型,看每个功能是怎么设计的,弄清楚每个功能的作用。
Step3:提取功能点
既可以用思维导图,也可以用Excel表写。
实例:上述的慕课网APP
Step4:编写需求分析说明书
就是将提取功能点过程装换成文档。
如果没有需求怎么办?
答:参考市面上已经成熟的同类型的产品使如何实现的。
8-2 测试设计阶段
-
测试计划
包括时间和人员以及资源的安排与分配。
通常套用模板,又称为测试计划说明书。
有时候 测试计划+测试方案+测试策略 都写入测试计划。
-
测试方案
包括:
A. 针对每一个测试内容,以及如何展开测试;
B. 采用什么测试计划;
C. 是用什么测试工具。
-
测试策略
包括:
A. 哪些内容先测试;
B. 哪些内容后测试;
C. 开始测试和结束测试的标准是什么?
上述的测试计划、测试方案和测试策略都可以采用“5W1H”
5W:why / what / when / where / who /
1H:how
例如:搜索“测试计划”【https://baike.baidu.com/item/%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92 】
- why——为什么要进行这些测试;
- what—测试哪些方面,不同阶段的工作内容;
- when—测试不同阶段的起止时间;
- where—相应文档,缺陷的存放位置,测试环境等;
- who—项目有关人员组成,安排哪些测试人员进行测试
- how—如何去做,使用哪些测试工具以及测试方法进行测试。
-
测试用例
测试用例必须包含9个内容:
- 用例编号:必须是唯一的;
- 用例名称:言简意赅,用最少的字描述清楚这个用例是做什么的;
- 前置条件:即执行这个用例之前,软件必须要满足的条件;
-
优先级:执行这条用例的时间要求紧急的等级,
在有限的时间里会对相同的优先级的测试用例里交出重要级高的来优先测试。
- 重要级:这个被测的功能在系统里面的重要级别;
- 测试数据
- 测试步骤
- 预期结果
- 实际结果
8-3 测试执行阶段
测试执行阶段就是获得实际结果的过程。
- 将预期结果和实际结果做对比,如果一样则通过,如果不一样则有问题。
- 提交BUG;
-
回归测试
百度定义:回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。【https://baike.baidu.com/item/%E5%9B%9E%E5%BD%92%E6%B5%8B%E8%AF%95 】
通俗的理解:开发提交版本1的软件,测试之后提交BUG。开发修改,再次提交版本2的软件。在版本2上检查发现的BUG有没有被解决叫做回归测试。
版本1到版本2的过程叫迭代。
版本迭代:随着时间/测试次数的推进,会发布很多版本,其中版本号是不断增加的。
随着版本的迭代,软件的功能会越来越多。当软件功能比较单一时,版本迭代时回归测试采用的全量测试。
当功能变得复杂后,测试全部的功能不太现实(可以采用自动化测试),所以采用增量测试,即指测试软件修改和添加的部分。
BUG的管理
【禅道】http://demo.zentao.net/bug-browse-45.html
BUG的管理平台系统/工具
禅道⭐、BUGFree、ALM/QC、testlink、JIRA、……
只需要会一个,因为都是同样的功能,页面不同。
BUG的六要素
- 编号
- BUG的名称:要求言简意赅,看到题目就知道是什么问题
- BUG的优先级:根据实际的情况,判断这个BUG是否需要优先解决,分为"高/中/低"三个等级。
-
BUG的等级
[a] 致命的:①影响产品的核心流程的正常使用 \ ②导致软件挂了、闪退、奔溃 \ ③和钱有关的;
[b] 严重的:导致功能无法正常使用的BUG;
[c] 一般的:功能的某些异常场景有问题;
[d] 轻微的:建议性的东西、用户体验、UI上的问题
-
BUG的复现步骤
写得越详细越好。
可以把用例的步骤复制过来;写出预期结果和实际结果。
-
附件
目的是用于BUG的佐证。可以用截图、日志、小视频等形式。
BUG的生命周期
BUG从发生到被解决的过程就是生命周期的过程。也是开发和测试的沟通过程
BUG的状态
- 新建/new
- 打开/激活/open
- 已确认
- 已解决
- 拒绝
- 重新打开/reopen
- 关闭/closed
- 延期处理
- 重复BUG
8-4测试总结阶段
主要任务是编写测试报告。包括:
- 对工作的总结
-
对BUG的统计分析
包括开发、测试、软件模块、等级、解决时间、每个版本、状态等。
-
对被测软件的评估
即软件是否达到可交付的标准,也是测试结束的标志。
常用的标准为:
(1)一、二级BUG都关闭了;
(2)三级BUG关闭了80%以上;
(3)四级BUG,Let it go~
9 测试方法
等价类、边界值、场景法、因果图、判定表、路径覆盖、……
-
等价类
依据需求将输入划分为若干个等价类(特殊情况下会考虑输出),从等价类中选出一个测试用例如果这个测试用例测试通过,则认为所代表的等价类测试通过。这样就可以用较少的测试用例达到尽量多的功能覆盖,解决了不能穷举测试的问题。
A. 有效等价类
对于需求分析说明书是合理的、有意义的输入数据构成的集合。
利用有效等价类验证程序是否实现了规格说明中所规定的功能和性能。
B. 无效等价类
根据需求说明书,不满足需求的集合。
等价的划分原则:
① 如果规定了输入值的范围(闭区间),可以划分为1个有效等价类,2个无效的等价类;
② 如果输入是一个布尔表达式,可以划分为1个有效等价类和1个无效等价类;
③ 如果规定了输入数据的一组值,而且程序对不同输入值做不同的处理,则每个允许的输入值是一个有效的等价类,此外还有一个无效的等价类(任意一个不允许的输入值);
④ 如果规定了输入数据必须遵守的规则,可以划分出一个有效的等价类(符合规则)和若干个无效的等价类(从不同的角度违反规则)。
-
边界值
边界条件:可以在产品说明书中有定义或者在使用软件过程中确定;
次边界条件(内部边界条件):
A. 2的乘方
一个字节8位组成,一个字2个字节组成,16=2^4
例如:允许输入1-1000的数字,则14、15、16,254、255、256
B. ASCII表
其他边界条件:如输入信息为空、非法、错误、不正确和垃圾数据
常常把边界值和等价类划分结合使用
例如:
微信红包,输入值必须是大于0.01,小于200,且小数点后最多两位的数字。则划分出结果可以为:
有效等价类:0.01、0.02、199.99、200、111.11(0.01-200之间的任意值)
无效等价类:0、200.01
-
场景法
规则越复杂,场景越复杂。
【软件测试】测试基础1 什么是软件测试2 软件测试的发展历程3 软件测试的职业发展4 软件测试的分类5 互联网公司的研发团队结构6 研发管理模型7 软件是什么8 测试的流程9 测试方法10 测试应用
10 测试应用
相关知识:软件的结构
- B/S(浏览器 / 服务器)
C/S(客户 / 服务器)
客户端需要单独安装,例如手机APP。
- APP测试
- APP测试后很多专项测试:
- 安装/卸载、
- 消息推送
- 更新
- 弱网(2G/3G/4G/5G/WiFi)
-
场景交互测试
突然来电话;
正在听歌;
调用相机;
前后台切换
……
- 权限测试
- 离线测试
- WEB测试