關(guān)于java代碼覆蓋率,代碼覆蓋率如何計算

五個方法讓你做更好的java單元測試?

單元測試是我們在軟件開發(fā)過程中經(jīng)常用到的一種軟件測試的方法,而今天我們就一起來了解一下,一個好的單元測試都是如何來編輯完成的。

創(chuàng)新互聯(lián)公司是專業(yè)的克拉瑪依區(qū)網(wǎng)站建設公司,克拉瑪依區(qū)接單;提供成都網(wǎng)站設計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行克拉瑪依區(qū)網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

1.使用框架來用于單元測試

Java提供了若干用于單元測試的框架。TestNG和JUnit是流行的測試框架。JUnit和TestNG的一些重要功能:

易于設置和運行。

支持注釋。

允許忽略或分組并一起執(zhí)行某些測試。

支持參數(shù)化測試,即通過在運行時指定不同的值來運行單元測試。

通過與構(gòu)建工具,如Ant,Maven和Gradle集成來支持自動化的測試執(zhí)行。

EasyMock是一個模擬框架,是單元測試框架,如JUnit和TestNG的補充。EasyMock本身不是一個完整的框架。它只是添加了創(chuàng)建模擬對象以便于測試的能力。例如,我們想要測試的一個方法可以調(diào)用從數(shù)據(jù)庫獲取數(shù)據(jù)的DAO類。在這種情況下,EasyMock可用于創(chuàng)建返回硬編碼數(shù)據(jù)的MockDAO。這使我們能夠輕松地測試我們意向的方法,而不必擔心數(shù)據(jù)庫訪問。

2.謹慎使用測試驅(qū)動開發(fā)!

測試驅(qū)動開發(fā)(TDD)是一個軟件開發(fā)過程,在這過程中,在開始任何編碼之前,我們基于需求來編寫測試。由于還沒有編碼,測試初會失敗。然后寫入小量的代碼以通過測試。然后重構(gòu)代碼,直到被優(yōu)化。

目標是編寫覆蓋所有需求的測試,而不是一開始就寫代碼,卻可能甚至都不能滿足需求。TDD是偉大的,因為它導致簡單的模塊化代碼,且易于維護。總體開發(fā)速度加快,容易發(fā)現(xiàn)缺陷。此外,單元測試被創(chuàng)建作為TDD方法的副產(chǎn)品。

然而,TDD可能不適合所有的情況。在設計復雜的項目中,專注于簡單的設計以便于通過測試用例,而不提前思考可能會導致巨大的代碼更改。此外,TDD方法難以用于與遺留系統(tǒng),GUI應用程序或與數(shù)據(jù)庫一起工作的應用程序交互的系統(tǒng)。另外,測試需要隨著代碼的改變而更新。

因此,在決定采用TDD方法之前,應考慮上述因素,并應根據(jù)項目的性質(zhì)采取措施。

3.測量代碼覆蓋率

代碼覆蓋率衡量(以百分比表示)了在運行單元測試時執(zhí)行的代碼量。通常,高覆蓋率的代碼包含未檢測到的錯誤的幾率要低,因為其更多的源代碼在測試過程中被執(zhí)行。云南電腦培訓發(fā)現(xiàn)測量代碼覆蓋率的一些佳做法包括:

使用代碼覆蓋工具,如Clover,Corbetura,JaCoCo或Sonar。使用工具可以提高測試質(zhì)量,因為這些工具可以指出未經(jīng)測試的代碼區(qū)域,讓你能夠開發(fā)開發(fā)額外的測試來覆蓋這些領(lǐng)域。

為什么要對程序做代碼覆蓋率測試?

關(guān)于代碼覆蓋率,之前6年的工作經(jīng)歷中,只是依稀聽聞過。之前的組織里,從未關(guān)注過這個指標,只是有一段時間用NUnit做了單元測試,主要是測試一些關(guān)鍵類關(guān)鍵方法是否正常,對代碼覆蓋率的印象就真的一直是停留在聽聞的程度。汗一個!

前些時日,關(guān)于自動測試的討論中有人提及到代碼覆蓋率,激發(fā)了我的好奇,到底什么是代碼覆蓋率?最重要的是于測試工作而言有怎樣的價值呢?今天花了一點時間查了一下,有了初步的認識。大致歸納如下:

一、基本概念

代碼覆蓋率是單元測試活動任務之一;

覆蓋率分語句覆蓋率(即通常所說的行覆蓋率)和分支覆蓋率。

二、價值

代碼覆蓋率的分析能在一定程度上評判代碼質(zhì)量,一般覆蓋率高的代碼出錯的幾率會相對低一些。但是高覆蓋率只是表示執(zhí)行了很多的代碼,并不意味著這些代碼被很好地執(zhí)行了。所以,似乎覆蓋率測試結(jié)果出來并不能幫我準確的評價代碼質(zhì)量。那么我們?yōu)槭裁匆龈采w率測試呢?如何讓它給我們帶來價值呢?

1. 盡早評估代碼質(zhì)量

比如在開發(fā)的過程中,定時的去看整個項目的代碼覆蓋率,監(jiān)控覆蓋報告可以幫助開發(fā)團隊迅速找出不斷增長的但是沒有相應測試的代碼。例如,在一周開始時運行覆蓋報告,顯示項目中一個關(guān)鍵的軟件包的覆蓋率是 70%。如果幾天后,覆蓋率下降到了 60%,那么您可以推斷:軟件包的代碼行增加了,但是沒有為新代碼編寫相應的測試(或者是新增加的測試不能有效地覆蓋新代碼)。能夠監(jiān)控事情的發(fā)展,無疑是件好事。定期地查閱報告使得設定目標(例如獲得覆蓋率、維護代碼行的測試案例的比例等)并監(jiān)控事情的發(fā)展變得更為容易。如果您發(fā)現(xiàn)測試沒有如期編寫,您可以提前采取一些行動,例如對開發(fā)人員進行培訓、指導或幫助。

2. 為功能測試關(guān)注點提供情報

假設覆蓋報告在指出沒有經(jīng)過足夠測試的代碼部分方面非常有效,那么質(zhì)量保證人員可以使用這些數(shù)據(jù)來評定與功能測試有關(guān)的關(guān)注區(qū)域,可以更有針對性地加強這些區(qū)域的測試,因為沒有被測試代碼覆蓋到的區(qū)域,出錯的幾率應該相對更高。

3. 估計修改已有代碼所需的時間

對一個開發(fā)團隊而言,針對代碼編寫測試案例自然可以增加集體的信心。與沒有相應測試案例的代碼相比,經(jīng)過測試的代碼更容易重構(gòu)、維護和增強。測試案例因為暗示了代碼在測試工作中是如何工作的,所以還可以充當內(nèi)行的文檔。在另一方面,沒有經(jīng)過相應測試的代碼更難于理解和安全地修改。因此,知道代碼有沒有被測試,并看看實際的測試覆蓋數(shù)值,可以讓開發(fā)人員和管理人員更準確地預知修改已有代碼所需的時間。

當然,這樣的理解還是比較淺層的,我想實際應用中除了以上三點之外,還有一個很重要的工作就是提高測試代碼的質(zhì)量來更好的體現(xiàn)代碼覆蓋率的價值。

如何提高java單元測試覆蓋率

設置合理測試規(guī)則(數(shù)據(jù)),盡量全面覆蓋。在完全符合客戶要求的基礎(chǔ)上增加一定測試數(shù)據(jù),這是我個人看法

有哪些方法可以進行Java單元測試

在軟件開發(fā)過程中,每個單元的運行都是非常關(guān)鍵的,并且直接關(guān)系到后期程序員的運行。那么在進行軟件開發(fā)過程中,經(jīng)常使用到的單元測試方法有哪些呢,一個好的單元測試是如何進行實現(xiàn)的?下面云南電腦培訓為大家介紹進行Java單元測試的具體方法。

1、使用框架進行單元測試

Java能夠提供單元測試方法的框架,在測試過程中,測試NG和JUnit是現(xiàn)在流行的測試框架。JUnit和TestNG框架測試有幾個重要功能:設置和運行很容易;允許忽略或分組,并一起運行多個測試;支持參數(shù)化測試,并且云南IT培訓發(fā)現(xiàn)能夠通過在運行時指定不同的值來執(zhí)行單元測試。

2、謹慎使用測試驅(qū)動開發(fā)

測試驅(qū)動開發(fā)是一個軟件開發(fā)的過程。在整個開發(fā)過程中,在開始編碼的時候,應該根據(jù)程序的需求進行編程測試。但是昆明IT培訓發(fā)現(xiàn)由于這個時候還沒有進行編程,所以初次測試會面臨失敗,只需要寫入少量的代碼就能通過測試,進行重置代碼。

3、測試代碼的覆蓋率

代碼覆蓋率是以百分比測定執(zhí)行單元測試時進行的代碼量。通常,高覆蓋率的代碼包含未被檢測出的錯誤的概率較低,因為更多的源代碼在測試中被執(zhí)行。測試代碼覆蓋率的工具有:Clover,Corbetura,JaCoCo。使用工具測試能夠更好的提高測試質(zhì)量。

4、將測試數(shù)據(jù)外部優(yōu)化

在JUnit4之前,測試用例執(zhí)行的數(shù)據(jù)必須被測試用例硬編碼,這會引起限制。為了使用不同的數(shù)據(jù)執(zhí)行測試,必須修正測試用例代碼。但是,昆明電腦培訓認為JUnit4以及TestNG支持外部化測試數(shù)據(jù),無需變更源代碼,就可以對不同的數(shù)據(jù)組執(zhí)行測試用例。

java web怎么用emma進行代碼覆蓋率測試

使用 emma 2.1 (emma-stable-2.1.5320-lib) 1. 新建 /home/q/java/emmalib 目錄, 將emma.jar 與 emma_ant.jar 放入 2. 復制 /server/bin/mobileserver/runServer.sh 到 runServer_emma.sh 修改啟動語句。

使用 emma 2.1 (emma-stable-2.1.5320-lib)

1. 新建 /home/q/java/emmalib 目錄, 將emma.jar 與 emma_ant.jar 放入

2. 復制 /server/bin/mobileserver/runServer.sh 到 runServer_emma.sh

修改啟動語句

nohup java -Xmx1800M -Xms800m -Xbootclasspath/p:/home/q/java/emmalib/emma.jar -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -XX:+AggressiveOpts -XX:+UseParallelGC -server -classpath "$jarFile" com.qunar.common.mobileArc.MobileServer conf/TaLog.property conf/TripServer.property $LOG_HOME/error.log 21

復制 /server/bin/mobileserver/stopServer.sh 到 stopServer_emma.sh

   添加覆蓋率導出命令

   插入 emma 統(tǒng)計代碼

   使用root賬號

   1. 備份mobileserver.jar

   cp /server/TripAssistant/mobile-server.jar $MOB_JAR_BAK/mobile-server.jar.{$timestamp}

   2. 執(zhí)行插入命令

java -cp /home/q/java/emmalib/emma.jar emma instr -m overwrite -cp mobile-server.jar -out coverage.em

輸出如下:

EMMA: processing instrumentation path ...

   EMMA: instrumentation path processed in 3117 ms

   EMMA: [1000 class(es) instrumented, 126 resource(s) copied]

   EMMA: metadata merged into [/server/TripAssistant/coverage.em]

3. 運行mobileserver runServer_emma.sh

   sudo sh /server/bin/mobileserver/stopServer.sh sudo sh /server/bin/mobileserver/runServer_emma.sh

   在 /server/mobileserverlog/error.log中可見:

   EMMA: collecting runtime coverage data ...

   EMMA: runtime controller started on port [47653]

   emma control 進程已啟動

[root@l-wap4.beta.cn1.qunar.com /server/mobileserverlog]# netstat -na | grep 47653

tcp 0 0 0.0.0.0:47653 0.0.0.0:* LISTEN 20926/java

4. 執(zhí)行 覆蓋率文件導出命令

java -cp /home/q/java/emmalib/emma.jar emma ctl -connect localhost:47653 -command coverage.get,coverage.ec

   可見輸出:

   EMMA: processing control command sequence ...

   EMMA: executing [coverage.get (coverage.ec,true,true)] ...

   EMMA: coverage.get: local copy of coverage data merged into [/server/TripAssistant/coverage.ec]

   EMMA: coverage.get: command completed in 79 ms

   EMMA: control command sequence complete

   并且當前目錄生成文件 coverage.ec

5. 生成報告

java -cp /home/q/java/emmalib/emma.jar emma report -r html -in coverage.em,coverage.ec

指定源代碼生產(chǎn)覆蓋率報告(需先上傳源碼)

   java -cp /home/q/java/emmalib/emma.jar emma report -r html -in /server/TripAssistant/coverage.em,/server/TripAssistant/coverage.ec -Dreport.html.out.file=mycoverage/coverage.html -sp /home/liang.zhou/mob_code_dir/mobs_trunk/src/main/java

emma 方式啟動 mobserver

   ==================================

   1. 判斷mobserver.jar size, 大于5M 為已插入過, 小于5M為未插入(需要執(zhí)行插入)

   2. 執(zhí)行插入

   3. 啟動

4. 檢查啟動狀態(tài)

47653 端口打開

   mobileserver 進程打開

emma 方式停止 mobserver

==================================

   1. 檢查47653端口打開狀態(tài), 檢查coverage.em是否存在

2. 導出覆蓋率文件 coverage.ec, 備份coverage.em (加上時間戳)

   3. 導出覆蓋率HTML report (加上對應時間戳)

   4. kill mobserver 進程

   ls -lt mobile-server.jar

   判斷 $? == 0

判斷mobile-server.jar size是否大于 5M

#!/bin/bash

   function stop_mob_server(){

   #!/bin/bash

   function stop_mob_server(){

   pid=`ps aux | grep MobileServer | grep -v grep | awk '

   Unknown macro: {print $2}

'`

   ` kill -9 $

   Unknown macro: {pid}

   `

   sleep 1

   echo "Stop mobileserver success."

   }

   #判斷 emma ctl 是否啟動

   port_check_result=`netstat -na | grep 47653 | awk '

   Unknown macro: {print $1}

   '`

   if [ -z $

   Unknown macro: {port_check_result}

   ]; then

echo "Emma ctl port 47653 is not LISTEN. Coverage.ec export operation aborted."

   else

   #emma ctl 為啟動狀態(tài),導出 coverage.ec, 并備份至 /home/q/mobsrv_cov

   if []

   fi

分享題目:關(guān)于java代碼覆蓋率,代碼覆蓋率如何計算
本文網(wǎng)址:http://muchs.cn/article4/phjcoe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設品牌網(wǎng)站制作、網(wǎng)站改版、自適應網(wǎng)站網(wǎng)站設計、網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設計