精准测试-Vue前端调用链影响变更分析之一

Vue前端调用链影响变更分析之一

    • 一、背景
    • 二、工具调研
        • 1、 工具介绍:
        • 2、工具使用
    • 三、工具落地集成方案(待后续补充)
      • 变更影响较为简单的实现
      • 变更影响较为复杂的实现
      • 1、全局关系数据库的构建
      • 2、变更影响的简单实现
      • 3、变更影响的复杂实现

一、背景

去年做了Java的后端调用链影响评估,但是随着项目迭代越来越快,评估影响也越来越难以满足用户需求,主要有以下几个原因:
1、项目迭代越来越快,有些项目接口都不测试了,接口影响评估被忽略了,用户更期望接口影响了哪些页面
2、老板更关注页面的交互,测试重心偏向前端的交互
3、前端外放Bug相对于后端Bug多太多了,测试选择性忽略后端的评估影响
快手在MTSC精准测试分享会提过,前端(客户端)的精准测试相较于后端而言,具有更广泛的受益,更值得去研究。从当前的经验来说,前端的精准测试确实更具有性价比。

二、工具调研

公司前端项目主要基于Vue框架进行开发。查阅大量资料后,对于Vue项目,dependency-cruiser这款工具获更被广泛推荐。

1、 工具介绍:

git地址
在这里插入图片描述
特性介绍:
1、可以根据自己的规则去匹配生成调用链
2、可以生成调用链图片
3、可以自定义输出生成的结果,比如json,text等
4、支持命令行规划

特性介绍:

1、自定义规则生成调用链:允许用户根据自定义规则,灵活匹配并生成调用链。

2、可视化调用链图片输出:提供直观易懂的调用链图片展示,便于快速理解和分析项目中的依赖关系。

3、多样化输出格式:支持将生成的调用链结果以多种格式输出,包括json、text等,方便用户根据需要进行数据处理和展示。

4、命令行操作支持:提供命令行规划功能,用户可以通过命令行轻松执行调用链的生成和分析操作,也方便后续工具集成。

2、工具使用

切换到项目代码路径下,安装

npm install --save-dev dependency-cruiser
# or
yarn add -D dependency-cruiser
pnpm add -D dependency-cruiser

注意:nodejs版本需要大于等于20

生成配置

npx depcruise --init

生成页面的调用链

npx depcruise src --focus "^src" --output-type text >vue_depency.text

生成结果如下:

src/App.vue → @/composables/useVersionUpdate
src/App.vue → node_modules/ant-design-vue/lib/index.js
src/App.vue → node_modules/ant-design-vue/es/locale/zh_CN.js
src/api/baseConfig.js → @/xhr/index
src/api/clientManagement.js → @/xhr/index
src/api/common.js → @/xhr/index
src/api/cooperateInfo.js → @/xhr/index
src/api/financeProfit.js → @/xhr/index
src/api/financeRules.js → @/xhr/index

查某个组件的调用关系

cat vue_depency.text | grep editGmv.vue
src/screens/newStart/index.vue → @/screens/start/components/detail/editGmv.vue
src/screens/start/components/detail/editGmv.vue → @/api
src/screens/start/components/detail/editGmv.vue → node_modules/ant-design-vue/lib/index.js
src/screens/start/components/detail/editGmv.vue → node_modules/vue/dist/vue.d.mts
src/screens/start/components/detail/top.vue → src/screens/start/components/detail/editGmv.vue

从上面的图可以看到edit编辑组件被index、top组件调用了。->调用

可以加个参数过滤–exclude,node_modules模块的调用关系

npx depcruise src --focus "^src" --exclude node_modules --output-type text >vue_depency.text

三、工具落地集成方案(待后续补充)

1、跟后端一样,构建数据模型,通过neo4j图数据建立全局关系数据库,这样就可以通过模块查询影响的变更模块。

变更影响较为简单的实现

2、通过git diff 变更代码分析出变更文件,直接查询图数据库返回变更的影响模块范围,这个范围就很大。

变更影响较为复杂的实现

3、通过git diff 析出文件具体哪些行号变更,结合AST生成语法树,分析模块的语法数结构,结合变更行号,分析影响到了具体的某个组件。
4、分析样式变更影响范围
5、端到端的影响变更,后端接口可以分析影响变更的接口,通过接口反查页面调用情况,从而分析出接口的影响到的页面。

当然3、4、5下面两种情况实现起来比较复杂,目前还没有好的工具可以解决,期望实现的大佬可以指教下

大概的方案实现如下:

1、全局关系数据库的构建

与后端相似,先构建了数据模型,并利用neo4j图数据库建立了全局关系数据库,通过查询就可以快速识别并定位到变更所影响的模块。

2、变更影响的简单实现

利用git diff分析变更代码,从而识别出发生变更的文件。通过直接查询图数据库,能够迅速获取这些变更文件所影响的模块范围。这种方法较为简单,也容易落地,但所返回的影响模块范围较为宽泛。

3、变更影响的复杂实现

3.1、为了更精确地分析变更影响,需要进一步通过git diff细化到具体变更的行号。结合抽象语法树(AST)生成技术,分析模块的语法数结构,并结合变更行号,精确到具体影响了哪些组件。

3.2、补充样式变更影响范围分析。

3.3、端到端的影响变更,分析后端接口变更对前端页面的影响。通过接口反查页面调用情况,分析出接口变更所影响的页面,从而提供更全面的前后端变更影响分析。

当然,目前第三点的实现,有较大的技术挑战,尚未有成熟的工具能够完美解决,期望有实现的大佬可以分享分享

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LinuxC语言】系统日志

文章目录 前言一、系统日志的介绍二、向系统日志写入日志信息三、示例代码总结 前言 在Linux系统中,系统日志对于监控和排查系统问题至关重要。它记录了系统的运行状态、各种事件和错误信息,帮助系统管理员和开发人员追踪问题、进行故障排除以及优化系统…

(Microsoft SQL Server,错误: 233)

错误信息: A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - 管道的另一端上无任何进程。) (Microsoft SQL Server,错误: 233) 原因&…

《十三》QT绘图原理双缓冲机制

一、原理与设计 所谓双缓冲机制,是指在绘制控件时,首先将要绘制的内容绘制在一个图片中,再将图片一次性地绘制到控件上。在早期的 Qt 版本中,若直接在控件上进行绘制工作,则在控件重绘时会产生闪烁地现象,控…

零基础学习数据库SQL语句之定义数据库对象的DDL语句

DDL语句 DDL Date Definition Language 数据定义语言,用来定义数据库对象(数据库,表,字段) 基本操作 数据库操作 查询所有数据库 SHOW DATEBASES查询当前数据库 SELECT DATEBASE() 创建 CREATE DATEBASE [IF …

利用大语言模型(KIMI)构建智能产品的控制信息模型

数字化的核心是数字化建模,为一个事物构建数字模型是一项十分复杂的工作。不同的应用场景,对事物的关注重点的不同的。例如,对于一个智能传感器而言,从商业的角度看,产品的信息模型中应该包括产品的类型,名…

Mysql的关联查询以及语句

一、mysql的连接查询 1、等值连接 这里是三张表的等值连接 select rp.role_id,rp.permission_id from role_permission rp, role r, permission p where rp.role_idr.id and rp.permission_idp.id 2、内连接: 角色:系统管理员 是否拥有权限&#xf…

DHCPv4_CLIENT_ALLOCATING_03: 发送DHCPREQUEST - 必须包含‘服务器标识符‘

测试目的: 验证客户端发送的DHCPREQUEST消息中是否包含“服务器标识符”选项,以指示它选择的服务器。 描述: 本测试用例旨在确保DHCP客户端在广播DHCPREQUEST消息时,必须包含“服务器标识符”选项。该选项用于指明客户端选择了…

2024-5-1我把QQ群聊天记录分析工具重写了一下

【下载地址】 https://www.lanzoub.com/b00rn0g47e 密码:9hww 【项目背景】 2020年我用Tkinter写过一个QQ群聊天记录分析的工具exe,后续也写过一个纯JS前端的版本,前阵子有个用户反馈不能用了,顺便看能不能加入一个分析关键词的功能&…

第76天:WAF攻防-信息收集识别被动探针代理池仿指纹白名单

目录 基础知识 案例一: 信息收集-被动扫描-黑暗引擎&三方接口 案例二: 信息收集-目录扫描-Python 代理加载脚本 案例三: 信息收集-爬虫扫描-Awvs&Xray&Goby内置 基础知识 什么是 WAF ? Web Application Firewall ( web 应用防火墙&am…

jvm垃圾回收机制介绍

JVM(Java虚拟机)是Java程序的运行环境,它负责执行字节码文件。JVM的工作原理主要包括以下几个部分:类加载器、执行引擎、垃圾收集器和内存管理。类加载器负责加载字节码文件并将其转换成Java平台上的机器码,执行引擎负…

三维图形学知识分享---求平面与模型相交线

在CGAL(Computational Geometry Algorithms Library)中,Polygon_mesh_processing模块提供了用于处理多边形网格数据结构的功能。其中,surface_intersection函数是用来计算模型的表面相交线的工具。 CGAL_Mesh mesh_orcl;std::vect…

容器组_生命周期

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看 📙Jav…

张大哥笔记:如何选择项目和未来发展方向,实现10倍增长

在过去的10年里,我加入了众多社群,接触了不少行业精英,还参与了各式各样的交流圈。这段时间,我一直在考虑一个问题:未来的发展道路究竟在何方?起初我认为只有那些具有长期积累价值的事业才有真正的前景&…

傅里叶变换理论2

1. 逆变换 2. 时间域和频率域 3. 波的基本单位

C语言例题29:在屏幕上显示一个等腰三角形

#include <stdio.h>void main() {int i, j;int x;printf("输入等腰三角形行数&#xff1a;");scanf("%d", &x);for (i 1; i < x; i) {for (j i; j < x; j) {printf(" "); //输出空格占位}for (j 1; j < 2 * i; j) {printf…

【计算机毕业设计】基于SpringBoot+Vue企业车辆管理系统设计与实现

目录 一、项目介绍 二、项目主要技术 三、系统体系结构 四、系统实现 五、实现代码 一、项目介绍 本系统采用Mysql数据库和java语言&#xff0c;SpringBoot框架进行开发而成&#xff0c;极大程度上的保证了系统的稳定性。管理人员可以管理个人中心、驾驶员管理、用户管…

FR-TSN4206获得“时间敏感网络产业链名录计划”测试认证证书,TSN交换机助力智能工业发展

TSN技术&#xff0c;即时间敏感网络技术&#xff0c;已成为智能工业、自动驾驶等领域的核心。它通过时钟同步、数据调度等功能&#xff0c;确保低延迟、高可靠性的数据传输。 为推动TSN技术在我国的发展&#xff0c;工业互联网产业联盟联合多家单位启动了“时间敏感网络产业链名…

AI制作《曼达洛人4》电影宣传片

AI制作《曼达洛人》电影宣传片 Bounty hunters, legends, and a galaxy in turmoil. The Mandalorian rises. 赏金猎人、传奇和混乱的星系。曼达洛人崛起。 In the shadows of the Outer Rim, a lone warrior walks the path of honor. 在外围边缘的阴影中&#xff0c;一名独…

esp32-cam 2. python opencv 拉取摄像头内容

0. 环境 - win10 python3 - pycharm - esp32-cam http://192.168.4.1 1. 创建工程 File -> Create Project -> -> Location: E:\Workspaces\PycharmProjects\esp32cam_opencv -> Create 2. opencv hello 2.1 添加脚本 File -> New -> Python f…

【跟马少平老师学AI】-【神经网络是怎么实现的】(五)梯度消失问题

一句话归纳&#xff1a; 1&#xff09;用sigmoid激活函数时&#xff0c;BP算法更新公式为&#xff1a; 用sigmoid函数&#xff0c;O取值为0~1&#xff0c;O(1-O)最大值为0.25&#xff0c;若神经网络层数多&#xff0c;则会造成更新项趋近于0&#xff0c;称为梯度消失。 2&#…