测试问题
一般分为四类:
- 测试生活中的一个物品
- 测试一套软件
- 编写代码来测试一个函数
- 调试解决已知问题
可以从功能、性能、兼容性、界面、易用性、(安全性)几个方面来测试
测试用例:为实施测试而向测试的系统提供的一组集合,包含(标题)、测试环境【测试设备、测试系统】、测试数据、测试步骤、预期结果、重要性
无论哪种问题,都要做好用户误用乱用的准备
测试需要什么?
- 全局观:了解软件到底是怎么回事,区分测试用例的优先顺序。如测试亚马逊这类的电子商务系统,不仅要确保产品图片显示位置正确,还要确保支付流程、货物发货流程的万无一失
- 懂整合:了解软件工作原理,以及如何将它们整合成一个大的软件生态系统。如测试谷歌电子表格,不仅要测试文档的打开、存储、编辑,还要将它与Gmail以及各种插件和其他模块整合在一起测试
- 会组织:有条理的处理问题。如写照相机的测试用例,可以将测试功能分为拍照、照片管理、设置等,在创建测试用例时,这种结构化处理方式有助于考虑更加周全
- 可操作:制定的测试计划是否合理。如有用户报告软件在打开某张图片时崩溃,却要求重装软件,就不太实际
测试生活中物品
如回形针、水杯、笔
步骤
- 使用者是什么人?作用?
- 列出用例,如回形针可能是将纸张固定在一起且不破坏纸张
- 使用限制?如回形针最多夹30张纸不会造成永久性损害、高温低温影响
- 压力与实效情况下的状态?没有产品是万无一失的,测试中需要分析失效情况,了解产品在什么情况下失效是可以接受的(必要的),怎样算是失效
- 如何进行测试?定义正常的使用情况,除了手动测试还可以找台机器自动执行某些功能的测试
测试一套软件
相较于测试生活物品,更强调执行测试的细节
主要有两个方面:
手动测试和自动化测试
对于自动化测试,某些功能对计算机而言过于定性,计算机难以有效检查,并且计算机只能机械地识别被明确告知过的情况;手动检测能通过观察发现新的问题。所以说测试过程中人工和计算机两者缺一不可
黑盒测试和白盒测试
黑盒测试中,把软件看做黑盒子,看不到内部结构,关心软件的表象、只测试其功能。主要关注细节及过程做细致的检查:
- 所有执行路径的检查
- 逻辑语句的检查
- 循环边界的检查
- 数据的有效性
白盒测试中,需了解程序的内部机制,可以分别对每一个函数单独进行测试。功能测试和性能测试:
- 是否符合文档的要求
- 是否有遗漏的功能
- 能否得到正确的结果
步骤
- 做黑盒测试还是白盒测试?
- 使用者?作用?
- 列出用例
- 使用限制?
- 压力条件、失效条件是什么样的?
- 列出测试用例,如何测试?
测试一个函数
步骤
- 定义测试用例(正常情况、极端情况、奇怪的输入等)
- 定义预期结果
- 编写测试代码
调试和故障排除
假设你是谷歌Chrome浏览器团队的一员,收到一份bug报告:Chrome启动时会崩溃。怎么处理?
此时的目标是搞清楚究竟出了什么问题,以便开发人员修复缺陷
步骤
- 理清状况、了解情况
首先,提问题,尽量了解当时的情况:
用户碰到这个问题有多久了?
该浏览器的版本号?在什么操作系统下运行?
该问题经常发生吗?【出问题的频率有多高?什么时候会发生?】
是否提交了错误报告? - 分解问题
了解问题发生时的具体状况后,将问题分解为可测模块。可以设想出以下操作步骤:
1.转到Windows的“开始”菜单
2.点击Chrome图标
3.浏览器启动
4.浏览器载入参数设置
5.浏览器发送HTTP请求载入首页
6.浏览器收到HTTP回应
7.浏览器解析网页
8.浏览器显示网页内容
在上述过程中的某一步,有地方出错使浏览器崩溃。应逐一排查每个步骤,诊断定位问题位置 - 创建特定、可控的测试
以上各个测试模块都应该有实际的指令动作,即自己可以做的操作步骤(在自己的机器上予以重现)