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

代碼覆蓋率收集方法和裝置與流程

文檔序號(hào):12719363閱讀:241來(lái)源:國(guó)知局
代碼覆蓋率收集方法和裝置與流程

本發(fā)明涉及測(cè)試技術(shù)領(lǐng)域,特別是涉及一種代碼覆蓋率收集方法以及一種代碼覆蓋率收集裝置。



背景技術(shù):

代碼覆蓋率(code coverage)是軟件測(cè)試中的一種重要的度量參數(shù),用以描述描述程序中源代碼被測(cè)試的比例和程度。而隨著JavaScript等解釋性語(yǔ)言的逐漸普及,基于JavaScript等解釋性語(yǔ)言實(shí)現(xiàn)的平臺(tái)的應(yīng)用的日益廣泛,對(duì)基于就采用JavaScript等解釋性語(yǔ)言實(shí)現(xiàn)的平臺(tái)的相關(guān)應(yīng)用的代碼覆蓋率進(jìn)行測(cè)試也成為測(cè)試領(lǐng)域中的一項(xiàng)重要內(nèi)容。

以JavaScript平臺(tái)為例,目前對(duì)于瀏覽器端運(yùn)行的JavaScript應(yīng)用,已經(jīng)有jscoverage等工具來(lái)實(shí)現(xiàn)瀏覽器端的代碼覆蓋率的收集。然而,類似于jscoverage這樣的工具,主要應(yīng)用場(chǎng)景為瀏覽器端運(yùn)行。其對(duì)Javascript代碼進(jìn)行適合瀏覽器端運(yùn)行的代碼插樁,插樁后的代碼,其代碼覆蓋率收集過(guò)程是基于瀏覽器的代碼執(zhí)行,無(wú)法直接應(yīng)用于服務(wù)器端執(zhí)行的平臺(tái)的應(yīng)用。



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

基于此,本發(fā)明實(shí)施例的目的在于提供一種代碼覆蓋率收集方法以及一種代碼覆蓋率收集裝置。

為達(dá)到上述目的,本發(fā)明實(shí)施例采用以下技術(shù)方案:

一種代碼覆蓋率收集方法,應(yīng)用在覆蓋率收集終端服務(wù)器,包括步驟:

接收終端發(fā)送的業(yè)務(wù)請(qǐng)求,所述業(yè)務(wù)請(qǐng)求包括應(yīng)用標(biāo)識(shí);

根據(jù)所述業(yè)務(wù)請(qǐng)求獲取與所述應(yīng)用標(biāo)識(shí)對(duì)應(yīng)的源文件、源文件標(biāo)識(shí)以及所述源文件的語(yǔ)法樹信息;

將所述源文件的源代碼加載到內(nèi)存;

執(zhí)行加載到內(nèi)存的所述源代碼,并在所述源代碼的執(zhí)行過(guò)程中,基于所述語(yǔ)法樹信息記錄執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù);

向覆蓋率收集中心服務(wù)器發(fā)送覆蓋率上報(bào)信息,所述覆蓋率上報(bào)信息包括所述源文件標(biāo)識(shí)、所述覆蓋率數(shù)據(jù),由所述覆蓋率收集中心服務(wù)器根據(jù)各覆蓋率收集終端服務(wù)器上傳的覆蓋率上報(bào)信息確定所述源文件的代碼覆蓋率。

一種代碼覆蓋率收集方法,應(yīng)用在覆蓋率收集中心服務(wù)器,包括步驟:

接收各覆蓋率收集終端服務(wù)器發(fā)送的覆蓋率上報(bào)信息,所述覆蓋率上報(bào)信息包括源文件標(biāo)識(shí)以及對(duì)應(yīng)的覆蓋率數(shù)據(jù),所述覆蓋率數(shù)據(jù)為所述覆蓋率收集終端服務(wù)器在接收到終端發(fā)送的包含應(yīng)用標(biāo)識(shí)的業(yè)務(wù)請(qǐng)求時(shí),獲取與所述應(yīng)用標(biāo)識(shí)對(duì)應(yīng)的源文件、源文件標(biāo)識(shí)以及所述源文件的語(yǔ)法樹信息,并將所述源文件的源代碼加載到內(nèi)存后,在加載到內(nèi)存的所述源代碼的執(zhí)行過(guò)程中基于所述語(yǔ)法樹信息記錄執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù);

根據(jù)各覆蓋率收集終端服務(wù)器發(fā)送的所述覆蓋率上報(bào)信息,確定所述源文件標(biāo)識(shí)對(duì)應(yīng)的源文件的代碼覆蓋率。

一種代碼覆蓋率收集裝置,設(shè)置在覆蓋率收集終端服務(wù)器,包括:

請(qǐng)求接收模塊,用于接收終端發(fā)送的業(yè)務(wù)請(qǐng)求,所述業(yè)務(wù)請(qǐng)求包括應(yīng)用標(biāo)識(shí);

文件及信息獲取模塊,用于根據(jù)所述業(yè)務(wù)請(qǐng)求獲取與所述應(yīng)用標(biāo)識(shí)對(duì)應(yīng)的源文件、源文件標(biāo)識(shí)以及所述源文件的語(yǔ)法樹信息;

代碼加載模塊,用于將所述源文件的源代碼加載到內(nèi)存;

數(shù)據(jù)記錄模塊,用于在加載到內(nèi)存的所述源代碼的執(zhí)行過(guò)程中,基于所述語(yǔ)法樹信息記錄執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù);

信息上報(bào)模塊,用于向覆蓋率收集中心服務(wù)器發(fā)送覆蓋率上報(bào)信息,所述覆蓋率上報(bào)信息包括所述源文件標(biāo)識(shí)、所述覆蓋率數(shù)據(jù),由所述覆蓋率收集中心服務(wù)器根據(jù)各覆蓋率收集終端服務(wù)器上傳的覆蓋率上報(bào)信息確定所述源文件的代碼覆蓋率。

一種代碼覆蓋率收集裝置,設(shè)置在覆蓋率收集中心服務(wù)器,包括:

上報(bào)信息接收模塊,用于接收各覆蓋率收集終端服務(wù)器發(fā)送的覆蓋率上報(bào)信息,所述覆蓋率上報(bào)信息包括源文件標(biāo)識(shí)以及對(duì)應(yīng)的覆蓋率數(shù)據(jù),所述覆蓋率數(shù)據(jù)為所述覆蓋率收集終端服務(wù)器在接收到終端發(fā)送的包含應(yīng)用標(biāo)識(shí)的業(yè)務(wù)請(qǐng)求時(shí),獲取與所述應(yīng)用標(biāo)識(shí)對(duì)應(yīng)的源文件、源文件標(biāo)識(shí)以及所述源文件的語(yǔ)法樹信息,并將所述源文件的源代碼加載到內(nèi)存后,在加載到內(nèi)存的所述源代碼的執(zhí)行過(guò)程中基于所述語(yǔ)法樹信息記錄執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù),

代碼覆蓋率確定模塊,用于根據(jù)各覆蓋率收集終端服務(wù)器發(fā)送的所述覆蓋率上報(bào)信息,確定所述源文件標(biāo)識(shí)對(duì)應(yīng)的源文件的代碼覆蓋率。

基于如上所述的實(shí)施例中的方案,覆蓋率收集終端服務(wù)器在接收到終端的業(yè)務(wù)請(qǐng)求后,無(wú)需將源代碼發(fā)送給終端進(jìn)行執(zhí)行,而是將獲取的對(duì)應(yīng)的源文件的源代碼加載到內(nèi)存來(lái)執(zhí)行,并基于該源文件的語(yǔ)法樹信息記錄執(zhí)行內(nèi)存中的源代碼的覆蓋率數(shù)據(jù),并將該覆蓋率數(shù)據(jù)匯總到覆蓋率收集收集中心服務(wù)器后,由覆蓋率收集中心服務(wù)器基于各覆蓋率收集終端服務(wù)器上傳的覆蓋率數(shù)據(jù)確定出該源文件的代碼覆蓋率,其不僅實(shí)現(xiàn)了對(duì)服務(wù)器的代碼覆蓋率的收集,而且在代碼覆蓋率的收集過(guò)程中,是記錄執(zhí)行內(nèi)存中的源代碼的覆蓋率數(shù)據(jù),因而無(wú)需對(duì)源代碼進(jìn)行修改,不僅可以無(wú)感知的進(jìn)行代碼覆蓋率的收集,不影響開發(fā)人員對(duì)源代碼的再次編輯。

附圖說(shuō)明

圖1是一個(gè)實(shí)施例的應(yīng)用環(huán)境的示意圖;

圖2是一個(gè)實(shí)施例中的服務(wù)器的組成結(jié)構(gòu)示意圖;

圖3是一個(gè)實(shí)施例的代碼覆蓋率收集方法的流程示意圖;

圖4是另一個(gè)實(shí)施例的代碼覆蓋率收集方法的流程示意圖;

圖5是一個(gè)具體示例中的收集代碼覆蓋率的流程示意圖;

圖6是一個(gè)具體示例中得到的代碼覆蓋率的示意圖;

圖7是一個(gè)實(shí)施例的代碼覆蓋率收集裝置的結(jié)構(gòu)示意圖;

圖8是另一個(gè)實(shí)施例的代碼覆蓋率收集裝置的結(jié)構(gòu)示意圖。

具體實(shí)施方式

為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施方式僅僅用以解釋本發(fā)明,并不限定本發(fā)明的保護(hù)范圍。

圖1示出了本發(fā)明一個(gè)實(shí)施例中的工作環(huán)境示意圖,如圖1所示,其工作環(huán)境涉及覆蓋率收集中心服務(wù)器100以及覆蓋率收集終端服務(wù)器101,由圖1可見,覆蓋率收集終端服務(wù)器101可以包括有多個(gè),覆蓋率收集中心服務(wù)器100與覆蓋率收集終端服務(wù)器101可以通過(guò)網(wǎng)絡(luò)1進(jìn)行通信,覆蓋率收集中心服務(wù)器100與各覆蓋率收集終端服務(wù)器101共同構(gòu)成服務(wù)器集群,以為用戶終端提供業(yè)務(wù)服務(wù)。圖1所示中,覆蓋率收集中心服務(wù)器100、各覆蓋率收集終端服務(wù)器101上運(yùn)行業(yè)務(wù)平臺(tái),通常為用解釋性語(yǔ)言(例如JavaScript等)實(shí)現(xiàn)的平臺(tái),以為用戶使用的終端提供業(yè)務(wù)服務(wù)。如圖1所示,覆蓋率收集終端服務(wù)器101可以通過(guò)網(wǎng)絡(luò)2為用戶終端1011提供業(yè)務(wù)服務(wù)??梢岳斫獾氖牵瑘D1所示中的網(wǎng)絡(luò)1、網(wǎng)絡(luò)2僅僅是為了對(duì)覆蓋率收集中心服務(wù)器100與各覆蓋率收集終端服務(wù)器101共同構(gòu)成的服務(wù)器集群和覆蓋率收集終端服務(wù)器101為用戶終端提供業(yè)務(wù)服務(wù)進(jìn)行區(qū)分,并不用以限定網(wǎng)絡(luò)1、網(wǎng)絡(luò)2必須是不同的網(wǎng)絡(luò)類型。在實(shí)際技術(shù)應(yīng)用中,網(wǎng)絡(luò)1、網(wǎng)絡(luò)2可以是相同的網(wǎng)絡(luò)(例如WEB網(wǎng)絡(luò)),也可以是不同的網(wǎng)絡(luò),例如專用網(wǎng)絡(luò)。

覆蓋率收集終端服務(wù)器101在為用戶終端1011提供業(yè)務(wù)服務(wù)的過(guò)程中,對(duì)提供業(yè)務(wù)服務(wù)過(guò)程中執(zhí)行的源文件的源代碼進(jìn)行覆蓋率數(shù)據(jù)的收集,并將收集的覆蓋率數(shù)據(jù)上報(bào)給覆蓋率收集中心服務(wù)器100,由覆蓋率收集中心服務(wù)器100基于各覆蓋率收集終端服務(wù)器101上報(bào)的覆蓋率數(shù)據(jù),確定出對(duì)應(yīng)源文件的代碼覆蓋率。其中,覆蓋率收集中心服務(wù)器100可以是僅對(duì)各覆蓋率收集終端服務(wù)器101上報(bào)的覆蓋率數(shù)據(jù)、并據(jù)此確定代碼覆蓋率的服務(wù)器,也可以是同時(shí)為用戶終端提供業(yè)務(wù)服務(wù)的服務(wù)器。本實(shí)施例涉及的是覆蓋率收集終端服務(wù)器101收集覆蓋率數(shù)據(jù)和覆蓋率收集中心服務(wù)器100確定代碼覆蓋率的方案。

覆蓋率收集中心服務(wù)器100、覆蓋率收集終端服務(wù)器101在一個(gè)實(shí)施例中的結(jié)構(gòu)示意圖如圖2所示。其包括通過(guò)系統(tǒng)總線連接的處理器、供電模塊、存儲(chǔ)介質(zhì)、內(nèi)存和通信接口。其中,服務(wù)器的存儲(chǔ)介質(zhì)存儲(chǔ)有操作系統(tǒng)、數(shù)據(jù)庫(kù)和一種代碼覆蓋率收集裝置,該裝置用于實(shí)現(xiàn)一種代碼覆蓋率收集方法。服務(wù)器的通信接口用于進(jìn)行網(wǎng)絡(luò)連接和通信,以覆蓋率收集終端服務(wù)器101為例,其通信接口可以與覆蓋率收集中心服務(wù)器100和用戶終端1011連接和通信。

本領(lǐng)域技術(shù)人員可以理解,圖2中示出的結(jié)構(gòu),僅僅是與發(fā)明方案相關(guān)的部分結(jié)構(gòu)的框圖,并不構(gòu)成對(duì)發(fā)明方案所應(yīng)用于其上的服務(wù)器的限定,具體的服務(wù)器可以包括比圖中所示更多或更少的部件,或者組合某些部件,或者具有不同的部件布置。

圖3示出了一個(gè)實(shí)施例中的代碼覆蓋率收集方法的流程示意圖,該實(shí)施例中是以覆蓋率收集終端服務(wù)器101的處理過(guò)程為例進(jìn)行說(shuō)明。

如圖3所示,該實(shí)施例中的代碼覆蓋率收集方法包括:

步驟S301:接收終端發(fā)送的業(yè)務(wù)請(qǐng)求,所述業(yè)務(wù)請(qǐng)求包括應(yīng)用標(biāo)識(shí);

步驟S302:根據(jù)所述業(yè)務(wù)請(qǐng)求獲取與所述應(yīng)用標(biāo)識(shí)對(duì)應(yīng)的源文件、源文件標(biāo)識(shí)以及所述源文件的語(yǔ)法樹信息;

步驟S303:將所述源文件的源代碼加載到內(nèi)存;

步驟S304:執(zhí)行加載到內(nèi)存的所述源代碼,并在所述源代碼的執(zhí)行過(guò)程中,基于所述語(yǔ)法樹信息記錄執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù);

步驟S305:向覆蓋率收集中心服務(wù)器發(fā)送覆蓋率上報(bào)信息,所述覆蓋率上報(bào)信息包括所述源文件標(biāo)識(shí)、所述覆蓋率數(shù)據(jù),由所述覆蓋率收集中心服務(wù)器根據(jù)各覆蓋率收集終端服務(wù)器上傳的覆蓋率上報(bào)信息確定所述源文件的代碼覆蓋率。

基于如上所述的實(shí)施例中的方案,覆蓋率收集終端服務(wù)器在接收到終端的業(yè)務(wù)請(qǐng)求后,無(wú)需將源代碼發(fā)送給終端進(jìn)行執(zhí)行,而是將獲取的對(duì)應(yīng)的源文件的源代碼加載到內(nèi)存來(lái)執(zhí)行,并基于該源文件的語(yǔ)法樹信息記錄執(zhí)行內(nèi)存中的源代碼的覆蓋率數(shù)據(jù),并將該覆蓋率數(shù)據(jù)匯總到覆蓋率收集收集中心服務(wù)器后,由覆蓋率收集中心服務(wù)器基于各覆蓋率收集終端服務(wù)器上傳的覆蓋率數(shù)據(jù)確定出該源文件的代碼覆蓋率,其不僅實(shí)現(xiàn)了對(duì)服務(wù)器的代碼覆蓋率的收集,而且在代碼覆蓋率的收集過(guò)程中,是記錄執(zhí)行內(nèi)存中的源代碼的覆蓋率數(shù)據(jù),因而無(wú)需對(duì)源代碼進(jìn)行修改,不僅可以無(wú)感知的進(jìn)行代碼覆蓋率的收集,不影響開發(fā)人員對(duì)源代碼的再次編輯。

在如上所述的實(shí)施例的方案中,是在將源文件的源代碼加載到內(nèi)存后,在執(zhí)行加載到內(nèi)存的源代碼的執(zhí)行過(guò)程中,基于語(yǔ)法樹信息記錄執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù)。在一個(gè)具體示例中,還可以是在將所述源文件的源代碼加載到內(nèi)存時(shí),基于所述語(yǔ)法樹信息對(duì)加載到內(nèi)存的源代碼進(jìn)行插樁。從而在執(zhí)行加載到內(nèi)存的源代碼的執(zhí)行過(guò)程中,也可以實(shí)現(xiàn)對(duì)執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù)的記錄,而且也無(wú)需對(duì)源代碼進(jìn)行修改。其中,記錄的執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù),可以是代碼行的執(zhí)行次數(shù)。

上述語(yǔ)法樹信息,可以基于源文件的源代碼的結(jié)構(gòu)進(jìn)行確定,例如可以包括函數(shù)定義語(yǔ)句、分支語(yǔ)句以及除了函數(shù)定義語(yǔ)句和分支語(yǔ)句的代碼行中的至少一種,此時(shí),上述確定的代碼覆蓋率包括函數(shù)覆蓋率、分支語(yǔ)句覆蓋率以及代碼行覆蓋率中的至少一種。

圖4中示出了另一個(gè)實(shí)施例中的代碼覆蓋率收集方法的流程示意圖,該實(shí)施例中是以覆蓋率收集中心服務(wù)器100的處理過(guò)程為例進(jìn)行說(shuō)明。

如圖4所示,該實(shí)施例中的代碼覆蓋率收集方法包括:

步驟S401:接收各覆蓋率收集終端服務(wù)器發(fā)送的覆蓋率上報(bào)信息,所述覆蓋率上報(bào)信息包括源文件標(biāo)識(shí)以及對(duì)應(yīng)的覆蓋率數(shù)據(jù),所述覆蓋率數(shù)據(jù)為所述覆蓋率收集終端服務(wù)器在接收到終端發(fā)送的包含應(yīng)用標(biāo)識(shí)的業(yè)務(wù)請(qǐng)求時(shí),獲取與所述應(yīng)用標(biāo)識(shí)對(duì)應(yīng)的源文件、源文件標(biāo)識(shí)以及所述源文件的語(yǔ)法樹信息,并將所述源文件的源代碼加載到內(nèi)存后,在加載到內(nèi)存的所述源代碼的執(zhí)行過(guò)程中基于所述語(yǔ)法樹信息記錄執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù),

步驟S402:根據(jù)各覆蓋率收集終端服務(wù)器發(fā)送的所述覆蓋率上報(bào)信息,確定所述源文件標(biāo)識(shí)對(duì)應(yīng)的源文件的代碼覆蓋率。

基于如上所述的實(shí)施例中的方案,覆蓋率收集終端服務(wù)器在接收到終端的業(yè)務(wù)請(qǐng)求后,無(wú)需將源代碼發(fā)送給終端進(jìn)行執(zhí)行,而是將獲取的對(duì)應(yīng)的源文件的源代碼加載到內(nèi)存來(lái)執(zhí)行,并基于該源文件的語(yǔ)法樹信息記錄執(zhí)行內(nèi)存中的源代碼的覆蓋率數(shù)據(jù),并將該覆蓋率數(shù)據(jù)匯總到覆蓋率收集收集中心服務(wù)器后,由覆蓋率收集中心服務(wù)器基于各覆蓋率收集終端服務(wù)器上傳的覆蓋率數(shù)據(jù)確定出該源文件的代碼覆蓋率,其不僅實(shí)現(xiàn)了對(duì)服務(wù)器的代碼覆蓋率的收集,而且在代碼覆蓋率的收集過(guò)程中,是記錄執(zhí)行內(nèi)存中的源代碼的覆蓋率數(shù)據(jù),因而無(wú)需對(duì)源代碼進(jìn)行修改,不僅可以無(wú)感知的進(jìn)行代碼覆蓋率的收集,不影響開發(fā)人員對(duì)源代碼的再次編輯。

其中,上述步驟S402在確定代碼覆蓋率時(shí),可以是通過(guò)將各所述覆蓋率收集終端服務(wù)器上傳的所述源文件標(biāo)識(shí)對(duì)應(yīng)的覆蓋率數(shù)據(jù)與所述源文件標(biāo)識(shí)對(duì)應(yīng)的源代碼進(jìn)行比較,根據(jù)比較結(jié)果確定所述源文件標(biāo)識(shí)對(duì)應(yīng)的源文件的代碼覆蓋率。具體的比較確定方式,可以采用目前已有的任何可能的方式進(jìn)行。

上述語(yǔ)法樹信息,可以基于源文件的源代碼的結(jié)構(gòu)進(jìn)行確定,例如可以包括函數(shù)定義語(yǔ)句、分支語(yǔ)句以及除了函數(shù)定義語(yǔ)句和分支語(yǔ)句的代碼行中的至少一種,此時(shí),上述確定的代碼覆蓋率包括函數(shù)覆蓋率、分支語(yǔ)句覆蓋率以及代碼行覆蓋率中的至少一種。

如圖4所示,在該實(shí)施例中,本實(shí)施例中的方法還包括:

步驟S403:根據(jù)各所述覆蓋率收集終端服務(wù)器發(fā)送的所述覆蓋率上報(bào)信息,對(duì)所述源文件標(biāo)識(shí)對(duì)應(yīng)的源代碼中、各所述覆蓋率收集終端服務(wù)器均未執(zhí)行的代碼行進(jìn)行標(biāo)記;

步驟S404:根據(jù)標(biāo)記的代碼行、所述代碼覆蓋率生成可視化代碼覆蓋率報(bào)告。

從而可以使用戶查看可視化的代碼覆蓋率,并可以據(jù)此對(duì)源文件的源代碼進(jìn)行更新和改進(jìn)。

為便于理解,圖5中示出了一個(gè)具體示例中的收集代碼覆蓋率的流程示意圖;該具體示例中是結(jié)合覆蓋率收集終端服務(wù)器與覆蓋率收集中心服務(wù)器之間的交互過(guò)程為例進(jìn)行說(shuō)明。

在該具體示例的實(shí)現(xiàn)方案中,覆蓋率收集中心服務(wù)器以及各覆蓋率收集終端服務(wù)器運(yùn)行用解釋性語(yǔ)言實(shí)現(xiàn)的平臺(tái),以采用解釋性語(yǔ)言JavaScript為例,覆蓋率收集中心服務(wù)器以及各覆蓋率收集終端服務(wù)器運(yùn)行JavaScript運(yùn)行平臺(tái)。node.js作為一種JavaScript運(yùn)行平臺(tái),使用事件驅(qū)動(dòng),非阻塞I/O模型而得以輕量和高效,通常用于搭建響應(yīng)速度快、易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用,例如在分布式設(shè)備上運(yùn)行數(shù)據(jù)密集型的實(shí)時(shí)應(yīng)用。在下述示例中,以覆蓋率收集中心服務(wù)器以及各覆蓋率收集終端服務(wù)器運(yùn)行node.js平臺(tái)為例進(jìn)行說(shuō)明,即node.js運(yùn)行在覆蓋率收集中心服務(wù)器以及各覆蓋率收集終端服務(wù)器。

假設(shè)將被測(cè)試的javascript文件(源文件)記為A,為了收集源文件A的代碼覆蓋率,先對(duì)源文件A進(jìn)行分析,形成源文件A的語(yǔ)法樹,查找出有意義的實(shí)際代碼,去除注釋以及不需要統(tǒng)計(jì)覆蓋率信息的公共函數(shù)等,得到源文件A的語(yǔ)法樹信息。

可以理解,在確定源代碼A的語(yǔ)法樹時(shí),可以結(jié)合代碼的組成結(jié)構(gòu)進(jìn)行。例如,一個(gè)具體示例中,可以從中分析確定出源代碼中的函數(shù)定義語(yǔ)句(例如function定義語(yǔ)句)、分支語(yǔ)句(例如if else、switch case語(yǔ)句)以及除了函數(shù)定義語(yǔ)句和分支語(yǔ)句的代碼行,形成語(yǔ)法樹信息。

本實(shí)施例方案在具體應(yīng)用時(shí),可以結(jié)合前端發(fā)布系統(tǒng)使用。前端發(fā)布系統(tǒng)主要用來(lái)將javascript文件從svn拉取并發(fā)布到測(cè)試環(huán)境,發(fā)布之后測(cè)試人員進(jìn)行特性測(cè)試,本實(shí)施例的方案自動(dòng)記錄并收集代碼覆蓋率。

如圖5所示,在該具體應(yīng)用示例中,對(duì)于一個(gè)覆蓋率收集終端服務(wù)器(如圖5中所示的覆蓋率收集終端服務(wù)器1、覆蓋率收集終端服務(wù)器K)而言,在一個(gè)具體應(yīng)用中,其接收終端發(fā)送的業(yè)務(wù)請(qǐng)求,該業(yè)務(wù)請(qǐng)求包括應(yīng)用標(biāo)識(shí)L,該應(yīng)用標(biāo)識(shí)L通??梢允蔷唧w的應(yīng)用程序的產(chǎn)品標(biāo)識(shí),例如該應(yīng)用程序的名稱等,然后基于該應(yīng)用標(biāo)識(shí)L確定對(duì)應(yīng)的源文件標(biāo)識(shí)M,并基于該源文件標(biāo)識(shí)M獲取與源文件標(biāo)識(shí)M對(duì)應(yīng)的源文件以及源文件的語(yǔ)法樹信息。

在一個(gè)具體示例中,以JavaScript運(yùn)行平臺(tái)node.js為例,基于node.js的運(yùn)行機(jī)制,可以通過(guò)node.js的require和vm.createScript機(jī)制,基于hook機(jī)制獲取對(duì)應(yīng)的源文件并進(jìn)行源文件的源代碼的加載。

并且可以針對(duì)node.js的require和vm.createScript進(jìn)行監(jiān)測(cè),在監(jiān)測(cè)到node.js的require和vm.createScript時(shí),獲取與源文件標(biāo)識(shí)M的源文件的語(yǔ)法樹信息。

隨后,將獲得的源文件M的源代碼加載到當(dāng)前覆蓋率收集終端服務(wù)器本地的內(nèi)存進(jìn)行執(zhí)行。

在一個(gè)具體示例中,可以是將在將源文件M的源代碼加載到內(nèi)存時(shí),基于源文件M的上述語(yǔ)法樹信息對(duì)加載到內(nèi)存的源代碼進(jìn)行插樁,具體的插樁方式可以采用目前已有的任何方式進(jìn)行。從而當(dāng)前覆蓋率收集終端服務(wù)器本地的源文件的源代碼無(wú)需改變,僅對(duì)內(nèi)存中的源代碼進(jìn)行插樁,從而不僅可以無(wú)感知的進(jìn)行代碼覆蓋率的收集,而且不影響開發(fā)人員對(duì)源代碼的再次編輯。

插樁,是指在不破壞被測(cè)程序原有邏輯完整性的情況下,在被測(cè)程序的相應(yīng)位置插入用于插樁的代碼(也稱之為探針),這些探針本質(zhì)上是進(jìn)行信息采集的代碼段,通過(guò)探針的執(zhí)行并輸出程序的運(yùn)行特征數(shù)據(jù),從而基于這些特征數(shù)據(jù)的分析,揭示程序的內(nèi)部行為和特性。在常規(guī)的測(cè)試方式中,在測(cè)試完畢后,需要將這些插入的探針去除,以保留被測(cè)程序的完整性。在本實(shí)施例方案中,是在將源文件M的源代碼加載到內(nèi)存時(shí),基于源文件M的上述語(yǔ)法樹信息對(duì)加載到內(nèi)存的源代碼進(jìn)行插樁,從而當(dāng)前覆蓋率收集終端服務(wù)器本地的源文件的源代碼無(wú)需改變,僅對(duì)內(nèi)存中的源代碼進(jìn)行插樁,不需要進(jìn)行移樁操作就可以保證源代碼的完整性,不影響開發(fā)人員對(duì)源代碼的再次編輯。

以上述語(yǔ)法樹信息包括函數(shù)定義語(yǔ)句、分支語(yǔ)句以及代碼行為例,在進(jìn)行插樁時(shí),可以采用以下方式進(jìn)行插樁。

針對(duì)函數(shù)定義語(yǔ)句,例如“function test(req,res){”,可以在該語(yǔ)句后面加上“coverage.f['1']++”,從而當(dāng)“function test(req,res){”被執(zhí)行的時(shí)候,“coverage.f['1']++”也被執(zhí)行,自動(dòng)為該函數(shù)執(zhí)行數(shù)加1。

針對(duì)分支語(yǔ)句,例如if else、switch case等,可以采用類似于函數(shù)定義語(yǔ)句的方式,在分支語(yǔ)句之后加上統(tǒng)計(jì)語(yǔ)句,針對(duì)各個(gè)分支,可以單獨(dú)記錄,例如針對(duì)if(2>1){}else{}語(yǔ)句,插樁后的結(jié)果是

if(2>1){

coverage.b['1'][0]++;}

else{coverage.b['1'][1]++;}

除了函數(shù)和分支語(yǔ)句之外的其他代碼行,則可以只是簡(jiǎn)單的進(jìn)行覆蓋率信息的累加,例如“coverage.s['1']++”。

當(dāng)然,可以理解的是,基于實(shí)際技術(shù)應(yīng)用需要,也可以不對(duì)內(nèi)存中的源代碼進(jìn)行插樁,直接在內(nèi)存中的源代碼的執(zhí)行過(guò)程中,基于上述語(yǔ)法樹信息對(duì)源代碼的執(zhí)行情況進(jìn)行監(jiān)測(cè),進(jìn)行覆蓋率信息的收集。具體的收集覆蓋率信息的方式,可以采用目前已有以及以后可能出現(xiàn)的任何方式進(jìn)行,例如針對(duì)加載到內(nèi)存中的源代碼,利用一些測(cè)試框架和代碼覆蓋率信息收集工具實(shí)現(xiàn)代碼覆蓋率信息的收集。

結(jié)合上述示例,在內(nèi)存中的源代碼的執(zhí)行過(guò)程中,覆蓋率信息被存儲(chǔ)于coverage數(shù)組,從而得到源文件M在當(dāng)前覆蓋率收集終端服務(wù)器的覆蓋率數(shù)據(jù)。

隨后,當(dāng)前覆蓋率收集終端服務(wù)器基于收集的覆蓋率數(shù)據(jù),向覆蓋率收集中心服務(wù)器發(fā)送覆蓋率上報(bào)信息,該覆蓋率上報(bào)信息包括上述源文件標(biāo)識(shí)L以及上述收集的覆蓋率信息。

由于覆蓋率收集終端服務(wù)器上可能有多個(gè)不同的源文件,因此,其實(shí)際上可能會(huì)收集多個(gè)不同的源文件的覆蓋率信息,據(jù)此,覆蓋率收集終端服務(wù)器在向覆蓋率收集中心服務(wù)器發(fā)送覆蓋率上報(bào)信息時(shí),可以在任意一個(gè)源文件在內(nèi)存中執(zhí)行完畢時(shí)上報(bào)一次。另一方面,由于源文件的數(shù)目可能較多,而且源文件的執(zhí)行時(shí)間可能較長(zhǎng),因此,覆蓋率收集終端服務(wù)器也可以是每隔一個(gè)預(yù)定時(shí)間段(例如1分鐘)向覆蓋率收集中心服務(wù)器上報(bào)一次覆蓋率上報(bào)信息。

覆蓋率收集中心服務(wù)器在接收到各個(gè)覆蓋率收集終端服務(wù)器上報(bào)的覆蓋率上報(bào)信息后,根據(jù)各覆蓋率收集終端服務(wù)器發(fā)送的覆蓋率上報(bào)信息,確定源文件標(biāo)識(shí)L對(duì)應(yīng)的源文件的代碼覆蓋率,并基于確定的代碼覆蓋率生成覆蓋率報(bào)告。

在一個(gè)具體示例中,覆蓋率收集中心服務(wù)器在接收到各個(gè)覆蓋率收集終端服務(wù)器上報(bào)的覆蓋率上報(bào)信息后,可以將各覆蓋率上報(bào)信息與上述源文件標(biāo)識(shí)M對(duì)應(yīng)的源代碼進(jìn)行比較,并根據(jù)比較結(jié)果計(jì)算出代碼覆蓋率,包括函數(shù)覆蓋率、分支覆蓋率、行覆蓋率等,一個(gè)具體技術(shù)應(yīng)用示例中得到的代碼覆蓋率的示意圖如圖6所示。具體的將各覆蓋率上報(bào)信息與上述源文件標(biāo)識(shí)M對(duì)應(yīng)的源代碼進(jìn)行比較計(jì)算出代碼覆蓋率的方式,可以采用目前已有的任何可能的方式進(jìn)行。

另一方面,在上述將各覆蓋率上報(bào)信息與上述源文件標(biāo)識(shí)M對(duì)應(yīng)的源代碼進(jìn)行比較計(jì)算出代碼覆蓋率的過(guò)程中,還可以對(duì)源代碼中、各覆蓋率收集終端服務(wù)器均未執(zhí)行的代碼行進(jìn)行標(biāo)記,然后基于標(biāo)記的代碼行和上述代碼覆蓋率生成可視化代碼覆蓋率報(bào)告。從而可以使用戶查看可視化的代碼覆蓋率,并可以據(jù)此對(duì)源文件的源代碼進(jìn)行更新和改進(jìn)。

覆蓋率收集中心服務(wù)器得到的可視化代碼覆蓋率報(bào)告可以返回給測(cè)試人員所在的終端,供測(cè)試人員查看。

基于如上所述的具體示例可見,本實(shí)施例可以彌補(bǔ)功能測(cè)試應(yīng)用場(chǎng)景下的基于解釋性語(yǔ)言的服務(wù)器端無(wú)法收集代碼覆蓋率的缺憾,可以幫助測(cè)試人員更好的進(jìn)行覆蓋率分析,而且可以與已有的發(fā)布平臺(tái)高度整合,無(wú)感知的進(jìn)行覆蓋率的收集。而且,其在收集代碼覆蓋率的過(guò)程中,不會(huì)實(shí)際改變?cè)次募脑创a,不會(huì)影響開發(fā)人員對(duì)源代碼的再次編輯。

基于與上述方法相同的思想,本實(shí)施例還提供一種代碼覆蓋率收集裝置。

圖7示出了一個(gè)實(shí)施例中的代碼覆蓋率收集裝置的結(jié)構(gòu)示意圖,該實(shí)施例中是以設(shè)置在覆蓋率收集終端服務(wù)器101為例進(jìn)行說(shuō)明。

如圖7所示,該實(shí)施例中代碼覆蓋率收集裝置包括:

請(qǐng)求接收模塊701,用于接收終端發(fā)送的業(yè)務(wù)請(qǐng)求,所述業(yè)務(wù)請(qǐng)求包括應(yīng)用標(biāo)識(shí);

文件及信息獲取模塊702,用于根據(jù)所述業(yè)務(wù)請(qǐng)求獲取與所述應(yīng)用標(biāo)識(shí)對(duì)應(yīng)的源文件、所述源文件標(biāo)識(shí)以及所述源文件的語(yǔ)法樹信息;

代碼加載模塊703,用于將所述源文件的源代碼加載到內(nèi)存;

數(shù)據(jù)記錄模塊704,用于在加載到內(nèi)存的所述源代碼的執(zhí)行過(guò)程中,基于所述語(yǔ)法樹信息記錄執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù);

信息上報(bào)模塊705,用于向覆蓋率收集中心服務(wù)器發(fā)送覆蓋率上報(bào)信息,所述覆蓋率上報(bào)信息包括所述源文件標(biāo)識(shí)、所述覆蓋率數(shù)據(jù),由所述覆蓋率收集中心服務(wù)器根據(jù)各覆蓋率收集終端服務(wù)器上傳的覆蓋率上報(bào)信息確定所述源文件的代碼覆蓋率。

如上所述的實(shí)施例中的方案,覆蓋率收集終端服務(wù)器在接收到終端的業(yè)務(wù)請(qǐng)求后,無(wú)需將源代碼發(fā)送給終端進(jìn)行執(zhí)行,而是將獲取的對(duì)應(yīng)的源文件的源代碼加載到內(nèi)存來(lái)執(zhí)行,并基于該源文件的語(yǔ)法樹信息記錄執(zhí)行內(nèi)存中的源代碼的覆蓋率數(shù)據(jù),并將該覆蓋率數(shù)據(jù)匯總到覆蓋率收集收集中心服務(wù)器后,由覆蓋率收集中心服務(wù)器基于各覆蓋率收集終端服務(wù)器上傳的覆蓋率數(shù)據(jù)確定出該源文件的代碼覆蓋率,其不僅實(shí)現(xiàn)了對(duì)服務(wù)器的代碼覆蓋率的收集,而且在代碼覆蓋率的收集過(guò)程中,是記錄執(zhí)行內(nèi)存中的源代碼的覆蓋率數(shù)據(jù),因而無(wú)需對(duì)源代碼進(jìn)行修改,不僅可以無(wú)感知的進(jìn)行代碼覆蓋率的收集,不影響開發(fā)人員對(duì)源代碼的再次編輯。

在如上所述的實(shí)施例的方案中,是在將源文件的源代碼加載到內(nèi)存后,在執(zhí)行加載到內(nèi)存的源代碼的執(zhí)行過(guò)程中,基于語(yǔ)法樹信息記錄執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù)。

如圖7所示,在一個(gè)具體示例中,本實(shí)施例的裝置還可以包括:

插樁模塊7034,用于在將所述源文件的源代碼加載到內(nèi)存時(shí),基于所述語(yǔ)法樹信息對(duì)加載到內(nèi)存的源代碼進(jìn)行插樁。

從而在執(zhí)行加載到內(nèi)存的源代碼的執(zhí)行過(guò)程中,也可以實(shí)現(xiàn)對(duì)執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù)的記錄,而且也無(wú)需對(duì)源代碼進(jìn)行修改。其中,記錄的執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù),可以是代碼行的執(zhí)行次數(shù)。

上述語(yǔ)法樹信息,可以基于源文件的源代碼的結(jié)構(gòu)進(jìn)行確定,例如可以包括函數(shù)定義語(yǔ)句、分支語(yǔ)句以及除了函數(shù)定義語(yǔ)句和分支語(yǔ)句的代碼行中的至少一種,此時(shí),上述確定的代碼覆蓋率包括函數(shù)覆蓋率、分支語(yǔ)句覆蓋率以及代碼行覆蓋率中的至少一種。

圖8示出了另一個(gè)實(shí)施例中的代碼覆蓋率收集裝置的結(jié)構(gòu)示意圖,該實(shí)施例是以設(shè)置在覆蓋率收集中心服務(wù)器100為例進(jìn)行說(shuō)明。

如圖8所示,該實(shí)施例中的代碼覆蓋率收集裝置包括:

上報(bào)信息接收模塊801,用于接收各覆蓋率收集終端服務(wù)器發(fā)送的覆蓋率上報(bào)信息,所述覆蓋率上報(bào)信息包括源文件標(biāo)識(shí)以及對(duì)應(yīng)的覆蓋率數(shù)據(jù),所述覆蓋率數(shù)據(jù)為所述覆蓋率收集終端服務(wù)器在接收到終端發(fā)送的包含應(yīng)用標(biāo)識(shí)的業(yè)務(wù)請(qǐng)求時(shí),獲取與所述應(yīng)用標(biāo)識(shí)對(duì)應(yīng)的源文件、所述源文件標(biāo)識(shí)以及所述源文件的語(yǔ)法樹信息,并將所述源文件的源代碼加載到內(nèi)存后,在加載到內(nèi)存的所述源代碼的執(zhí)行過(guò)程中基于所述語(yǔ)法樹信息記錄執(zhí)行所述源代碼的代碼行的覆蓋率數(shù)據(jù);

代碼覆蓋率確定模塊802,用于根據(jù)各覆蓋率收集終端服務(wù)器發(fā)送的所述覆蓋率上報(bào)信息,確定所述源文件標(biāo)識(shí)對(duì)應(yīng)的源文件的代碼覆蓋率。

如上所述的實(shí)施例中的方案,覆蓋率收集終端服務(wù)器在接收到終端的業(yè)務(wù)請(qǐng)求后,無(wú)需將源代碼發(fā)送給終端進(jìn)行執(zhí)行,而是將獲取的對(duì)應(yīng)的源文件的源代碼加載到內(nèi)存來(lái)執(zhí)行,并基于該源文件的語(yǔ)法樹信息記錄執(zhí)行內(nèi)存中的源代碼的覆蓋率數(shù)據(jù),并將該覆蓋率數(shù)據(jù)匯總到覆蓋率收集收集中心服務(wù)器后,由覆蓋率收集中心服務(wù)器基于各覆蓋率收集終端服務(wù)器上傳的覆蓋率數(shù)據(jù)確定出該源文件的代碼覆蓋率,其不僅實(shí)現(xiàn)了對(duì)服務(wù)器的代碼覆蓋率的收集,而且在代碼覆蓋率的收集過(guò)程中,是記錄執(zhí)行內(nèi)存中的源代碼的覆蓋率數(shù)據(jù),因而無(wú)需對(duì)源代碼進(jìn)行修改,不僅可以無(wú)感知的進(jìn)行代碼覆蓋率的收集,不影響開發(fā)人員對(duì)源代碼的再次編輯。

其中,上述代碼覆蓋率確定模塊802,可以是通過(guò)將各所述覆蓋率收集終端服務(wù)器上傳的所述源文件標(biāo)識(shí)對(duì)應(yīng)的覆蓋率數(shù)據(jù)與所述源文件標(biāo)識(shí)對(duì)應(yīng)的源代碼進(jìn)行比較,根據(jù)比較結(jié)果確定所述源文件標(biāo)識(shí)對(duì)應(yīng)的源文件的代碼覆蓋率。具體的比較確定方式,可以采用目前已有的任何可能的方式進(jìn)行。

上述語(yǔ)法樹信息,可以基于源文件的源代碼的結(jié)構(gòu)進(jìn)行確定,例如可以包括函數(shù)定義語(yǔ)句、分支語(yǔ)句以及除了函數(shù)定義語(yǔ)句和分支語(yǔ)句的代碼行中的至少一種,此時(shí),上述確定的代碼覆蓋率包括函數(shù)覆蓋率、分支語(yǔ)句覆蓋率以及代碼行覆蓋率中的至少一種。

在一個(gè)具體示例中,如圖8所示,本實(shí)施例的裝置還可以包括:

標(biāo)記模塊803,用于根據(jù)各所述覆蓋率收集終端服務(wù)器發(fā)送的所述覆蓋率上報(bào)信息,對(duì)所述源文件標(biāo)識(shí)對(duì)應(yīng)的源代碼中、各所述覆蓋率收集終端服務(wù)器均未執(zhí)行的代碼行進(jìn)行標(biāo)記;

可視化報(bào)告生成模塊804,用于根據(jù)所述標(biāo)記模塊標(biāo)記的代碼行、所述代碼覆蓋率生成可視化代碼覆蓋率報(bào)告。

從而可以使用戶查看可視化的代碼覆蓋率,并可以據(jù)此對(duì)源文件的源代碼進(jìn)行更新和改進(jìn)。

本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一非易失性的計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,如本發(fā)明實(shí)施例中,該程序可存儲(chǔ)于計(jì)算機(jī)系統(tǒng)的存儲(chǔ)介質(zhì)中,并被該計(jì)算機(jī)系統(tǒng)中的至少一個(gè)處理器執(zhí)行,以實(shí)現(xiàn)包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-Only Memory,ROM)或隨機(jī)存儲(chǔ)記憶體(Random AccessMemory,RAM)等。

以上所述實(shí)施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡(jiǎn)潔,未對(duì)上述實(shí)施例中的各個(gè)技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說(shuō)明書記載的范圍。

以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。

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