chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是代碼可視化?怎么實(shí)現(xiàn)代碼可視化?

OSC開(kāi)源社區(qū) ? 來(lái)源:OSCHINA 社區(qū) ? 2023-11-23 11:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者 | 京東云開(kāi)發(fā)者-京東科技 謝驍

1. 什么是代碼可視化?

Code visualizationis the process of creating graphical representations of source code to help understand and analyze it. 代碼可視化是創(chuàng)建源代碼的圖形表示以幫助理解和分析它的過(guò)程。 個(gè)人理解:通過(guò)使用圖形化手段(架構(gòu)圖、依賴(lài)圖、分布式追蹤、類(lèi)圖、火焰圖、CallGraph 等)使代碼在某些特征上變得可觀測(cè),用于輔助開(kāi)發(fā)人員理解分析項(xiàng)目或建設(shè)一些自動(dòng)化工具。

2. 為什么需要代碼可視化?

場(chǎng)景 1:代碼邏輯理解困難

項(xiàng)目代碼量很大且需求迭代快,每次梳理的文檔很快就過(guò)時(shí)了。新同學(xué)入手困難苦不堪言,老手也很難對(duì)項(xiàng)目整體的業(yè)務(wù)邏輯有一個(gè)全面的認(rèn)知,常常需要重新梳理邏輯。

A:項(xiàng)目都有哪些功能???項(xiàng)目入口在哪啊?核心調(diào)用鏈路是啥?都有哪些下游???這里好像循環(huán)調(diào)用了?

B:小劉的那個(gè)需求改動(dòng)xx邏輯?這塊怎么和文檔上不一-樣了?誰(shuí)把這塊重構(gòu)了?

?場(chǎng)景 2:改動(dòng)影響面難以評(píng)估 需求的訴求是修改 A 頁(yè)面的邏輯,但由于后端代碼很多公用邏輯且調(diào)用層級(jí)很深,上線才后發(fā)現(xiàn)影響了 B 頁(yè)面的邏輯,造成了線上事故。

場(chǎng)景 3:項(xiàng)目重構(gòu)缺少抓手

老舊項(xiàng)目經(jīng)過(guò)長(zhǎng)時(shí)間迭代和多次更換團(tuán)隊(duì),導(dǎo)致內(nèi)部代碼邏輯十分混亂且沒(méi)人能完全講明白所有邏輯。但新的業(yè)務(wù)迭代需求源源不斷,在原有項(xiàng)目上修改成本越來(lái)越高,亟需重構(gòu)以獲得更高地研發(fā)效率。

? 其他場(chǎng)景:自動(dòng)化 case 回歸常常覆蓋不到新增邏輯;線上問(wèn)題排查困難,難以快速定位到出錯(cuò)代碼......

3. 怎么實(shí)現(xiàn)代碼可視化?

Call Graph是程序中不同函數(shù)調(diào)用之間關(guān)系的圖形表示。它顯示了程序中的函數(shù)如何相互作用,使開(kāi)發(fā)人員能夠理解程序的流程并識(shí)別潛在的性能問(wèn)題。 以下講解代碼可視化的一種方式 Call Graph 的生成方案,可以分為靜態(tài)和動(dòng)態(tài)分析:

3.1 靜態(tài)程序分析

1)基于源碼生成

在講解使用源碼生成 CallGraph 的流程前我們先復(fù)習(xí)一下編譯原理的相關(guān)知識(shí)。

e28ee724-7261-11ee-939d-92fbcf53809c.png

其中編譯器前端部分主要是與源語(yǔ)言相關(guān),主要包含: 詞法分析:也叫掃描(scanning),他的主要任務(wù)是從左向右逐行掃描源程序的字符,識(shí)別出各個(gè)單詞,確定單詞的類(lèi)型,將識(shí)別出的單詞轉(zhuǎn)換成統(tǒng)一的機(jī)內(nèi)表示 —— 詞法單元 (token) 形式??梢灶?lèi)比英語(yǔ)字母合成單詞的過(guò)程。

e292d294-7261-11ee-939d-92fbcf53809c.png

語(yǔ)法分析:也叫解析(parsing)。語(yǔ)法分析器 (parser) 從詞法分析器輸出的 token 序列中識(shí)別出各類(lèi)短語(yǔ),從而構(gòu)造語(yǔ)法分析樹(shù) (syntax tree),并判斷源程序在結(jié)構(gòu)上是否正確??梢灶?lèi)比為英語(yǔ)單詞組合成句子。

e2975ab2-7261-11ee-939d-92fbcf53809c.png

語(yǔ)義分析:使用語(yǔ)法樹(shù)和符號(hào)表中的信息來(lái)檢查源程序是否和語(yǔ)言定義的語(yǔ)義一致,如:類(lèi)型檢查、上下文相關(guān)分析等??梢灶?lèi)比為檢查英語(yǔ)句子是否有意義(如:Dog is cat,這種句子語(yǔ)法上沒(méi)問(wèn)題但語(yǔ)義上是不對(duì)的)。它同時(shí)也收集標(biāo)識(shí)符的屬性信息,并把這些信息存放在語(yǔ)法樹(shù)或符號(hào)表中,以便在后面中間代碼生成過(guò)程中使用。 中間代碼:一種中間表示方式,所含信息可以推導(dǎo)出有關(guān)程序的全部事實(shí)。同一種中間代碼可以復(fù)用優(yōu)化器邏輯,并直接使用相關(guān)的編譯器后端功能,使得各環(huán)節(jié)更獨(dú)立更利于擴(kuò)展。從結(jié)構(gòu)上有圖 IR、線性 IR 和混合 IR。 編譯器后端部分主要是與目標(biāo)語(yǔ)言相關(guān),包含代碼優(yōu)化器和目標(biāo)代碼生成器,這部分和生成 CG 關(guān)系不大不作更多原理闡述,有興趣的同學(xué)可以了解一下LLVM、Graalvm。

e2a1a256-7261-11ee-939d-92fbcf53809c.png

有了基本的編譯原理知識(shí)后,來(lái)看看通過(guò)源碼生產(chǎn) CG 的過(guò)程:

e2b09126-7261-11ee-939d-92fbcf53809c.png

可以發(fā)現(xiàn)分析其實(shí)就是編譯器前端流程的復(fù)現(xiàn),其中 AST、CFG 和 CG 都算作是圖 IR?,F(xiàn)成的源碼分析工具有Antlr/javaparser/soot 等。下面以 javaparser 工具為例簡(jiǎn)要說(shuō)明生成流程: 步驟一:導(dǎo)入需要分析項(xiàng)目的源碼和依賴(lài)包,并使用工具解析

e2c34276-7261-11ee-939d-92fbcf53809c.png

步驟二:使用 visit 模式獲取所有方法和調(diào)用方法信息

e2cdb13e-7261-11ee-939d-92fbcf53809c.png

e2df5d8a-7261-11ee-939d-92fbcf53809c.png

步驟三:選定一個(gè)起始方法,基于方法和調(diào)用關(guān)系生成 CG 優(yōu)點(diǎn):語(yǔ)言無(wú)關(guān),擴(kuò)展性強(qiáng)。缺點(diǎn):精度較差需要調(diào)優(yōu);分析速度較慢;非 java 語(yǔ)言工具掌握有一定難度。

2)基于字節(jié)碼生成

針對(duì)語(yǔ)言特性進(jìn)行定制開(kāi)發(fā)能夠更快獲取成果。Java 的字節(jié)碼其實(shí)也可以看做一種線性 IR,分析的流程也是類(lèi)似的,同時(shí) java 有大量的字節(jié)碼操作工具(ASM、Javaassit、bcel 等),使得字節(jié)碼解析變得很容易。 基本思路是從.class 文件中獲取類(lèi)、方法簽名信息,再?gòu)淖止?jié)碼中找到 invoke 指令得到調(diào)用方法簽名,基于這兩個(gè)信息就可以構(gòu)建出 CG。同時(shí)由于字節(jié)碼中包含了方法的完整簽名,因此不用像源碼分析那樣需要要引入依賴(lài) jar 一并分析,因此在分析效率上會(huì)快很多。

e2ef58a2-7261-11ee-939d-92fbcf53809c.png

下面用 bcel 工具為例簡(jiǎn)要說(shuō)明生成流程: 步驟一:解析目標(biāo)項(xiàng)目,可以直接使用打包好的 jar 包

e304e3e8-7261-11ee-939d-92fbcf53809c.png

步驟二:使用 visit 模式獲取所有方法和調(diào)用方法信息

e31bd1ca-7261-11ee-939d-92fbcf53809c.png

e32c703e-7261-11ee-939d-92fbcf53809c.png

步驟三:選定一個(gè)起始方法,基于方法和調(diào)用關(guān)系生成 CG 優(yōu)點(diǎn):分析精確度高;解析速度快。缺點(diǎn):語(yǔ)言相關(guān),擴(kuò)展性差。 PS:推薦一個(gè) idea 插件call graph,基于 idea 的psi能力實(shí)現(xiàn),在項(xiàng)目代碼量不大的情況下分析還是挺精確的。

e32ff678-7261-11ee-939d-92fbcf53809c.png

3.2 動(dòng)態(tài)程序分析

也稱(chēng)運(yùn)行時(shí)程序分析,一般基于 agent 方式實(shí)現(xiàn),這里暫不展開(kāi)講解,后續(xù)有機(jī)會(huì)再單獨(dú)寫(xiě)一篇文章講述原理。有興趣的同學(xué)可以試用一下AppMap。

e33a503c-7261-11ee-939d-92fbcf53809c.png

4. 有哪些應(yīng)用場(chǎng)景?

場(chǎng)景 1:變更風(fēng)險(xiǎn)識(shí)別

背景:識(shí)別基礎(chǔ)設(shè)施變更、系統(tǒng)外部變更以及系統(tǒng)內(nèi)部變更帶來(lái)的風(fēng)險(xiǎn)。

e33e7a2c-7261-11ee-939d-92fbcf53809c.png

場(chǎng)景 2:精準(zhǔn)測(cè)試

背景:精準(zhǔn)測(cè)試定義為利用技術(shù)手段對(duì)測(cè)試過(guò)程產(chǎn)生的數(shù)據(jù)進(jìn)行采集存儲(chǔ),計(jì)算,匯總,可視化最終幫助團(tuán)隊(duì)提升軟件測(cè)試的效率、并對(duì)項(xiàng)目整體質(zhì)量進(jìn)行改進(jìn)和優(yōu)化的這一系列操作。詳細(xì)的解釋可以閱讀精準(zhǔn)測(cè)試二三談。?

e354bdfa-7261-11ee-939d-92fbcf53809c.png

場(chǎng)景 3:架構(gòu)守護(hù)

背景:在架構(gòu)治理上,我們面對(duì)諸多挑戰(zhàn) 1)設(shè)計(jì)與實(shí)現(xiàn)不匹配。設(shè)計(jì)的軟件架構(gòu)與真正實(shí)施后的架構(gòu),存在著巨大的差異。而這個(gè)差異,往往需要編碼上線、乃至一段時(shí)間之后才能發(fā)現(xiàn); 2)沒(méi)有規(guī)范 / 不遵守規(guī)范。作為一個(gè)資深的開(kāi)發(fā)人員,我們制定了一系列的規(guī)范,但是沒(méi)有多少團(tuán)隊(duì)人員愿意遵守; 3)代碼量巨大,難以識(shí)別問(wèn)題。一個(gè)由十幾個(gè)或者幾十個(gè)微服務(wù)創(chuàng)建的系統(tǒng),往往難以快速發(fā)現(xiàn)它們之間錯(cuò)綜復(fù)雜的關(guān)系; 4)架構(gòu)模型的每個(gè)層級(jí)都可能出錯(cuò)。如服務(wù)間 API 耦合、代碼間耦合、數(shù)據(jù)庫(kù)耦合等等; 5)架構(gòu)師、開(kāi)發(fā)人員自身缺乏豐富的經(jīng)驗(yàn)。知道有問(wèn)題,但是說(shuō)不出來(lái)哪有問(wèn)題,也不知道如何改進(jìn)。 因此,我們需要一個(gè)平臺(tái) / 工具,來(lái)幫助我們解決這些問(wèn)題。

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 分析器
    +關(guān)注

    關(guān)注

    0

    文章

    93

    瀏覽量

    12936
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4421

    瀏覽量

    67822
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51896
  • 軟件架構(gòu)
    +關(guān)注

    關(guān)注

    0

    文章

    64

    瀏覽量

    10649
  • 自動(dòng)化工具
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    1765

原文標(biāo)題:淺析 “代碼可視化”

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    何謂單片機(jī)編程的可視化?

    何謂單片機(jī)編程的可視化?可視化編程就是提供給用戶(hù)可視化的器件模塊配置界面使用戶(hù)在不用關(guān)心具體器件工作原理和設(shè)置的情況下直接生成所要配置的器件初始
    發(fā)表于 07-08 16:53

    單片機(jī)可視化編程

    單片機(jī)的可視化編程是不是指在環(huán)境下避開(kāi)復(fù)雜的指令編寫(xiě)而通過(guò)圖形的方式產(chǎn)生指令代碼?-在可視化的條件下是否可以觀察到仿真的結(jié)果?是的。不過(guò)仿真的結(jié)果不能夠直接觀察到,而要通過(guò)將生成的代碼
    發(fā)表于 07-08 16:56

    可視化MES系統(tǒng)軟件

    和客戶(hù)都會(huì)造成損失,為了更好的滿(mǎn)足客戶(hù)需求、實(shí)現(xiàn)企業(yè)信息,目前企業(yè)制造過(guò)程中主要還存在以下需求:(1)數(shù)據(jù)可視化方面。MES系統(tǒng)軟件之所以能有效的監(jiān)控整個(gè)車(chē)間的生產(chǎn)過(guò)程,主要是通過(guò)對(duì)制造過(guò)程中
    發(fā)表于 11-30 19:55

    如何把AD中非可視化區(qū)域物件移到可視化區(qū)域?

    AD中非可視化區(qū)域物件怎么移到可視化區(qū)域???
    發(fā)表于 09-10 05:36

    python數(shù)據(jù)可視化的方法和代碼

    Python數(shù)據(jù)可視化匯總
    發(fā)表于 10-14 14:59

    基于STM的可視化門(mén)禁系統(tǒng)

    基于STM的可視化門(mén)禁系統(tǒng)
    發(fā)表于 03-07 09:49

    基于stm的可視化門(mén)禁系統(tǒng)

    基于stm的可視化門(mén)禁系統(tǒng)
    發(fā)表于 03-11 09:23

    Python數(shù)據(jù)可視化

    Python數(shù)據(jù)可視化:網(wǎng)易云音樂(lè)歌單
    發(fā)表于 07-19 08:30

    三維可視化的應(yīng)用和優(yōu)勢(shì)

    的整體態(tài)勢(shì)。  比如設(shè)備在偏僻區(qū)域(海下、深山、沙漠、分布全國(guó)各地等),可以實(shí)現(xiàn)無(wú)人檢測(cè),無(wú)需消耗人力物力進(jìn)行檢測(cè),通過(guò)三維數(shù)據(jù)的分析可以直觀的探測(cè)出設(shè)備狀態(tài)和產(chǎn)能?! ≡O(shè)備運(yùn)行可視化:根據(jù)圖像
    發(fā)表于 12-02 11:52

    常見(jiàn)的幾種可視化介紹

    說(shuō)說(shuō)常見(jiàn)的幾種可視化一、信息可視化信息可視化就是對(duì)抽象數(shù)據(jù)進(jìn)行直觀視覺(jué)呈現(xiàn)的研究,抽象數(shù)據(jù)既包含數(shù)值數(shù)據(jù),也包含非數(shù)值數(shù)據(jù)如文本信息、地圖信息等,它們可通過(guò)利用圖形圖像處理、人機(jī)交互、人工智能的技術(shù)
    發(fā)表于 07-12 07:49

    基于VSCode的嵌入式開(kāi)發(fā)的可視化代碼調(diào)試方法分享

    一種基于VSCode的嵌入式開(kāi)發(fā)的可視化代碼調(diào)試方法關(guān)鍵字: VSCode、gdbserver、可視化調(diào)試、嵌入式開(kāi)發(fā)案例簡(jiǎn)述隨著本組業(yè)務(wù)的擴(kuò)大,新進(jìn)組員的增多,在開(kāi)發(fā)定制或者排查基線的問(wèn)題時(shí)候
    發(fā)表于 12-14 07:54

    如何在Ubuntu下實(shí)現(xiàn)可視化代碼跟蹤調(diào)試

    目錄一、在Ubuntu下實(shí)現(xiàn)可視化代碼跟蹤調(diào)試1.1 安裝VSCode1.2 配置調(diào)試和編譯文件一、在Ubuntu下實(shí)現(xiàn)可視化
    發(fā)表于 12-14 07:02

    keras可視化介紹

    , 0.24421487748622894]5 訓(xùn)練過(guò)程的可視化:keras + Tensorboard Tensorboard提供訓(xùn)練過(guò)程可視化的功能,是通過(guò)keras的回調(diào)函數(shù)來(lái)實(shí)現(xiàn)的。 # 截取部分
    發(fā)表于 08-18 07:53

    可視化技術(shù)有哪些

    完整的地理空間信息可視化概念主要包括科學(xué)計(jì)算可視化、數(shù)據(jù)可視化和信息可視化。可視化技術(shù)作為解釋大量數(shù)據(jù)最有效的手段而率先被科學(xué)與工程計(jì)算領(lǐng)域
    發(fā)表于 02-05 09:09 ?4181次閱讀

    管線可視化管理怎么實(shí)現(xiàn)呢?

    無(wú)論是城市管線還是社區(qū),商場(chǎng),大廈里的管線,想要實(shí)時(shí)檢測(cè)到管線的情況怕是有難度。如何通過(guò)物聯(lián)網(wǎng)和互聯(lián)網(wǎng)技術(shù)實(shí)現(xiàn)管線可視化管理是解決問(wèn)題的根本。 智慧電力可視化系統(tǒng)構(gòu)建發(fā)電、輸電、變電、配電、用電
    發(fā)表于 03-11 14:36 ?1699次閱讀