背景
最近看了腾讯出版的《不测的秘密——精准测试之路》,做了简单的读书笔记和总结,希望没看过这本书的同学可以简单了解书中说的手工精准测试开展思路,BTW,如果能把原著买下来看看就更好了
自动化测试可能的价值:
帮助回归、节省人力;
构建人工测试无法构建的场景、数据准备,或执行一些人工测试做不到的测试用例,有效提升测试覆盖率;
前置测试,让测试和开发有可能并行,提升项目敏捷度,降低测试独占周期。
但是!!!自动化测试只不过是按照人工设置的场景按部就班地去执行,说白了只是执行工具。不会给我们指明测试范围,也没有缩减回归测试的范围。
白盒测试:优势在于对程序内部实现的了解
黑盒测试:优势在于对用户场景的把握
能否将两者结合起来???
精准测试(测分):建立在对需求本身及对应的系统架构和实现细节的充分了解的基础上,通过关注开发实现,从代码层面确定测试范围。
精准测试如何进行???
1、差异化
2、技术治理
3、度量及分析闭环
4、质量评估
一。差异化
精准测试对象----最小的测试对象
迭代之间的差异部分
差异部分所影响的其他功能
迭代之间的差异部分
需求的差异
开发技术实现上的差异
需求差异(分析方法)
功能流图
功能与功能之间的关系,以及功能走向关系
数据流向图
从数据传递和加工的角度,表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程
状态变迁图
指明外部事件的结果系统将如何运作
技术实现差异分析
系统设计上的差异
系统架构图
时序图
工程上的差异
SVN-diff、IDEA等等
差异部分所影响的其他功能怎么确定???
二。技术治理
技术治理简单说就是关系链,用来分析技术实现上的各种耦合关系。是一种递进的关系,一般采用分而治之的策略:
系统内治理
系统内的最主要的耦合类型有:直接调用、数据共用(内存、数据库、文件)和传递等
比如:spring中的DAO层。
可以通过先分析java应用程序和DAO的关系,在分析DAO和数据库的关系,来获知共享数据库应用程序的类\方法、函数有哪些。
IDE提供的调用关系跟进方法
动态解析的方法
针对java领域,通过java自带的方法,在java虚拟机中,对字节码进行增强,通过对java程序运行过程中的调用路径进行记录,从而跟踪到类\方法之间的调用关系。
直接调用的调用关系分析方法:
数据共用和传递的调用关系分析
原则:具体问题具体分析,可以根据开发框架的一些特点进行梳理
系统间治理
系统间的耦合主要有:基于消息的异步调用或者回调、通过webservice等同步调用 梳理调用关系最有效的方式是:跟开发一起“双修”
服务端:Dubbo
Dubbo通过控制系统间服务调用的权限,来完成对所有暴露在外部服务和调用方的管理。---》画出系统间服务调用的全图
客户端:消息中心来管理所有模块的通信
人工梳理
数据库的治理
尽可能地回归到数据存储和读写
调用链获取使用IDEA
IntelliJ IDEA 查看一个类的所有继承关系图:https://blog.csdn.net/HeatDeath/article/details/79057665
查看java方法调用树
主菜单中选择Navigate | Call Hierarchy命令查看一个Java方法调用树
查看表达式、变量和方法参数的传递关系树
主菜单中选择Analyze | Dataflow from/to Here两个命令查看
以查看一个Java类、方法或变量的直接使用情况 IntelliJ IDEA的"Find Usage"可以查看一个Java类、方法或变量的直接使用情况
查看一个类的所有继承关系图 UML插件 在包或类上右键点击Diagram
基于逆向二进制文件的方式
基于逆向二进制文件的方式,通过反汇编的指令来获取函数之间的调用关系。
三。度量及分析闭环
如何评估测试的精度?
测试精准度:用代码覆盖率来体现 (路径覆盖:会覆盖每一个分支 ) 代码覆盖率结果并非要追求100%,有些代码不覆盖,风险也可控:try-catch、日志、空指针的判断、冗余代码、预埋逻辑、尚未使用的公共代码库等
建立分析闭环
四。质量评估
发布标准
增量代码覆盖率需要达到90%以上
严重bug修复完毕
挂起bug比率需要控制在5%以内
产品的性能、稳定性测试通过
我们不仅要关注质量结果,也要关注研发过程。过程指标需要达到的标准:
测试任务全部按照计划执行完
测试计划实际投入与预期符合
项目的千行bug率要控制在3个以内
bug发现率在提测周期应该呈收敛趋势
产品版本发布标准
实际落地
需要生成并维护:
系统功能流程图(测试)
数据流向图(测试、开发)
状态变迁图(测试)
系统架构图(测试、开发)
接口调用链(测试、开发)
测试落地:
用例(根据需求的用例 + code diff后补充的用例)
服务端测试:
1、代码diff、findusage等方式,弄清楚每次提交的增量代码,影响到的上层接口;(代码diff贯穿在测试周期内的每一次代码提交)
2、针对影响,构造合适的路径场景,进行单接口验证;
前端测试: 针对新增功能场景、受影响的功能场景,从用户使用场景出发,进行业务流的验证;
质量评估
关注质量结果的同时,更要关注研发过程质量。
测试和开发一起保证质量。
参考书籍
领取专属 10元无门槛券
私享最新 技术干货