本發(fā)明涉及計(jì)算機(jī)軟件領(lǐng)域,具體而言,涉及一種代碼覆蓋率測(cè)試結(jié)果的處理方法及裝置。
背景技術(shù):
:相關(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%。需要說(shuō)明的是,上述示例中提到的代碼行僅為一種較為常用的度量方式。下面將對(duì)常用的幾種用于表示代碼覆蓋程度的度量方式進(jìn)行介紹:1)語(yǔ)句覆蓋(StatementCoverage)又被稱(chēng)為行覆蓋(LineCoverage),段覆蓋(SegmentCoverage),基本塊覆蓋(BasicBlockCoverage),此為最常用也是最常見(jiàn)的一種覆蓋方式,其度量被測(cè)代碼中每個(gè)可執(zhí)行語(yǔ)句是否被執(zhí)行到了。這里指的是“可執(zhí)行語(yǔ)句”,因此,便不會(huì)包括如C++語(yǔ)言的頭文件聲明、代碼注釋、空行等。此種覆蓋方式僅統(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)題。2)判定覆蓋(DecisionCoverage)又被稱(chēng)為分支覆蓋(BranchCoverage),所有邊界覆蓋(All-EdgesCoverage),其用于度量程序中每一個(gè)判定的分支是否都被測(cè)試完成。3)條件覆蓋(ConditionCoverage)用于度量判定中的每個(gè)子表達(dá)式結(jié)果true和false是否被測(cè)試完成。例如:語(yǔ)句ifa>0orb>0,這是一個(gè)組合條件,如果條件成立,則既有可能滿足a>0,也有可能滿足b>0,這兩者被稱(chēng)為整個(gè)條件語(yǔ)句的子條件。在某些情況下,測(cè)試人員需要明確知道軟件執(zhí)行代碼究竟是因?yàn)槟膫€(gè)子條件滿足而完成測(cè)試。需要說(shuō)明的是,“條件覆蓋”與“判定覆蓋”相比,執(zhí)行力度更強(qiáng),其原因在于:條件覆蓋需要使得每個(gè)判定過(guò)程中的每個(gè)判定條件均得到了兩個(gè)不同的判定結(jié)果;相反地,判定覆蓋則更關(guān)心整個(gè)條件是否成立,而無(wú)法確保每個(gè)判定條件均得到了兩個(gè)不同的判定結(jié)果。4)路徑覆蓋(PathCoverage)又被稱(chēng)為斷言覆蓋(PredicateCoverage),其用于度量是否函數(shù)的每一個(gè)分支都被執(zhí)行完成,即所有可能的分支都被執(zhí)行一遍。然而,當(dāng)執(zhí)行語(yǔ)句中有多個(gè)分支嵌套時(shí),需要對(duì)多個(gè)分支進(jìn)行排列組合,易造成測(cè)試路徑隨著分支的數(shù)量指數(shù)級(jí)別增加。在執(zhí)行代碼測(cè)試中的單元測(cè)試時(shí),代碼覆蓋率通常被作為衡量代碼測(cè)試成功率的重要指標(biāo),甚至,采用代碼覆蓋率來(lái)考核測(cè)試任務(wù)的完成情況,例如:代碼覆蓋率需要達(dá)到80%或90%。目前,針對(duì)代碼覆蓋率的測(cè)試工具主要包括但不限于:python語(yǔ)音中配置的coverage庫(kù),java中配置的相對(duì)應(yīng)的庫(kù),lpc語(yǔ)言,這些測(cè)試工具均支持對(duì)代碼覆蓋率的檢測(cè)。然而,現(xiàn)有的代碼覆蓋率測(cè)試工具僅能夠描述對(duì)特定靜態(tài)文件的覆蓋情況,其測(cè)試前提在于:在測(cè)試一個(gè)或多個(gè)代碼文件的覆蓋情況時(shí),這些代碼文件是不能發(fā)生更改的。但是,在代碼開(kāi)發(fā)的過(guò)程中,研發(fā)人員經(jīng)常會(huì)對(duì)一個(gè)代碼文件進(jìn)行反復(fù)修改,以達(dá)到功能迭代、修正bug等目的。并且,研發(fā)項(xiàng)目的復(fù)雜度越高,其對(duì)應(yīng)代碼文件的修改的次數(shù)也會(huì)隨之增多。在任何研發(fā)階段開(kāi)始進(jìn)行的代碼覆蓋率測(cè)試,都無(wú)法確保當(dāng)前測(cè)試的代碼文件為最終版本,后續(xù)不會(huì)再對(duì)此代碼文件進(jìn)行修改。除此之外,基于協(xié)同工作方面的考慮,針對(duì)同一份代碼文件可能會(huì)有多個(gè)人在進(jìn)行修改,等到特定研發(fā)階段再對(duì)各自修改的部分進(jìn)行合并。一旦合并這些修改部分也即意味著代碼文件發(fā)生變化。另外,如果在執(zhí)行代碼覆蓋率測(cè)試的過(guò)程中,測(cè)試程序發(fā)生異常退出或者其運(yùn)行的測(cè)試環(huán)境發(fā)生硬件故障,則意味著已經(jīng)得到的代碼測(cè)試的覆蓋情況可能丟失,由此將會(huì)導(dǎo)致復(fù)雜度較高的開(kāi)發(fā)項(xiàng)目所進(jìn)行的一周,甚至數(shù)周之久的代碼測(cè)試工作付之東流。針對(duì)上述的問(wèn)題,目前尚未提出有效的解決方案。技術(shù)實(shí)現(xiàn)要素:本發(fā)明實(shí)施例提供了一種代碼覆蓋率測(cè)試結(jié)果的處理方法及裝置,以至少解決相關(guān)技術(shù)中所提供的代碼覆蓋率測(cè)試方式僅能夠描述對(duì)特定靜態(tài)代碼文件的覆蓋情況,而無(wú)法滿足動(dòng)態(tài)更新的代碼文件的測(cè)試需求的技術(shù)問(wèn)題。根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種代碼覆蓋率測(cè)試結(jié)果的處理方法,包括:獲取與當(dāng)前執(zhí)行的代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的代碼覆蓋率測(cè)試結(jié)果;將代碼覆蓋率測(cè)試結(jié)果導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域,其中,預(yù)設(shè)存儲(chǔ)區(qū)域用于對(duì)代碼覆蓋率測(cè)試結(jié)果進(jìn)行持久化存儲(chǔ)??蛇x地,獲取代碼覆蓋率測(cè)試結(jié)果包括:從終端的內(nèi)存中讀取代碼覆蓋率測(cè)試結(jié)果,其中,終端用于執(zhí)行代碼覆蓋率測(cè)試操作??蛇x地,將代碼覆蓋率測(cè)試結(jié)果導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域包括:確定待使用的數(shù)據(jù)導(dǎo)出格式,其中,數(shù)據(jù)導(dǎo)出格式至少包括:代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的svn版本號(hào)、代碼覆蓋率測(cè)試任務(wù)的任務(wù)編號(hào)、代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的原始代碼文件的校驗(yàn)碼、原始代碼文件的代碼行數(shù)、代碼覆蓋率測(cè)試結(jié)果的壓縮編碼方式;根據(jù)數(shù)據(jù)導(dǎo)出格式和代碼覆蓋率測(cè)試結(jié)果生成預(yù)設(shè)類(lèi)型存儲(chǔ)文件;將預(yù)設(shè)類(lèi)型存儲(chǔ)文件導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域。可選地,在將代碼覆蓋率測(cè)試結(jié)果導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域之后,還包括:確定終端完成重新啟動(dòng);判斷代碼覆蓋率測(cè)試任務(wù)是否已經(jīng)完成測(cè)試;如果否,則從預(yù)設(shè)存儲(chǔ)區(qū)域內(nèi)獲取預(yù)設(shè)類(lèi)型存儲(chǔ)文件;從預(yù)設(shè)類(lèi)型存儲(chǔ)文件中還原出代碼覆蓋率測(cè)試結(jié)果,并將代碼覆蓋率測(cè)試結(jié)果導(dǎo)入至內(nèi)存??蛇x地,在將代碼覆蓋率測(cè)試結(jié)果導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域之后,還包括:確定當(dāng)前存在對(duì)代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的原始代碼文件執(zhí)行的更新操作;根據(jù)原始代碼文件與已更新代碼文件之間的差異部分代碼生成與已更新代碼文件對(duì)應(yīng)的更新后的代碼覆蓋率測(cè)試結(jié)果??蛇x地,根據(jù)差異部分代碼生成更新后的代碼覆蓋率測(cè)試結(jié)果包括:獲取原始代碼文件、已更新代碼文件以及代碼覆蓋率測(cè)試結(jié)果;將原始代碼文件與已更新代碼文件進(jìn)行比對(duì),確定差異部分代碼;根據(jù)差異部分代碼在原始代碼文件的代碼行與已更新代碼文件的代碼行之間建立對(duì)應(yīng)關(guān)系;通過(guò)對(duì)應(yīng)關(guān)系生成更新后的代碼覆蓋率測(cè)試結(jié)果。根據(jù)本發(fā)明實(shí)施例的另一方面,還提供了一種代碼覆蓋率測(cè)試結(jié)果的處理裝置,包括:第一獲取模塊,用于獲取與當(dāng)前執(zhí)行的代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的代碼覆蓋率測(cè)試結(jié)果;處理模塊,用于將代碼覆蓋率測(cè)試結(jié)果導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域,其中,預(yù)設(shè)存儲(chǔ)區(qū)域用于對(duì)代碼覆蓋率測(cè)試結(jié)果進(jìn)行持久化存儲(chǔ)。可選地,第一獲取模塊,用于從終端的內(nèi)存中讀取代碼覆蓋率測(cè)試結(jié)果,其中,終端用于執(zhí)行代碼覆蓋率測(cè)試操作。可選地,處理模塊包括:第一確定單元,用于確定待使用的數(shù)據(jù)導(dǎo)出格式,其中,數(shù)據(jù)導(dǎo)出格式至少包括:代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的svn版本號(hào)、代碼覆蓋率測(cè)試任務(wù)的任務(wù)編號(hào)、代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的原始代碼文件的校驗(yàn)碼、原始代碼文件的代碼行數(shù)、代碼覆蓋率測(cè)試結(jié)果的壓縮編碼方式;第一生成單元,用于根據(jù)數(shù)據(jù)導(dǎo)出格式和代碼覆蓋率測(cè)試結(jié)果生成預(yù)設(shè)類(lèi)型存儲(chǔ)文件;處理單元,用于將預(yù)設(shè)類(lèi)型存儲(chǔ)文件導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域??蛇x地,上述裝置還包括:第一確定模塊,用于確定終端完成重新啟動(dòng);判斷模塊,用于判斷代碼覆蓋率測(cè)試任務(wù)是否已經(jīng)完成測(cè)試;第二獲取模塊,用于在判斷模塊輸出為否時(shí),從預(yù)設(shè)存儲(chǔ)區(qū)域內(nèi)獲取預(yù)設(shè)類(lèi)型存儲(chǔ)文件;還原模塊,用于從預(yù)設(shè)類(lèi)型存儲(chǔ)文件中還原出代碼覆蓋率測(cè)試結(jié)果,并將代碼覆蓋率測(cè)試結(jié)果導(dǎo)入至內(nèi)存??蛇x地,上述裝置還包括:第二確定模塊,用于確定當(dāng)前存在對(duì)代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的原始代碼文件執(zhí)行的更新操作;生成模塊,用于根據(jù)原始代碼文件與已更新代碼文件之間的差異部分代碼生成與已更新代碼文件對(duì)應(yīng)的更新后的代碼覆蓋率測(cè)試結(jié)果??蛇x地,生成模塊包括:獲取單元,用于獲取原始代碼文件、已更新代碼文件以及代碼覆蓋率測(cè)試結(jié)果;第二確定單元,用于將原始代碼文件與已更新代碼文件進(jìn)行比對(duì),確定差異部分代碼;建立單元,用于根據(jù)差異部分代碼在原始代碼文件的代碼行與已更新代碼文件的代碼行之間建立對(duì)應(yīng)關(guān)系;第二生成單元,用于通過(guò)對(duì)應(yīng)關(guān)系生成更新后的代碼覆蓋率測(cè)試結(jié)果。在本發(fā)明實(shí)施例中,采用獲取與當(dāng)前執(zhí)行的代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的代碼覆蓋率測(cè)試結(jié)果,并將代碼覆蓋率測(cè)試結(jié)果導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域的方式,通過(guò)預(yù)設(shè)存儲(chǔ)區(qū)域?qū)Υa覆蓋率測(cè)試結(jié)果進(jìn)行持久化存儲(chǔ),達(dá)到了針對(duì)在執(zhí)行代碼覆蓋率測(cè)試的過(guò)程中,測(cè)試程序發(fā)生異常退出或者其運(yùn)行的測(cè)試環(huán)境發(fā)生硬件故障的情況,代碼覆蓋率測(cè)試測(cè)試的中間結(jié)果可以實(shí)時(shí)存儲(chǔ)至預(yù)設(shè)存儲(chǔ)區(qū)域,以便在測(cè)試程序或者其運(yùn)行的測(cè)試環(huán)境被修復(fù)后,通過(guò)對(duì)運(yùn)行測(cè)試的終端進(jìn)行重啟可以恢復(fù)先前已經(jīng)得到的代碼覆蓋率測(cè)試結(jié)果的目的,從而實(shí)現(xiàn)了繼續(xù)完成代碼覆蓋率測(cè)試。極大地增加了代碼覆蓋率測(cè)試工作的抗風(fēng)險(xiǎn)性的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中所提供的代碼覆蓋率測(cè)試方式僅能夠描述對(duì)特定靜態(tài)代碼文件的覆蓋情況,而無(wú)法滿足動(dòng)態(tài)更新的代碼文件的測(cè)試需求的技術(shù)問(wèn)題。附圖說(shuō)明此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:圖1是根據(jù)本發(fā)明實(shí)施例的代碼覆蓋率測(cè)試結(jié)果的處理方法的流程圖;圖2是根據(jù)本發(fā)明實(shí)施例的代碼覆蓋率測(cè)試結(jié)果的處理裝置的流程圖;圖3是根據(jù)本發(fā)明優(yōu)選實(shí)施例的代碼覆蓋率測(cè)試結(jié)果的處理裝置的流程圖。具體實(shí)施方式為了使本
技術(shù)領(lǐng)域:
的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。需要說(shuō)明的是,本發(fā)明的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類(lèi)似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。根據(jù)本發(fā)明實(shí)施例,提供了一種代碼覆蓋率測(cè)試結(jié)果的處理方法的實(shí)施例,需要說(shuō)明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。圖1是根據(jù)本發(fā)明實(shí)施例的代碼覆蓋率測(cè)試結(jié)果的處理方法的流程圖,如圖1所示,該方法可以包括如下步驟:步驟S12,獲取與當(dāng)前執(zhí)行的代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的代碼覆蓋率測(cè)試結(jié)果;步驟S14,將代碼覆蓋率測(cè)試結(jié)果導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域,其中,預(yù)設(shè)存儲(chǔ)區(qū)域用于對(duì)代碼覆蓋率測(cè)試結(jié)果進(jìn)行持久化存儲(chǔ)。采用上述步驟,可以實(shí)現(xiàn)通過(guò)預(yù)設(shè)存儲(chǔ)區(qū)域?qū)Υa覆蓋率測(cè)試結(jié)果進(jìn)行持久化存儲(chǔ),達(dá)到了針對(duì)在執(zhí)行代碼覆蓋率測(cè)試的過(guò)程中,測(cè)試程序發(fā)生異常退出或者其運(yùn)行的測(cè)試環(huán)境發(fā)生硬件故障的情況,代碼覆蓋率測(cè)試測(cè)試的中間結(jié)果可以實(shí)時(shí)存儲(chǔ)至預(yù)設(shè)存儲(chǔ)區(qū)域,以便在測(cè)試程序或者其運(yùn)行的測(cè)試環(huán)境被修復(fù)后,通過(guò)對(duì)運(yùn)行測(cè)試的終端進(jìn)行重啟可以恢復(fù)先前已經(jīng)得到的代碼覆蓋率測(cè)試結(jié)果的目的,從而實(shí)現(xiàn)了繼續(xù)完成代碼覆蓋率測(cè)試。極大地增加了代碼覆蓋率測(cè)試工作的抗風(fēng)險(xiǎn)性的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中所提供的代碼覆蓋率測(cè)試方式僅能夠描述對(duì)特定靜態(tài)代碼文件的覆蓋情況,而無(wú)法滿足動(dòng)態(tài)更新的代碼文件的測(cè)試需求的技術(shù)問(wèn)題??蛇x地,在步驟S12中,獲取代碼覆蓋率測(cè)試結(jié)果可以進(jìn)一步包括以下執(zhí)行步驟:步驟S121,從終端的內(nèi)存中讀取代碼覆蓋率測(cè)試結(jié)果,其中,終端用于執(zhí)行代碼覆蓋率測(cè)試操作。為了應(yīng)對(duì)測(cè)試程序發(fā)生異常退出或者其運(yùn)行的測(cè)試環(huán)境發(fā)生硬件故障等突發(fā)狀況,應(yīng)當(dāng)盡量確保代碼覆蓋率測(cè)試結(jié)果持久化。即,可以對(duì)代碼覆蓋率測(cè)試過(guò)程中已經(jīng)得到的代碼覆蓋率測(cè)試結(jié)果進(jìn)行導(dǎo)出存盤(pán),并且在需要恢復(fù)覆蓋率測(cè)試結(jié)果時(shí),還可以重新加載代碼覆蓋率測(cè)試結(jié)果。具體地,可以通過(guò)提供應(yīng)用程序編程接口(API)讀取內(nèi)存中記錄的特定代碼文件的代碼覆蓋率測(cè)試結(jié)果??蛇x地,在步驟S14中,將代碼覆蓋率測(cè)試結(jié)果導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域可以包括以下執(zhí)行步驟:步驟S141,確定待使用的數(shù)據(jù)導(dǎo)出格式,其中,數(shù)據(jù)導(dǎo)出格式至少包括:代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的svn版本號(hào)、代碼覆蓋率測(cè)試任務(wù)的任務(wù)編號(hào)、代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的原始代碼文件的校驗(yàn)碼、原始代碼文件的代碼行數(shù)、代碼覆蓋率測(cè)試結(jié)果的壓縮編碼方式;步驟S142,根據(jù)數(shù)據(jù)導(dǎo)出格式和代碼覆蓋率測(cè)試結(jié)果生成預(yù)設(shè)類(lèi)型存儲(chǔ)文件;步驟S143,將預(yù)設(shè)類(lèi)型存儲(chǔ)文件導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域。在優(yōu)選實(shí)施例中,可以通過(guò)提供API對(duì)內(nèi)存中記錄的特定代碼文件的代碼覆蓋率測(cè)試結(jié)果進(jìn)行序列化導(dǎo)出,其中,序列化的數(shù)據(jù)格式可以根據(jù)特定需求預(yù)先配置完成。序列化導(dǎo)出的含義是指將內(nèi)存中存儲(chǔ)的數(shù)據(jù)按照預(yù)設(shè)格式存儲(chǔ)至預(yù)設(shè)存儲(chǔ)區(qū)域(例如:本地的物理硬盤(pán)或互聯(lián)網(wǎng)的安全網(wǎng)盤(pán))??紤]到內(nèi)存中的數(shù)據(jù)存儲(chǔ)是臨時(shí)的,程序結(jié)束運(yùn)行后就不復(fù)存在了。而物理硬盤(pán)或安全網(wǎng)盤(pán)上的數(shù)據(jù)存儲(chǔ)是持久的。因此,指定上述格式的過(guò)程即為“序列化”。具體地,序列化的數(shù)據(jù)格式示例如下:##Desc/*Desc部分包含了該代碼文件的基本信息*/svn_ver391430/*svn_ver表示覆蓋率任務(wù)的對(duì)應(yīng)的svn版本號(hào)*/cover_ver808/*cover_ver表示本次代碼覆蓋率測(cè)試任務(wù)的編號(hào)*/md5de2970093ec13afb43ebe38a3e27534e/*md5是該代碼文件的校驗(yàn)碼,用來(lái)驗(yàn)證文件是否相同*/total_linecnt2534/*total_linecnt表示該代碼文件的總行數(shù)*/##Bitmap/*Bitmap部分表示已經(jīng)存儲(chǔ)的與代碼文件對(duì)應(yīng)的代碼覆蓋率測(cè)試結(jié)果,其為本申請(qǐng)最關(guān)鍵的部分*/00020000000000000000000000000000E514001A10000000000000000000E100000000000000000000000000000000000000000000000000000000000000000000008100000C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002A60CA05408E10000000000000000000000000000000000000000000000000000000000000C00000000000000000000000000000000000008E0000000000000000000000000000000000000000000000080280000000000000000000000000000000000000000000000000000000000000000000000000000上述字符串存儲(chǔ)了該示例中對(duì)應(yīng)于2534行的代碼覆蓋率測(cè)試結(jié)果,即每一行代碼是否已經(jīng)被覆蓋。為了節(jié)省存儲(chǔ)空間,該示例中并沒(méi)有采用一個(gè)字符對(duì)應(yīng)一行代碼的覆蓋結(jié)果,而是采用了壓縮編碼的方式,壓縮后的結(jié)果大概是每行有64個(gè)字符,每個(gè)字符實(shí)際上可以對(duì)應(yīng)存儲(chǔ)四行代碼的代碼覆蓋率測(cè)試結(jié)果(相當(dāng)于壓縮率為25%)。在處理器通過(guò)對(duì)上述字符串進(jìn)行解壓縮運(yùn)算后便可還原出內(nèi)存中存儲(chǔ)的數(shù)據(jù)格式。上述示例最終可以輸出成預(yù)設(shè)類(lèi)型存儲(chǔ)文件(例如:.cov文件)。在執(zhí)行代碼覆蓋率測(cè)試的過(guò)程中,需要定時(shí)將代碼覆蓋率測(cè)試結(jié)果導(dǎo)出至上述預(yù)設(shè)存儲(chǔ)區(qū)域,以及因測(cè)試過(guò)程結(jié)束導(dǎo)致測(cè)試程序退出時(shí),也需要將代碼覆蓋率測(cè)試結(jié)果導(dǎo)出至上述預(yù)設(shè)存儲(chǔ)區(qū)域。需要說(shuō)明的是,為了能夠避免在設(shè)定的相鄰兩次導(dǎo)出時(shí)間之間,因測(cè)試程序發(fā)生異常退出或者其運(yùn)行的測(cè)試環(huán)境發(fā)生硬件故障等突發(fā)狀況造成這兩次導(dǎo)出時(shí)間之間得到的代碼覆蓋率測(cè)試數(shù)據(jù)發(fā)生丟失,因此,可以采用以下兩種改進(jìn)方式來(lái)降低測(cè)試數(shù)據(jù)發(fā)生丟失的可能性:方式一、為降低異常故障所導(dǎo)致的測(cè)試數(shù)據(jù)丟失,可以將相鄰兩次定時(shí)存盤(pán)的時(shí)間間隔縮短,提升定時(shí)存盤(pán)的存儲(chǔ)頻率。方式二、提供主動(dòng)存盤(pán)的功能接口。例如:測(cè)試人員在測(cè)試完重要流程后,可以主動(dòng)點(diǎn)擊“存盤(pán)”接口,其相當(dāng)于在編寫(xiě)word文檔的過(guò)程中,由操作人員主動(dòng)觸發(fā)的存儲(chǔ)(ctrl+s)功能。可選地,在步驟S14,將代碼覆蓋率測(cè)試結(jié)果導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域之后,還可以包括以下執(zhí)行步驟:步驟S15,確定終端完成重新啟動(dòng);判斷代碼覆蓋率測(cè)試任務(wù)是否已經(jīng)完成測(cè)試;步驟S16,如果否,則從預(yù)設(shè)存儲(chǔ)區(qū)域內(nèi)獲取預(yù)設(shè)類(lèi)型存儲(chǔ)文件;步驟S17,從預(yù)設(shè)類(lèi)型存儲(chǔ)文件中還原出代碼覆蓋率測(cè)試結(jié)果,并將代碼覆蓋率測(cè)試結(jié)果導(dǎo)入至內(nèi)存。在優(yōu)選實(shí)施例中,通過(guò)API可以將上述.cov文件存儲(chǔ)的代碼覆蓋率測(cè)試結(jié)果還原至內(nèi)存中,作為當(dāng)前最新的代碼覆蓋率測(cè)試結(jié)果。在運(yùn)行測(cè)試程序的終端重新啟動(dòng)時(shí),如果檢測(cè)到尚未完成的代碼覆蓋率測(cè)試任務(wù),則在對(duì)代碼文件進(jìn)行校驗(yàn)后,從預(yù)設(shè)存儲(chǔ)區(qū)域自動(dòng)恢復(fù)與該代碼文件對(duì)應(yīng)的代碼覆蓋率測(cè)試結(jié)果??蛇x地,在步驟S14,將代碼覆蓋率測(cè)試結(jié)果導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域之后,還可以包括以下執(zhí)行步驟:步驟S18,確定當(dāng)前存在對(duì)代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的原始代碼文件執(zhí)行的更新操作;步驟S19,根據(jù)原始代碼文件與已更新代碼文件之間的差異部分代碼生成與已更新代碼文件對(duì)應(yīng)的更新后的代碼覆蓋率測(cè)試結(jié)果。當(dāng)一個(gè)代碼文件發(fā)生更新的時(shí)候,需要將原代碼文件對(duì)應(yīng)的代碼覆蓋率測(cè)試結(jié)果映射到更新后的代碼文件上。上述代碼文件更新可以包括但不限于以下至少之一:(1)熱更新,是指在應(yīng)用程序運(yùn)行的過(guò)程中,不依賴(lài)關(guān)閉、重啟該應(yīng)用程序而達(dá)到修改程序功能的目的,其在軟件開(kāi)發(fā)的過(guò)程中經(jīng)常被使用到。(2)svn分支切換,是指在團(tuán)隊(duì)協(xié)同工作模式下,同一份代碼文件可能需要被若干研發(fā)人員或測(cè)試人員所修改,換言之,當(dāng)一名測(cè)試人員正在對(duì)代碼文件執(zhí)行代碼覆蓋率測(cè)試的過(guò)程中,其他研發(fā)人員或測(cè)試人員也在對(duì)該代碼文件進(jìn)行修改,并且必須要根據(jù)這些修改對(duì)代碼文件進(jìn)行更新,否則將阻礙尚未執(zhí)行的代碼覆蓋率測(cè)試任務(wù)。此時(shí),便需要切換svn分支,更新至包含其他研發(fā)人員或測(cè)試人員的最新修改記錄的分支。這實(shí)際上是會(huì)改變代碼文件內(nèi)容的。上述兩種代碼文件更新方式由于已經(jīng)改變了當(dāng)前正在測(cè)試的代碼文件的文件結(jié)構(gòu)(主要體現(xiàn)在代碼文件的行號(hào)發(fā)生變化),因此,會(huì)使得之前測(cè)試記錄的代碼覆蓋率測(cè)試結(jié)果發(fā)生紊亂。完成映射的過(guò)程可以包括:對(duì)于每個(gè)正在測(cè)試的代碼文件,均需要存儲(chǔ)一份與該代碼文件對(duì)應(yīng)的副本。當(dāng)代碼文件發(fā)生更新后,通過(guò)調(diào)用映射指令,將原代碼文件上記錄的源代碼與新后的代碼文件上記錄的源代碼進(jìn)行比對(duì),輸出兩份代碼文件的差異部分(例如:可以使用unix系統(tǒng)下的diff程序來(lái)輔助分析以獲取該差異部分)。根據(jù)diff程序的輔助分析結(jié)果與當(dāng)前存儲(chǔ)的代碼覆蓋率測(cè)試結(jié)果進(jìn)行映射調(diào)整。由于diff程序和代碼覆蓋率測(cè)試結(jié)果都是基于行來(lái)實(shí)現(xiàn)的,因此,這個(gè)映射過(guò)程具備可實(shí)施性,由此來(lái)確保先前得到的代碼覆蓋率測(cè)試結(jié)果不會(huì)因代碼文件發(fā)生更新而丟失。考慮到測(cè)試人員在執(zhí)行代碼覆蓋率測(cè)試過(guò)程中,無(wú)法及時(shí)獲知當(dāng)前測(cè)試的代碼文件是否發(fā)生變化,因此,只要能夠確定在測(cè)試過(guò)程中執(zhí)行過(guò)熱更新指令或者是svn分支切換指令,則無(wú)論代碼文件是否因此發(fā)生改變,都需要執(zhí)行一次映射操作??蛇x地,在步驟S19中,根據(jù)差異部分代碼生成更新后的代碼覆蓋率測(cè)試結(jié)果可以包括以下執(zhí)行步驟:步驟S191,獲取原始代碼文件、已更新代碼文件以及代碼覆蓋率測(cè)試結(jié)果;步驟S192,將原始代碼文件與已更新代碼文件進(jìn)行比對(duì),確定差異部分代碼;步驟S193,根據(jù)差異部分代碼在原始代碼文件的代碼行與已更新代碼文件的代碼行之間建立對(duì)應(yīng)關(guān)系;步驟S194,通過(guò)對(duì)應(yīng)關(guān)系生成更新后的代碼覆蓋率測(cè)試結(jié)果。在具體執(zhí)行映射操作的過(guò)程中,已知信息可以包括:修改前的原始代碼文件(oldfile),修改后的已更新代碼文件(newfile)以及對(duì)應(yīng)于oldfile的代碼覆蓋率測(cè)試結(jié)果(coverage_of_oldfile)。首先,通過(guò)diff程序分析得到預(yù)測(cè)的diff分析結(jié)果,以確定oldfile與newfile之間存在的差異,即,哪些代碼行不一致。其次,通過(guò)解析上述diff分析結(jié)果,最終輸出oldfile中的各行代碼與newfile中的各行代碼之間的對(duì)應(yīng)關(guān)系表(linemapping),其可以抽象成如表1所呈現(xiàn)的格式:表1oldfilenewfile行號(hào)112無(wú)3243……NN+2然后,先根據(jù)coverage_of_oldfile可以確定在oldfile中的哪些行代碼已經(jīng)被覆蓋,再根據(jù)上述對(duì)應(yīng)關(guān)系表linemapping,便可以生成與newfile對(duì)應(yīng)的代碼覆蓋率測(cè)試結(jié)果coverage_of_newfile。至此,newfile與coverage_of_newfile便可以配套使用,以完成映射計(jì)算的整個(gè)過(guò)程。通過(guò)代碼覆蓋率測(cè)試結(jié)果的映射方式。在執(zhí)行代碼覆蓋率測(cè)試的過(guò)程中,即便因工作需要對(duì)代碼文件進(jìn)行更新,仍然可以繼續(xù)完成代碼覆蓋率測(cè)試,而無(wú)需重新開(kāi)始。根據(jù)本發(fā)明實(shí)施例,還提供了一種代碼覆蓋率測(cè)試結(jié)果的處理裝置的實(shí)施例,圖2是根據(jù)本發(fā)明實(shí)施例的代碼覆蓋率測(cè)試結(jié)果的處理裝置的流程圖,如圖2所示,該裝置可以包括:第一獲取模塊10,用于獲取與當(dāng)前執(zhí)行的代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的代碼覆蓋率測(cè)試結(jié)果;處理模塊20,用于將代碼覆蓋率測(cè)試結(jié)果導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域,其中,預(yù)設(shè)存儲(chǔ)區(qū)域用于對(duì)代碼覆蓋率測(cè)試結(jié)果進(jìn)行持久化存儲(chǔ)??蛇x地,第一獲取模塊10,用于從終端的內(nèi)存中讀取代碼覆蓋率測(cè)試結(jié)果,其中,終端用于執(zhí)行代碼覆蓋率測(cè)試操作??蛇x地,圖3是根據(jù)本發(fā)明優(yōu)選實(shí)施例的代碼覆蓋率測(cè)試結(jié)果的處理裝置的流程圖,如圖3所示,處理模塊20可以包括:第一確定單元200,用于確定待使用的數(shù)據(jù)導(dǎo)出格式,其中,數(shù)據(jù)導(dǎo)出格式可以包括但不限于:代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的svn版本號(hào)、代碼覆蓋率測(cè)試任務(wù)的任務(wù)編號(hào)、代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的原始代碼文件的校驗(yàn)碼、原始代碼文件的代碼行數(shù)、代碼覆蓋率測(cè)試結(jié)果的壓縮編碼方式;第一生成單元202,用于根據(jù)數(shù)據(jù)導(dǎo)出格式和代碼覆蓋率測(cè)試結(jié)果生成預(yù)設(shè)類(lèi)型存儲(chǔ)文件;處理單元204,用于將預(yù)設(shè)類(lèi)型存儲(chǔ)文件導(dǎo)出至預(yù)設(shè)存儲(chǔ)區(qū)域。可選地,如圖3所示,上述裝置還可以包括:第一確定模塊30,用于確定終端完成重新啟動(dòng);判斷模塊40,用于判斷代碼覆蓋率測(cè)試任務(wù)是否已經(jīng)完成測(cè)試;第二獲取模塊50,用于在判斷模塊輸出為否時(shí),從預(yù)設(shè)存儲(chǔ)區(qū)域內(nèi)獲取預(yù)設(shè)類(lèi)型存儲(chǔ)文件;還原模塊60,用于從預(yù)設(shè)類(lèi)型存儲(chǔ)文件中還原出代碼覆蓋率測(cè)試結(jié)果,并將代碼覆蓋率測(cè)試結(jié)果導(dǎo)入至內(nèi)存??蛇x地,如圖3所示,上述裝置還可以包括:第二確定模塊70,用于確定當(dāng)前存在對(duì)代碼覆蓋率測(cè)試任務(wù)對(duì)應(yīng)的原始代碼文件執(zhí)行的更新操作;生成模塊80,用于根據(jù)原始代碼文件與已更新代碼文件之間的差異部分代碼生成與已更新代碼文件對(duì)應(yīng)的更新后的代碼覆蓋率測(cè)試結(jié)果??蛇x地,如圖3所示,生成模塊80可以包括:獲取單元800,用于獲取原始代碼文件、已更新代碼文件以及代碼覆蓋率測(cè)試結(jié)果;第二確定單元802,用于將原始代碼文件與已更新代碼文件進(jìn)行比對(duì),確定差異部分代碼;建立單元804,用于根據(jù)差異部分代碼在原始代碼文件的代碼行與已更新代碼文件的代碼行之間建立對(duì)應(yīng)關(guān)系;第二生成單元806,用于通過(guò)對(duì)應(yīng)關(guān)系生成更新后的代碼覆蓋率測(cè)試結(jié)果。上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。在本發(fā)明的上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒(méi)有詳述的部分,可以參見(jiàn)其他實(shí)施例的相關(guān)描述。在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的技術(shù)內(nèi)容,可通過(guò)其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,可以為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以?xún)蓚€(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷(xiāo)售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可為個(gè)人計(jì)算機(jī)、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤(pán)、只讀存儲(chǔ)器(ROM,Read-OnlyMemory)、隨機(jī)存取存儲(chǔ)器(RAM,RandomAccessMemory)、移動(dòng)硬盤(pán)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本
技術(shù)領(lǐng)域:
的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。當(dāng)前第1頁(yè)1 2 3