




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 個人知識管理平臺下共享資源的個性化推薦個人知識管理平臺下共享資源的個性化推薦 王蕾王蕾 2013 Sina Weibo.JAVA代碼覆蓋工具 大綱大綱代碼覆蓋的意義代碼覆蓋的意義1 JAVAJAVA常用常用覆蓋工具2工具的工作原理工具的工作原理32實例與問題實例與問題4 3代碼覆蓋的意義代碼覆蓋的意義p使用目的使用目的n發(fā)現(xiàn)手工/自動化測試的遺漏點,并補充casen作為手工測試、UT及qa自動化測試全面性的衡量標(biāo)準(zhǔn)p使用范圍使用范圍n RD使用衡量單測覆蓋率nQA使用衡量測試覆蓋率p使用方式使用方式n 手工測試中,通過環(huán)境搭建使用覆蓋率工具n持續(xù)集成中,通過hudson插件根據(jù)自動化執(zhí)行情況
2、生成覆蓋率n自動化case開發(fā)中,通過eclipse的覆蓋率插件使用pJAVAJAVA常用覆蓋率工具常用覆蓋率工具n Emma、Cobertura、Jacoco J A V AJ A V A 常 用 覆 蓋 工 具常 用 覆 蓋 工 具jacocojacocoemmaemmacoberturacobertura原理原理使用asm修改字節(jié)碼可以修改Jar文件、class文件字節(jié)碼文件基于jcoverage。基于ASM框架,對class 插樁覆蓋粒度覆蓋粒度方法,類,行,分支和指令覆蓋語句、行、類、基本塊、指令。無分支覆蓋。項目,包,類,方法的語句覆蓋和分支覆蓋插樁插樁支持on-the-fly和o
3、ffline的插樁模式支持on the fly模式和offline采用Offline模式,把統(tǒng)計代碼插入編譯好的.class文件生成報告生成報告在tomcat的catalina.sh中配置-javaagent參數(shù),指出要采集覆蓋率的文件。默認(rèn)在shutdown時才能收集覆蓋率數(shù)據(jù)。html、xml、txt、二進(jìn)制格式報表生成HTML或xml報告缺點缺點1、需要debug版本、并打開build.xml中的debug編譯項2、需要源代碼。必須與插樁的代碼完全一致1、不能捕獲測試案例中未考慮的異常2、關(guān)閉服務(wù)器才能輸出覆蓋率信息的結(jié)果(已有修改源代碼的解決方案,定時輸出結(jié)果)3、輸出結(jié)果之前設(shè)置了h
4、ook,會與某些服務(wù)器的hook沖突。4、Web測試中需要將cobertura.ser文件來回copy性能性能快比較小插入的字節(jié)碼信息更多 執(zhí)行方式執(zhí)行方式Ant/maven命令行maven,ant 或命令行jenkins集成集成生成html報告,直接與hudson集成,展示覆蓋率報告。無趨勢圖無法與hudson集成有現(xiàn)成的插件,有美觀的報告,并有趨勢圖報告實時性報告實時性默認(rèn)在shutdown時收集覆蓋率數(shù)據(jù);可動態(tài)從jvm dump出數(shù)據(jù)??梢圆魂P(guān)閉tomcat 就得到覆蓋率報告默認(rèn)是在shutdown服務(wù)器時才寫覆蓋率文件 覆 蓋 率 基 本 概 念覆 蓋 率 基 本 概 念p行覆蓋率行
5、覆蓋率n度量被測程序的每行代碼是否被執(zhí)行,判斷標(biāo)準(zhǔn)行中是否至少有一個指令被執(zhí)行。p類覆蓋率類覆蓋率n 度量計算class類文件是否被執(zhí)行p分支覆蓋率分支覆蓋率n 度量if和switch語句的分支覆蓋情況。計算一個方法里面的總分支數(shù),確定執(zhí)行和不執(zhí)行的分支數(shù)量。被執(zhí)行(綠色方塊)p方法覆蓋率方法覆蓋率n 度量被測程序的方法執(zhí)行情況,是否執(zhí)行取決于方法中是否有至少一個指令被執(zhí)行。p指令覆蓋指令覆蓋n計數(shù)單元是單個java二進(jìn)制代碼指令。指令覆蓋率提供了代碼是否被執(zhí)行的信息,度量完全獨立源碼格式。p圈復(fù)雜度圈復(fù)雜度n在(線性)組合中,計算在一個方法里面所有可能路徑的最小數(shù)目。缺失的復(fù)雜度同樣表示測試
6、案例沒有完全覆蓋到這個模塊 6覆蓋工具工作過程覆蓋工具工作過程p工作過程工作過程n字節(jié)碼插樁的過程n執(zhí)行測試用例,收集程序執(zhí)行軌跡的信息,將其dump出內(nèi)存n數(shù)據(jù)處理:覆蓋率信息分析計算的過程n數(shù)據(jù)顯示:生成覆蓋率報告的過程 pOn-the-flyOn-the-fly插樁插樁 (java agentjava agent)nJVM中通過 javaagent參數(shù)指定特定的 jar 文件啟動 Instrumentation 的代理程序。 n代理程序在每裝載一個class前判斷是否轉(zhuǎn)換修改class文件,將統(tǒng)計代碼插入.class。測試覆蓋率分析可以在JVM執(zhí)行測試代碼的過程中完成n典型代表:jaco
7、co。 插樁原理插樁原理pOn-the-flyOn-the-fly插樁插樁:Class Loader:Class Loadern自定義classloader實現(xiàn)自己的類裝載策略,在加載到JVM前修改字節(jié)碼n典型代表:emma 8插樁原理插樁原理pOfflineOffline插樁插樁n在測試前先對文件進(jìn)行插樁,然后生成插過樁的class或jar包,測試插過樁的class和jar包后,會生成動態(tài)覆蓋信息到文件,最后統(tǒng)一對覆蓋信息進(jìn)行處理,并生成報告。noffline插樁(Instrumentation)又分為兩種:Repace:修改字節(jié)碼生成新的class文件Inject:在原有字節(jié)碼文件上修改n
8、典型代表: coberturapSource InstrumentationSource InstrumentationnSource Instrumentation(源代碼插樁):把統(tǒng)計代碼插入源代碼并編譯成新的.class文件pRuntime profilingRuntime profilingn應(yīng)用JAVA的JVMPI(虛擬機監(jiān)視程序接口)、JVMTI( Java 虛擬機工具接口)的接口實現(xiàn)。 pOn-the-flyOn-the-fly和和offlineoffline比較比較nOn-the-fly模式更方便簡單進(jìn)行代碼覆蓋分析,無需提前進(jìn)行字節(jié)碼插樁,無需考慮classpath 的設(shè)置n
9、存在如下情況不適合on-the-fly,需要采用offline提前對字節(jié)碼插樁運行環(huán)境不支持java agent部署環(huán)境不允許設(shè)置JVM參數(shù)字節(jié)碼需要被轉(zhuǎn)換成其他的虛擬機如Android Dalvik VM動態(tài)修改字節(jié)碼過程中和其他agent沖突無法自定義用戶加載類 插樁原理插樁原理 插樁方法插樁方法p插樁方法插樁方法n無論是靜態(tài)還是動態(tài),插樁都涉及到修改二進(jìn)制文件的字節(jié)碼問題。p怎么修改字節(jié)碼怎么修改字節(jié)碼n開源工具asm,Javassist等n根據(jù)class規(guī)范修改p何時修改字節(jié)碼何時修改字節(jié)碼nOn the fly模式定義用戶類裝載器,實現(xiàn)自己的類裝載策略定義一個java agent:在
10、類加載到虛擬機前先對其進(jìn)行插樁nOffline模式:在執(zhí)行測試前replaceinject 1.實例實例public static void example() a(); if (cond() b(); else c(); d();2.編譯后的字節(jié)碼編譯后的字節(jié)碼public static example()V INVOKESTATIC a()V INVOKESTATIC cond()Z IFEQ L1 INVOKESTATIC b()V GOTO L2 L1: INVOKESTATIC c()V L2: INVOKESTATIC d()V RETURN3.Probe探針探針探針是字節(jié)指令集能
11、被插入java方法中,探針執(zhí)行行為被記錄,探針不能改變原有代碼的 行為示例該方法控制流圖插入探針前后的對比實例實例-JACOCO-JACOCO原理原理 4.探針插入規(guī)則探針插入規(guī)則探針插入在方法控制流圖的邊上理論上任何一條邊都可以插上probe,但是會引發(fā)大量的指令,增加class file大小,降低插樁后的class執(zhí)行效率探針插入規(guī)則如有 簡單順序指令之間插入一個probe非條件的GOTO指令前插入probe在RETURN,throw等語義退出方法前插入probe反轉(zhuǎn)操作語義,在滿足條件跳轉(zhuǎn)的后方添加probe conditional jump.實例實例-JACOCO-JACOCO原理原理
12、 實例實例-JACOCO-JACOCO配置配置3.通過通過exec文件生成報告文件生成報告 -V4模塊覆蓋率模塊覆蓋率 -engine模塊覆蓋率模塊覆蓋率 - On-the-fly 模式模式build.xml示例示例1. 配置配置on-the-fly在類加載時插樁在類加載時插樁JAVA_OPTS=xxxx -javaagent:/usr/home/wenping1/jacoco/lib/jacocoagent.jar=includes= *2.實時實時 dump出覆蓋率數(shù)據(jù)出覆蓋率數(shù)據(jù)JAVA_OPTS=xxxx -javaagent:/usr/home/wenping1/jacoco/lib
13、/jacocoagent.jar=includes= *,output=tcpserver,port=10001,address=57“ 實例實例-JACOCO-JACOCO配置配置poffline offline 模式模式build.xmlbuild.xml示例示例n配置instrument task n執(zhí)行ant instrument插樁,將插樁后的class部署到測試環(huán)境n收集exec數(shù)據(jù)收集同on-the-flyn產(chǎn)出報告同on-the-fly 代 碼 覆 蓋 問 題代 碼 覆 蓋 問 題p覆蓋率分析碰到的問題覆蓋率分析碰到的問題nqa能力要求較高。建議:對于能力不高
14、的團(tuán)隊,建議一方面提高能力,另一方面暫時讓rd幫忙分析n手工測試中,對于新項目,測試覆蓋率數(shù)據(jù)比較可靠。但對于升級項目,rd只是增改部分函數(shù)和代碼行,這時覆蓋率不能反應(yīng)升級功能的測試效果。 建議:開發(fā)使用diff覆蓋率工具;根據(jù)代碼diff進(jìn)行分析,也是qa的基本功之一n覆蓋率結(jié)果沒有標(biāo)準(zhǔn),不同項目覆蓋率差異較大。建議:目前還是以經(jīng)驗為主,只要經(jīng)過認(rèn)真仔細(xì)的分析來補充case就好,覆蓋率數(shù)據(jù)大小不重要n覆蓋率分析投入大,效果不明顯,不如做好測試設(shè)計和code review。建議:一個是事前的設(shè)計,一個是事后的驗證,兩個不是只能選其一的關(guān)系,而是可以共同存在的。 16Q&A 白盒測試與代
15、碼覆蓋 p插樁技術(shù)插樁技術(shù) 1. 1.字節(jié)碼插樁:字節(jié)碼插樁:On-the-flyOn-the-fly(java agentjava agent)nJVM javaagent指定特定的 jar文件啟動插樁代理程序;裝載class過程中將統(tǒng)計指令插入class文件。 2. 2.字節(jié)碼插樁:字節(jié)碼插樁: On-the-fly(Class Loader)On-the-fly(Class Loader)n自定義classloader實現(xiàn)自己的類裝載策略,在加載到JVM前修改字節(jié)碼 3. 3.字節(jié)碼插樁:字節(jié)碼插樁: OfflineOffline插樁插樁n測試前對class或者jar包插樁,測試插過樁的
16、class和jar包 4. 4.源碼插樁源碼插樁n源代碼插樁:將統(tǒng)計代碼插入源代碼并編譯成新的.class文件 5.Runtime profiling 5.Runtime profilingn應(yīng)用JAVA的JVMPI、JVMTI的接口實現(xiàn)代碼覆蓋技術(shù)及實踐代碼覆蓋技術(shù)及實踐p代碼覆蓋實踐代碼覆蓋實踐 1. 1.工具調(diào)研工具調(diào)研nJaCoCo:支持java agent的on-the-fly,ASM修改字節(jié)碼。確定代碼覆蓋實踐工具。nEMMA:不支持分支覆蓋,支持class Loader的on-the flynCobertura:offline插樁 2. 2.應(yīng)用效果應(yīng)用效果n核心class自動化
17、行覆蓋率70%左右n完成6個核心接口的代碼覆蓋分析,補充55個case,系統(tǒng)框架、存儲策略和接口流程邏輯圖n定性成果:QA深入理解產(chǎn)品,輔助測試范圍和影響定位、bug定位能力等。p字節(jié)碼技術(shù)字節(jié)碼技術(shù)n開源ASM,Javassist字節(jié)碼操作框架n根據(jù)class規(guī)范修改字節(jié)碼pProbeProbe探針探針n探針:字節(jié)指令集,探針記錄執(zhí)行行為,探針不能改變原有代碼的行為n插入規(guī)則:順序指令、非條件跳轉(zhuǎn)指令、條件跳轉(zhuǎn)和退出方法插入指令規(guī)則 pJUnit4JUnit4單元測試技術(shù)單元測試技術(shù) 1.Junit Annotation 1.Junit Annotation和反射和反射nAnnotation
18、:提供給與程序元素關(guān)聯(lián)任何信息或者任何元數(shù)據(jù)的途徑。n通過反射機制提取Annotation。 2. 2. JUnit JUnit生命周期生命周期nBeforeClass、 Before、 Test、After、 AfterClass 3. 3. JUnit JUnit 斷言斷言n Hamcrest :書寫匹配器對象時允許直接定義匹配規(guī)則的框架。nassertThat:使用Hamcrest 的 Matcher匹配符靈活定義斷言p測試構(gòu)建測試構(gòu)建 1.Maven 1.Maven構(gòu)建構(gòu)建n項目構(gòu)建、依賴管理和項目信息管理工具n定義測試項目的pom.xml文件,確定依賴jar包遠(yuǎn)程倉庫,構(gòu)建測試工程 2.Maven 2.Maven生命周期生命周期nClean Lifecy、 Clean Lifecycle 、 Site Lifecycle單元單元測試測
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度文化創(chuàng)意產(chǎn)業(yè)項目聘用設(shè)計師的獨家合同
- 中國酶工程藥物行業(yè)市場全景監(jiān)測及投資戰(zhàn)略研究報告
- 2025年中國風(fēng)電設(shè)備行業(yè)市場前景預(yù)測及投資戰(zhàn)略研究報告
- 2025年度農(nóng)村個人地基使用權(quán)轉(zhuǎn)讓與農(nóng)村土地資源整合開發(fā)合作協(xié)議
- 南京市2025年度房屋托管服務(wù)合作協(xié)議
- 全球及中國高壓增強熱塑性塑料管行業(yè)深度研究報告
- 2025年貼布繡制品項目投資可行性研究分析報告
- 2025年度抵押車買賣合同車輛保險續(xù)保及理賠服務(wù)合同
- 二零二五年度苗圃項目股權(quán)轉(zhuǎn)讓與投資合作協(xié)議
- 電力研究報告-電力產(chǎn)業(yè)規(guī)劃專項研究報告(2025年)
- 高中人教物理選擇性必修一第3章第5節(jié)多普勒效應(yīng)課件
- 全套橋梁施工技術(shù)交底記錄
- 2021年山東省威海市中考語文真題(解析版)
- 主動脈夾層的護(hù)理-ppt課件
- 高新技術(shù)企業(yè)認(rèn)定申請書樣例與說明
- 數(shù)據(jù)結(jié)構(gòu)英文教學(xué)課件:chapter6 Tree
- 高壓氧科工作總結(jié)高壓氧科個人年終總結(jié).doc
- 《政治學(xué)概論》教學(xué)大綱
- 橋梁缺陷與預(yù)防
- 食品生物化學(xué)習(xí)題謝達(dá)平(動態(tài))
- 保安員工入職登記表
評論
0/150
提交評論