久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

java開發(fā)代碼覆蓋率,代碼覆蓋率如何計算

代碼覆蓋率達(dá)到100%,真的代碼就沒有問題了嗎?

在軟件測試中,有一個重要的概念叫做代碼覆蓋率,一般在單元測試中作為測試充分性的重要衡量指標(biāo),那么代碼覆蓋率達(dá)到100%是否就算覆蓋全了?答案顯然是否定的。

建安網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)公司從2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司

那么,100%的代碼覆蓋率還值得追求嗎?

這是當(dāng)然,這也應(yīng)該是每個程序員追求的目標(biāo)之一,但是如果從項目角度考慮ROI(投入產(chǎn)出比),對于需要快速上線的短期項目,需要注重的是讓測試覆蓋核心功能代碼。如果你的項目是一個長期項目,那么高覆蓋率是非常有必要的,它意味著高可維護(hù)性,以及更少的bug。

那么對于一個項目來說,覆蓋率應(yīng)該達(dá)到多少?

其實沒有適用于所有項目的數(shù)值,每個項目都應(yīng)有自己的閾值,但共性是,測試必須覆蓋主要業(yè)務(wù)場景,代碼的邏輯分支也必須盡可能的覆蓋。

如何改進(jìn)你的項目代碼覆蓋率?

首先我們要閱讀和理解項目代碼,找出其中需要測試并且與業(yè)務(wù)強(qiáng)相關(guān)的代碼,結(jié)合sonar等代碼質(zhì)量管理平臺,從代碼編寫規(guī)范、復(fù)雜度、重復(fù)代碼等方面進(jìn)行代碼重構(gòu),進(jìn)一步提高項目的可維護(hù)性與可讀性。

這也意味著重構(gòu),重構(gòu)的同時,你需要更多的測試來保證你重構(gòu)代碼的正確性。

代碼覆蓋率的意義

閱讀分析之前項目中未覆蓋部分的代碼,進(jìn)而反推在前期QA以及相關(guān)測試人員在進(jìn)行黑盒測試設(shè)計時是否考慮充分,沒有覆蓋到的代碼是否是測試設(shè)計的盲點(diǎn),為什么沒有考慮到?是需求或者UX設(shè)計不夠清晰,還是測試設(shè)計的理解有誤。

檢測出程序中的廢代碼,可以逆向反推代碼設(shè)計中不合理的地方,提醒設(shè)計/開發(fā)人員理清代碼邏輯關(guān)系,提升代碼質(zhì)量。

代碼覆蓋率高不能說明代碼質(zhì)量高,但是反過來看,代碼覆蓋率低,代碼質(zhì)量絕對不會高到哪里去,可以作為測試自我審視的重要工具之一。

單元測試的覆蓋率并不只是為了取悅客戶或者管理層的數(shù)據(jù),它能夠?qū)崒嵲谠诜磻?yīng)項目中代碼的 健康 程度,幫助我們更好的改善了代碼的質(zhì)量,增加了我們對所編寫代碼的信心。

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

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

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

一、基本概念

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

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

二、價值

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

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

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

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

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

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

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

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

java web怎么用emma進(jìn)行代碼覆蓋率測試

使用 emma 2.1 (emma-stable-2.1.5320-lib) 1. 新建 /home/q/java/emmalib 目錄, 將emma.jar 與 emma_ant.jar 放入 2. 復(fù)制 /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. 復(fù)制 /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

復(fù)制 /server/bin/mobileserver/stopServer.sh 到 stopServer_emma.sh

   添加覆蓋率導(dǎo)出命令

   插入 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. 運(yùn)行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 進(jìn)程已啟動

[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í)行 覆蓋率文件導(dǎo)出命令

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

   并且當(dāng)前目錄生成文件 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 進(jìn)程打開

emma 方式停止 mobserver

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

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

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

   3. 導(dǎo)出覆蓋率HTML report (加上對應(yīng)時間戳)

   4. kill mobserver 進(jìn)程

   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),導(dǎo)出 coverage.ec, 并備份至 /home/q/mobsrv_cov

   if []

   fi

代碼覆蓋率是個什么概念?

代碼覆蓋率是軟件測試中的描述程序中源代碼被測試的比例和程度。代碼覆蓋是由系統(tǒng)化軟件測試所衍生的方式,是飛行設(shè)備進(jìn)行安全認(rèn)證中的考量項目之一。

基本的代碼覆蓋率準(zhǔn)則有函式覆蓋率、指令覆蓋率、判斷覆蓋率、條件覆蓋率、條件/判斷覆蓋率。函式覆蓋率呼叫到程式中的每一個函式;指令覆蓋率用控制流圖表示程式,執(zhí)行到控制流圖中的每一個節(jié)點(diǎn);判斷覆蓋率用控制流圖表示程式,執(zhí)行到控制流圖中邏輯運(yùn)算式成立及不成立的情形。

擴(kuò)展資料:

代碼覆蓋的測試

基于代碼的測試覆蓋評測測試過程中已經(jīng)執(zhí)行的代碼的多少,與之相對的是要執(zhí)行的剩余代碼的多少。代碼覆蓋可以建立在控制流(語句、分支或路徑)或數(shù)據(jù)流的基礎(chǔ)上。

控制流覆蓋的目的是測試代碼行、分支條件、代碼中的路徑或軟件控制流的其他元素。數(shù)據(jù)流覆蓋的目的是通過軟件操作測試數(shù)據(jù)狀態(tài)是否有效,例如,數(shù)據(jù)元素在使用之前是否已作定義。

參考資料來源:百度百科-代碼覆蓋率

文章名稱:java開發(fā)代碼覆蓋率,代碼覆蓋率如何計算
分享鏈接:http://sd-ha.com/article22/hoodcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站建設(shè)、網(wǎng)站設(shè)計公司網(wǎng)站營銷、商城網(wǎng)站標(biāo)簽優(yōu)化

廣告

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

網(wǎng)站優(yōu)化排名