JAVA中什麼是埋點,應用於什麼場景?

個人徵信小常識


一個非常好的問題。我是工作多年的Web應用架構師,來回答一下這個問題。歡迎關注我,瞭解更多IT專業知識。


一,埋點是什麼?

埋點是軟件開發中的一個術語,用於採集數據或者驗證代碼執行過程,不只是Java才有,各種開發語言中都有成熟的SDK開發包和框架使用。

埋點的場景有多種,可以在程序執行時,還有在單元測試時。可以在服務器,也可以在客戶端。可以收集程序運行數據,也可以收集用戶數據。


二,單元測試時的埋點

重點補充單元測試時用到的埋點技術。

單元測試的目的是測試被測函數。但是被測函數往往不是那麼“簡單”,首先有入參,其次要依賴使用其它的變量、函數、數據、還有第三方接口,等等。

被測試函數的代碼執行路徑也會有多個,比如if-else,異常處理。

如何模擬不同的場景,控制被測函數的運行依賴環境,驗證運行過程和返回結果是否符合預期?以Java開發為例,使用JUnit + Mockit,一個典型的單元測試組成如下:

1. mock模擬依賴的數據、變量、函數、第三方接口,等等

2. stub打樁埋點,設置期望的執行過程、入參、出參等信息。

3. verify驗證代碼執行過程,比如埋點的函數被調用了1次,入參是abc。

4. doThrow設置異常拋出,驗證異常發生時的處理邏輯是否符合預期。


三,單元測試的埋點示例

舉個例子,被測試函數parseMsg(),讀取ActiveMQ消息內容,轉換成JSONObject

1,模擬入參TestMessage

2,在getText()函數處打樁埋點,設置返回值

3,調用被測試函數,驗證getText()函數被調用了一次

4,驗證異常發生時,處理邏輯是否正確


急速馬力快de源碼客


一,什麼是埋點

首先埋點並不是java中才有埋點,那什麼是埋點呢?埋點通俗的講就是通過記錄用請求以及結果、時間等數據來實現快速、便捷、準確分析統計。

二,埋點的場景

埋點場景可以分為2大類:

1、客戶端埋點,一般指的是移動端或者web客戶端、桌面端,常用於用戶行為的分析和監控。通常我們會考慮,流量、產品、用戶這幾大指標,用於產品決策。

2、服務端埋點,在很多情況下我們的java系統都是純底層應用,這種情況最典型的就是通過對接口的埋點來進行請求、結果、異常、耗時等全鏈路的監控分析,特別是微服務架構的應用,當然這種情況一般都不需要業務開發人員來進行埋點,通常都是公司框架內置了埋點。當然,在業務上服務端也可以對業務行為進行埋點,這樣我們就可以行程自身的業務大盤。

三,埋點方式

1、客戶端埋點,收集用戶行為的場景,這種情況我們一般推薦第三方的統計工具,比如growingio、talking data等等。

2、服務端埋點,可以有以下幾種方式:

2.1、硬編碼的方式,就是直接人肉方式在接口內部打日誌,這種但是極不推薦,可維護性、通用性太差;

2.2、通過aop+註解的方式,打成通用二方包,這種方式我覺得還是比較優雅的,你需要對哪些接口進行埋點,需要輸出哪些內容都可以通過註解來指定;

2.3、字節碼插樁方式,這種方式簡單的說就是在class文件中插入一段新的代碼,行程一份新的class從而實現無侵入埋點;



懂點代碼的大叔


所謂“埋點”,是數據採集領域(尤其是用戶行為數據採集領域)的術語,指的是針對特定用戶行為或事件進行捕獲、處理和發送的相關技術及其實施過程。

埋點的技術實質,是先監聽軟件應用運行過程中的事件,當需要關注的事件發生時進行判斷和捕獲,然後獲取必要的上下文信息,最後將信息整理後發送至服務器端。所監聽的事件,通常由操作系統、瀏覽器、APP框架等平臺提供,也可以在基礎事件之上進行觸發條件的自定義(如點擊某一個特定按鈕)。一般情況下,埋點可以通過監測分析工具提供的SDK來進行編程實現。

埋點的業務意義顯而易見,即幫助定義和獲取分析人員真正需要的業務數據及其附帶信息。在不同場景下,業務人員關注的信息和角度可能不同。典型的應用場景有面向數字營銷領域的分析,以及面向產品運營領域的分析。前者注重來源渠道和廣告效果,後者更在意產品本身流程和體驗的優化。兩者各有側重,也可以有一些交叉。所以,對於不同的項目和分析目的,應當設計不同的埋點方案。

近年來,埋點的方法論上也出現了一些業界新趨勢,如“無埋點”技術。所謂“無埋點”,是指不再使用笨拙的採集代碼編程來定義行為採集的觸發條件和後續行為,而是通過後端配置或前端可視化圈選等方式來完成關鍵事件的定義和捕獲,可以大幅提升埋點工作的效率和易用性。在“無埋點”的場景下,數據監測工具一般傾向於在監測時捕獲和發送儘可能多的事件和信息,而在數據處理後端進行觸發條件匹配和統計計算等工作,以較好地支持關注點變更和歷史數據回溯。當然,即便是“無埋點”技術,也仍然需要部署數據採集基礎SDK(又稱基礎代碼)。


鬥戰勝佛


Java的埋點是為了測試編寫的程序在某一輸出處是否與預期相符合而插入程序中的編碼。埋點的作用是驗證程序的輸出,所以應用場景有:1、程序員編程過程中內測自己的程序,很多測試驅動開發開發流程中程序員都這樣做。2、白盒測試中,測試工程師會在程序中插入埋點,去驗證程序是否達到預期。3、有時候程序發生了問題,開發人員找不到原因,這時候就會在程序中插入很多埋點,去找到分析出錯的地方和原因。


分享到:


相關文章: