一、按开发阶段划分
测试金字塔与业务测试分析:
UI层:人员多,投入产出比低。
Server层:
客户端模拟测试:三个模块:注册(前置/驱动模块) —— 登录 —— 发信息(后置/桩模块)。当登录模块先完成,可以进行模拟测试,模拟简单注册功能,然后进行自测。
内外接口测试:如两个项目之间需要接口,称为项目内部叫内部接口,外部叫外部接口。如注册某个软件时可以使用其他账号登录(外部接口)
SDK,全称:SoftWare DeveLopment Kit,一般是指软件工程师特定的软件包建立的开发工具集合。
Unit:要求测试人员具有代码开发功能
单元测试:对一个模块的代码进行测试
CodeReview:静态或动态,两个研发人员写出的代码互相交叉检查问题。
单元测试(Unit Testing):单元测试就是对模块的代码进行测试,使用白盒测试方法,具体测试模块的接口,路径是否完全覆盖,错误处理,边界测试等。测试目的:检验软件基本组成单位的正确性。
集成测试(Integration Testing):集成测试也称联合测试(联调)、组装测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。测试目的:检查软件单位之间的接口是否正确。
系统测试(System Testing):将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。时间大部分在系统测试执行阶段,包括回归测试和冒烟测试。先冒烟后系统再回归。
回归测试(Regression Testing)
- 回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。
- 回归范围:与阶段相关,如果第一阶段,只回归和本缺陷相关的。若是最后一个阶段,还需要对整个系统所有主干业务流程进行回归。
冒烟测试(smoke testing)
- 概念:对软件的核心主干流程进行测试
- 目的:是确认软件基本功能正常,可以进行后续的正式测试工作。
- 冒烟测试的执行者是版本编译人员。
- 作用:判断测试人员是否接收本次测试的标准。冒烟测试一般在开发人员开发完毕后送给测试人员来进行测试时,测试人员会先进行冒烟测试,保证基本功能正常,不阻碍后续的测试。
验收测试(Acceptance Testing):验收测试是将软件部署到用户环境,由用户来进行验证。它是技术测试的最后一个阶段,也称为交付测试。测试目的:确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买都展示该软件系统满足原始需求。
二、按是否查看代码划分
1、黑盒测试(Black-box Testing)
即功能测试,对一个软件进行一系列操作和输入,最终看结果与想要的是否一致。(是不看软件的代码,只对软件上的功能进行测试,看结果与预期是否一致)
2、白盒测试(White-box Testing)
即结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。就是对代码进行测试,对代码中的接口,路径覆盖,错误处理,边界值等进行测试。接口测试也是白盒测试的是一种 。
3、灰盒测试(Gray-Box Testing)
是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,既关注代码内部的业务逻辑又关注程序的功能层面。
三、按测试对象划分
1、业务测试:所有流程
是测试人员把系统各个模块串接起来运行、模拟真实用户实际的工作流程,满足用户需求定义的功能来进行测试的过程。
业务测试关注需求和用户
2、界面测试(简称UI测试)
测试用户界面的功能模块的布局是否合理、整体风格是否一致、各个控件的放置位置是否符合客户使用习惯,此外还要测试界面操作便捷性、导航简单易懂性,页面元素的可用性,界面中文字是否正确,命名是否统一,页面是否美观,文字、图片组合是否完美等。
3、容错性测试(无效等价类)
容错性测试是检查软件在异常条件下自身是否具有防护性的措施或某种灾难性恢复的手段。当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。
容错性测试包括两个方面:
- 输入异常数据或进行异常操作,以检验系统的保护性。如果系统的容错性好,系统只给出提示或内部消化掉,而不会导致系统出错甚至崩溃。例如:
(1)输入错误的数据类型,如“猴”年“马”月。
(2)输入定义域之外的数值,上海人常说的“十三点”也算一种。
- 灾难恢复性测试。通过各种手段,让软件强制性地发生故障,然后验证系统已保存的用户数据是否丢失,系统和数据是否能尽快自动加人工干预的恢复,不让用户感知。
对于自动恢复需验证重新初始化、检查点、数据恢复和重新启动等机制的正确性;对于人工干预的恢复系统,还需估测平均修复时间,确定其是否在可接受的范围内。容错性好的软件能确保系统不发生无法意料的事故。
从容错性测试的概念可以看出,当软件出现故障时如何进行故障的转移与恢复有用的数据是十分重要的。
4、文档测试
文档测试的关注点:
- 文档的术语
- 文档的正确性
- 文档的完整性
- 文档的一致性
- 文档的易用性(可读性)
5、兼容性测试
WEB测试
APP测试
兼容性主要是指软件之间能否很好的运做,会不会有影响、软件和硬件之间能否发挥很好的效率工作,会不会影响导致系统的崩溃。
- 平台测试
- 浏览器测试
- 软件本身能否向前或者向后兼容
- 测试软件能否与其它相关的软件兼容
- 数据兼容性测试
最常见的就是浏览器的兼容性测试,不同浏览器在 css,js 解析上的不同会导致页面的显示不同。常见的IE8的兼容性
6、易用性测试
易用性(Useability)是交互的适应性、功能性和有效性的集中体现。又叫用户体验测试。
7、安装测试
测试程序的安装、卸载。典型的是app的安装、卸载。
8、安全测试
安全测试是一个相对独立的领域,需要更多的专业知识。例如web的安全测试,需要熟悉各种网络协议TCP\HTTP,防火墙,CDN,熟悉各种操作系统的漏洞,熟悉路由器等。从软件来说,熟悉各种攻击手段,例如SQL注入、Xss等。
9、性能测试
检查系统是否满足需求规格说明书中规定的性能。通常表现在以下几个方面:
- 对资源利用(如内存、处理机周期等)进行的精确度量
- 对执行间隔
- 日志事件(如中断,报错)
- 响应时间
- 吞吐量(TPS):单位时间内处理的事物
- 辅助存储区(例如缓冲区、工作区,可读写区的大小等)
- 处理精度等进行的监测
9.1内存泄漏测试(划分到性能测试)
造成内存泄露的原因有很多,最常见的有以下几种。
- 分配完内存之后忘了回收。
- 程序写法有问题,造成没办法回收。
- 某些API函数的使用不正确,造成内存泄露。
- 没有及时释放。
内存泄漏的检测:
- 对于不同的程序可以使用不同的方法来进行内存泄露的检查,还可以使用一些专门的工具来进行内存问题的检查,例如MemProof. AQTime、Purify、BundsChecker等。 有些开发工具本身就带有内存问题检查机制.要确保程序员在编写程序和编译程序的时候打开这些功能。
- 通过代码扫描分析工具来检查
四、按测试实施组织划分
第三方测试:介于开发方和用户方间的组织的测试(将测试交给其他公司)。如软件评测机构,外包公司。
五、按是否运行划分
静态测试(Static testing):静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。
代码静态分析和文档测试都属于静态测试。单元测试就是静态的方式一种。
动态测试(Dynamic testing):是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能。这种方法由三部分组成:构造测试用例、执行程序、分析程序的输出结果。
大多数软件测试工作都属于动态测试。
六、按是否手工划分
手工测试(Manual testing) | 自动化测试(Automation Testing) | |
定义 | 由人去一个一个的输入用例,然后观察结果。 | 手动执行的过程用代码来实现,让机器去工作。 |
优点 | 自动化无法替代探索性测试、发散思维结果的测试。 | 提高效率,不易出错 |
缺点 | 执行效率慢,量大易错。 | 不灵活,内有探测性思维 |
自动化测试比如功能测试自动化、性能测试自动化、安全测试自动化。通常所说的自动化是指功能测试自动化。
自动化测试按照测试对象来分,还可以分为接口测试、UI测试等。接口测试的ROI(产出投入比)要比UI测试高。
自动化实施步骤:
- 完成功能测试,版本基本稳定
- 根据项目特性,选择适合项目的自动化工具,并搭建环境
- 提取手工测试的测试用例转化为自动化测试的用例
- 通过工具、代码实现自动化的构造输入,自动检测输出结果是否符合预期
- 生成自动测试报告
- 持续改进,脚本优化。
七、按测试地域划分:国际化测试与本地化测试
问题:软件测试服的分类?不同维度的分类是不同的。比如,按研发阶段……