最近在和测试同仁交流之时,偶尔会阐述自己对未来测试的幻想。
1. 背景一:
早期的自动化测试是录制回放,用户在进行测试,工具录制用户的行为,把它转换成自动化脚本。许多功能测试工具至今还保留了这种功能,虽然这类工具生成的脚本是非结构化的脚本,不容易维护,而且回放时也不稳定,但还是说明,人们的测试执行是可以转换成自动化脚本的,这也是自动化测试的最初的、最直接的实现。
2. 背景二:
多年前,人们就推出比monkey测试覆盖度更高、路径更可控的“遍历测试”,其操作方式比较接近人工测试的自然行为,能够很大程度代替人工进行一键式的、多终端的兼容性测试,包括:
- 通过白名单或黑名单控制多次点击或不点击的区域(UI元素);
- 根据关键字和控件类型触发Back Key等;
- 定义特殊位置点击及其方式;
- 能够进行任意方向及长度的滑动;
- …..
在每个功能点的测试完成之后,会自动产生相应的测试报告,基本实现了一键式测试,即用户提交被测应用之后,用户不需要做什么,静候测试报告。
3. 背景三:
之前写过几篇文章,介绍人工智能(AI)应用于软件测试:
可以看到,AI 可以帮助我们模拟玩家完成相应的游戏测试;AI也能够帮助我们全面分析App应用中的每个界面、元素和操作流,从而实现App的性能测试和易用性测试;AI也能帮助我们生成更有效、更完整的测试数据、生成测试用例、扩展和完善测试用例等。
4. 背景四:
之前写过一篇文章 软件测试的一个新公式引起的思考 ,其中主要思想是:
测试 = (已知的) 检测 + (未知的)试验
再进一步就是:
- (已知的) 检测 是可以完全自动化的;
- (未知的)实验需要探索,包括手工探索、机器随机/模糊探索;
- 所以“探索式测试 + 自动化测试” 是一种完美的组合。
5. 未来测试的幻想
“测试 =(已知的)检测 +(未知的)试验”会表现得更淋漓尽致,这种淋漓尽致的表现会是怎样的?
虽然测试计划、测试分析没有变,这是基础。在测试计划与测试需求分析上,AI不容易代替人类,但AI可以辅助人们分析,包括从以自然语言的需求文档中获得学习(可能会借助最近兴起的知识图谱、质量语言处理的AI技术或新定义的DSL等)、从已有的代码中获得学习、从运行日志中获得学习、从过去所发现的缺陷中获得学习……制定出更全面、更有效的测试计划,确保测试的设计基础是坚实的,没有遗漏的测试项(或测试区域),能够列出各种测试场景或测试点。
然后,采用探索式测试完成测试的设计、执行和学习,而在其背后:
- 借助测试设计方法补充测试用例;
- 借助AI 不断试错,以优化遍历算法和路径;
- 借助AI 优化脚本结构,并能够分离数据(脚本参数化);
- 借助AI 等进行业务规则学习,能够生成绝大多数的验证点;
- 可以适当引入人机交互,完成验证点的校验。
从而获得所要测试的自动化脚本,确保后续的回归测试是自动化的。概括起来,未来的测试是人只要做探索式测试,其它测试的执行交给工具,即:
- 探索在前、自动在后
- 研发/测试人员先做探索式测试,自动化测试脚本同时自动生成
- 探索式测试的覆盖率衡量和改进也是自动进行的
- 之前的公式应稍微调整一下,变为:
测试 =(未知的)探索试验 +(已知的)自动检测
目前只是幻想,但有人已经开始行动,大家静候佳音,哪怕几年。