按照开发阶段来分(对应软件测试V模型更好理解)
1. 单元测试:针对程序内部的最小模块进行测试
- 测试阶段:编码后或编码前(TDD Test-Driven-Development 测试驱动开发,编码前测试就是写一个测试脚本,此时运行肯定会出错,开发人员根据脚本的出错信息编码,然后再次运行测试脚本,再根据出错信息编码)
- 测试对象:最小模块
- 测试人员:白盒测试工程师或开发工程师
- 测试依据:代码和注释+详细设计文档
- 测试方法:白盒测试
- 测试内容:模块接口测试(接口参数个数,类型,顺序以及输出结果的测试),局部数据结构测试,路径测试(if-else,switch-case),错误处理测试(try-catch),边界测试(for,while,do-while)
2. 集成测试:按照一定的策略将各个模块组合起来进行测试
- 测试阶段:单元测试之后进行
- 测试主要对象:模块间的接口
- 测试人员:白盒测试工程使或开发工程师
- 测试依据:单元测试的模块+概要设计文档
- 测试方法:黑盒测试与白盒测试相结合(也可以说是灰盒测试)
- 测试内容:模块之间数据传输,模块之间功能冲突,模块组装功能正确性,全局数据结构(设置的全局变量在结构之间流转是否有错误),单模块缺陷对系统的影响
3. 系统测试
将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。
回归测试和冒烟测试都是系统测试的一种
- 测试阶段:集成测试通过之后
- 测试对象:整个系统(软、硬件)
- 测试人员:黑盒测试工程师
- 测试依据:需求规格说明文档
- 测试方法:黑盒测试
- 测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等
① 回归测试(Regression Testing)
在 引入新的代码(增加新的功能/bug改完)时 会进行回归测试,看新加入的代码对之前的代码有没有产生影响/看bug改完之后对系统有没有产生别的影响
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。
在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。随着系统的庞大,回归测试的成本越来越大,通过选择正确的回归测试策略来改进回归测试的效率和有效性是很有意义的。
② 冒烟测试(smoke testing)
之所以叫冒烟测试是因为测试过程特别快
只针对系统的基本功能核心流程进行的测试
冒烟测试对于测试人员的意义在于是否接收这个版本进行正式测试的标准,通过了则进行正式测试,没通过则打回
4. 验收测试(也叫交付测试)
测试的目的是确保软件准备就绪,按照双方的验收文档将软件正式展示给客户
- 测试阶段:系统测试通过之后
- 测试对象:整个系统(包括软硬件)。
- 测试人员:主要是最终用户或者需求方。
- 测试依据:用户需求、验收标准
- 测试方法:黑盒测试
- 测试内容:同系统测试(功能…各类文档等)
按实施组织划分
1. α测试
由用户在开发环境下测试
优点:有利于和测试,开发人员及时沟通问题,及时解决
缺点:容易受开发人员和测试人员的影响
2. β测试
由软件的使用者,在一个或多个场所进行测试(用户实际使用环境)
优点:测试环境就是用户实际使用环境,有利于问题发现
- 注意哦! α测试和β测试的区别:
① 测试的场景不同
② α测试的环境受开发方控制,用户数量相对较少,时间比较集中;β测试的环境不受开发方控制,用户数量相对比较多,时间不集中
③ α测试先于β测试执行
3. 第三方测试
介于开发方和用户方之间的组织对软件的测试
按是否执行代码划分
1. 静态测试:不运行代码,纯看分析代码的语法,逻辑
静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。
对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。分析如下:
- 检查项:代码风格和规则审核;程序设计和结构的审核;业务逻辑的审核;走查、审查与技术复审手册。
- 静态质量:度量所依据的标准见下:
功能性(Functionality)、运行效率(Performance)、兼容性(Compatibility)、可用性(Usability)、可靠性(Reliability)、安全性(Security)、可维护性(Maintainability)、可移植性(Portability)。
代码静态分析和文档测试都属于静态测试
2. 动态测试(Dynamic testing)
动态测试方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能。
这种方法由三部分组成:构造测试用例、执行程序、分析程序的输出结果。
大多数软件测试工作都属于动态测试。
按是否查看代码划分
1. 黑盒测试:
把软件当成黑色的盒子,不关心程序内部的结构,逻辑,只关心程序的输入输出
黑盒测试设计测试用例的方法:等价类,边界值,因果图,正交法,场景,错误猜测
2. 白盒测试:
把软件当成一个透明的盒子,检查软件内部的逻辑,结构,语句是否正确
白盒测试设计测试用例的方法:
- 语句覆盖法(把程序中每条语句执行到)
- 逻辑覆盖法(判定覆盖(让if-else为真为假的每条路走到)
- 条件覆盖(让a>0,b>0这种都为真为假的时候走一遍)
- 判定和条件组合覆盖,条件和条件组合覆盖)
- 路径覆盖法(do-while,if-else,swich-case中的每一条语句执行到)
- 循环覆盖法(for,while,do-while循环里面的内容都走到)
3. 灰盒测试
介于黑盒和白盒之间,既要考虑输入和输出,又要考虑软件内部的结构,逻辑
按是否手工执行划分
1. 手工测试
手工测试就是由人去一个一个的输入用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的一个步骤。总结优缺点:
- 优点:自动化无法替代探索性测试、发散思维结果的测试。
- 缺点:执行效率慢,量大易错
2. 自动化测试
简单说自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程(也就是让机器执行测试脚本)
自动化测试比如功能测试自动化、性能测试自动化、安全测试自动化。
通常所说的自动化是指功能测试自动化。
自动化测试按照测试对象来分,还可以分为接口测试,UI测试等(接口测试的ROI(产出投入比)要比UI测试高)
-
自动化实施步骤:
1.完成功能测试,版本基本稳定
2.根据项目特性,选择适合项目的自动化工具,并搭建环境
3.提取手工测试的测试用例转化为自动化测试的用例
4.通过工具、代码实现自动化的构造输入,自动检测输出结果是否符合预期
5.生成自动测试报告
6.持续改进,脚本优化。 -
自动化测试工具:
selenium 功能自动化测试
jmeter 接口自动化测试,性能自动化测试
loadrunner 性能测试
appium app端的功能自动化测试 -
自动化测试框架
java testNG
pyhton unittest
Robertframework
按测试对象划分
1. 性能测试:
- 对资源的利用率
- 对执行间隔
- 日志事件
- 响应时间
- 吞吐量(单位时间内处理的信息量)
- 辅助存储区
2. 安全测试
3. 兼容性测试
(可以利用自动化测试来做)
- 平台测试,浏览器测试
如果是网站的话:不同浏览器的所有主流版本都要进行测试
如果是app:所有手机型号的不同系统的都要进行测试 - 软件本身能否向前或向后兼容
- 测试软件能否与其他相关的软件兼容
- 数据兼容性测试
为什么要在不同的浏览器上进行兼容性测试?
因为浏览器的内核不一样,同一个界面展示出来的内容可能不一样
4. 文档测试
针对开发文档,用户使用文档,开发手册等文档进行测试
文档测试的关注点:文档的术语,正确性(和需求一致),完整性,一致性(需求,文档,最终系统上的功能一致),易用性
5. 易用性测试
易用性(Useability)是交互的适应性、功能性和有效性的集中体现。易用性属于人体工程学的范畴,人体工程学(ergonomics)是一门将日常使用的东西设计为易于使用和实用性强的学科。也叫用户体验测试
6. 容错性测试
数据边界的容错性测试,系统环境的容错性(服务器出现问题的时候是否能够转换到其他服务器,网络断了是否能够切换到其他网络)
7. 界面测试
检测不同分辨率下图标是否会丢失,功能是否能正常使用,页面布局
比如说:
8. 安装测试
测试程序的安装卸载
9. 内存泄漏测试
像是一般电脑打开的软件或页面太多,导致电脑卡顿甚至死机,重启一下就好了,但重启完后不久又会出现同样的现象,这种一般就是内存泄漏导致的
造成内存泄露的原因有很多,最常见的有:
- 分配完内存之后忘了回收。
- 程序写法有问题,造成没办法回收。
- 某些API函数的使用不正确,造成内存泄露。
- 资源没有及时释放。
内存泄漏的检测:
- 对于不同的程序可以使用不同的方法来进行内存泄露的检查,还可以使用一些专门的工具来进行内存问题的检查,例如MemProof. AQTime、Purify、BundsChecker等。 有些开发工具本身就带有内存问题
检查机制.要确保程序员在编写程序和编译程序的时候打开这些功能。 - 通过代码扫描分析工具来检查
按测试地域划分
- 国际化测试
使软件可以生成不同的语言版本和适用不容的风俗,在转换的时候,不需要修改软件源代码的技术 - 本地化测试将把软件处理成不同的语言版本的技术
question!!
① 一个全新上线的app需要进行什么测试?
安装卸载设置,功能测试,性能测试,兼容性测试,安全性测试,文档测试等其他各项测试都要来一遍
②一个增加了新功能的app需要进行什么测试?
功能测试
③一个只修改了页面广告的app需要进行什么测试?
界面测试