JaCoCo助您毀滅線上殭屍程式碼
來源:京東技術 導讀
隨著需求不斷迭代,業務系統的業務程式碼突飛猛進,在你自豪於自己的程式碼量產出很高時,有沒有回頭看看線上真正的客戶使用量又有多少呢??趕快利用jacoco探針深入分析一行行程式碼,讓您看到線上功能執行最真實的一面,參照程式碼覆蓋情況針對性下線和刪除殭屍程式碼,提升產研效能,降低維護成本!
導讀
隨著需求不斷迭代,業務系統的業務程式碼突飛猛進,在你自豪於自己的程式碼量產出很高時,有沒有回頭看看線上真正的客戶使用量又有多少呢?
分析原因
實際上多數業務系統都會存在這個通病:線上殭屍程式碼
•可能是前期產品對業務場景沒有分析到位
採取措施
4.1 依賴jacoco.ant
<dependency> <groupId>org.jacoco</groupId> <artifactId>org.jacoco.ant</artifactId> <version>0.8.3</version></dependency><dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.9.9</version> </dependency>
4.2 賦能Rest請求
新增一個url地址,透過ant執行dump task用於Dump Coverage檔案,避免使用配置檔案且同時需要運維同事幫忙操作的問題。
public class CoverageController {
public Result<Boolean> dumpCoverageFile() {
DumpTask dumpTask = new DumpTask();
// dump檔案地址
dumpTask.setDestfile(new File("/export/Data/coverage/code-cover.exec"));
// 多次dump追加形式
dumpTask.setAppend(true);
// 選一個空閒介面即可
dumpTask.setPort(8840);
// 預設本機
dumpTask.setAddress("127.0.0.1");
dumpTask.execute();
return Result.succeed(true);
}
}
4.3 嵌入jacocoagent
java啟動引數新增如下:存在多個javaagent時比如pfinder之類在其後新增即可。
#decompress file 解壓依賴,獲得jacocoagent.jar包,避免需要聯絡運維上傳包jar -xvf $BASEDIR/lib/org.jacoco.agent-0.8.3.jar
-javaagent:$BASEDIR/bin/jacocoagent.jar=includes=com.jdwl.*,output=tcpserver,port=8840,address=127.0.0.1 -Xverify:none
圖1.
premain方法中可以透過Instrumention的addTransformer新增ClassFileTransformer介面的實現類,該介面中僅有一個方法如下,透過實現ClassTransformer我們可以定義自己的程式碼增強方法。可以使用ASM,亦可以使用javasist等高階類庫。
相關實踐:Diving Into Bytecode Manipulation: Creating an Audit Log With ASM and Javassist | New Reli(https://newrelic.com/blog/best-practices/java-performance-monitoring)
4.4 JDOS資源預留
資源預留/export目錄自定義處理()
圖2.
增加配置指令碼 /home/admin/clean_export.sh(指令碼預設內容上增加了 && $9 != "coverage")
輸出的檔案路徑為/export/Data/coverage/code-cover.exec
ls -lh /export | awk 'NR >1 {print}' | awk '{if ($9 != "Data") print $9}' | xargs -i /bin/rm -rf /export/{} > /dev/null 2>&1
ls -lh /export/Data | awk 'NR >1 {print}' | awk '{if ($9 != "jdos.jd.com" && $9 != "coverage") print $9}' | xargs -i /bin/rm -rf /export/Data/{} > /dev/null 2>&1
圖3.
4.5 下載cover檔案
圖4.
cd /export/Data/coverage
curl -s up.bastion.jd.com/file/up | bash
4.6 分析程式碼
綠色覆蓋(活躍程式碼)
圖5.
圖6.
Reference
1.JaCoCo - Documentatio()
2.javaagent使用指南 - rickiyang - 部落格園 (cnblogs.com)(https://www.cnblogs.com/rickiyang/p/11368932.html)
3.使用Jacoco統計服務端程式碼覆蓋情況實踐 - M104 - 部落格園 (cnblogs.com)(https://www.cnblogs.com/ccoder/p/15369719.html#4946710)
4.Diving Into Bytecode Manipulation: Creating an Audit Log With ASM and Javassist | New Reli(https://newrelic.com/blog/best-practices/java-performance-monitoring)
5.1 需求交付效率提升
5.1.1縮短需求交付週期
圖7.
5.1.2降低開發階段停留時長
2023/1月落地後,開發階段時長縮短到 4天 以下(由 4.54 縮短至 3.11,縮短約31%),呈明顯縮短趨勢!
圖8.
5.2 人效提升
5.2.1降低研發認知負荷
平均系統重複程式碼塊數從 31 下降至 27 左右,降低了系統維護成本!
圖9.
5.2.2提升人均需求吞吐量
自從2023/1月落地實踐後,人均需求的吞吐量也大幅度提升,從之前 1.5 提升到 2.5 左右。
圖10.
5.3 過程質量提升
5.3.1減少自動化bug數
隨著2023年1月以來的不斷實踐,自動化發現的bug數也逐月遞減,從11個/月 -> 9個/月 -> 6個/月 -> 5個/月。
圖11.
5.3.2提升單測覆蓋率
自從2023年1月落地實踐後,隨著刪除掉大量殭屍程式碼,整體程式碼總量在減少,無效程式碼被無情下線,同時提升了單測程式碼覆蓋率,呈上升趨勢!單測行覆蓋率從 51.33% -> 52.28%,提升系統質量!
趕快利用jacoco探針深入分析系統的一行行程式碼,看到線上功能執行最真實的一面,參照程式碼的覆蓋情況,針對性下線和刪除殭屍程式碼,讓系統瘦身,讓研發減負!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2992540/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 物聯網變身黑暗森林:殭屍網路、守護者、毀滅者層出不窮
- 硬碟資料毀屍滅跡的方法(轉)硬碟
- 殭屍程式
- 什麼是殭屍程式,如何找到並殺掉殭屍程式?
- fork和殭屍程式
- Linux 殭屍程式Linux
- 【系統】 殭屍程式
- 殺死殭屍程式
- 殭屍程式,孤兒程式
- 殭屍程式和孤兒程式
- Linux中殭屍程式是什麼意思?怎麼檢視殭屍程式?Linux
- 檢視 Linux 殭屍程式Linux
- Linux殭屍程式處置Linux
- Perl程式:殭屍程式和孤兒程式
- 子程式、孤兒程式,殭屍程式, init程式
- Linux 中殭屍程式詳解Linux
- Go Exec 殭屍與孤兒程式Go
- Linux 系統中殭屍程式Linux
- Linux如何殺掉殭屍程式Linux
- 檢視並殺死殭屍程式
- Linux系統殭屍程式詳解Linux
- 毀滅程式設計師的15個障礙程式設計師
- 什麼是殭屍程式以及如何處理
- iOS殭屍物件之研究iOS物件
- 毀滅程式設計師效率的 15 個障礙程式設計師
- Python 3 正在毀滅 PythonPython
- Linux 效能優化之 CPU 篇 ----- 殭屍程式Linux優化
- 植物大戰殭屍,用QT注入程式碼,AT&T彙編語法QT
- Linux程式管理、程式建立、執行緒實現、殭屍程式Linux執行緒
- 什麼是殭屍網路
- Unity 植物大戰殭屍(一)Unity
- 孤兒程序和殭屍程序
- 檢測並消滅“巖羚羊”這種 Android 平臺上的殭屍網路欺詐Android
- 關於LINUX殭屍程式的出現和原理Linux
- hp-unix 殭屍程式導致系統崩潰
- 「毀滅戰士3」原始碼就是“保持簡潔”的證明原始碼
- 可笑!慕課網涉嫌抄襲開源專案至今沒有道歉,而且在偷偷的“毀屍滅跡”
- Mirai殭屍網路重出江湖AI