主頁 >  其他 > 只懂黑盒測驗也能學會代碼覆寫率分析和精準測驗

只懂黑盒測驗也能學會代碼覆寫率分析和精準測驗

2021-10-16 08:42:58 其他

在這里插入圖片描述
今天文章中我們給大家介紹覆寫率統計及覆寫率分析,

常見覆寫率統計工具

  • emma
  • cobertura
  • jacoco

emma 與 cobertura 是為單元測驗而設計的覆寫率統計,jacoco 與 emma 同屬于一家公司,但是是為了更廣泛的覆寫率統計而設計的工具,

Jacoco

jacoco 的檔案中有個 mission 章節,里面對 jacoco 的定位描述的很好,原文的大意是說其他的工具沒有得到積極有效的維護,而且其他的工具都是為了單一任務而設計,他們不是為了 “集成” 而生,從這一點上,我們就可以看出 jacoco 的設計理念,

得益于 jacoco 的設計理念,以及良好的 api 設計,它可以輕松的與已有的工具集成,甚至進行平臺化,它也可以同時用于單元測驗與集成測驗,所以是一款非常優秀的覆寫率統計工具,很多公司的精準測驗,都重度依賴了 jacoco,

覆寫率分析原理

要了解代碼覆寫率的統計原理,我們就需要去深入了解 jvm 的機制,這方面的知識是 java 領域的高端進階知識,限于篇幅,我們只講解下大概的原理,完整內容請參考 VM 虛擬機系列的書籍,以及 newrelic 早年發布的若干代碼插樁的資料,

簡單說下原理,java 源代碼會被 javac 編譯為 class 檔案,class 檔案保存了 class 的基本資訊與 jvm 的指令集,java 的底層 runtime,也就是 jvm 在決議 class 的時候,會把檔案格式的 class 讀取到記憶體并運行,android 也是借鑒了這一整套的設計理念,android 上的 runtime 其實是 dalvik 與 art,

當我們要統計代碼覆寫率的時候,就需要在代碼的執行路徑上加入探針分析,通常是在讀取類的時候,在關鍵的指令塊的出口與入口增加標記,當指令塊被執行后,就會命中探針并完成記錄,

在這里插入圖片描述

要修改最底層的 jvm 位元組碼往往是比較麻煩的,需要精通 jvm 的各種指令以及 java class 結構,這方面的處理目前已有有非常成熟的開源專案可以做到了,如下就是一些知名的位元組碼修改工具,

  • ASM
  • JavaAssist
  • ByteBuddy、BTrace、JVM-Sandbox

其中 ASM 是所有位元組碼操作的底層基礎,是最底層的位元組碼修改工具,其他工具是它之上的一些高級封裝,借助于這些工具與 JVM 自身的一些除錯特性,我們就可以對 jvm 代碼或者行程進行便捷的操縱了,

插樁方式

在這里插入圖片描述

插樁方式有很多種,常見的方式如下:

  • 源代碼插樁:offline 插樁,支持 android
  • 位元組碼插樁:offline 插樁,支持 android
  • java agent 模式:脫離代碼在運行時插樁,on the fly 模式

jacoco 支持位元組碼插樁與 javaagent 這兩種插樁方式,也就是就算沒有源代碼也可以統計到覆寫率資料,但是最后分析的時候,還是要結合源代碼才能獲得更多的覆寫率細節資料,畢竟覆寫率的統計,并不是只是簡單的覆寫率資料本身的指標高低,

jacoco的作業方式

jacoco 支持四種作業模式

  • file:行程結束的時候在本地生成檔案
  • tcpserver:開啟埠等待客戶端獲取覆寫率
  • tcpclient:主動把覆寫率資料發送出去
  • none:不生成覆寫率

很多人都會使用 file 模式,但是 tcp server 模式才是最易用的,因為不需要申請服務器的檔案訪問權限就可控制覆寫率資料,你可以根據自己公司的部署情況選擇合適的作業模式,

on the fly 插樁模式

on the fly 插樁模式是使用最多的,首先需要在你的被測 java 程式啟動的時候,加入 jvm 的一些 javaagent 引數,

-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]destfileoutput:file、tcpserver、tcpclient、noneaddressport

你可以自己設定適合的作業模式,

離線插樁模式,適合 android 的覆寫率統計,需要借助于 maven、gradle 等構建工具的 instrument 指令,

on the fly 插樁模式

jacoco-cli 是 jacoco 的一個組件,可以在不依賴 maven、gradle 構建工具的情況下完成對代碼的分析,主要用于 tcpserver 作業模式下,

用法如下

java -jar jacococli.jar dump [--address <address>] --destfile <path> [--help] \[--port <port>] [--quiet] [--reset] [--retry <count>]

專案演練

這是學院里的一個動手演練的小場景,統計 jmeter 工具的啟動覆寫率

project_root=/Users/seveniruby/temp/java_2/jacoco/apache-jmeter-5.2.1jacoco_cli_jar=org.jacoco.cli-0.8.6-20200329.124045-45-nodeps.jarjava -javaagent:org.jacoco.agent-0.8.6-20200329.124039-45-runtime.jar \  -jar $project_root/bin/ApacheJMeter.jar#退出jmeter#生成覆寫率報告java -jar $jacoco_cli_jar report jacoco.exec \--classfiles "$project_root/bin/ApacheJMeter.jar" \--classfiles $project_root/lib/ext/ApacheJMeter_http.jar \--html jmeter_coverage/#生成帶有源代碼的覆寫率報告 java -jar $jacoco_cli_jar report  jacoco.exec  \ --classfiles "$project_root/bin/ApacheJMeter.jar" \ --classfiles $project_root/lib/ext/ApacheJMeter_http.jar \ --html jmeter_coverage/ --sourcefiles ~/projects/jmeter/src/#生成xml報告java -jar $jacoco_cli_jar report jacoco_tcpserver2.exec  \--classfiles "$project_root/bin/ApacheJMeter.jar" \--classfiles $project_root/lib/ext/ApacheJMeter_http.jar \--xml  jmeter_coverage_tcpserver2/jacoco.xml

完整代碼請參考學員論壇中的課程帖中的源代碼,

匯入覆寫率

sonarqube 可以分析 jacoco 的 exec 檔案與 xml 檔案,并自動匯入覆寫率,exec 檔案的分析后續會放棄支持,主支持 xml 檔案的分析,

 sonar-scanner   \
  -Dsonar.host.url=http://sonarqube.testing-studio.com:9000   \
  -Dsonar.login=$SONARQUBE_TOKEN   \
  -Dsonar.projectKey=jmeter   \
  -Dsonar.projectVersion=1.0  \
  -Dsonar.coverage.jacoco.xmlReportPaths=$PWD/jmeter_coverage_tcpserver2/jacoco.xml \
  -Dsonar.projectBaseDir=/Users/seveniruby/projects/jmeter/ \
  -Dsonar.java.binaries=/Users/seveniruby/projects/jmeter/

匯入覆寫率

在這里插入圖片描述

可以通過如下引數限定要分析代碼的范圍,通常是指明要覆寫的 package 范圍

  • sonar.sources
  • sonar.inclusions

匯入覆寫率

sonarqube 可以智能分析新老版本之間的新增代碼的覆寫率,這點非常不錯,以前一些分析代碼 diff 的作業就節省了,他的代碼分析也比較智能,簡單的換行并不會干擾代碼 diff 的分析范圍,

在這里插入圖片描述

通過覆寫率資料

sonarqube 支持兩種通用的測驗資料匯入

  • 通用覆寫率資料:sonar.coverageReportPaths
  • 通用測驗執行資料:sonar.testExecutionReportPaths

這樣方便與各種框架進行集成,也方便測驗工程師二次定制,

通用測驗資料模板,

在這里插入圖片描述

通用覆寫率資料模板

在這里插入圖片描述

在 sonarqube 的 scanner 分析中,加入對應的配置引數即可匯入通用測驗資料,

通用測驗資料匯入的常見用途

  • 將各種測驗工具的測驗報告轉換為 sonarqube 支持的格式從而匯入平臺
  • 將各種覆寫率工具的覆寫率報告轉換為標準格式匯入平臺
  • 根據需求對差異 diff 覆寫率進行定制,比如除了對新增代碼做覆寫,還要對使用了新增代碼的依賴代碼也做分析

代碼diff方法

代碼的 diff 分析是一個比較大的話題,diff 只是對代碼的最簡單的一個分析策略,要想深入的理解代碼,我們還需要更進一步的分析代碼的呼叫鏈,我們先看最簡單的代碼 diff 分析工具,

  • 代碼 diff 分析工具
  • JGit:git 分析工具
  • JavaParser:語法分析
  • ASM:讀取位元組碼
  • javap:jdk 自帶位元組碼分析工具

下面是測驗資料,對于做【軟體測驗】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!
在這里插入圖片描述

最后: 可以在公眾號:傷心的辣條 ! 免費領取一份216頁軟體測驗工程師面試寶典檔案資料,以及相對應的視頻學習教程免費分享!,其中包括了有基礎知識、Linux必備、Shell、互聯網程式原理、Mysql資料庫、抓包工具專題、介面測驗工具、測驗進階-Python編程、Web自動化測驗、APP自動化測驗、介面自動化測驗、測驗高級持續集成、測驗架構開發測驗框架、性能測驗、安全測驗等,

學習不要孤軍奮戰,最好是能抱團取暖,相互成就一起成長,群眾效應的效果是非常強大的,大家一起學習,一起打卡,會更有學習動力,也更能堅持下去,你可以加入我們的測驗技術交流扣扣群:914172719(里面有各種軟體測驗資源和技術討論)

喜歡軟體測驗的小伙伴們,如果我的博客對你有幫助、如果你喜歡我的博客內容,請 “點贊” “評論” “收藏” 一鍵三連哦!


好文推薦

轉行面試,跳槽面試,軟體測驗人員都必須知道的這幾種面試技巧!

面試經:一線城市搬磚!又面軟體測驗崗,5000就知足了…

面試官:作業三年,還來面初級測驗?恐怕你的軟體測驗工程師的頭銜要加雙引號…

什么樣的人適合從事軟體測驗作業?

那個準點下班的人,比我先升職了…

測驗崗反復跳槽,跳著跳著就跳沒了…

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/317890.html

標籤:其他

上一篇:Web自動化測驗的理解

下一篇:非科班能不能轉Android?入殮師轉行到Android開發都可以!

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more