软件测试的基本原则
- 穷尽测试是不可能的:由于时间,人力,成本等原因,不可能把所有场景都测一遍
- 测试尽早介入:更早发现缺陷,解决它的成本越低。测试左移
- 缺陷集群性(2/8原则):缺陷往往存在在20%的模块中,如果在一个模块里发现了bug, 可能该模块里还存在更多的bug,需要进行更深入的测试. 二八原则是有原因的:可能是因为这个模块本身逻辑比较复杂,或者需求比较模糊。
软件测试的对象
最经常测试的主体就是软件程序,但是软件并不单单指程序,软件其实是由三部分组成的:文档,代码,程序。所以测试对象就包含了这三部分。
在需求分析阶段,会有需求文档和接口文档要测试。在编码实现阶段,会有源代码要测试。在系统功能实现阶段,有软件程序需要测试
软件开发流程
软件开发模型
- 传统瀑布模型:1)软件开发的各项活动严格按照线性方式来进行
2) 当前活动接受上一项活动的工作结果
优点:开发的各个阶段比较清晰,强调文档,适合需求稳定的产品。
缺点:早期的错误可能要等到开发后期阶段才能发现 - 敏捷开发模型
特点:增量迭代,小步快跑
XP(极限编程)
SCRUM - DevOps模型
持续开发,持续测试,持续集成,持续部署,持续监控
测试流程体系
软件测试模型
- V模型
需求分析,概要设计,详细设计,编码,单元测试,集成测试(接口),系统测试(功能,性能,兼容),验收测试
缺点:测试从编码阶段完成后开始,测试介入时间晚,修复bug代价大 - W模型
测试与开发是并行关系,测试伴随着整个软件开发周期,更早介入到测试 - H模型
软件测试流程
- 传统的测试流程:单元测试,集成测试,冒烟测试,系统测试,回归测试,验收测试
- 测试左移:左移是往测试之前的开发阶段移,在开发早期介入测试。
测试左移的方法:代码评审(code review),代码审计,单元测试(白盒测试的一种),自动化冒烟测试,研发自测 - 测试右移:是往发布之后移,产品上线后进行线上监控。
测试技术体系
软件测试分类
- 按开发阶段分类:单元测试,集成测试,系统测试(功能,兼容,性能,安全),验收测试(α测试:在开发环境下 β测试:在实际环境下用户测)
- 按是否查看代码:白盒测试(研究产品内部的源代码和程序结构),黑盒测试(完全不看代码),灰盒测试(看部分代码)
- 测试执行方式:静态测试(不运行程序,比如代码评审,文档评审),动态测试
- 按是否手工执行:手工测试,自动化测试
分层测试体系
自动化分层测试体系:70%单元测试(Unit Tests),20%服务测试(接口测试,Service Tests),10%用户界面测试(公司里最核心,相对比较稳定,逻辑不是很复杂的业务,UI Tests)
单元测试的方法:Java语言:JUnit和TestNG框架 。Python语言:unittest和pytest框架
接口测试:检查接口参数传递的正确性,接口功能实现的正确性,输出结果的正确性,以及对各种异常情况的容错处理的完整性和合理性。
接口测试的方法:
- 代理工具,对接口的数据抓包:Charles, Fiddler,
- postman
- Jmeter: 可以进行接口功能和性能的验证
- loadrunner
- 接口测试框架:python语言:Requests, HttpRunner. Java: HttpClient, RestAssured