国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      代碼測(cè)試覆蓋率統(tǒng)計(jì)結(jié)果的確定方法及裝置的制造方法

      文檔序號(hào):9844032閱讀:665來(lái)源:國(guó)知局
      代碼測(cè)試覆蓋率統(tǒng)計(jì)結(jié)果的確定方法及裝置的制造方法
      【技術(shù)領(lǐng)域】
      [0001] 本發(fā)明涉及計(jì)算機(jī)軟件領(lǐng)域,具體而言,涉及一種代碼測(cè)試覆蓋率統(tǒng)計(jì)結(jié)果的確 定方法及裝置。
      【背景技術(shù)】
      [0002] 相關(guān)技術(shù)中,在測(cè)試中的代碼覆蓋率是指在運(yùn)行測(cè)試用例過(guò)后,已經(jīng)覆蓋的代碼 行數(shù),然后再采用已經(jīng)覆蓋的代碼行數(shù)除以測(cè)試對(duì)象總體包含的代碼行數(shù)即為本次測(cè)試的 代碼覆蓋率。假設(shè)測(cè)試對(duì)象是一個(gè)函數(shù),而這個(gè)函數(shù)總共擁有100行代碼,當(dāng)所有的測(cè)試用 例執(zhí)行完畢后,已經(jīng)覆蓋了60行代碼,而還有40行的代碼沒(méi)有被覆蓋到,那么這個(gè)函數(shù)的代 碼覆蓋率便是60 %。
      [0003] 需要說(shuō)明的是,上述示例中提到的代碼行僅為一種較為常用的度量方式。
      [0004] 下面將對(duì)常用的幾種用于表示代碼覆蓋程度的度量方式進(jìn)行介紹:
      [0005] 1)語(yǔ)句覆蓋(StatementCoverage)
      [0006] 又被稱為行覆蓋(LineCoverage),段覆蓋(SegmentCoverage),基本塊覆蓋 (BasicBlockCoverage),此為最常用也是最常見(jiàn)的一種覆蓋方式,其度量被測(cè)代碼中每個(gè) 可執(zhí)行語(yǔ)句是否被執(zhí)行到了。這里指的是"可執(zhí)行語(yǔ)句",因此,便不會(huì)包括如C++語(yǔ)言的頭 文件聲明、代碼注釋、空行等。
      [0007] 此種覆蓋方式僅統(tǒng)計(jì)能夠執(zhí)行的代碼已經(jīng)被執(zhí)行了多少行。需要注意的是,單獨(dú) 一行的花括號(hào){}也常常被統(tǒng)計(jì)進(jìn)去。語(yǔ)句覆蓋通常被認(rèn)定為"最弱的覆蓋",其僅負(fù)責(zé)覆蓋 代碼中的執(zhí)行語(yǔ)句,卻無(wú)需考慮各種分支的組合。這種語(yǔ)句覆蓋方式的缺陷在于:耗費(fèi)時(shí)間 和精力,但是,所得到的測(cè)試效果的不明顯,難以發(fā)現(xiàn)代碼測(cè)試中存在的問(wèn)題。
      [0008] 2)判定覆蓋(DecisionCoverage)
      [0009] 又被稱為分支覆蓋(BranchCoverage),所有邊界覆蓋(All-EdgesCoverage),其用 于度量程序中每一個(gè)判定的分支是否都被測(cè)試完成。
      [0010] 3)條件覆蓋(ConditionCoverage)
      [0011] 用于度量判定中的每個(gè)子表達(dá)式結(jié)果true和false是否被測(cè)試完成。例如:語(yǔ)句 if a>0orb>0,這是一個(gè)組合條件,如果條件成立,則既有可能滿足a>0,也有可能滿足b>0,這 兩者被稱為整個(gè)條件語(yǔ)句的子條件。在某些情況下,測(cè)試人員需要明確知道軟件執(zhí)行代碼 究竟是因?yàn)槟膫€(gè)子條件滿足而完成測(cè)試。
      [0012] 需要說(shuō)明的是,"條件覆蓋"與"判定覆蓋"相比,執(zhí)行力度更強(qiáng),其原因在于:條件 覆蓋需要使得每個(gè)判定過(guò)程中的每個(gè)判定條件均得到了兩個(gè)不同的判定結(jié)果;相反地,判 定覆蓋則更關(guān)心整個(gè)條件是否成立,而無(wú)法確保每個(gè)判定條件均得到了兩個(gè)不同的判定結(jié) 果。
      [0013] 4)路徑覆蓋(PathCoverage)
      [0014]又被稱為斷言覆蓋(PredicateCoverage),其用于度量是否函數(shù)的每一個(gè)分支都 被執(zhí)行完成,即所有可能的分支都被執(zhí)行一遍。然而,當(dāng)執(zhí)行語(yǔ)句中有多個(gè)分支嵌套時(shí),需 要對(duì)多個(gè)分支進(jìn)行排列組合,易造成測(cè)試路徑隨著分支的數(shù)量指數(shù)級(jí)別增加。
      [0015] 目前,在執(zhí)行單元測(cè)試操作時(shí),代碼覆蓋率通常被用來(lái)作為衡量測(cè)試好壞的指標(biāo); 甚至,一度將代碼覆蓋率來(lái)作為測(cè)試任務(wù)完成情況的重要考核指標(biāo)。
      [0016] 為了完成對(duì)代碼覆蓋率進(jìn)行測(cè)試,相關(guān)技術(shù)中提供了多種測(cè)試工具,例如:Python 語(yǔ)言的coverage的庫(kù),java語(yǔ)言的JCov庫(kù)以及l(fā)pc語(yǔ)言均支持對(duì)代碼覆蓋率的檢測(cè)。
      [0017] SubVerSion(簡(jiǎn)稱為SVN)是一個(gè)開放源代碼的版本控制系統(tǒng)。目前,絕大多數(shù)開源 軟件都使用SVN作為代碼版本管理軟件。
      [0018] Subversion作為新一代的版本管理工具,其相對(duì)于的RCS、CVS等其他版本管理軟 件,采用了獨(dú)特的分支管理系統(tǒng),從而在互聯(lián)網(wǎng)上免費(fèi)的版本控制服務(wù)中占據(jù)主導(dǎo)地位。
      [0019] Subversion的版本庫(kù)可以通過(guò)網(wǎng)絡(luò)訪問(wèn),從而使得用戶可以在不同的電腦上進(jìn)行 操作。從某種程度而言,允許用戶在各自的空間里修改和管理同一組數(shù)據(jù)可以促進(jìn)團(tuán)隊(duì)協(xié) 作。因?yàn)樾薷牟辉偈菃尉€進(jìn)行(即串行操作),開發(fā)進(jìn)度也因此得到顯著提高。此外,由于所 有的工作都已版本化,也就不必?fù)?dān)心由于誤操作而影響軟件開發(fā)質(zhì)量,因此,如果出現(xiàn)錯(cuò)誤 的更改操作,只要撤銷錯(cuò)誤的更改操作即可。另外,某些版本控制系統(tǒng)本身也是軟件配置管 理系統(tǒng)(SCM),這種系統(tǒng)經(jīng)過(guò)精巧的設(shè)計(jì),專門用來(lái)管理源代碼樹,并且具備許多與軟件開 發(fā)有關(guān)的特性,例如:對(duì)編程語(yǔ)言的支持,提供程序構(gòu)建工具。然而,Subversion并不是這樣 的系統(tǒng),其為一個(gè)通用系統(tǒng),可以管理任何類型的文件集。
      [0020] 現(xiàn)有的覆蓋率工具只能描述對(duì)某個(gè)文件整體的覆蓋情況,輸入需要測(cè)試的單個(gè)或 多個(gè)文件,然后進(jìn)行各種條件的判定測(cè)試,最終輸出覆蓋結(jié)果。
      [0021] 而在產(chǎn)品維護(hù)的過(guò)程中,編程人員或者維護(hù)人員通常只是修改了某些已經(jīng)存在很 久的代碼的一部分內(nèi)容。舉例而言,因功能調(diào)整需要對(duì)文件A進(jìn)行修改,假設(shè)文件A原來(lái)包含 1000行邏輯代碼,而本次修改僅是在文件A內(nèi)增加100行邏輯代碼,因此,此次代碼測(cè)試操作 實(shí)際上僅關(guān)注的是這100行邏輯代碼的覆蓋情況,而并非是整個(gè)1100行邏輯代碼的覆蓋情 況。
      [0022] 相關(guān)技術(shù)中容易想到的解決方案是將這100行邏輯代碼從文件A中分離處理,單獨(dú) 設(shè)置為文件A1,然后再對(duì)文件A1進(jìn)行測(cè)試。但事實(shí)并非這么簡(jiǎn)單,其原因在于:這100行邏輯 代碼分散在文件A中原有的1000行邏輯代碼中,不易分離;再者,即便能夠?qū)⑦@100行邏輯代 碼分離出來(lái),這100行邏輯代碼由于并非是一個(gè)完整的邏輯單元,故而無(wú)法獨(dú)立執(zhí)行。
      [0023] 針對(duì)上述的問(wèn)題,目前尚未提出有效的解決方案。

      【發(fā)明內(nèi)容】

      [0024] 本發(fā)明實(shí)施例提供了一種代碼測(cè)試覆蓋率統(tǒng)計(jì)結(jié)果的確定方法及裝置,以至少解 決相關(guān)技術(shù)中,無(wú)法獲取不同版本的代碼文件之間存在的差異代碼的代碼測(cè)試覆蓋情況的 技術(shù)問(wèn)題。
      [0025] 根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種代碼測(cè)試覆蓋率統(tǒng)計(jì)結(jié)果的確定方 法,包括:
      [0026] 獲取第一代碼文件與第二代碼文件之間的差異代碼,其中,與第一代碼文件對(duì)應(yīng) 的第一版本號(hào)的生成時(shí)間早于與第二代碼文件對(duì)應(yīng)的第二版本號(hào)的生成時(shí)間;對(duì)第二代碼 文件進(jìn)行代碼測(cè)試覆蓋率統(tǒng)計(jì),得到覆蓋率統(tǒng)計(jì)結(jié)果;根據(jù)差異代碼與覆蓋率統(tǒng)計(jì)結(jié)果從 覆蓋率統(tǒng)計(jì)結(jié)果中確定與差異代碼對(duì)應(yīng)的部分覆蓋率統(tǒng)計(jì)結(jié)果。
      [0027] 進(jìn)一步地,在獲取第一代碼文件與第二代碼文件之間的差異代碼之前,還包括:在 第一時(shí)刻確定將初始代碼文件更新為第一代碼文件,生成第一版本號(hào);在第二時(shí)刻確定將 第一代碼文件更新為第二代碼文件,生成第二版本號(hào),其中,第二時(shí)刻晚于第一時(shí)刻。
      [0028] 進(jìn)一步地,獲取第一代碼文件與第二代碼文件之間的差異代碼包括:通過(guò)版本管 理工具查詢第一版本號(hào)和第二版本號(hào);根據(jù)第一版本號(hào)獲取第一代碼文件以及根據(jù)第二版 本號(hào)獲取第二代碼文件;采用版本管理工具將第一代碼文件與第二代碼文件進(jìn)行比對(duì),確 定差異代碼。
      [0029]進(jìn)一步地,采用版本管理工具將第一代碼文件與第二代碼文件進(jìn)行比對(duì),確定差 異代碼包括:通過(guò)版本管理工具將第一代碼文件與第二代碼文件進(jìn)行比對(duì),獲取差異代碼 在第二代碼文件中分布的位置信息;根據(jù)位置信息從第二代碼文件中提取差異代碼。
      [0030] 進(jìn)一步地,根據(jù)差異代碼與覆蓋率統(tǒng)計(jì)結(jié)果從覆蓋率統(tǒng)計(jì)結(jié)果中確定與差異代碼 對(duì)應(yīng)的部分覆蓋率統(tǒng)計(jì)結(jié)果包括:根據(jù)覆蓋率統(tǒng)計(jì)結(jié)果獲取在差異代碼中已經(jīng)被覆蓋的第 一部分代碼以及未被覆蓋的第二部分代碼;通過(guò)第一部分代碼和/或第二部分代碼占據(jù)差 異代碼的比例確定部分覆蓋率統(tǒng)計(jì)結(jié)果。
      [0031] 進(jìn)一步地,在根據(jù)差異代碼與覆蓋率統(tǒng)計(jì)結(jié)果從覆蓋率統(tǒng)計(jì)結(jié)果中確定與差異代 碼對(duì)應(yīng)的部分覆蓋率統(tǒng)計(jì)結(jié)果之后,還包括:按照覆蓋率統(tǒng)計(jì)結(jié)果對(duì)待顯示的代碼進(jìn)行分 類,其中,待顯示的代碼包括:差異代碼以及差異代碼的上下文關(guān)聯(lián)代碼,上下文關(guān)聯(lián)代碼 包括:已經(jīng)被覆蓋的第三部分代碼和/或未被覆蓋的第四部分代碼;根據(jù)分類結(jié)果對(duì)待顯示 的代碼中包含的各個(gè)部分代碼進(jìn)行差異化顯示。
      [0032] 根據(jù)本發(fā)明實(shí)施例的另一方面,還提供了一種
      當(dāng)前第1頁(yè)1 2 3 4 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1