亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

覆蓋率檢測(cè)方法、裝置和設(shè)備與流程

文檔序號(hào):12123642閱讀:245來源:國(guó)知局
覆蓋率檢測(cè)方法、裝置和設(shè)備與流程

本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種覆蓋率檢測(cè)方法、裝置和設(shè)備。



背景技術(shù):

代碼覆蓋率測(cè)試,是軟件測(cè)試過程中最重要的測(cè)試方法和測(cè)試效果衡量標(biāo)準(zhǔn)之一,覆蓋率指的是源代碼執(zhí)行過程中被測(cè)試所覆蓋到代碼的比例和程度,通常用百分比表示。

對(duì)不同的編程語(yǔ)言來說,都有相應(yīng)的檢測(cè)代碼覆蓋率的方法。目前較主流的游戲服務(wù)器架構(gòu)之一,是基于C++底層和Python上層構(gòu)建實(shí)現(xiàn)。目前針對(duì)Python代碼覆蓋率的檢測(cè),最常用的是基于python類庫(kù)coverage的技術(shù)方案。具體的是利用Python的sys模塊中提供settrace函數(shù),跟蹤代碼的執(zhí)行情況,將覆蓋率數(shù)據(jù)存儲(chǔ)到Collector中的Stack中。每當(dāng)開始采集時(shí),Collector不斷執(zhí)行入棧操作,停止采集時(shí),通過出棧操作即可獲取已采集的覆蓋率信息。

然而,在實(shí)際的游戲服務(wù)器代碼覆蓋率測(cè)試過程中,通常是不同的測(cè)試人員各自維護(hù)一個(gè)游戲服務(wù)器,每個(gè)游戲服務(wù)器獨(dú)立運(yùn)行和進(jìn)行相關(guān)測(cè)試,因此采用上述方式得到某個(gè)游戲服務(wù)器的覆蓋率數(shù)據(jù),無法得到所有人針對(duì)某個(gè)版本代碼進(jìn)行覆蓋率測(cè)試的結(jié)果。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明實(shí)施例提供一種覆蓋率檢測(cè)方法、裝置和設(shè)備,用于解決采用上述方式得到某個(gè)游戲服務(wù)器的覆蓋率數(shù)據(jù),無法得到所有人針對(duì)某個(gè)版本代碼進(jìn)行覆蓋率測(cè)試的結(jié)果的問題。

本發(fā)明第一方面提供一種覆蓋率檢測(cè)方法,包括:

接收至少兩個(gè)服務(wù)器發(fā)送的程序執(zhí)行數(shù)據(jù);所述程序執(zhí)行數(shù)據(jù)包括每個(gè)文件的標(biāo)識(shí)信息;

根據(jù)每個(gè)文件的標(biāo)識(shí)信息,獲取預(yù)設(shè)的第一文件的第一程序執(zhí)行數(shù)據(jù);所述第一程序數(shù)據(jù)是將所述至少一個(gè)服務(wù)器發(fā)送的所有程序執(zhí)行數(shù)據(jù)中標(biāo)識(shí)信息與所述第一文件的標(biāo)識(shí)信息相同的程序執(zhí)行數(shù)據(jù)進(jìn)行合并得到的;

解析獲取所述第一文件對(duì)應(yīng)的源代碼文件的總代碼行數(shù);

根據(jù)所述第一程序執(zhí)行數(shù)據(jù)和所述總代碼行數(shù),計(jì)算獲取所述第一程序代碼當(dāng)前的總體覆蓋率。

可選的,所述方法還包括:

顯示所述第一文件當(dāng)前的所述總體覆蓋率。

可選的,文件的標(biāo)識(shí)信息包括所述文件所屬項(xiàng)目名稱、所述文件所屬分支名稱和所述文件的代碼版本號(hào)。

可選的,所述第一文件所屬項(xiàng)目名稱為X1,所屬分支為T1,版本號(hào)為Y;則所述根據(jù)每個(gè)文件的標(biāo)識(shí)信息,獲取預(yù)設(shè)的第一文件的第一程序執(zhí)行數(shù)據(jù),包括:

將每個(gè)程序執(zhí)行數(shù)據(jù)中所屬項(xiàng)目名稱為X1、所屬分支為T1、且版本號(hào)為Y的程序執(zhí)行數(shù)據(jù)做并集處理,得到所述第一程序執(zhí)行數(shù)據(jù)。

可選的,所述第一程序執(zhí)行數(shù)據(jù)還包括所述第一文件被執(zhí)行的代碼行號(hào),所述根據(jù)所述第一程序執(zhí)行數(shù)據(jù)和所述總代碼行數(shù),計(jì)算獲取所述第一程序代碼當(dāng)前的總體覆蓋率,包括:

根據(jù)所述被執(zhí)行的代碼行號(hào),獲取所述第一文件中已執(zhí)行代碼的行數(shù);

根據(jù)所述已執(zhí)行代碼的行數(shù)Le和所述總代碼行數(shù)Lt,采用R=Le/Lt計(jì)算得到所述第一文件當(dāng)前的總體覆蓋率R。

可選的,所述解析獲取所述第一文件對(duì)應(yīng)的源代碼文件的總代碼行數(shù),包括:

對(duì)所述源代碼文件進(jìn)行解析處理,剔除所述源代碼文件中的空白行和注釋行,得到所述源代碼文件的所述總代碼行數(shù)。

本發(fā)明第二方面提供一種覆蓋率檢測(cè)方法,包括:

在執(zhí)行文件的程序代碼的過程中,調(diào)用數(shù)據(jù)收集函數(shù)實(shí)時(shí)獲取所述文件的程序執(zhí)行數(shù)據(jù);所述程序執(zhí)行數(shù)據(jù)包括所述文件的標(biāo)識(shí)信息;

將所述程序執(zhí)行數(shù)據(jù)發(fā)送給覆蓋率服務(wù)端,以使所述覆蓋率服務(wù)端根據(jù)所述程序執(zhí)行數(shù)據(jù)獲取所述文件當(dāng)前的總體覆蓋率。

可選的,所述方法還包括:

將所述程序執(zhí)行數(shù)據(jù)進(jìn)行存儲(chǔ);所述程序執(zhí)行數(shù)據(jù)還包括所述文件被執(zhí)行的代碼行號(hào)。

可選的,所述標(biāo)識(shí)信息包括所述文件所屬項(xiàng)目名稱、所述文件所屬分支名稱和所述文件的代碼版本號(hào)。

本發(fā)明第三方面提供一種覆蓋率檢測(cè)裝置,包括:

接收模塊,用于接收至少兩個(gè)服務(wù)器發(fā)送的程序執(zhí)行數(shù)據(jù);所述程序執(zhí)行數(shù)據(jù)包括每個(gè)文件的標(biāo)識(shí)信息;

處理模塊,用于根據(jù)每個(gè)文件的標(biāo)識(shí)信息,獲取預(yù)設(shè)的第一文件的第一程序執(zhí)行數(shù)據(jù);所述第一程序數(shù)據(jù)是將所述至少一個(gè)服務(wù)器發(fā)送的所有程序執(zhí)行數(shù)據(jù)中標(biāo)識(shí)信息與所述第一文件的標(biāo)識(shí)信息相同的程序執(zhí)行數(shù)據(jù)進(jìn)行合并得到的;

所述處理模塊還用于解析獲取所述第一文件對(duì)應(yīng)的源代碼文件的總代碼行數(shù);

所述處理模塊還用于根據(jù)所述第一程序執(zhí)行數(shù)據(jù)和所述總代碼行數(shù),計(jì)算獲取所述第一文件當(dāng)前的總體覆蓋率。

可選的,所述裝置還包括:

顯示模塊,用于顯示所述第一文件當(dāng)前的所述總體覆蓋率。

可選的,所述接收模塊接收到的文件的標(biāo)識(shí)信息包括所述文件所屬項(xiàng)目名稱、所述文件所屬分支名稱和所述文件的代碼版本號(hào)。

可選的,所述第一文件所屬項(xiàng)目名稱為X1,所屬分支為T1,版本號(hào)為Y;則處理模塊具體用于:

將每個(gè)程序執(zhí)行數(shù)據(jù)中所屬項(xiàng)目名稱為X1、所屬分支為T1、且版本號(hào)為Y的程序執(zhí)行數(shù)據(jù)做并集處理,得到所述第一程序執(zhí)行數(shù)據(jù)。

可選的,所述第一程序執(zhí)行數(shù)據(jù)還包括所述第一文件被執(zhí)行的代碼行號(hào),所述處理模塊還具體用于:

根據(jù)所述被執(zhí)行的代碼行號(hào),獲取所述第一文件中已執(zhí)行代碼的行數(shù);

根據(jù)所述已執(zhí)行代碼的行數(shù)Le和所述總代碼行數(shù)Lt,采用R=Le/Lt計(jì)算得到所述第一文件當(dāng)前的總體覆蓋率R。

可選的,所述處理模塊還具體用于對(duì)所述源代碼文件進(jìn)行解析處理,剔除所述源代碼文件中的空白行和注釋行,得到所述源代碼文件的所述總代碼行數(shù)。

本發(fā)明第四方面提供一種覆蓋率檢測(cè)裝置,包括:

處理模塊,用于在執(zhí)行文件的過程中,調(diào)用數(shù)據(jù)收集函數(shù)實(shí)時(shí)獲取所述程序執(zhí)行數(shù)據(jù);所述程序執(zhí)行數(shù)據(jù)包括所述文件的標(biāo)識(shí)信息;

發(fā)送模塊,用于將所述程序執(zhí)行數(shù)據(jù)發(fā)送給覆蓋率服務(wù)端,以使所述覆蓋率服務(wù)端根據(jù)所述程序執(zhí)行數(shù)據(jù)獲取所述文件當(dāng)前的總體覆蓋率。

可選的,所述裝置還包括:

存儲(chǔ)模塊,用于將所述程序執(zhí)行數(shù)據(jù)進(jìn)行存儲(chǔ);所述程序執(zhí)行數(shù)據(jù)還包括所述文件被執(zhí)行的代碼行號(hào)。

可選的,所述標(biāo)識(shí)信息包括所述文件所屬項(xiàng)目名稱、所述文件所屬分支名稱和所述文件的代碼版本號(hào)。

本發(fā)明第五方面提供一種服務(wù)器,包括:存儲(chǔ)有程序指令的存儲(chǔ)器、接收器和用于控制程序指令執(zhí)行的處理器;

所述接收器用于接收至少兩個(gè)服務(wù)器發(fā)送的程序執(zhí)行數(shù)據(jù);所述程序執(zhí)行數(shù)據(jù)包括每個(gè)文件的標(biāo)識(shí)信息;

所述處理器用于:

根據(jù)每個(gè)文件的標(biāo)識(shí)信息,獲取預(yù)設(shè)的第一文件的第一程序執(zhí)行數(shù)據(jù);所述第一程序數(shù)據(jù)是將所述至少一個(gè)服務(wù)器發(fā)送的所有程序執(zhí)行數(shù)據(jù)中標(biāo)識(shí)信息與所述第一文件的標(biāo)識(shí)信息相同的程序執(zhí)行數(shù)據(jù)進(jìn)行合并得到的;

解析獲取所述第一文件對(duì)應(yīng)的源代碼文件的總代碼行數(shù);

根據(jù)所述第一程序執(zhí)行數(shù)據(jù)和所述總代碼行數(shù),計(jì)算獲取所述第一程序代碼當(dāng)前的總體覆蓋率。

本發(fā)明第六方面提供一種服務(wù)器,包括:存儲(chǔ)有程序指令的存儲(chǔ)器、用于控制程序指令執(zhí)行的處理器和發(fā)送器;

所述處理器用于在執(zhí)行文件的程序代碼的過程中,調(diào)用數(shù)據(jù)收集函數(shù)實(shí)時(shí)獲取所述文件的程序執(zhí)行數(shù)據(jù);所述程序執(zhí)行數(shù)據(jù)包括所述文件的標(biāo)識(shí)信息;

所述發(fā)送器用于將所述程序執(zhí)行數(shù)據(jù)發(fā)送給覆蓋率服務(wù)端,以使所述覆蓋率服務(wù)端根據(jù)所述程序執(zhí)行數(shù)據(jù)獲取所述文件當(dāng)前的總體覆蓋率。

本發(fā)明實(shí)施例提供的一種覆蓋率檢測(cè)方法、裝置和設(shè)備,文件運(yùn)行端在獲取文件的程序執(zhí)行數(shù)據(jù)的過程中對(duì)文件進(jìn)行標(biāo)識(shí),覆蓋率服務(wù)端將接收到的每個(gè)文件運(yùn)行端發(fā)送的程序執(zhí)行數(shù)據(jù)根據(jù)文件標(biāo)識(shí)進(jìn)行合并,將其中與指定的第一文件的標(biāo)識(shí)相同的所有的程序執(zhí)行數(shù)據(jù)進(jìn)行合并,得到總體的運(yùn)行數(shù)據(jù),然后根據(jù)第一文件的源代碼文件和合并得到的第一程序執(zhí)行數(shù)據(jù),計(jì)算得到該第一文件的總體覆蓋率,能夠得到表征所有人針對(duì)該第一文件的整體運(yùn)行或者測(cè)試情況的覆蓋率。

附圖說明

為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其它的附圖。

圖1為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)方法實(shí)例一的流程圖;

圖2為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)方法實(shí)例二的流程圖;

圖3為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)方法實(shí)例三的流程圖;

圖4為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)方法一實(shí)例的實(shí)現(xiàn)示意圖;

圖5為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)裝置實(shí)施例一的結(jié)構(gòu)示意圖;

圖6為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)裝置實(shí)施例二的結(jié)構(gòu)示意圖;

圖7為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)裝置實(shí)施例三的結(jié)構(gòu)示意圖;

圖8為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)裝置實(shí)施例四的結(jié)構(gòu)示意圖;

圖9為本發(fā)明實(shí)施例提供的服務(wù)器實(shí)施例一的結(jié)構(gòu)示意圖;

圖10為本發(fā)明實(shí)施例提供的服務(wù)器實(shí)施例二的結(jié)構(gòu)示意圖。

具體實(shí)施方式

為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。

圖1為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)方法實(shí)例一的流程圖,如圖1所示,該方案的執(zhí)行主體為用于檢測(cè)覆蓋率的服務(wù)器,或者檢測(cè)覆蓋率的其他設(shè)備,該覆蓋率檢測(cè)方法的具體實(shí)現(xiàn)步驟為:

步驟S101,接收至少兩個(gè)服務(wù)器發(fā)送的程序執(zhí)行數(shù)據(jù);所述程序執(zhí)行數(shù)據(jù)包括每個(gè)文件的標(biāo)識(shí)信息。

在本實(shí)施例中,這里發(fā)送程序執(zhí)行數(shù)據(jù)的服務(wù)器為執(zhí)行該文件的程序的服務(wù)器,例如:運(yùn)行游戲程序的服務(wù)器。該方案中的文件的代碼在多個(gè)服務(wù)器上進(jìn)行運(yùn)行或測(cè)試,每個(gè)服務(wù)器都會(huì)得到程序執(zhí)行數(shù)據(jù),每個(gè)服務(wù)器將得到的程序執(zhí)行數(shù)據(jù)均發(fā)送給覆蓋率檢測(cè)端,該程序執(zhí)行數(shù)據(jù)中攜帶文件的標(biāo)識(shí)信息,例如:文件的名稱、文件所屬項(xiàng)目名稱、文件所屬分支名稱和文件的代碼版本號(hào)等中的至少一個(gè)。

步驟S102,根據(jù)每個(gè)文件的標(biāo)識(shí)信息,獲取預(yù)設(shè)的第一文件的第一程序執(zhí)行數(shù)據(jù);所述第一程序執(zhí)行數(shù)據(jù)是將所述至少一個(gè)服務(wù)器發(fā)送的所有程序執(zhí)行數(shù)據(jù)中標(biāo)識(shí)信息與所述第一文件的標(biāo)識(shí)信息相同的程序執(zhí)行數(shù)據(jù)進(jìn)行合并得到的。

該覆蓋率檢測(cè)端需要根據(jù)多個(gè)程序執(zhí)行數(shù)據(jù)進(jìn)行合并處理,用戶可根據(jù)要求指定需要的第一文件,然后覆蓋率檢測(cè)端將與該第一文件的標(biāo)識(shí)信息相同的文件對(duì)應(yīng)的程序執(zhí)行數(shù)據(jù)進(jìn)行合并處理,然后得到可表征該第一文件綜合運(yùn)行情況的第一程序執(zhí)行數(shù)據(jù)。

步驟S103,解析獲取所述第一文件對(duì)應(yīng)的源代碼文件的總代碼行數(shù)。

本方案中,覆蓋率檢測(cè)端的服務(wù)器或者其他的設(shè)備對(duì)指定的第一文件對(duì)應(yīng)的源文件進(jìn)行解析處理,得到第一文件對(duì)應(yīng)的源代碼的行數(shù),這里的行數(shù)不包括空格和注釋行,即得到程序的總代碼行數(shù)。

步驟S104,根據(jù)所述第一程序執(zhí)行數(shù)據(jù)和所述總代碼行數(shù),計(jì)算獲取所述第一程序代碼當(dāng)前的總體覆蓋率。

在本步驟中,該第一程序執(zhí)行數(shù)據(jù)至少包括能夠確定第一文件程序在每個(gè)服務(wù)器上已經(jīng)執(zhí)行的總行數(shù)的參數(shù),例如:被執(zhí)行的代碼行號(hào),或者已經(jīng)執(zhí)行的行數(shù)等。

覆蓋率檢測(cè)端的服務(wù)器或者設(shè)備根據(jù)每個(gè)文件對(duì)應(yīng)的程序執(zhí)行數(shù)據(jù)進(jìn)行處理得到當(dāng)前已經(jīng)執(zhí)行代碼的行數(shù),然后根據(jù)已執(zhí)行代碼的行數(shù)和總代碼行數(shù),計(jì)算得到每個(gè)文件覆蓋率。

即通過合并的方法計(jì)算得到了不同的運(yùn)行端的服務(wù)器對(duì)同一個(gè)第一文件的總體的覆蓋率數(shù)值。

該過程是實(shí)時(shí)進(jìn)行的,覆蓋率檢測(cè)端實(shí)時(shí)接收多個(gè)程序執(zhí)行端的服務(wù)器發(fā)送來的多個(gè)程序執(zhí)行數(shù)據(jù),根據(jù)文件的標(biāo)識(shí)信息合并處理得到每個(gè)文件的程序執(zhí)行數(shù)據(jù),按照上述方式進(jìn)行處理,可以得到每個(gè)文件的總體覆蓋率。

本實(shí)施例提供的覆蓋率檢測(cè)方法,文件運(yùn)行端在獲取文件的程序執(zhí)行數(shù)據(jù)的過程中對(duì)文件進(jìn)行標(biāo)識(shí),覆蓋率服務(wù)端將接收到的每個(gè)文件運(yùn)行端發(fā)送的程序執(zhí)行數(shù)據(jù)根據(jù)文件標(biāo)識(shí)進(jìn)行合并,將其中與指定的第一文件的標(biāo)識(shí)相同的所有的程序執(zhí)行數(shù)據(jù)進(jìn)行合并,得到總體的運(yùn)行數(shù)據(jù),然后根據(jù)第一文件的源代碼文件和合并得到的第一程序執(zhí)行數(shù)據(jù),計(jì)算得到該第一文件的總體覆蓋率,能夠得到表征所有人針對(duì)該第一文件的整體運(yùn)行或者測(cè)試情況的覆蓋率。

圖2為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)方法實(shí)例二的流程圖,如圖2所示,在上述實(shí)施例的基礎(chǔ)上,提供該覆蓋率檢測(cè)的的具體實(shí)現(xiàn)方式:

步驟S201,接收至少兩個(gè)服務(wù)器發(fā)送的程序執(zhí)行數(shù)據(jù);所述程序執(zhí)行數(shù)據(jù)包括每個(gè)文件的標(biāo)識(shí)信息。

在本步驟中,通過嵌入在服務(wù)器中的工具,在文件的程序被執(zhí)行的過程中,調(diào)用數(shù)據(jù)收集函數(shù)實(shí)時(shí)獲取在多個(gè)進(jìn)程的文件的執(zhí)行過程中得到程序執(zhí)行數(shù)據(jù),每個(gè)服務(wù)器均采用該種方式得到程序執(zhí)行數(shù)據(jù)并向覆蓋率檢測(cè)端的設(shè)備發(fā)送檢測(cè)到的程序執(zhí)行數(shù)據(jù),即在該覆蓋率檢測(cè)設(shè)備側(cè),需要實(shí)時(shí)接收不同的文件運(yùn)行的服務(wù)器發(fā)送程序執(zhí)行數(shù)據(jù),每個(gè)執(zhí)行數(shù)據(jù)包括文件的標(biāo)識(shí)信息。

可選的,文件的標(biāo)識(shí)信息包括所述文件所屬項(xiàng)目名稱、所述文件所屬分支名稱和所述文件的代碼版本號(hào)。

步驟S202,將每個(gè)程序執(zhí)行數(shù)據(jù)中所屬項(xiàng)目名稱為X1、所屬分支為T1、且版本號(hào)為Y的程序執(zhí)行數(shù)據(jù)做并集處理,得到所述第一程序執(zhí)行數(shù)據(jù)。

在該方案中,第一文件所屬項(xiàng)目名稱為X1,所屬分支為T1,版本號(hào)為Y;則所述根據(jù)每個(gè)文件的標(biāo)識(shí)信息,獲取預(yù)設(shè)的第一文件的第一程序執(zhí)行數(shù)據(jù),包括:可以是將所屬項(xiàng)目名稱、分支以及版本號(hào)與第一文件相同的程序執(zhí)行數(shù)據(jù)合并起來。

在該方案中,得到的第一文件的第一程序執(zhí)行數(shù)據(jù)中至少包括第一文件被執(zhí)行的代碼行號(hào),或者至少包括可以得到當(dāng)前執(zhí)行的行數(shù)的相關(guān)信息。

步驟S203,對(duì)所述源代碼文件進(jìn)行解析處理,剔除所述源代碼文件中的空白行和注釋行,得到所述源代碼文件的所述總代碼行數(shù)。

在本步驟中,覆蓋率檢測(cè)端的設(shè)備端獲取到的第一程序執(zhí)行數(shù)據(jù)中只有對(duì)某個(gè)文件的執(zhí)行的相關(guān)數(shù)據(jù),并不能直接從第一程序執(zhí)行數(shù)據(jù)中得到文件的總代碼行數(shù),因此該覆蓋率檢測(cè)端需要對(duì)第一文件的源代碼文件進(jìn)行解析,將其中注釋行和空白行等無關(guān)程序?qū)嵸|(zhì)的非代碼行進(jìn)行剔除,并統(tǒng)計(jì)得到該源代碼文件的總代碼行數(shù)。

步驟S204,根據(jù)所述第一程序執(zhí)行數(shù)據(jù)和所述總代碼行數(shù),計(jì)算獲取所述第一程序代碼當(dāng)前的總體覆蓋率。

該步驟的具體實(shí)現(xiàn)中,所述第一程序執(zhí)行數(shù)據(jù)還包括所述第一文件被執(zhí)行的代碼行號(hào),因此計(jì)算總體覆蓋的方式可以是:根據(jù)所述被執(zhí)行的代碼行號(hào),獲取所述第一文件中已執(zhí)行代碼的行數(shù);根據(jù)所述已執(zhí)行代碼的行數(shù)Le和所述總代碼行數(shù)Lt,采用R=Le/Lt計(jì)算得到所述第一文件當(dāng)前的總體覆蓋率R。

具體的,根據(jù)前述步驟覆蓋率檢測(cè)端已經(jīng)根據(jù)第一程序執(zhí)行數(shù)據(jù)得到第一文件被執(zhí)行的代碼行號(hào),則將執(zhí)行過的代碼行數(shù)作為已經(jīng)執(zhí)行代碼的行數(shù)之和,例如:從第一文件的總體的第一程序執(zhí)行數(shù)據(jù)中獲取到的被執(zhí)行的代碼行號(hào)為50,則認(rèn)為該第一文件的代碼已經(jīng)執(zhí)行了50行,或者,數(shù)據(jù)顯示第一文件,第1,3-10,55行已經(jīng)發(fā)生了執(zhí)行事件,那么此時(shí)已執(zhí)行代碼行數(shù)的值應(yīng)當(dāng)為1+8+1=10行。根據(jù)該種方式得到第一文件中已經(jīng)執(zhí)行的代碼行數(shù)。通過前述步驟覆蓋率檢測(cè)端的設(shè)備完成覆蓋率數(shù)據(jù)采集,得到了已執(zhí)行的代碼行數(shù),以及第一文件可執(zhí)行的代碼行總數(shù)。利用上述兩個(gè)步驟獲得的數(shù)據(jù),在此處通過公式采用R=Le/Lt即可計(jì)算出第一文件的實(shí)時(shí)覆蓋率R。其中,Le表示已執(zhí)行代碼的行數(shù),Lt表示總代碼行數(shù)。

步驟S205,顯示所述第一文件當(dāng)前的所述總體覆蓋率。

該步驟S205為可選的步驟,并不是必須要執(zhí)行的,在覆蓋率檢測(cè)端的設(shè)備,如果接收用戶通過客戶端或者前端發(fā)送的數(shù)據(jù)請(qǐng)求,或者預(yù)先配置了需要將得到的覆蓋率進(jìn)行顯示,則可以通過顯示器或者前短客戶端將得到的覆蓋率進(jìn)行顯示??梢灾粚?duì)一個(gè)文件的總體覆蓋率進(jìn)行顯示,也可以同時(shí)將每個(gè)文件的總體覆蓋率進(jìn)行顯示,對(duì)此本方案不做限制。

本實(shí)施例提供的覆蓋率檢測(cè)方法,通過實(shí)時(shí)接收多個(gè)服務(wù)器發(fā)送的包括文件的標(biāo)識(shí)信息的程序執(zhí)行數(shù)據(jù),對(duì)指定的第一文件在每個(gè)服務(wù)器上的程序執(zhí)行數(shù)據(jù)進(jìn)行合并處理,得到第一程序執(zhí)行數(shù)據(jù),然后解析該第一文件得到總行數(shù),結(jié)合第一程序執(zhí)行數(shù)據(jù),計(jì)算得到該第一文件的總體覆蓋率,即可以得到所有服務(wù)器上的對(duì)某個(gè)指定文件的總體覆蓋率的情況。

圖3為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)方法實(shí)例三的流程圖;如圖3所示,該方案的執(zhí)行主體為文件運(yùn)行端的服務(wù)器或者其他裝置,該覆蓋率檢測(cè)方法的具體實(shí)現(xiàn)步驟為:

步驟S301,在執(zhí)行文件的程序代碼的過程中,調(diào)用數(shù)據(jù)收集函數(shù)實(shí)時(shí)獲取所述文件的程序執(zhí)行數(shù)據(jù);所述程序執(zhí)行數(shù)據(jù)包括所述文件的標(biāo)識(shí)信息。

在本步驟中,文件運(yùn)行端的服務(wù)器中嵌入實(shí)時(shí)收集執(zhí)行數(shù)據(jù)的客戶端,或者將該實(shí)時(shí)收集程序執(zhí)行數(shù)據(jù)的客戶端嵌入在文件的程序中,在每個(gè)服務(wù)器上可以調(diào)用數(shù)據(jù)收集函數(shù),實(shí)時(shí)獲取每個(gè)文件的程序執(zhí)行數(shù)據(jù)。為了能夠讓覆蓋率檢測(cè)端對(duì)數(shù)據(jù)進(jìn)行區(qū)別,在該程序執(zhí)行數(shù)據(jù)中增加文件的標(biāo)識(shí)信息。

可選的,所述標(biāo)識(shí)信息包括所述文件所屬項(xiàng)目名稱、所述文件所屬分支名稱和所述文件的代碼版本號(hào)。

步驟S302,將所述程序執(zhí)行數(shù)據(jù)發(fā)送給覆蓋率服務(wù)端,以使所述覆蓋率服務(wù)端根據(jù)所述程序執(zhí)行數(shù)據(jù)獲取所述文件當(dāng)前的總體覆蓋率。

可選的,在該步驟之前,將所述程序執(zhí)行數(shù)據(jù)進(jìn)行存儲(chǔ)。

該程序執(zhí)行數(shù)據(jù)還可以包括文件的文件名稱和文件被執(zhí)行的代碼行號(hào)。文件運(yùn)行端的服務(wù)器或者其他裝置可以將收集的程序執(zhí)行數(shù)據(jù)按照文件名稱進(jìn)行存儲(chǔ),當(dāng)發(fā)生了新的代碼執(zhí)行事件之后,可以根據(jù)文件名稱對(duì)該程序執(zhí)行數(shù)據(jù)進(jìn)行更新。

具體的,對(duì)執(zhí)行數(shù)據(jù)進(jìn)行存儲(chǔ)的實(shí)現(xiàn)方式為:根據(jù)文件名稱,檢測(cè)本地是否存在與文件對(duì)應(yīng)的程序執(zhí)行數(shù)據(jù);若存在,則在本地不存在所述文件被執(zhí)行的代碼行號(hào)時(shí),將所述文件被執(zhí)行的代碼行號(hào)存儲(chǔ)在所述程序執(zhí)行數(shù)據(jù)中;若不存在,則在本地增加以所述文件名稱為索引的所述文件對(duì)應(yīng)的所述程序執(zhí)行數(shù)據(jù)。

上述步驟中,文件運(yùn)行端的服務(wù)器或者其他裝置將獲取到的文件的程序執(zhí)行數(shù)據(jù)實(shí)時(shí)發(fā)送給覆蓋率服務(wù)端,以使覆蓋率檢測(cè)端的服務(wù)端(例如服務(wù)器)實(shí)時(shí)接收?qǐng)?zhí)行端服務(wù)器發(fā)送的多個(gè)程序執(zhí)行數(shù)據(jù),并對(duì)與指定的第一文件的標(biāo)識(shí)信息相同的程序執(zhí)行數(shù)據(jù)進(jìn)行合并處理,得到第一文件的第一程序執(zhí)行數(shù)據(jù),后續(xù)對(duì)第一文件的源代碼進(jìn)行解析獲取總代碼行數(shù),然后結(jié)合第一程序執(zhí)行數(shù)據(jù)和總代碼行數(shù)計(jì)算獲取該文件當(dāng)前的覆蓋率,不需要額外增加命令,在測(cè)試過程中也不需要不斷的停止和開始,通過實(shí)時(shí)接收服務(wù)器發(fā)送的文件的程序執(zhí)行數(shù)據(jù),并對(duì)該程序執(zhí)行數(shù)據(jù)進(jìn)行分析處理,能夠得到該第一文件在所有服務(wù)器上的實(shí)時(shí)的總體覆蓋率。

在上述實(shí)施例一至實(shí)施例三的基礎(chǔ)上,下面以覆蓋率檢測(cè)端為覆蓋率服務(wù)器、文件執(zhí)行端為游戲服務(wù)器為例,對(duì)本發(fā)明覆蓋率檢測(cè)方法進(jìn)行說明。其中,覆蓋率服務(wù)器的主要功能是通過websocket接收和處理來自游戲服務(wù)器(其中嵌入客戶端負(fù)責(zé)收集數(shù)據(jù))的數(shù)據(jù)。

客戶端嵌入到待測(cè)試的游戲服務(wù)器腳本中,使用python的sys.settrace收集數(shù)據(jù)。游戲服務(wù)器側(cè)的過程主要分為數(shù)據(jù)采集,存儲(chǔ)和發(fā)送。圖4為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)方法一實(shí)例的實(shí)現(xiàn)示意圖;如圖4所示,具體的,在游戲服務(wù)器中,游戲服務(wù)器腳本中嵌入覆蓋率采集客戶端(os.getcwd),可通過websocket連接到右邊的覆蓋率服務(wù)器(也稱為覆蓋率數(shù)據(jù)處理服務(wù)器)。

1.1、初始化

在進(jìn)行上述覆蓋率檢測(cè)的過程之前,需要在覆蓋率服務(wù)器和游戲服務(wù)器進(jìn)行初始化,初始化過程分為啟動(dòng)覆蓋率數(shù)據(jù)處理服務(wù)端和嵌入覆蓋率采集客戶端到游戲服務(wù)器腳本中兩個(gè)部分。

覆蓋率服務(wù)端基于Tornado構(gòu)建,主要功能是通過websocket接收來自通過一定規(guī)則(見下文中的進(jìn)程標(biāo)識(shí)步驟)標(biāo)識(shí)的客戶端的數(shù)據(jù),并定時(shí)將同一游戲服務(wù)器的數(shù)據(jù)合并和處理。在游戲服務(wù)器啟動(dòng)測(cè)試之前,首先啟動(dòng)覆蓋率服務(wù)端,等待客戶端連接和收集數(shù)據(jù)。

對(duì)于客戶端,在游戲服務(wù)器中啟動(dòng)不同進(jìn)程的腳本中,添加使用線程啟動(dòng)websocket連接的代碼,具體如下:

ws=websocket.WebSocket("ws://websocket_address/")

thread_ws=threading.Thread(target=ws.run)

thread_ws.start()

該線程用于在每個(gè)游戲服務(wù)器進(jìn)程啟動(dòng)websocket并連接到覆蓋率服務(wù)器后,進(jìn)行定時(shí)的數(shù)據(jù)發(fā)送。

1.2、數(shù)據(jù)采集

嵌入游戲服務(wù)器的客戶端,主要通過添加如下代碼實(shí)現(xiàn)數(shù)據(jù)采集:

即利用python自帶的sys.settrace方法,在游戲服務(wù)器腳本運(yùn)行過程中,每當(dāng)發(fā)生了代碼執(zhí)行事件(event),就會(huì)調(diào)用trace方法進(jìn)行跟蹤,其中frame表示python運(yùn)行過程中的棧幀,event表示發(fā)生的事件(例如執(zhí)行了某一行代碼,或者調(diào)用了某個(gè)函數(shù)等)。使用frame.f_code.co_filename獲取被執(zhí)行的文件名稱fliename,使用frame.f_lineno獲取當(dāng)前執(zhí)行的代碼行號(hào),然后調(diào)用collect方法進(jìn)行數(shù)據(jù)收集,該方法主要是使用了字典(python的一種內(nèi)置數(shù)據(jù)結(jié)構(gòu),以鍵-值對(duì)格式存儲(chǔ)數(shù)據(jù))的形式,將數(shù)據(jù)以文件名為鍵,以被執(zhí)行的代碼行號(hào)集合為值的形式存儲(chǔ),舉例如下:

其中root/directory1/.../file1表示被測(cè)試的代碼文件的路徑,set([lineno11,lineno12,lineno13...])表示一個(gè)集合,該集合中的元素有l(wèi)ineno11,lineno12,lineno13等等,每個(gè)元素表示file1中進(jìn)行覆蓋率測(cè)試時(shí),被執(zhí)行過的行號(hào)(lineno)。

1.3、游戲服務(wù)器標(biāo)識(shí)

對(duì)于每個(gè)游戲服務(wù)器,在啟動(dòng)之前,標(biāo)識(shí)被執(zhí)行文件所屬的項(xiàng)目組(字符串形式,例如X1),所屬的代碼分支(字符串形式,如test)。

在啟動(dòng)之后,使用SVN獲取當(dāng)前進(jìn)行覆蓋率測(cè)試的代碼版本號(hào)(字符串形式,例如30000),獲取的方法如下(Python代碼):

revision=str(pysvn.Client().info(directory).commit_revision.number)

于是對(duì)每個(gè)游戲服務(wù)器的每個(gè)版本代碼(文件)的覆蓋率測(cè)試的數(shù)據(jù),都有如下標(biāo)識(shí):

其中project字段表示所屬項(xiàng)目名稱,branch字段表示所屬分支名稱,revision字段表示進(jìn)行覆蓋率測(cè)試的游戲服務(wù)器代碼版本號(hào),data字段的值是上文中數(shù)據(jù)采集獲得的覆蓋率數(shù)據(jù)。

游戲服務(wù)器分別將各自采集到的程序執(zhí)行數(shù)據(jù)發(fā)送至覆蓋率服務(wù)器。

1.4、數(shù)據(jù)合并(覆蓋率服務(wù)器執(zhí)行)

對(duì)于上述步驟中每個(gè)游戲服務(wù)器采集的程序執(zhí)行數(shù)據(jù),首先指定所需合并的項(xiàng)目和分支,例如,指定當(dāng)前需要合并地項(xiàng)目為X1,分支為test,然后指定需要合并的代碼版本號(hào)為30000,接下來在當(dāng)前的所有程序執(zhí)行數(shù)據(jù)中進(jìn)行搜索,所有滿足project字段為X1.branch字段為test且revision字段為30000的數(shù)據(jù),作為待合并的程序執(zhí)行數(shù)據(jù)。

對(duì)所有程序執(zhí)行數(shù)據(jù)中的coverage_data字段對(duì)應(yīng)的字典進(jìn)行枚舉,若當(dāng)前鍵(文件名)已經(jīng)存在于總體程序執(zhí)行數(shù)據(jù)中,則將當(dāng)前鍵對(duì)應(yīng)的值(行號(hào)集合)與總體程序執(zhí)行數(shù)據(jù)中該文件名對(duì)應(yīng)的值(已有的行號(hào)集合)進(jìn)行求并集的操作,并將結(jié)果替換原來的總體程序執(zhí)行數(shù)據(jù)中該文件名對(duì)應(yīng)的行號(hào)集合。

若當(dāng)前鍵(文件名)在總體程序執(zhí)行數(shù)據(jù)中未搜索到,則將該文件名及其對(duì)應(yīng)的行號(hào)集合存儲(chǔ)到總體覆蓋率集合中。

當(dāng)數(shù)據(jù)1……n中的coverage_data字段對(duì)應(yīng)的字典數(shù)據(jù)都枚舉完畢并對(duì)應(yīng)存儲(chǔ)到總體程序執(zhí)行數(shù)據(jù)(即上述的第一程序執(zhí)行數(shù)據(jù))中后,本次合并結(jié)果完畢。

總體程序執(zhí)行數(shù)據(jù)格式為:

其中每個(gè)文件名對(duì)應(yīng)的程序執(zhí)行數(shù)據(jù),都是各個(gè)游戲服務(wù)器對(duì)應(yīng)字段行號(hào)集合的并集。

1.5、計(jì)算每個(gè)文件的覆蓋率

對(duì)于覆蓋率服務(wù)器來說,將上述合并得到的文件的總體程序執(zhí)行數(shù)據(jù),首先在存儲(chǔ)在覆蓋率服務(wù)器的當(dāng)前游戲服務(wù)器的程序執(zhí)行數(shù)據(jù)集合中對(duì)每個(gè)文件名進(jìn)行搜索,若該文件名不存在,則添加該文件名及其對(duì)應(yīng)的代碼行號(hào)集合。若該文件已經(jīng)存在,則將原有的代碼行號(hào)集合與新到達(dá)的文件名對(duì)應(yīng)的代碼行號(hào)集合求并集,并覆蓋原有存儲(chǔ)的集合即可。

由上述步驟,獲得了指定文件當(dāng)前所執(zhí)行過的代碼行號(hào)的集合,已知覆蓋率計(jì)算公式為:

其中,Rate表示覆蓋率,lineexecute表示當(dāng)前文件中已經(jīng)執(zhí)行過的代碼行數(shù),linetotal表示當(dāng)前文件的可執(zhí)行代碼行總數(shù)。

根據(jù)合并處理之后的指定文件的程序執(zhí)行數(shù)據(jù),可以知道該指定文件,執(zhí)行過的代碼行數(shù)就是數(shù)據(jù)中執(zhí)行代碼的行數(shù)之和。例如,若該指定文件的總體程序執(zhí)行數(shù)據(jù)顯示該指定文件,第1,3-10,55行已經(jīng)發(fā)生了執(zhí)行事件,那么此時(shí)已執(zhí)行代碼行數(shù)的值應(yīng)當(dāng)為1+8+1=10行。

覆蓋率服務(wù)器對(duì)該指定文件的本地源代碼文件進(jìn)行解析,解析的過程是去除空白行和注釋行,從而計(jì)算出真正的可執(zhí)行代碼行的總數(shù)。

通過游戲服務(wù)器的覆蓋率數(shù)據(jù)采集得到了已執(zhí)行的代碼行數(shù),通過本地源代碼的解析,獲得了該指定文件可執(zhí)行的代碼行總數(shù)。利用上述兩個(gè)步驟獲得的數(shù)據(jù),在此處通過公式即可計(jì)算出該指定文件的覆蓋率。

本方案主要由覆蓋率數(shù)據(jù)處理服務(wù)端和覆蓋率采集客戶端組成。其中覆蓋率數(shù)據(jù)處理服務(wù)端,主要功能是通過websocket接收和處理來自客戶端的數(shù)據(jù)。客戶端嵌入到待測(cè)試的游戲服務(wù)器腳本中,使用python的sys.settrace收集數(shù)據(jù)。本方案完整的采集流程,分為游戲服務(wù)器標(biāo)識(shí),數(shù)據(jù)采集,數(shù)據(jù)合并三個(gè)部分。首先使用游戲所屬項(xiàng)目(字符串表示,例如X1),游戲服務(wù)器的代碼分支名稱(字符串表示,例如test)以及游戲服務(wù)器運(yùn)行代碼的版本號(hào)(使用svn獲得,字符串表示,例如30000)作為索引同一游戲服務(wù)器的方法,然后在采集過程中,將數(shù)據(jù)發(fā)送和存儲(chǔ)到數(shù)據(jù)處理服務(wù)器中,對(duì)于屬于同項(xiàng)目同分支和同版本代碼的覆蓋率測(cè)試結(jié)果,通過一定的規(guī)則進(jìn)行覆蓋率數(shù)據(jù)的合并,最后數(shù)據(jù)處理服務(wù)器使用合并后的結(jié)果計(jì)算出總體的覆蓋率數(shù)值,解決了利用python的sys.settrace方法進(jìn)行覆蓋率數(shù)據(jù)采集時(shí),同項(xiàng)目組同代碼分支對(duì)相同代碼進(jìn)行覆蓋率測(cè)試時(shí),不同測(cè)試人員的測(cè)試結(jié)果彼此獨(dú)立,無法得到有效的總體覆蓋率測(cè)試結(jié)果的問題。

圖5為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)裝置實(shí)施例一的結(jié)構(gòu)示意圖,如圖5所示,本實(shí)施例提供的覆蓋率檢測(cè)裝置10包括:

接收模塊11,用于接收至少兩個(gè)服務(wù)器發(fā)送的程序執(zhí)行數(shù)據(jù);所述程序執(zhí)行數(shù)據(jù)包括每個(gè)文件的標(biāo)識(shí)信息;

處理模塊12,用于根據(jù)每個(gè)文件的標(biāo)識(shí)信息,獲取預(yù)設(shè)的第一文件的第一程序執(zhí)行數(shù)據(jù);所述第一程序數(shù)據(jù)是將所述至少一個(gè)服務(wù)器發(fā)送的所有程序執(zhí)行數(shù)據(jù)中標(biāo)識(shí)信息與所述第一文件的標(biāo)識(shí)信息相同的程序執(zhí)行數(shù)據(jù)進(jìn)行合并得到的;

所述處理模塊12還用于解析獲取所述第一文件對(duì)應(yīng)的源代碼文件的總代碼行數(shù);

所述處理模塊12還用于根據(jù)所述第一程序執(zhí)行數(shù)據(jù)和所述總代碼行數(shù),計(jì)算獲取所述第一文件當(dāng)前的總體覆蓋率。

本實(shí)施例提供的覆蓋率檢測(cè)裝置,用于執(zhí)行前述任一實(shí)施例提供的方法中覆蓋率檢測(cè)端的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,在此不再贅述。

在本發(fā)明覆蓋率檢測(cè)裝置的實(shí)施例二中,圖6為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)裝置實(shí)施例二的結(jié)構(gòu)示意圖,如圖6所示,在上述實(shí)施例一的基礎(chǔ)上,該覆蓋率檢測(cè)裝置10還包括:

顯示模塊13,用于顯示所述第一文件當(dāng)前的所述總體覆蓋率。

在上述任一實(shí)施例的基礎(chǔ)上,可選的,所述接收模塊11接收到的文件的標(biāo)識(shí)信息包括所述文件所屬項(xiàng)目名稱、所述文件所屬分支名稱和所述文件的代碼版本號(hào)。

可選的,所述第一文件所屬項(xiàng)目名稱為X1,所屬分支為T1,版本號(hào)為Y;所述處理模塊12具體用于:

將每個(gè)程序執(zhí)行數(shù)據(jù)中所屬項(xiàng)目名稱為X1、所屬分支為T1、且版本號(hào)為Y的程序執(zhí)行數(shù)據(jù)做并集處理,得到所述第一程序執(zhí)行數(shù)據(jù)。

可選的,所述第一程序執(zhí)行數(shù)據(jù)還包括所述第一文件被執(zhí)行的代碼行號(hào),所述處理模塊12還具體用于:

根據(jù)所述被執(zhí)行的代碼行號(hào),獲取所述第一文件中已執(zhí)行代碼的行數(shù);

根據(jù)所述已執(zhí)行代碼的行數(shù)Le和所述總代碼行數(shù)Lt,采用R=Le/Lt計(jì)算得到所述第一文件當(dāng)前的總體覆蓋率R。

可選的,所述處理模塊12還具體用于對(duì)所述源代碼文件進(jìn)行解析處理,剔除所述源代碼文件中的空白行和注釋行,得到所述源代碼文件的所述總代碼行數(shù)。

本實(shí)施例提供的覆蓋率檢測(cè)裝置,用來執(zhí)行前述任一實(shí)施例提供的方法中覆蓋率檢測(cè)端的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,在此不再贅述。

圖7為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)裝置實(shí)施例三的結(jié)構(gòu)示意圖,如圖7所示,該覆蓋率檢測(cè)裝置20包括:

處理模塊21,用于在執(zhí)行文件的過程中,調(diào)用數(shù)據(jù)收集函數(shù)實(shí)時(shí)獲取所述程序執(zhí)行數(shù)據(jù);所述程序執(zhí)行數(shù)據(jù)包括所述文件的標(biāo)識(shí)信息;

發(fā)送模塊22,用于將所述程序執(zhí)行數(shù)據(jù)發(fā)送給覆蓋率服務(wù)端,以使所述覆蓋率服務(wù)端根據(jù)所述程序執(zhí)行數(shù)據(jù)獲取所述文件當(dāng)前的總體覆蓋率。

本實(shí)施例提供的覆蓋率檢測(cè)裝置,用來執(zhí)行前述任一實(shí)施例提供的方法中程序運(yùn)行側(cè)的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,在此不再贅述。

圖8為本發(fā)明實(shí)施例提供的覆蓋率檢測(cè)裝置實(shí)施例四的結(jié)構(gòu)示意圖,如圖8所示,該覆蓋率檢測(cè)裝置20還包括:

存儲(chǔ)模塊23,用于將所述程序執(zhí)行數(shù)據(jù)進(jìn)行存儲(chǔ);所述程序執(zhí)行數(shù)據(jù)還包括所述文件被執(zhí)行的代碼行號(hào)。

可選的,所述處理模塊21獲取的所述標(biāo)識(shí)信息包括所述文件所屬項(xiàng)目名稱、所述文件所屬分支名稱和所述文件的代碼版本號(hào)。

本實(shí)施例提供的覆蓋率檢測(cè)裝置,用來執(zhí)行前述任一實(shí)施例提供的方法中程序運(yùn)行側(cè)的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,在此不再贅述。

圖9為本發(fā)明實(shí)施例提供的服務(wù)器實(shí)施例一的結(jié)構(gòu)示意圖,如圖9所示,該服務(wù)器可以被具體實(shí)現(xiàn)為:存儲(chǔ)有程序指令的存儲(chǔ)器31、接收器32以及用于控制程序指令執(zhí)行的處理器33;

所述接收器32用于接收至少兩個(gè)服務(wù)器發(fā)送的程序執(zhí)行數(shù)據(jù);所述程序執(zhí)行數(shù)據(jù)包括每個(gè)文件的標(biāo)識(shí)信息;

所述處理器33用于:

根據(jù)每個(gè)文件的標(biāo)識(shí)信息,獲取預(yù)設(shè)的第一文件的第一程序執(zhí)行數(shù)據(jù);所述第一程序數(shù)據(jù)是將所述至少一個(gè)服務(wù)器發(fā)送的所有程序執(zhí)行數(shù)據(jù)中標(biāo)識(shí)信息與所述第一文件的標(biāo)識(shí)信息相同的程序執(zhí)行數(shù)據(jù)進(jìn)行合并得到的;

解析獲取所述第一文件對(duì)應(yīng)的源代碼文件的總代碼行數(shù);

根據(jù)所述第一程序執(zhí)行數(shù)據(jù)和所述總代碼行數(shù),計(jì)算獲取所述第一程序代碼當(dāng)前的總體覆蓋率。

可選的,還可以包括顯示器,用于顯示所述第一文件當(dāng)前的所述總體覆蓋率。

可選的,所述接收器32接收到的文件的標(biāo)識(shí)信息包括所述文件所屬項(xiàng)目名稱、所述文件所屬分支名稱和所述文件的代碼版本號(hào)。

可選的,所述第一文件所屬項(xiàng)目名稱為X1,所屬分支為T1,版本號(hào)為Y;則處理器33具體用于:

將每個(gè)程序執(zhí)行數(shù)據(jù)中所屬項(xiàng)目名稱為X1、所屬分支為T1、且版本號(hào)為Y的程序執(zhí)行數(shù)據(jù)做并集處理,得到所述第一程序執(zhí)行數(shù)據(jù)。

可選的,所述第一程序執(zhí)行數(shù)據(jù)還包括所述第一文件被執(zhí)行的代碼行號(hào),所述處理器33還具體用于:

根據(jù)所述被執(zhí)行的代碼行號(hào),獲取所述第一文件中已執(zhí)行代碼的行數(shù);

根據(jù)所述已執(zhí)行代碼的行數(shù)Le和所述總代碼行數(shù)Lt,采用R=Le/Lt計(jì)算得到所述第一文件當(dāng)前的總體覆蓋率R。

可選的,所述處理器33還具體用于對(duì)所述源代碼文件進(jìn)行解析處理,剔除所述源代碼文件中的空白行和注釋行,得到所述源代碼文件的所述總代碼行數(shù)。

本實(shí)施例提供的服務(wù)器為覆蓋檢測(cè)端的服務(wù)器,用來執(zhí)行前述任一實(shí)施例提供的方法中覆蓋率檢測(cè)端的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,在此不再贅述。

圖10為本發(fā)明實(shí)施例提供的服務(wù)器實(shí)施例二的結(jié)構(gòu)示意圖,如圖10所示,該服務(wù)器可以被具體實(shí)現(xiàn)為:用于存儲(chǔ)程序指令的存儲(chǔ)器41、用于控制程序指令執(zhí)行的處理器42以及發(fā)送器43;

所述處理器42用于在執(zhí)行文件的程序代碼的過程中,調(diào)用數(shù)據(jù)收集函數(shù)實(shí)時(shí)獲取所述文件的程序執(zhí)行數(shù)據(jù);所述程序執(zhí)行數(shù)據(jù)包括所述文件的標(biāo)識(shí)信息;

所述發(fā)送器43用于將所述程序執(zhí)行數(shù)據(jù)發(fā)送給覆蓋率服務(wù)端,以使所述覆蓋率服務(wù)端根據(jù)所述程序執(zhí)行數(shù)據(jù)獲取所述文件當(dāng)前的總體覆蓋率。

可選的,存儲(chǔ)器41用于將所述程序執(zhí)行數(shù)據(jù)進(jìn)行存儲(chǔ);所述程序執(zhí)行數(shù)據(jù)還包括所述文件被執(zhí)行的代碼行號(hào)。

可選的,所述處理器42獲取的所述標(biāo)識(shí)信息包括所述文件所屬項(xiàng)目名稱、所述文件所屬分支名稱和所述文件的代碼版本號(hào)。

本實(shí)施例提供的服務(wù)器為文件運(yùn)行服務(wù)器,或者稱為程序運(yùn)行服務(wù)器,用來執(zhí)行前述任一實(shí)施例提供的方法中文件運(yùn)行側(cè),例如游戲服務(wù)器的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類似,在此不再贅述。

在上述任一服務(wù)器的實(shí)施例中,應(yīng)理解,處理器可以是中央處理單元(英文:Central Processing Unit,簡(jiǎn)稱:CPU),還可以是其他通用處理器、數(shù)字信號(hào)處理器(英文:Digital Signal Processor,簡(jiǎn)稱:DSP)、專用集成電路(英文:Application Specific Integrated Circuit,簡(jiǎn)稱:ASIC)等。通用處理器可以是微處理器或者該處理器也可以是任何常規(guī)的處理器等。結(jié)合本發(fā)明實(shí)施例所公開的方法的步驟可以直接體現(xiàn)為硬件處理器執(zhí)行完成,或者用處理器中的硬件及軟件模塊組合執(zhí)行完成。

本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:只讀存儲(chǔ)器(英文:read-only memory,縮寫:ROM)、RAM、快閃存儲(chǔ)器、硬盤、固態(tài)硬盤、磁帶(英文:magnetic tape)、軟盤(英文:floppy disk)、光盤(英文:optical disc)及其任意組合。

最后應(yīng)說明的是:以上各實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1