精准测试之过程与实践 | 京东云技术团队

news2024/11/16 7:31:22

作者:京东工业 宛煜昕

一、怎样的技术

•百度百科:

精准测试是一套计算机测试辅助分析系统。

精准测试的核心组件包含的软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。

•其他定义

精准测试是中国自己有知识产权的完全的理论体系,它同时关注功能点和代码相关逻辑这样一个方法论,是一种灰盒的测试模式。

最开始在2014年的国际软件测试大会上发布精准测试的时候,它叫穿线测试,英文名字叫Threading Test,表达了精准测试的本质,Threading这个英文单词本身有两个含义,一个是穿线一个是线程,建立用例和代码的关系,相当于把黑盒和白盒关联起来,做黑盒测试也能看到白盒数据,同时把开发和测试能够关联起来,测试一做完,开发的逻辑马上就能自动生成。另一个层面,精准测试最本质就是线程测试,因为精准测试基于覆盖率白盒理论产生,它跟白盒最大的区别是它的覆盖率是线程级的,也就是说要追溯到用例这个级别。

二、技术发展

•历史发展

•成熟度模型的五级划分

三、知识与技能

这里介绍两款,分别为JAVA和C/C++相关,

第一,开发的基础和核心(编程)知识及所需要用到的版本管理工具(GIT)等。

第二,领域特定的知识、技术需要具备如下:

JAVA:Javassist(官网- https://www.javassist.org/ ),

ASM3.0(官网- https://asm.ow2.io/ ),

JaCoCo(官网- https://www.eclemma.org/jacoco/)。

C/C++:汇编、反汇编,PE,逆向工程(IDA)。

要用C/C++实现,通用与效率等方面没得说,但各协议的插桩,代码信息的收集,复杂程度和工作量都不是一般人所能承受,要做好心里建设。

直接使用JaCoCo需要注意覆盖率的误差,一些语句行,分支层级,其误差会被指数级放大。其更适用于偏向辅助个人开发者和小型项目组对项目覆盖率进行非常基础的评估。

•误差产生的具体成因:

1.复杂系统通常由大量子模块组成,JaCoCo无法实现对于内部被调用的子模块进行插装,因此对于子模块覆盖率的评估会产生显著的误差。

2.如果某个子模块没有被调用,那么对于JaCoCo来说,该模块内的方法等同于不存在。JaCoCo需要调用该子模块,才能将该子模块内的代码计入覆盖率计算的“分母”。

3.除了几种既定的逻辑意外事件,JaCoCo无法正确处理例外情况(Exception),如果在控制流程中遇到Exception,JaCoCo会把这种情况直接标记为未覆盖,这种判定方式直接的影响到了对程序逻辑关系的把控,造成对于覆盖率无法准确评估。

•误差引发的后果:

1.伪瓶颈的产生,以及对测试质量的错误高估。第一种情况,测试人员投入大量工作之后,却无法进一步提升覆盖率,造成对资源和实践的浪费;第二种情况,会让用户误将未达标的系统判定为达标,有可能引发严重的生产事故。

2.无法实现缺陷定位,大量的算法和应用依托覆盖率的输入,而缺陷定位更是其中最主要的实践。

3.回归测试的精准度,受到了严重的影响。

•无损插桩技术(推荐)

精准测试推出的SABI和SASI是中国自己的技术

SABI,SouceCode Analyzer ByteCode Intrumentation,就是说源码分析,字节码查看,观测和分析是在源码,插桩是在字节码。

SASI,SouceCode Analyzer SouceCode Intrumentation,这是传统商用白盒最基础的技术,有时候对源码进行分析,直接在源码插装。源码插装以后,代码经过高级语言、高级编译器的编译,直接生成最后发布包。这种是完全无损的标准技术,插装代码经过编译器编译后执行可靠性更高。

四、总结与介绍

大纲

1、测试范围,代码分析

2、差异化

3、调用关系

4、度量与分析

5、质量评估

6、知识库兼优化

7、用例预分析

8、自动化测试与精准测试

五、平台

>设计思路

从产品的需求、功能模块,开发的代码到测试的用例,从正向到逆向的覆盖,追溯和可视。

>大纲

>调用链与代码覆盖

使用的是插桩,有点类似C++中的Hook技术,获取所需数据信息。

协议,HTTP,MySql,Dubbo,Redis等,需要先进行分析,找到关键插桩位置,然后结合使用设计模式进行收集(所需)信息。

设计模式推荐两个,1、反射+适配器,2、动态代理。

需要注意,代码膨胀问题。

>影响范围

假如有个应用系统开发出A版本提测,通过前端功能发起HTTP接口,平台的实时快照收到HTTP接口信息,将该次的接口相关信息(类、方法、执行代码行数)保存为系统快照; 当A版本开发后变为A_01版本,使用平台对两次版本(Jar包或War包)进行比对,通过系统快照中信息会分析出变更项与影响项,如:类、方法、接口。

根据影响用例中的菜单与接口,到接口测试工具中进行执行。

>实现与应用

通过数据进行可视化,显示服务/应用的启动,拓扑图,调用链,代码覆盖,版本比对等信息。

>>项目列表

添加,服务/应用

>>项目动态

启动,服务/应用

1、搜索

可显示多个服务/应用的拓扑关系图

1)详情视图

•表结构,可查看接口与数据库表间的关联

•热点,可查看接口与数据库表的关联个数

2)展开快照

这里显示的节点是保存到系统快照的。

•表结构-数据库表,远程服务-调用的rpc接口,源码-代码关系图层;

•远程服务,显示远程调用接口,如dubbo接口;

•源代码关系图谱,可查看代码关联关系和覆盖程度;

•清除图谱,清除表结构、远程服务、源代码关系节点;

•详情页,跳转到快照详情页;

•概要,显示快照详情中图片;

•删除节点,删除显示的节点;

3)搜索

•搜索数据库表中,表名,字段名,筛选条件;

•搜索接口,HTTP接口;

2、监控台

通过HTTP接口实时获取到协议、代码相关信息,不同于通过单元测试得到代码覆盖率,然后将这些信息保存下来(我的快照和系统快照)。

1)实时监控

实时展示接口的调用链及链上各节点信息

2)我的快照

实时监控中可保存为我的快照,

2.1)调用链和链路分析的可视化

调用链即是服务与中间件的调用链拓扑图层;链路分析即是代码链路分析关系图谱。

•"流程图(拓扑图)"中可查看到覆盖后端及各中间件信息;

•"堆栈列表"中展示服务与中间件的应用名,类型,服务/方法,用时等信息;

•点击"</>"弹窗为代码图谱(代码链路分析关系图谱),点击某个节点,即显示某个方法的方法名称、执行到的代码行数、代码总数、代码覆盖率和圈复杂度信息,

根据某个尾节点,能寻到开始节点;

2.2)查看代码覆盖率报告

代码覆盖率信息列表,显示我的快照列表中所有覆盖率信息,类名、方法名、执行代码行数、方法行数、覆盖率、圈复杂度;

3、应用中心

1)在线应用

2)应用

2.1)系统快照

快照目录,点击链接进入系统快照详情页

系统快照详情页,基本信息页签

系统快照详情页,流程图页签

系统快照详情页,堆栈列表页签,点击</>打开代码关系图层(代码关系链)

2.2)版本比对

比对文件格式为Jar或War包,比对之后会产生记录报告

开始比对后的结果显示,能查看报告,显示差异项,(比对)日志输出(新增、修改、变更、删除的文件与方法,类与方法的影响数)

2.2.1)报告

比对成功后查看报告,显示变更项,影响用例,对比日志;点击影响用例链接,会跳转到(系统)快照详情页

参考

1、百度百科-精准测试, https://baike.baidu.com/item/精准测试/22355867

2、精准测试白皮书v3.0-2019最新版,作者:星云精准测试, https://wenku.baidu.com/view/fe7e99a401d276a20029bd64783e0912a2167c23.html

3、《不测的秘密-精准测试之路》,作者:TMQ精准测试实践团队。

4、网易严选的精准测试实践, https://www.infoq.cn/article/xuu91crqa4hcjz8uomjs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/504396.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苹果(ios)家庭APP广告推送,照片,相册,日历消息推送,【iMessage苹果推】,【苹果家庭推群发】,【imessage相册推送】

解决方案 若是你完全担任苹果的这个默许功效&#xff0c;那就不必要去编削任何代码。 如果&#xff0c;你原本就比较细心&#xff0c;曾经配置了modalPresentationStyle的值&#xff0c;那你也不会有这个影响。 对于想要找回本来默认交互的同学&#xff0c;直接设置以下便可&am…

携手共赢 HashData亮相华为合作伙伴大会

5月8日-9日&#xff0c;以“因聚而生 众志有为”为主题的“华为中国合作伙伴大会2023”在深圳国际会展中心举办。 HashData作为国内云原生数据仓库的代表企业&#xff0c;也是华为重要的生态合作伙伴。在本次大会上&#xff0c;HashData展示了云数仓领域最新前沿技术以及联合…

Java经典笔试题—day04

Java经典笔试题—day04 &#x1f50e;选择题&#x1f50e;编程题&#x1f95d;计算糖果&#x1f95d;进制转换 &#x1f50e;结尾 &#x1f50e;选择题 (1)下列与队列结构有关联的是&#xff08;&#xff09; A. 函数的递归调用 B. 数组元素的引用 C. 多重循环的执行 D. 先到…

Windows系统运行速度优化(系统内存扩充)!

之前有几篇文章&#xff0c;讲述了一些关于提升Windows系统运行速度的方法。链接如下&#xff1a; 如何让Windows系统10秒开机&#xff1f; 电脑运行卡顿怎么办&#xff1f;一招让Windows系统运行流畅 Windows系统重新安装后必须要做的优化 这里还有一个Windows系统的优化方法…

技术领先、“忠”于业务,用友走出多维数据库的价值之路

本文转自科技商业 作者 于洪涛 对于当今的企业而言&#xff0c;精细化管理&#xff0c;已经成为发展之源&#xff0c;甚至是生存之本。 尤其是随着数字化和智能化转型的推进&#xff0c;在企业经营管理过程中&#xff0c;数据正在日益发挥更为关键的要素作用。 相比过去&…

【Linux】Shell脚本之函数的操作+实战详解(建议收藏⭐)

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录 shell脚本函数设置函数的意义函数的基…

物联网|蓝牙4.0BLE协议栈简介|IAR集成开发环境简介|IAR各版本下载链接|物联网之蓝牙4.0 BLE基础-学习笔记(2)

文章目录 129-142暂停&#xff0c;待续3、蓝牙4.0BLE协议栈简介4、IAR集成开发环境简介Tips: BLE协议结构图介绍Tips IAR各版本下载链接 129-142暂停&#xff0c;待续 3、蓝牙4.0BLE协议栈简介 问题: 1、什么是LE协议栈?BLE协识栈与BLE协议的关系&#xff1f; 协议&#xff…

数据结构与算法(Java版) | 队列的应用场景和介绍

队列的一个应用场景 给大家介绍完稀疏数组这种数据结构之后&#xff0c;接下来我再来给大家介绍另外一种数据结构&#xff0c;即队列。 队列&#xff0c;听其名而知其义&#xff0c;相信大家应该都在现实生活中见过&#xff0c;比如在火车站排队买票&#xff0c;或者在麦当劳…

轻NAS搭建 - 使用微力同步搭建私人云盘,无需公网IP也能远程访问

文章目录 1.前言2. 微力同步网站搭建2.1 微力同步下载和安装2.2 微力同步网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 私有云盘作为云存储概念的延伸&#xff0c;虽然谈不上多么新颖&#xff0c;但是其…

图神经网络:在Cora数据集上动手实现图神经网络

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook。超链。提取码8888。 文章目录 代码实操1&#xff1a;GCN的复杂实现代码实操2&#xff1a;GCN的简单实现…

IntelliJ Platform-Plugins-获取方法相关信息(PsiElement/PsiMethodImpl)

PsiElement接口是文件中光标所在的那个字段&#xff0c;或者光标所在的那个方法的抽象&#xff0c;例如下图中PsiElement就是public String getName()&#xff0c;它的实现类是PsiMethodImpl 下面的代码会演示&#xff1a;如果光标在方法上&#xff0c;就打印方法名字&#x…

「Cpolar」内网穿透实现在外远程连接MongoDB数据库【端口映射】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…

第二十四章 Unity 纹理贴图

通常情况下&#xff0c;3D网格模型只能展示游戏对象的几何形状&#xff0c;而表面的细节则纹理贴图提供。纹理贴图通过UV坐标“贴附”在模型的表面。当然&#xff0c;这个过程不需要我们在Unity中完成&#xff0c;而是在建模软件中完成的。通常情况下&#xff0c;我们通过3ds m…

鸿蒙Hi3861学习九-Huawei LiteOS-M(互斥锁)

一、简介 互斥锁又被称为互斥型信号量&#xff0c;是一种特殊的二值信号量&#xff0c;用于实现对共享资源的独占式处理。 任意时刻互斥锁的状态只有两种&#xff1a;开锁或闭锁。 当有任务占用公共资源时&#xff0c;互斥锁处于闭锁状态&#xff0c;这个任务获得该互斥锁的使用…

C++系列六:一文打尽C++运算符

C运算符 1. 算术运算符2. 关系运算符3. 逻辑运算符4. 按位运算符5. 取地址运算符6. 取内容运算符7. 成员选择符8. 作用域运算符9. 总结 1. 算术运算符 算术运算符用于执行基本数学运算&#xff0c;例如加减乘除和取模等操作。下表列出了C中支持的算术运算符&#xff1a; 运算…

Oracle 19C 单机环境升级RU(19.3升级至19.12)

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

鸿蒙Hi3861学习五-Huawei LiteOS-M(任务管理)

一、任务简介 关于任务的相关介绍&#xff0c;之前文章有比较详细的介绍&#xff0c;这里不做过多解释&#xff0c;可以参考如下文章&#xff1a;FreeRTOS学习二&#xff08;任务&#xff09;_t_guest的博客-CSDN博客 而LiteOS的主要特性可以总结为如下几点&#xff1a; LiteO…

〖数据挖掘〗weka3.8.6的安装与使用

目录 背景 一、安装 二、使用explorer 1. 介绍 2.打开自带的数据集(Preprocess) 1.打开步骤 2.查看属性和数据编辑 3.classify 4.Cluster 5.Associate 6.Select attributes 7.Visualize 待补充 背景 Weka的全名是怀卡托智能分析环境&#xff08;Waikato Environme…

低代码平台解读—如何不写代码创建表单和维护表单

工作表新建与修改——敲敲云 新建工作表的流程包含 新建工作表/编辑公祖表为工作表添加字段&#xff0c;例如“员工档案”表中有姓名、性别、年龄等字段为字段设置属性工作表布局工作表预览、保存、关闭 1、新建工作表/修改工作表 新建工作表 修改工作表 2、为工作表添加字段 …

c#笔记-定义类

声明类 类可以使用帮助你管理一组相互依赖的数据&#xff0c;来完成某些职责。 类使用class关键字定义&#xff0c;并且必须在所有顶级语句之下。 类的成员只能有声明语句&#xff0c;不能有执行语句。 class Player1 {int Hp;int MaxHp;int Atk;int Def;int Overflow(){if (…