精准化测试
黑盒测试的挑战
过程:多猜测,不稳定,难控制
效果:个人素质
管理:成本高,难度大
白盒测试
门槛高,单兵作战,目标单一(高覆盖率),分析之殇(对用户的影响)
互联网基本不做,迭代测试不允许
一.精准化测试思想
用非常精准和智能的软件来解决软件测试的问题,并从根本上引领软件测试从经验型方法向技术性方法的转型。
精准:测试用例到代码逻辑的精准记录的双向追溯
函数调用关系计算
测试用例-----------------------代码逻辑
代码染色
精准的代码级的缺陷定位和奔溃分析
精准的测试充分度分析---测试效果问题
智能
回归用例自动筛选
自动化用例筛选与执行
持续集成
引入精准化测试的原因
- 测试人员经验,能力不同
- 测试范围圈定凭经验
- 测试用例筛选难。
- 测试经验沉淀效果差。
最初的
- 精准的圈定测试范围
- 对影响范围给出建议
- 自动的筛选测试用例
- 为黑盒测试实时提供覆盖率结果。
(1)筛选测试用例
版本提测-->Diff结果解析(变更函数,函数调用关系)-->测试用例(测试用例,Sanity用例)
(2)函数调用关系计算
例如:开发未了实现功能1,同事修改了函数A和函数C,其中函数之间调用关系如下。
功能1:C-》A
功能2:B-》A
在做Sanity测试时,如何能够筛选出功能2的测试用例。
语言:java
工具:javacg
目的:通过对class文件的解析,计算函数之间的调用关系。
(3)Diff结果解析:
解析Diff结果文件,计算变更文件名和变更代码段位置。
扫描源文件,计算出变更的函数。
结合函数调用关系圈定受影响的函数范围。
(4)函数与测试用例的映射:
人工录入 code diff
代码注释抽取
代码染色(执行黑盒用例->收集覆盖率->解析覆盖结果->代码染色->函数调用关系)
2层调用,3层调用
(5)筛选用例流程
(6)执行测试用例
黑盒测试实时查看覆盖率
Java覆盖率
-
Jacoco
-
On-the-fly
-
class
JS覆盖率
-
基于JSCover二次开发
-
插桩+上报+proxy
-
源文件,编译文件(ES6)
(7)JS覆盖率
代码插桩
-
源文件插桩
-
编译文件插桩
数据上报
-
触发事件上报数据
文件映射
-
线上->proxy->本地
生成报告
-
解析jscoverage.json
-
生成html 形式报告
通过捕获事件进行覆盖率实时上报
-
页面切换
-
鼠标切换
-
...
(8)ES6标准如何做覆盖率(.vue, .js)
源码(易读,不可执行)-----》编译后(较易读,可执行)-----》压缩混淆后(不易读,可执行)
所以选择编译后文件