使用EMMA獲得功能測(cè)試覆蓋率_第1頁
使用EMMA獲得功能測(cè)試覆蓋率_第2頁
使用EMMA獲得功能測(cè)試覆蓋率_第3頁
使用EMMA獲得功能測(cè)試覆蓋率_第4頁
使用EMMA獲得功能測(cè)試覆蓋率_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、使用EMMA獲得功能測(cè)試覆蓋率引言EMMA一個(gè)開源、面向Java程序測(cè)試覆蓋率收集和報(bào)告工具。它通過對(duì)編譯 后的Java字節(jié)碼文件進(jìn)行插裝,在測(cè)試執(zhí)行過程中收集覆蓋率信息,并通過支 持多種報(bào)表格式對(duì)覆蓋率結(jié)果進(jìn)行展示。EMMA 所使用的字節(jié)碼插裝不僅保證EMMA會(huì)給源代碼帶來“臟代碼”,還確保 EMMA罷脫了源代碼的束縛,這一 特點(diǎn)使EMMA應(yīng)用于功能測(cè)試成為了可能。汪忠:在測(cè)試中使用EMMA收集覆蓋率信息之前,需要從 EMMA勺網(wǎng)站上下載 emma.jar包。在這個(gè)網(wǎng)站上還可以得到更多關(guān)于 EMMA的資源。 EMMAR能收集Java代碼的覆蓋率。文章附錄提供一個(gè)樣例代碼,包含一個(gè)WAR包和一

2、個(gè)JAR包,其中需要將 WAR 包安裝在 WebSphere Portal Server 上運(yùn)行。在實(shí)際測(cè)試過程中,可以將它們 替換成對(duì)應(yīng)的被測(cè)對(duì)象。功能測(cè)試中使用EMMA的優(yōu)點(diǎn)EMMA攵集的數(shù)據(jù)包括類覆蓋率、方法覆蓋率、塊覆蓋率和行覆蓋率,這些數(shù)據(jù) 以包為單位進(jìn)行組織。大多數(shù)功能測(cè)試中,測(cè)試人員一般不能直接得到被測(cè)源代碼,源代碼也不是測(cè)試 人員關(guān)心的重點(diǎn)。在具體的測(cè)試過程中,功能測(cè)試人員一般以一個(gè)有意義的功能 模塊作為測(cè)試關(guān)心的重點(diǎn),而能夠反映一定功能含義的類和方法的覆蓋率在功能 測(cè)試中更有價(jià)值。因此,在功能測(cè)試中,類覆蓋率和方法覆蓋率是測(cè)試人員關(guān)心 的重點(diǎn),行和塊覆蓋率則作為測(cè)試的參考。測(cè)

3、試覆蓋率報(bào)告中包含了兩個(gè)方面的內(nèi)容, 測(cè)試覆蓋的部分和未被測(cè)試覆蓋的部 分。盡管百分之百的測(cè)試覆蓋率不能代表被測(cè)對(duì)象完全沒有問題,但是測(cè)試覆蓋的部分以及覆蓋比率可以增加測(cè)試者對(duì)測(cè)試工作的信心, 指導(dǎo)測(cè)試執(zhí)行以及測(cè)試 的方向。另一方面,當(dāng)測(cè)試用例執(zhí)行出現(xiàn)異常時(shí),針對(duì)每個(gè)測(cè)試用例的測(cè)試報(bào)告 還可以提供可疑代碼的范圍,為代碼糾錯(cuò)提供幫助。測(cè)試覆蓋率報(bào)告中未覆蓋的部分也同樣有價(jià)值: 表明測(cè)試可能不完整,有些功能、代碼沒有被測(cè)試覆蓋到。 為測(cè)試用例的設(shè)計(jì)提供指導(dǎo)建議。在覆蓋率報(bào)告的指導(dǎo)下,測(cè)試人員有目 的地與開發(fā)人員進(jìn)行討論,確定未覆蓋部分是測(cè)試的空白還是不需要測(cè)試 的部分。 幫助開發(fā)人員發(fā)現(xiàn)無用代碼,

4、為修改,完善代碼提供依據(jù)。在使用EMMA獲得測(cè)試覆蓋率過程中,類、方法等覆蓋的百分比報(bào)告,可以方便 測(cè)試人員更好的評(píng)估測(cè)試。測(cè)試人員通過對(duì)照覆蓋率報(bào)告與測(cè)試用例設(shè)計(jì)文檔, 需求文檔可以迅速找到測(cè)試的不足。 通過與開發(fā)人員進(jìn)行討論,可以更好的評(píng)估 測(cè)試力度,并指導(dǎo)進(jìn)一步的測(cè)試。因此在功能測(cè)試中引入覆蓋率信息,能夠完善測(cè)試結(jié)果報(bào)告,確保測(cè)試質(zhì)量和力度,保證測(cè)試按質(zhì)、按量地完成。特別是在目前倡導(dǎo)的Agile 開發(fā)和測(cè)試流程中,開發(fā)和測(cè)試的周期都很短,有 效的覆蓋率信息能夠幫助測(cè)試人員更加準(zhǔn)確地控制測(cè)試結(jié)果和周期、跟蹤問題, 保證軟件正常發(fā)布。EMMAS測(cè)試執(zhí)行中的應(yīng)用在這一部分將逐步介紹EMMA在功

5、能測(cè)試過程中的使用過程和步驟。 為了使整個(gè) 介紹過程容易理解,在文章附錄中提供了示例程序,文章中通過對(duì)示例程序進(jìn)行 操作介紹使用EMMA的命令。插裝被測(cè)組件EMMA!過對(duì)被測(cè)組件進(jìn)行插裝來跟蹤被測(cè)組件的執(zhí)行過程,因此對(duì)被測(cè)組件進(jìn) 行插裝是使用EMMA獲得覆蓋率信息的第一步。測(cè)試人員應(yīng)首先和開發(fā)人員討 論,確定哪一部分包含了符合插裝要求的文件(Java文件),哪一部分需要考 慮覆蓋率信息,然后選擇合適的方式進(jìn)行插裝。 插裝準(zhǔn)備在執(zhí)行插裝操作之前,首先應(yīng)該擴(kuò)展Java虛擬機(jī),即將emma.jar放到被測(cè)組 件運(yùn)行使用的JRE目錄下面作為JRE的擴(kuò)展,以便EMMA能夠被調(diào)用。emma.jar包含了

6、EMMA核心功能模塊的實(shí)現(xiàn)和EMMA運(yùn)行時(shí)所需的類文件,這 些文件是使用EMMA所必需的。由于示例被測(cè)組件運(yùn)行在 Websphere Portal Server中,并使用默認(rèn)的JRE運(yùn) 行,因此將 emma.jar放到“/opt/WebSphere/PortalServer/java/jre/lib/ext” 下面。在實(shí)際的測(cè)試中,將該路徑進(jìn)行相應(yīng)的替換。 插裝EMM/fr提供了 “instr ”命令完成插裝操作。插裝操作可以面向JAR包、WAR 包、WAR包、類文件和目錄,選擇合適的命令進(jìn)行插裝可以使插裝過程變得簡(jiǎn) 便。下面的1-4通過具體例子介紹了不同情況下的插裝命令。1.插裝目錄和類文件

7、對(duì)于類文件,通過指定類文件所在的目錄實(shí)現(xiàn)。清單1.對(duì)類文件插裝命令/opt/WebSphere/PortalServer/java/jre/bin/java emma instr -m overwrite-ip/opt/WebSphere/PortalServer/installedApps/NumberQuizWEB_10yggsru.ear/NumberQuizWEB.war/WEB-INF/classes -Dmetadata.out.file=/root/emma/Number_coverage.emEMMA: processing instrumentation pathEMMA:

8、instrumentation path processed in 682 msEMMA: 5 class(es) instrumented, 0 resource(s) copiedEMMA: metadata merged into /root/emma/Number_coverage.em in 72 ms1.插裝JAR包JAR包可以作為一個(gè)整體進(jìn)行插裝。通過對(duì)整個(gè)JAR進(jìn)行插裝,可以避免對(duì)JAR 包進(jìn)行解壓和壓縮的過程,提高插裝效率。清單2.對(duì)JAR包插裝命令/opt/WebSphere/PortalServer/java/jre/bin/java emma instr -m over

9、write-cp TestWs.jar -Dmetadata.out.file=/root/emma/Number_coverage.emEMMA: processing instrumentation pathEMMA: instrumentation path processed in 675 msEMMA: 7 class(es) instrumented, 4 resource(s) copiedEMMA: metadata merged into /root/emma/Number_coverage.em in 60 ms1.插裝WAR/EAR包由于WAR/EAR包需要運(yùn)行在特定的環(huán)

10、境中,所以在進(jìn)行插裝之前,需要先將其 安裝在特定的J2EE容器中,然后將其看作目錄進(jìn)行插裝。清單3.對(duì)WAR/EAR包插裝命令/opt/WebSphere/PortalServer/java/jre/bin/java emma instr -m overwrite -ip NumberQuizWEB.war-Dmetadata.out.file=/root/emma/Number_coverage.emEMMA: processing instrumentation pathEMMA: instrumentation path processed in 610 msEMMA: 5 class(

11、es) instrumented, 0 resource(s) copiedEMMA: metadata merged into /root/emma/Number_coverage.em in 94 ms1.選擇性的插裝EMM破持對(duì)整個(gè)JAR包和目錄進(jìn)行插裝,但如果在 JAR包或者目錄中包含系 統(tǒng)的文件或者測(cè)試過程中不關(guān)心的文件時(shí), 應(yīng)該進(jìn)行選擇性插裝,因?yàn)檫@些文件 的存在會(huì)影響測(cè)試結(jié)果的百分比。EMMA提供了選擇插裝的選項(xiàng),實(shí)現(xiàn)選擇性插 裝。清單4.選擇插裝命令/opt/WebSphere/PortalServer/java/jre/bin/java emma instr -m overw

12、rite-cp TestWs.jar-ix +org.wstest.service.*-Dmetadata.out.file=/root/emma/Number_coverage.emEMMA: processing instrumentation pathEMMA: instrumentation path processed in 637 msEMMA: 4 class(es) instrumented, 6 resource(s) copiedEMMA: metadata merged into /root/emma/Number_coverage.em in 107 ms上述命令選擇了

13、與清單2中同樣的JAR包,由于只包含了org.wstest.service.* 內(nèi)的內(nèi)容,因此只插裝了 4個(gè)類。以上的1-4分別介紹了在插裝過程中的常用命令,下面對(duì)命令中用到的一些參數(shù) 進(jìn)行解釋。參數(shù)”m代表插裝后文件輸出的模式。有三個(gè)值可供選擇:“copy” ,overwrite ” 和 “fullcopy ” 。其中,“copy” 和 “fullcopy ” 這兩種 模式將會(huì)改變插裝文件所在的目錄,并需要測(cè)試人員手動(dòng)為其生成所需的包, 使 用起來比較復(fù)雜?!皁verwrite ”模式直接用插裝后的文件覆蓋插裝前文件,使用方便。但是由于同一時(shí)間生成的文件只能插裝一次, 在“overwrite

14、 ”模式下, 插裝前的文件已經(jīng)丟失,測(cè)試人員無法重復(fù)插裝操作,因此建議在插裝之前先將 需要插裝的文件和包進(jìn)行備份。參數(shù)“ip”和“cp”用來提供插裝路徑,其中“cp”用來指明一個(gè)文件夾, “ip”指定單獨(dú)的文件或者JAR包。參數(shù) “Dmetadata.outfile ”用來指定插裝得到的元數(shù)據(jù)文件保存的路徑。EMM9通過“ix”參數(shù)指定文件的包含和排除關(guān)系,其中在“+”符號(hào)后的文件為包含進(jìn)的文件,“-”后面的內(nèi)容為排除在外的文件。合并元數(shù)據(jù)完成插裝操作以后,在指定的路徑下會(huì)產(chǎn)生一些名為coverage.em ”的文件,這些文件保存了插裝的元信息,這些信息主要是記錄插裝過程中的插裝點(diǎn)在被測(cè) 代碼

15、中的位置。如果在插裝過程中,指定這些文件到同一文件的話,EMMA默認(rèn) 將元數(shù)據(jù)進(jìn)行合并。如果測(cè)試人員未指定路徑,或者希望得到獨(dú)立的元文件,這 些文件將分別產(chǎn)生在默認(rèn)或指定的目錄下。測(cè)試人員還可以通過使用“ merge命令手動(dòng)將這些元文件進(jìn)行合并, 保證生成的覆蓋率報(bào)表的全面性。 注意:合并 操作不支持逆向操作。清單5.合并元數(shù)據(jù)命令/opt/WebSphere/PortalServer/java/jre/bin/java emma merge-input /coverage1.em,/coverage.em -out /coverage2.em在“input ”后面的參數(shù)為待合并的文件名,在

16、“out”后面的參數(shù)為合并以 后的結(jié)果文件。完成上面的操作以后,就已經(jīng)完成了收集覆蓋率信息的準(zhǔn)備工作。 接下來測(cè)試人 員可以進(jìn)行正常的測(cè)試工作,在運(yùn)行測(cè)試的過程中,EMMA將跟蹤并記錄執(zhí)行軌 跡,得到覆蓋率信息。運(yùn)行測(cè)試用例,得到覆蓋率報(bào)告完成插裝工作以后,測(cè)試人員可以按照測(cè)試計(jì)劃運(yùn)行測(cè)試用例。EMMA將在測(cè)試 執(zhí)行的過程中記錄代碼執(zhí)行信息并將結(jié)果記錄在內(nèi)存中。每次當(dāng)JVM停止時(shí),內(nèi)存中記錄的執(zhí)行信息將被消除并被保存到“*.ec”的文件中。但是在實(shí)際測(cè)試的過程中,JVM的停止很難控制,因此測(cè)試人員可以定時(shí)手動(dòng)將內(nèi)存中執(zhí)行 信息寫出。在這種情況下,內(nèi)存中的記錄被輸出,但是內(nèi)存中的內(nèi)容不被消除。

17、清單5-7介紹了收集覆蓋率信息以及生成覆蓋率信息報(bào)告的命令。清單6.從遠(yuǎn)程機(jī)器上收集覆蓋率信息/opt/WebSphere/PortalServer/java/jre/bin/java -cp emma.jar emma ctl-connect:47653 -commandcoverage.dump,/root/emma/Number_coverage.ecEMMA: processing control command sequenceEMMA: executing coverage.dump (/root/emma/Number_coverage.ec,true)EMMA: coverag

18、e.dump: runtime coverage data remotely merged into /root/emma/Number_coverage.ec in 83 msEMMA: coverage.dump: command completed in 96 msEMMA: control command sequence complete清單7.從本地收集覆蓋率信息/opt/WebSphere/PortalServer/java/jre/bin/java -cp emma.jar emma ctl-connect:47653 -commandcoverage.get,/root/em

19、ma/Number_coverage.ecEMMA: processing control command sequenceEMMA: executing coverage.get(/root/emma/Number_coverage.ec,true,true)EMMA: coverage.get: local copy of coverage data merged into /root/emma/Number_coverage.ec in 39 msEMMA: coverage.get: command completed in 79 msEMMA: control command seq

20、uence complete這樣收集到的信息被保存在“coverage.ec ” 中,“coverage.ec ” 是二進(jìn)制格式的文件,因此很難被用來查看覆蓋率結(jié)果。清單8.生成覆蓋率報(bào)告/opt/WebSphere/PortalServer/java/jre/bin/java -cp emma.jar emma report-r html -in/root/emma/Number_coverage.em,/root/emma/Number_coverage.ec -Dreport.html.out.file=/root/emma/Number_coverage.html-Dreport.me

21、trics=class:80(,method:75)EMMA: processing input filesEMMA: 2 file(s) read and merged in 42 msEMMA: writing html report to/root/emma/coverage/Number_coverage.xml在生成覆蓋率報(bào)告的過程中,測(cè)試人員可以根據(jù)測(cè)試要求通過 “Dreport.metrics ”參數(shù)設(shè)定滿意的覆蓋率標(biāo)準(zhǔn)。在示例命令中設(shè)定了類覆蓋 率的滿意度為80%測(cè)試報(bào)告可以以HTML,文本和XML三種格式輸出。圖1、圖2為HTML格式 的報(bào)告的例子。覆蓋率的報(bào)告是以包、類、方

22、法三級(jí)單位組織的。圖 1是Index 類的執(zhí)行情況,其中紅顏色代表該覆蓋率未達(dá)到滿意的覆蓋率標(biāo)準(zhǔn)。 圖2則是包 org.numberquiz中QuizBran類的執(zhí)行情況,從總體看,類覆蓋率為 100%方 法為91%在附錄中可以看到示例程序完整的測(cè)試覆蓋率報(bào)告。在功能測(cè)試過程中,為每個(gè)單獨(dú)的測(cè)試用例生成獨(dú)立的覆蓋率報(bào)告能夠給測(cè)試過 程帶來很大的幫助:當(dāng)測(cè)試用例失敗或者拋出異常時(shí),可以通過覆蓋率報(bào)告找到該測(cè)試用例對(duì)應(yīng)的代碼,這樣就可以為測(cè)試人員提供可能出錯(cuò)代碼的范圍。 這一報(bào)告不僅可以幫助測(cè)試人員在提交問題時(shí)更加詳細(xì)的描述錯(cuò)誤, 提供更詳細(xì)的信 息,還可以為開發(fā)人員跟蹤問題提供線索,縮短解決問題

23、的周期。 測(cè)試人員可以從獨(dú)立的測(cè)試報(bào)告中獲得代碼和功能模塊的對(duì)應(yīng)關(guān)系,更好的理解測(cè)試用例的作用。 獨(dú)立的測(cè)試報(bào)告可以幫助測(cè)試人員改進(jìn)測(cè)試用例的設(shè)計(jì), 刪除重復(fù)的測(cè)試 用例,將覆蓋點(diǎn)較多的測(cè)試用例進(jìn)行拆分。為得到獨(dú)立的測(cè)試報(bào)告,需要在每次執(zhí)行測(cè)試用例前,將內(nèi)存中的執(zhí)行信息清除。 目前有兩種方法支持清除記錄,測(cè)試人員可在測(cè)試過程中,根據(jù)需要選擇合適的 方法。 每次運(yùn)行完一個(gè)測(cè)試用例,重啟 JVM 。這種方法能夠完整的消除內(nèi)存中 記錄的執(zhí)行信息,但是每次重啟 JVM給測(cè)試帶來很多麻煩。 使用 “coverage.reset ” 命令,該命令可以在不重啟 JVM的情況下, 消除內(nèi)存中記錄的方法、塊、行

24、的執(zhí)行信息,但是無法消除類覆蓋信息。 如果用戶關(guān)注的重點(diǎn)在方法的覆蓋信息上,可以選擇這種方法。清單9.清除內(nèi)存中覆蓋率信息命令/opt/WebSphere/PortalServer/java/jre/bin/java -cp emma.jar emma ctl -connect:47653 -command coverage.resetEMMA: processing control command sequenceEMMA: executing coverage.reset ()EMMA: coverage.reset: coverage reset for 5 classes in 0 m

25、sEMMA: coverage.reset: command completed in 31 msEMMA: control command sequence complete合并覆蓋率結(jié)果完成所用的測(cè)試用例后,測(cè)試覆蓋信息可以被合并在一起,得到整個(gè)測(cè)試的覆蓋 報(bào)告。覆蓋率結(jié)果文件通過“merge”命令合并 “*ec ”文件實(shí)現(xiàn)的。另外,由于EMMA中測(cè)試覆蓋率是通過與“*em”文件關(guān)聯(lián)獲得代碼信息的,文在文因此當(dāng)代碼發(fā)生變化時(shí),已經(jīng)運(yùn)行過的測(cè)試不必完全重復(fù),只需將得到的“*.ec 文件合并(新得到的 “*.ec”文件放在后面),然后關(guān)聯(lián)最新的“*em”件即可得到代碼變化后的覆蓋率信息,這方便

26、了 EMMA支持版本變化的測(cè)試。 生成新的測(cè)試報(bào)告的時(shí)候,需要注意“*ec ”的時(shí)間一定要晚于 “*em”件。清單9.合并覆蓋率結(jié)果命令/opt/WebSphere/PortalServer/java/jre/bin/java emma merge-input coverage1.ec,coverage2.eGcoverage3.ec- output coverage.ec如果在生成測(cè)試報(bào)告的時(shí)候,如果出現(xiàn)“com.vladium.emma.EMMARuntimeException: CLASS_STAMP_MISMATCH runtime version of class in the co

27、verage data is not consistent with the version of this class in the metadata, possibly because stale metadata is being used for report generation ”錯(cuò)誤,說明在生成新的“*em”前后代碼曾經(jīng)被修改過,并且被修改的代碼所在的類文件在新的測(cè)試中沒有被覆蓋 到,這就需要重新執(zhí)行這部分測(cè)試,保證修改過的部分被重新執(zhí)行。使用覆蓋率報(bào)告總結(jié)和評(píng)估測(cè)試過程到目前為止,針對(duì)每個(gè)測(cè)試用例的測(cè)試覆蓋率報(bào)告和測(cè)試整體的覆蓋率報(bào)告都已 經(jīng)得到了。這些報(bào)告可以幫助測(cè)試人員總結(jié)和分析測(cè)試結(jié)果,改進(jìn)測(cè)試設(shè)計(jì)。目前的功能測(cè)試中,測(cè)試人員主要借助執(zhí)行的測(cè)試用例數(shù)目和測(cè)試過程中的問題 報(bào)告來評(píng)價(jià)測(cè)試過程,因此,測(cè)試用例的設(shè)計(jì)直接關(guān)系到測(cè)試的充分性。測(cè)試人員往往無法從目前的測(cè)試結(jié)果報(bào)告中得到哪些部分被覆蓋了,哪些部分未被覆蓋的信息,也就造成了在測(cè)試結(jié)束時(shí)測(cè)試人員對(duì)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論