精准测试之过程与实践

2023-11-08

作者:京东工业 宛煜昕

一、怎样的技术

•百度百科:

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

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

•其他定义

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

最开始在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、源码阅读网:http://www.coderead.cn/home/index.html

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

精准测试之过程与实践 的相关文章

  • Appium 自动化自学篇 —— 初识Appium自动化!

    Appium 简介 随着移动终端的普及 手机应用越来越多 也越来越重要 而作为测试 的我们也要与时俱进 努力学习手机 App 的相关测试 文章将介绍手机自动化测试框架 Appium 那究竟什么是 Appium 呢 接下来我们一起来学习Pyt
  • 给祖传系统做了点 GC调优,暂停时间降低了 90% | 京东云技术团队

    问题描述 公司某规则引擎系统 在每次发版启动会手动预热 预热完成当流量切进来之后会偶发的出现一次长达1 2秒的Young GC 流量并不大 并且LB下的每个节点都会出现该情况 在这次长暂停之后 每一次的年轻代GC暂停时间又都恢复在20 10
  • Web自动化测试适用于哪些场景?看完这篇文章你就知道了!

    前言 在软件开发的过程中 测试是不可或缺的环节 而随着web应用的普及 web自动化测试也成为了非常重要的一部分 本文将介绍web自动化测试的概念和常见应用场景 并给出一个示例代码 一 什么是web自动化测试 Web自动化测试是指通过编写程
  • Web自动化框架中验证码识别处理全攻略,让测试更得心应手!

    前言 随着Web应用程序的不断发展 自动化测试已成为项目开发中必不可少的一环 然而 验证码的出现却经常会使自动化测试变得更具挑战性 为了解决这个问题 我们需要一种方法来自动识别和处理验证码 从而提高自动化测试的效率和准确性 本文将介绍如何封
  • 常见的6种软件测试用例设计方法

    常见的软件测试用例设计方法 个人认为主要是下面这6种 流程图法 也叫场景法 等价类划分法 边界值分析 判定表 正交法 错误推测法 这6种常见方法中 我分别按照定义 应用场景 使用步骤 案例讲解这4个部分进行讲解 所以本文行文结构如下 每种用
  • 简单搭建一个Python自动化测试框架

    1 安装 Python 首先需要安装Python 可以从官网下载对应的版本 安装完成后 可以在终端中输入python来检查是否安装成功 2 安装pip pip是Python的包管理工具 用于安装和管理Python模块 可以在终端中输入以下命
  • Web自动化测试流程:从入门到精通,帮你成为测试专家

    摘要 Web应用程序在今天的软件开发中占据着越来越重要的地位 保证Web应用程序的质量和稳定性是非常必要的 而自动化测试是一种有效的方法 本文将介绍Web自动化测试流程 并提供代码示例 步骤一 选取测试工具 选择适合自己团队的自动化测试工具
  • 讲解selenium 获取href find_element_by_xpath

    目录 讲解selenium获取href find element by xpath 什么是XPath 使用find element by xpath获取href Selenium的特点和优势 Selenium的应用场景 Selenium的核
  • 自动化测试-数据生成工具

    为什么开发ZenData ZenData帮助文件 ZenData测试数据生成器 ZenData通用数据生成工具 ZenData官网 ZenData是一款无依赖 跨平台 语法简单 使用方便的通用数据生成工具 其主要两大功能 数据生成和数据解析
  • 软件测试经典面试题分析——软件测试流程

    1 需求分析 跟同事之间探讨客户需求 对需求文档进行 测试 互相交换想法 2 需求评审 如何评审 首先提前一天发邮件给格个参会人员 准备参与XXX项目需求评审 参与人员 产品经理 项目经理 研发负责人 研发小组成员 测试负责人 测试小组成员
  • 【2024全网最火最全性能教程】一文搞懂性能测试!

    性能测试概念 我们经常看到的性能测试概念 有人或称之为性能策略 或称之为性能方法 或称之为性能场景分类 大概可以看到性能测试 负载测试 压力测试 强度测试等一堆专有名词的解释 针对这些概念 我不知道你看到的时候会不会像我的感觉一样 乱 一个
  • 车载测试相关理论知识

    学到了一些专用英文 BMS 电池管理系统 MCU 电机控制单元 GCU 增程器发电机控制器 OBC 车载充电机 DC DC 直流转换器 汽车上面涉及的控制器有 VCU 核心电子控制单元 BMS 电池管理系统 ECU 发动机 TCU MCU
  • PostMan进行并发压测流程

    需求 两个记账接口在同一时间大量处理同一账户账务时 锁表顺序不同导致死锁 在修改完代码后模拟生产记账流程进行测试 需要对两个接口进行并发测试 在进行压测的时候 需要对流水号进行递增 处理流程 1 新建Collections 2 设置全局变量
  • Mockito3.x详解

    目录 Mockito 1 简单示例 2 打桩测试 3 参数匹配器 4 调用次数验证 5 通过打桩为无返回值函数抛出异常 6 验证调用顺序 7 验证从未发生过的交互
  • Python组装jmx并调用JMeter执行压测

    JMeter 可以通过os命令调用Python脚本 Python同样可以通过系统命令调用JMeter执行压测 Python调用JMeter 首先要安装JMeter 官方下载地址 解压并配置配置环境路径或建立软连 使得在命令输入jmeter便
  • JMeter使用BeanShell断言

    BeanShell简介 BeanShell 是使用Java语法的一套脚本语言 在JMeter的多种组件中都有BeanShell的身影 如 定时器 BeanShell Timer 前置处理器 BeanShell PreProcessor 采样
  • #私密朋友圈被吐槽有bug?官方致歉!网友:尴尬了......

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 软件测试|Selenium StaleElementReferenceException 异常分析与解决

    简介 Selenium 是一个流行的自动化测试工具 用于模拟用户与网页交互 然而 当我们在使用 Selenium 时 可能会遇到一个常见的异常 即 StaleElementReferenceException 这个异常通常在我们尝试与网页上
  • Python常用的自动化小脚本!

    一 list转json string转json 可以使用Python内置的 json 模块将列表 List 和字符串 String 转换成JSON格式 List转JSON假设我们有一个列表 List my list apple banana
  • tcpdump抓包

    tcpdump抓包 基本概念 1 类型的关键字 host 指明一台主机 如 host 10 1 110 110 net 指明一个网络地址 如 net 10 1 0 0 port 指明端口号 如 port 8090 2 确定方向的关键字 sr

随机推荐

  • 请求转发和请求包含 相关细节

    请求转发 this getServletContext getRequestDispatcher forward request response 不支持相对路径 request getRequestDispatcher forward r
  • vue 全局使用 sass变量

    1 安装sass resouces loader cnpm install sass resouces loader D 2 配置build gt utils js 如下
  • vue-router 的基本用法

    vue router 的基本用法 1 什么是 vue router vue router 是 vue js 官方给出的路由解决方案 它只能结合 vue 项目进行使用 能够轻松的管理 SPA 项目中组件的切换 vue router 的官方文档
  • c/c++入门教程 - 2.4.5 c++运算符重载(加号、左移、递增、赋值、关系、函数调用)

    目录 4 5 运算符重载 4 5 1 加号运算符重载 4 5 2 左移运算符重载 4 5 3 递增运算符重载 4 5 4 赋值运算符重载 4 5 5 关系运算符重载 4 5 6 函数调用运算符重载 相关教程 4 5 运算符重载 运算符重载概
  • linux+暂停运行,如何暂停和继续运行Linux程序

    我们通过shell窗口运行程序时 由于有的程序长时间运行 直到下班了都还没有返回运行结果 这个时候 我们又不能直接关闭shell窗口 不然前面的时间就白白运行了 那有什么办法可以先暂停程序 明天再继续运行呢 不可行 关闭shell窗口后 后
  • 马踏棋盘-数据结构 详细教程

    文章目录 一 问题描述 二 问题分析 三 深度优先搜索 Depth First Search 1 基本原理 2 代码预览 四 dfs 贪心算法 1 贪心策略 2 贪心原理 3 核心代码 4 代码预览 五 栈 贪心 1 回溯方法 2 基本操作
  • 新导入的项目出现很多“cannot resolve symbol ***”,项目运行不成功,怎么处理

    新导入的项目的启动类中很多类实例化出现错误 报错内容为 cannot resolve symbol 如下图所示 我在网上搜索相关信息 有一个网页总结的比较好 网页链接 其第一种解决方式没有尝试 其他的方式我尝试了很多 更改配置之类 但都没有
  • 企业网站搭建:如何规划内容?

    企业网站是企业展示自身形象和产品的重要渠道 搭建一个优质的企业网站可以提高企业的知名度 品牌价值和业务转化率 企业网站的内容规划非常重要 好的内容规划可以帮助企业更好地向用户展示自己 并提高用户体验 以下是一些关于企业网站内容规划的建议 1
  • jquery插件无缝滚动通知栏js特效

    下载地址 一款实用的jquery插件无缝滚动网页 常见的通知栏滚动播报特效 dd
  • Element-UI踩坑之Pagination组件

    先说结论 在改变pageSize时 若当前的currentPage超过了最大有效值 就会修改为最大有效值 一般Pagination组件的声明如下
  • FinalShell上传文件失败

    本地电脑创建虚拟机 使用FinalShell连接虚拟机 上传文件失败 解决办法 使用root账户连接 不要使用普通账户
  • SpringBoot-黑马-笔记

    SpringBoot 是由 Pivotal 团队提供的全新框架 其设计目的是用来简化 Spring 应用的初始搭建以及开发过程 目录 1 SpringBoot快速入门 起步依赖 程序启动 2 配置文件 yaml配置文件数据读取 多环境配置
  • 万字因果推断入门:为什么要做因果推断?

    来源 PaperWeekly 1 为什么需要因果推断 1 1 辛普森悖论 首先 考虑一个与现实情况很相关的例子 针对某种新冠病毒 COVID 27 假设有两种疗法 方案 A 和方案 B B 比 A 更稀缺 耗费的医疗资源更多 因此目前接受方
  • APP爬虫入门,Appium+Mitmproxy强势组合实现抖音的数据爬取

    APP爬虫入门 Appium Mitmproxy强势组合实现抖音的数据爬取 最近一直在研究APP的爬虫实现 前面文章讲了虚拟机和Appium环境的搭建 和 SSL PINNING的解决方法 主要难点在于解决APP开启SSL Pinning导
  • property received type-uncompatible value: expected <Array> but got non-array value.

    Component property received type uncompatible value expected
  • JSP基础总结+例题

    1 什么是JSP Java Server Pages 1 1概述 简化的Servlet设计 在HTML标签中嵌套Java代码 用以更新开发Web应用的动态网页 JSP文件在容器中会转换成Servlet执行 JSP是对Servlet的一种高级
  • 笔记记录--Docker使用WVP-Pro网络视频平台

    1 Docker拉取镜像 镜像地址 docker镜像地址 docker pull 648540858 wvp pro docker run env WVP IP 192 168 18 61 it p 18080 18080 p 30000
  • Ag-grid在vue中使用的必要属性

    文档链接 id myGrid 唯一标识 gridReady 渲染完成后的事件 defaultColDef this defaultColDef 默认定义 所有的列都有的属性 context this context componentPar
  • 阿里巴巴——三面,面试经历记录

    在 boss 直聘上无意间看到了阿里巴巴菜鸟网络的招聘信息 现在的部门已经有两名同学被蚂蚁金服录取了 自己就不服气的也想试试 这次面试其实并没有准备充分 之前就听说总共有很多轮数 不仅会考察基础知识的深度 也会考察算法能力 项目设计能力 价
  • 精准测试之过程与实践

    作者 京东工业 宛煜昕 一 怎样的技术 百度百科 精准测试是一套计算机测试辅助分析系统 精准测试的核心组件包含的软件测试示波器 用例和代码的双向追溯 智能回归测试用例选取 覆盖率分析 缺陷定位 测试用例聚类分析 测试用例自动生成系统 这些功