精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基于IDEA插件開發和字節碼插樁技術,實現研發交付質量自動分析

開發 前端
業務提需求,產品定方案,研發做實現,測試驗流程。四種角色的相互配合是確保一個需求上線的必備條件。在整個需求的交付質量級別劃分中,研發與測試是非常重的一環,如果研發提測的代碼質量不高,就會出現不同級別的修BUG、返工甚至重做的風險。

 [[380703]]

本文轉載自微信公眾號「bugstack蟲洞棧」,作者小傅哥 。轉載本文請聯系bugstack蟲洞棧公眾號。

目錄

一、前言

二、技術實現準備

三、對字節碼插樁

  • 1. 方法入口
  • 2. 采集信息

四、IDEA 插件開發

五、效果演示

六、總結

七、系列推薦

一、前言

如何保證代碼質量?

業務提需求,產品定方案,研發做實現,測試驗流程。四種角色的相互配合是確保一個需求上線的必備條件。在整個需求的交付質量級別劃分中,研發與測試是非常重的一環,如果研發提測的代碼質量不高,就會出現不同級別的修BUG、返工甚至重做的風險。

那么,怎么來提高代碼質量呢?一般我們都會要求研發在開發代碼的過程中編寫單元測試,驗證自己的代碼邏輯。如果最終單元測試覆蓋度不足,可以由測試拒絕研發提測。

但是,整個需求實現的代碼是在全部開發完成后提測的,也就是臨近上線的最后一環,大家才知道某個研發的某個功能域的實現是否具備提測條件。如果這個時候代碼質量不高,那么接下來就是項目風險的時候。壓測試時間、調上線時間,總之有病拖著最后成大病了!

當然,你可以在項目開發期間定期排查代碼,或者在日會進度反饋等等手段。可這樣需要耗費大量時間1拖1的開發排查方式很難滿足復雜流程的較大型項目開發,而且對于項目風險把控也是不可預估的。

所以,我們希望采集研發在開發過程中的執行動作,把風險判斷提前。實際操作舉例就是,當你開發完成一個接口,開始測試運行時,我們的插件就可以采集到這個接口的全部信息,包括:接口名稱、入參類型和內容、出參類型和內容、異常信息、調用關系鏈等。而再把這些信息匯總提交到服務端,生成本次需求代碼分支下的全部接口動作,以及各系統間的關系鏈路,并附帶隨時生成最新的接口文檔和一鍵測試驗證功能。后期測試人員介入時就可以參考研發在編碼過程中的全部測試用例,也可以查看整個功能的覆蓋程度,此外測試人員測試過程中的數據也會被保留下。現在擁有這些數據信息以后,就可以完整的生成一套研發測試質量交付全覽圖,讓整個工程開發交付質量評估透明化。

接下來我們就按照以上的描述性內容,實踐開發一個案例體會下。走起!

二、技術實現準備

  1. 字節碼插樁,因為我們需要采集到接口執行信息,那么就需要使用字節碼插樁組件給接口方法增強。這個實現有點類似谷歌的Dapper,大規模分布式架構的非入侵監控。只不過我們需要采集的描述性信息更多。關于字節碼插樁,可以了解ASM、Javassist、Byte-Buddy,它們都可以做此項工作。
  2. IDEA 插件開發,因為我們需要在研發人員開發過程中進行采集,也不破壞研發的操作習慣。那么最好的方式就是嵌入到啟動運行中,只要在開發過程中有運行代碼的動作,就采集相應的接口信息。
  3. 最后就是數據的傳輸和處理,傳輸可以使用MQ或者直接用Netty。而處理數據的過程會相對比較復雜,在這個過程需要分析出有價值的數據,同類的數據,合并一條執行鏈路的數據,以及生成相關的接口文檔和工程服務地圖。

三、對字節碼插樁

這里我們使用的字節碼插樁組件是 Byte-buddy,它是一個代碼生成和操作庫,用于在Java 應用程序運行時創建和修改 Java 類,而無需編譯器的幫助。除了 Java 類庫附帶的代碼生成實用程序外,Byte Buddy 還允許創建任意類,并且不限于實現用于創建運行時代理的接口。此外,Byte Buddy 提供了一種方便的 API,可以使用 Java 代理或在構建過程中手動更改類。

  • 無需理解字節碼指令,即可使用簡單的 API 就能很容易操作字節碼,控制類和方法。
  • 已支持Java 11,庫輕量,僅取決于Java字節代碼解析器庫ASM的訪問者API,它本身不需要任何其他依賴項。
  • 比起JDK動態代理、cglib、Javassist,Byte Buddy在性能上具有一定的優勢。

1. 方法入口

  1. public static void premain(String agentArgs, Instrumentation inst) { 
  2.     AgentBuilder.Transformer transformer = (builder, typeDescription, classLoader, javaModule) -> { 
  3.         return builder 
  4.                 .method(ElementMatchers.any()) // 攔截任意方法 
  5.                 .intercept(MethodDelegation.to(MonitorMethod.class)); 
  6.     }; 
  7.     new AgentBuilder 
  8.             .Default() 
  9.             .type(ElementMatchers.nameStartsWith(agentArgs))  
  10.             .transform(transformer) 
  11.             .installOn(inst); 

如果你接觸過 Javaagent 開發,那么對于 premain 會比較熟悉。如果不清楚你可以把它理解為,它是程序啟動的時的方法入口,你可以從這個入口中攔截到你需要的方法,之后對它進行字節碼增強。其實也就是動態寫代碼,在方法中添加你的代碼,來收集方法信息。

2. 采集信息

  1. @RuntimeType 
  2. public static Object intercept(@Origin Method method, @SuperCall Callable<?> callable, @AllArguments Object[] args) throws Exception { 
  3.     long start = System.currentTimeMillis(); 
  4.     Object resObj = null
  5.     try { 
  6.         resObj = callable.call(); 
  7.         return resObj; 
  8.     } finally { 
  9.         System.out.println("方法名稱:" + method.getName()); 
  10.         System.out.println("入參個數:" + method.getParameterCount()); 
  11.         for (int i = 0; i < method.getParameterCount(); i++) { 
  12.             System.out.println("入參 Idx:" + (i + 1) + " 類型:" + method.getParameterTypes()[i].getTypeName() + " 內容:" + args[i]); 
  13.         } 
  14.         System.out.println("出參類型:" + method.getReturnType().getName()); 
  15.         System.out.println("出參結果:" + resObj); 
  16.         System.out.println("方法耗時:" + (System.currentTimeMillis() - start) + "ms"); 
  17.     } 

這個就是使用 Byte-Buddy 可以采集的信息,你可以通過注解入參,獲取到一個方法的全部信息。方法名稱、入參個數、入參類型和內容、出參類型和結果以及還能計算方法執行耗時。

四、IDEA 插件開發

關于 IDEA 插件開發的知識內容較多,可以從GitHub搜索一些資料和查閱官方文檔:https://plugins.jetbrains.com/docs/intellij/gradle-build-system.html?from=jetbrains.org

此處演示案例關于插件開發的內容比較簡單,主要是繼承com.intellij.execution.impl.DefaultJavaProgramRunner,Override doExecute 方法,添加自己需要的內容即可。

這部分添加的內容核心就是在程序啟動時添加我們的字節碼插樁程序,如下:

  1. @Override 
  2. protected RunContentDescriptor doExecute(@NotNull RunProfileState state, @NotNull ExecutionEnvironment env) throws ExecutionException { 
  3.     JavaParameters parameters = ((JavaCommandLine) state).getJavaParameters(); 
  4.     // 信息獲取 
  5.     PsiFile psiFile = env.getDataContext().getData(LangDataKeys.PSI_FILE); 
  6.     String packageName = ((PsiJavaFileImpl) psiFile).getPackageName(); 
  7.     // 添加字節碼插裝 
  8.     ParametersList parametersList = parameters.getVMParametersList(); 
  9.     parametersList.add("-javaagent:" + this.getClass().getResource("/").getPath().substring(1) + "ProjectProbe.jar=" + packageName); 
  10.     return super.doExecute(state, env); 

此處最核心的就是 -javaagent 把 ProjectProbe.jar 工程探針程序的Jar包加載進去。其他的就是一些關于 PsiFile API 的使用,感興趣可以閱讀官方文檔中的介紹。

五、效果演示

安裝插件

安裝插件就和我們正常安裝一樣,不過目前這個插件在開發階段,所以需要本地安裝。

運行效果

  • 上圖就是運行效果的案例演示,我們把運行時接口的信息完整的輸出到控制臺。
  • 在實際使用的過程中,會把這部分信息傳回服務端,由服務端分析處理后,展示在頁面上。

六、總結

  • 基于IDEA插件和字節碼插樁技術,能做的功能實現還有很多。本文僅僅是其中一種研發到測試痛點的解決方案,如果感興趣可以一起深入研究。
  • 當你看到這樣的案例以后,希望能給你的是并不一定所有的技術點都是為了面試造火箭對話的。當你真的把它落地以后,才會懂的自己需要很多知識。
  • 本文沒有太過多的介紹插件開發和字節碼技術,如果對字節碼編程感興趣,可以在公眾號:bugstack蟲洞棧,回復字節碼編程。全書11萬7千字,20個章節涵蓋三個字節碼框架(ASM、Javassist、Byte-budy)和JavaAgent使用并附帶整套案例源碼!

 

 

責任編輯:武曉燕 來源: bugstack蟲洞棧
相關推薦

2022-07-11 10:45:37

插樁性能優化打包

2023-10-11 22:37:44

測試左移服務器

2011-03-28 18:32:08

ibmdwJazz

2010-01-20 10:16:35

光突發交換技術

2019-10-30 08:45:21

JS代碼NodeJS

2023-11-15 18:02:52

2025-08-14 01:55:00

2021-05-28 23:04:23

Python利器執行

2024-01-05 18:01:17

高并發策略程序

2024-07-08 09:46:19

2024-10-08 22:00:29

2023-11-13 18:01:15

開發工具Java

2021-12-08 09:46:05

IDEAORM代碼

2020-07-20 10:27:09

現代交付ITCIO

2018-05-31 16:52:03

WOT

2019-11-15 14:45:10

開發者技能工具

2013-01-22 09:48:23

2022-06-02 12:00:55

ClickHouse大數據字節跳動

2015-12-07 15:10:27

電科華云金融行業云平臺
點贊
收藏

51CTO技術棧公眾號

牲欧美videos精品| 国产网站在线| 国产精品亚洲专一区二区三区 | 风间由美久久久| 国产做受高潮漫动| 三级电影一区| 亚洲精品一区二区三区福利| 欧美老熟妇喷水| 黄色在线视频网站| 91香蕉视频mp4| 国产免费一区视频观看免费 | 91国在线观看| 一本大道东京热无码aⅴ| 五月婷婷丁香六月| 国产一区二区在线影院| 欧美伊久线香蕉线新在线| 亚洲一二三四五六区| 国产成+人+综合+亚洲欧美| 亚洲一区av在线| 一区精品在线| 黄色在线小视频| 成人av在线电影| 91欧美视频网站| 无码人妻av一区二区三区波多野| 欧美在线不卡| 中文字幕日韩综合av| 91精品人妻一区二区| 96sao在线精品免费视频| 欧美日韩一区二区三区视频| 成熟了的熟妇毛茸茸| 伊人春色在线观看| 中文字幕中文字幕中文字幕亚洲无线| 国产区欧美区日韩区| 国产绿帽一区二区三区| 日本不卡一二三区黄网| 欧美亚洲伦理www| 国产性生活网站| 91精品蜜臀一区二区三区在线| 亚洲视频在线观看| 亚洲中文字幕一区| www.久久东京| 精品乱人伦小说| 亚洲一区二区图片| 999精品视频在线观看| 欧美少妇性性性| 欧美在线观看视频网站| 三级中文字幕在线观看| 五月激情六月综合| 国产婷婷一区二区三区| 暧暧视频在线免费观看| 一区二区三区欧美日韩| 日韩video| 羞羞的视频在线看| 怡红院av一区二区三区| 成人在线免费观看视频网站| 丝袜在线视频| 亚洲综合一二三区| 人妻少妇精品久久| 57pao成人永久免费视频| 国产精品igao激情视频| 国产精品刘玥久久一区| 中文字幕在线不卡| 精品国产无码在线| xvideos国产在线视频| 亚洲色图制服诱惑| 免费观看中文字幕| 99视频免费在线观看| 亚洲美女一区二区三区| 亚洲av首页在线| v片在线观看| 一区二区三区蜜桃网| 天天做天天躁天天躁| 大香伊人中文字幕精品| 大伊人狠狠躁夜夜躁av一区| 十八禁视频网站在线观看| 69堂精品视频在线播放| 91精品久久久久久久91蜜桃 | 奇米影视一区二区三区| 国产精品网站入口| www.天堂av.com| 99久久精品免费看国产| 青娱乐国产91| 搞黄网站在线观看| 亚洲成人av福利| 国产精品无码av无码| 免费一级欧美在线观看视频| 日韩欧美一区中文| 国产吞精囗交久久久| 成人系列视频| 欧美国产日韩一区| 天天干天天色综合| 国产自产2019最新不卡| 国内视频一区| 日本视频在线观看| 五月激情综合婷婷| 一区二区三区四区毛片| 2020国产精品极品色在线观看| 日韩精品视频在线观看免费| 亚洲女人毛茸茸高潮| 精品动漫3d一区二区三区免费| 国产不卡精品视男人的天堂| 亚洲综合免费视频| 99精品偷自拍| 精品一区二区成人免费视频 | 国产精品爽爽爽| 亚洲精品一区二区三区不卡| 日本一区二区免费在线观看视频| 亚洲国产精品女人| 亚洲成人看片| 亚洲第一av网站| 亚洲欧美精品久久| 午夜在线精品| 成人三级在线| 免费在线观看黄色网| 色综合久久中文字幕| 97超碰免费在线观看| 国产欧美日韩影院| 午夜精品福利在线观看| 国产巨乳在线观看| 国产日产亚洲精品系列| 青青艹视频在线| 一区二区三区视频播放| 最近2019中文字幕第三页视频| 1级黄色大片儿| 高清视频一区二区| 日日噜噜噜夜夜爽爽| 在线观看精品| 亚洲欧美另类国产| 欧美日韩综合在线观看| 成人动漫在线一区| 欧美一级中文字幕| 高清一区二区三区av| 中文字幕日韩精品在线观看| 成人免费a视频| 成人小视频免费在线观看| 精品少妇人妻av一区二区| 国产成人精选| 在线观看欧美成人| 亚洲午夜无码久久久久| 国产午夜精品一区二区三区嫩草| 精品无码国模私拍视频| 成人av激情人伦小说| 久久99视频免费| 亚洲爆乳无码一区二区三区| 亚洲美女一区二区三区| 99热这里只有精品2| 亚洲乱码免费伦视频| 国产精品一区二区三区免费视频| 国产九色在线| 精品视频一区二区不卡| 又色又爽的视频| 免费视频一区二区| 亚洲最新在线| 91精品一久久香蕉国产线看观看| 日韩视频―中文字幕| 一本一道人人妻人人妻αv| 中文在线免费一区三区高中清不卡| 欧美激情精品久久久久久小说| 欧美日韩播放| 国产精品视频一区二区三区四 | 日韩系列在线| 欧美在线不卡区| 国产视频二区在线观看| 欧美日韩三级一区二区| 日本黄色片免费观看| 国产一区二区在线看| 亚洲熟妇无码av在线播放| 国内精品麻豆美女在线播放视频| 亚洲18私人小影院| 久久精品国产亚洲a∨麻豆| 欧美三级日韩三级国产三级| 四虎地址8848| 国产99久久久国产精品| 久久国产亚洲精品无码| 久久精品国产99久久| 亚洲一区二区免费在线| 超免费在线视频| 亚洲欧美日韩国产精品| 一级黄色a视频| 亚洲综合在线免费观看| 日本高清www| 毛片基地黄久久久久久天堂| 大桥未久一区二区三区| 神马香蕉久久| 成人精品在线观看| 狼人综合视频| 中文字幕在线日韩| 免费看国产片在线观看| 日本国产一区二区| 欧美成人三级视频| 久久精品男人天堂av| 午夜免费一级片| 中文欧美日韩| 中文字幕免费高| 九一国产精品| av蓝导航精品导航| 欧美日韩尤物久久| 久久久久久久久久久成人| 99视频在线观看地址| 精品国产乱码久久久久久闺蜜| 波多野结衣在线电影| 亚洲一区二区视频| 国产精品酒店视频| 99久久99久久精品免费观看 | 男女猛烈激情xx00免费视频| 精品国产视频| 国产一区二区精品在线| 亚洲精品伊人| 欧美综合在线观看| 影院在线观看全集免费观看| 国产亚洲精品高潮| 欧美一区二区三区激情| 在线不卡的av| 天天干天天操天天操| 亚洲成人动漫一区| 希岛爱理中文字幕| 中文字幕不卡在线播放| 无码人妻精品一区二区三应用大全| 久久国产精品99久久久久久老狼| 成人毛片视频网站| 在线观看视频日韩| 亚洲啊啊啊啊啊| 首页国产精品| 亚欧精品在线| 女厕嘘嘘一区二区在线播放 | 国产精品视频资源| 粉嫩一区二区| 97不卡在线视频| 成人三级小说| 欧美激情2020午夜免费观看| 免费在线观看黄| 日韩中文娱乐网| 91在线看黄| 中文字幕国产精品| 福利视频在线导航| 亚洲人成77777在线观看网| 四虎永久在线精品免费网址| 欧美成人一区二区三区| 国产精品高潮呻吟久久久| 精品视频一区三区九区| 中文字幕自拍偷拍| 欧美日韩一区视频| 瑟瑟视频在线免费观看| 欧美中文字幕久久| 中文字幕 欧美激情| 在线免费观看不卡av| 日本a级c片免费看三区| 日韩欧美综合在线视频| 中文字幕精品无码一区二区| 狠狠久久五月精品中文字幕| 日日夜夜综合网| 日本韩国精品在线| 一级做a爱片久久毛片| 欧美日韩国产大片| 国产理论视频在线观看| 欧美三级视频在线观看| 91资源在线视频| 91麻豆精品国产无毒不卡在线观看 | 日本乱人伦一区| 国产精品午夜一区二区| 欧洲亚洲精品在线| 91在线视频国产| 精品久久久网站| 午夜福利理论片在线观看| 亚洲美腿欧美激情另类| bbbbbbbbbbb在线视频| 久久精品免费播放| 丁香花在线影院| 国产91色在线免费| 欧美啪啪网站| 福利视频一区二区三区| 亚洲电影男人天堂| 亚洲精品成人久久久998| 伊人情人综合网| 亚洲熟妇国产熟妇肥婆| 日韩高清一级片| 色哟哟在线观看视频| 91影院在线免费观看| 国产精品视频在| 亚洲已满18点击进入久久| 男人日女人网站| 欧美一级在线免费| 瑟瑟在线观看| x99av成人免费| ririsao久久精品一区| 热99久久精品| 日韩免费一级| 日本一区二区三区精品视频| 一区二区三区在线电影| 国产熟女高潮视频| 国产精选一区二区三区| 亚洲天堂网一区二区| 中文字幕一区二区三区色视频| 久久婷婷一区二区| 欧美午夜精品一区二区三区| 国模人体一区二区| 色老头一区二区三区| 美女网站在线看| 亚洲free嫩bbb| 蜜臀91精品国产高清在线观看| 天天操天天干天天玩| 久久婷婷麻豆| 国产麻豆剧传媒精品国产| 国产丝袜欧美中文另类| xxxx 国产| 91精品麻豆日日躁夜夜躁| 国产精品秘入口| 午夜伦理精品一区| 国产一区二区视频在线看 | 欧美在线高清| 日本激情视频在线播放| 91亚洲男人天堂| 免费在线观看日韩| 欧美日韩国产高清一区二区| 精品影院一区| 97av在线播放| 九九热hot精品视频在线播放| 中文字幕欧美日韩一区二区| 三级亚洲高清视频| 精品国产av色一区二区深夜久久| 亚洲欧美日韩国产一区二区三区 | 国产又粗又猛又爽又黄91精品| 日韩精品卡通动漫网站| 午夜一区二区三区视频| 北条麻妃一二三区| 久久久97精品| 亚洲精品毛片| 亚洲精品成人自拍| 首页欧美精品中文字幕| 人妻丰满熟妇av无码久久洗澡| 一区二区三区精品久久久| 国产一区二区波多野结衣 | av资源一区| 99re视频在线| 欧美日韩免费观看一区=区三区| 中文字幕成人免费视频| 中文字幕av一区二区三区免费看| aaaaaa毛片| 亚洲欧洲高清在线| 成人免费网站视频| 欧美性天天影院| 久久激情网站| 色一情一交一乱一区二区三区| 欧美日韩午夜视频在线观看| 色猫av在线| 欧美一区二区三区免费视| 亚洲免费毛片| 大香煮伊手机一区| 国产亚洲成aⅴ人片在线观看 | 男女做暖暖视频| 欧美一区二区免费视频| 永久免费网站在线| 国产一区二区三区高清| 国产精品腿扒开做爽爽爽挤奶网站| 欧类av怡春院| 色又黄又爽网站www久久| 国产一区二区三区不卡在线| 国产精品国产自产拍高清av水多| 精品久久中文| 久久婷婷中文字幕| 夜夜精品浪潮av一区二区三区| 亚洲男人天堂久久| 欧美亚洲激情视频| 日韩精品久久| 少妇丰满尤物大尺度写真| 亚洲观看高清完整版在线观看| 四虎精品一区二区三区| 国产精品成人va在线观看| 欧美激情理论| 性猛交╳xxx乱大交| 狠狠躁夜夜躁人人爽超碰91| 国产69久久| 亚洲自拍偷拍视频| 国产欧美精品| 亚洲一级理论片| 精品久久人人做人人爽| 免费成人动漫| 看一级黄色录像| 91亚洲男人天堂| 国产一区二区在线播放视频| 九九综合九九综合| 在线亚洲a色| 91热视频在线观看| 欧美性极品xxxx做受| 老司机午夜在线视频| 精品免费一区二区三区蜜桃| 老司机精品视频导航| 国产在线欧美在线| 国产一区二区三区丝袜| 成人动态视频| 亚洲欧美偷拍另类| 精品国产乱码久久久久久婷婷| 四虎久久免费| 久久综合入口| 国产精品羞羞答答xxdd| 亚洲永久精品在线观看| 久久伊人精品视频| 欧美精美视频| 黑人玩弄人妻一区二区三区| 欧美最猛性xxxxx直播|