[發(fā)明專利]一種基于lcov實現(xiàn)增量代碼覆蓋率的檢測方法、裝置及設(shè)備在審
| 申請?zhí)枺?/td> | 201911125848.6 | 申請日: | 2019-11-15 |
| 公開(公告)號: | CN110928776A | 公開(公告)日: | 2020-03-27 |
| 發(fā)明(設(shè)計)人: | 劉練;陳國慶;謝強 | 申請(專利權(quán))人: | 武漢極意網(wǎng)絡(luò)科技有限公司 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36;G06F8/77;G06F8/41;G06F8/61 |
| 代理公司: | 武漢知產(chǎn)時代知識產(chǎn)權(quán)代理有限公司 42238 | 代理人: | 易濱 |
| 地址: | 430000 湖北省武漢市東湖開發(fā)區(qū)大學(xué)*** | 國省代碼: | 湖北;42 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 基于 lcov 實現(xiàn) 增量 代碼 覆蓋率 檢測 方法 裝置 設(shè)備 | ||
1.一種基于lcov來實現(xiàn)增量代碼覆蓋率的檢測方法,其特征在于,包括以下步驟:
S1、通過Xcode工具來配置編譯選項,進入到編譯進程中,生成應(yīng)用程序安裝包;其中,將生成的應(yīng)用程序安裝包推送給前端進行安裝和運行;
S2、將編譯過程中生成的“.gcno”文件進行打包壓縮后上傳到服務(wù)端;
S3、基于步驟S1,在應(yīng)用程序的運行過程中,調(diào)用覆蓋率分發(fā)函數(shù),生成對應(yīng)的“.gcda”文件,在運行結(jié)束后,從應(yīng)用程序的沙盒中獲取最終生成的“.gcda”文件,在對其進行壓縮后,上傳到服務(wù)端;
S4、在服務(wù)端對接收到的“.gcno”文件和“.gcda”文件進行整合后,通過lcov工具,基于整合后的文件生成“.info”文件;其中,生成的“.info”文件將上傳至Git-開源的分布式版本控制系統(tǒng);
S5、調(diào)用Git diff命令,將步驟S4生成“.info”文件與基線版本的“.info”文件進行比較,得到增量“.info”文件;
S6、通過genhtml工具,基于所述增量“.info”文件生成覆蓋率報告;根據(jù)所述覆蓋率報告,得到增量代碼覆蓋率的檢測結(jié)果。
2.根據(jù)權(quán)利要求1所述的實現(xiàn)增量代碼覆蓋率的檢測方法,其特征在于,步驟S2中生成的“.gcno”文件中,保存著計數(shù)插樁位置和源文件之間的關(guān)系,其中,所述計數(shù)插樁位置包括函數(shù)入口函數(shù)、以及分支函數(shù)代碼行;在插入計數(shù)指令的同時即執(zhí)行Basic Block-基本程序塊,基本程序塊內(nèi)的所有指令將進一步順序執(zhí)行,當(dāng)前由編譯器將計數(shù)指令和程序塊的執(zhí)行數(shù)據(jù)寫入“.gcno”文件。
3.根據(jù)權(quán)利要求2所述的實現(xiàn)增量代碼覆蓋率的檢測方法,其特征在于,由編譯器將計數(shù)指令和程序塊的執(zhí)行數(shù)據(jù)寫入“.gcno”文件的過程為:
首先,基于“.gcno”文件包括的組成部分:文件結(jié)構(gòu)、函數(shù)結(jié)構(gòu)、Basic Block結(jié)構(gòu)和Basic Block行結(jié)構(gòu),寫入用于識別“.gcno文件”和“.gcda文件”的標(biāo)識;然后,根據(jù)當(dāng)前寫入的標(biāo)識遍歷寫入文件地址、函數(shù)名和函數(shù)在源文件中的起止行數(shù);最后,標(biāo)記BasicBlock-基本程序塊之間便于后續(xù)記錄函數(shù)執(zhí)行情況的跳轉(zhuǎn)關(guān)系。
4.根據(jù)權(quán)利要求1所述的實現(xiàn)增量代碼覆蓋率的檢測方法,其特征在于,步驟S3中,覆蓋率分發(fā)函數(shù)的入口分發(fā)函數(shù)是__gcov_flush(),其中,通過調(diào)用__llvm_gcov_flush函數(shù)和__llvm_gcov_writeout函數(shù),來向“.gcda”文件中寫入覆蓋率信息。
5.根據(jù)權(quán)利要求4所述的實現(xiàn)增量代碼覆蓋率的檢測方法,其特征在于,調(diào)用__llvm_gcov_writeout函數(shù)來向“.gcda”文件中寫入覆蓋率信息的過程為:
首先,生成對應(yīng)源文件的“.gcda”文件;
其次,寫入用于識別“.gcno文件”和“.gcda文件”的標(biāo)識;
其次,循環(huán)執(zhí)行l(wèi)lvm_gcda_emit_function函數(shù)向“.gcda”文件寫入用來標(biāo)記文件格式的函數(shù)信息;所述函數(shù)信息包括函數(shù)的入口行、出口行、指令代碼行;
其次,循環(huán)執(zhí)行l(wèi)lvm_gcda_emit_arcs命令向“.gcda”文件寫入Basic Block的執(zhí)行信息;
其次,調(diào)用llvm_gcda_summary_info命令,向“.gcda”文件中寫入校驗信息;
最后,調(diào)用llvm_gcda_end_file命令,結(jié)束當(dāng)前的運行過程。
6.根據(jù)權(quán)利要求5所述的實現(xiàn)增量代碼覆蓋率的檢測方法,其特征在于,步驟S3中,在應(yīng)用程序運行結(jié)束后,通過HTTP接口將“.gcda”文件上傳到服務(wù)端。
7.根據(jù)權(quán)利要求1所述的實現(xiàn)增量代碼覆蓋率的檢測方法,其特征在于,步驟S4中,通過lcov工具生成“.info”文件中包括最終所需得到的覆蓋率檢測數(shù)據(jù),所述覆蓋率檢測數(shù)據(jù)包括源碼路徑、函數(shù)名、函數(shù)執(zhí)行次數(shù)、函數(shù)總數(shù)、函數(shù)在源文件的位置、行號、行執(zhí)行次數(shù)和行總數(shù)。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于武漢極意網(wǎng)絡(luò)科技有限公司,未經(jīng)武漢極意網(wǎng)絡(luò)科技有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201911125848.6/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 互動業(yè)務(wù)終端、實現(xiàn)系統(tǒng)及實現(xiàn)方法
- 街景地圖的實現(xiàn)方法和實現(xiàn)系統(tǒng)
- 游戲?qū)崿F(xiàn)系統(tǒng)和游戲?qū)崿F(xiàn)方法
- 圖像實現(xiàn)裝置及其圖像實現(xiàn)方法
- 增強現(xiàn)實的實現(xiàn)方法以及實現(xiàn)裝置
- 軟件架構(gòu)的實現(xiàn)方法和實現(xiàn)平臺
- 數(shù)值預(yù)報的實現(xiàn)方法及實現(xiàn)系統(tǒng)
- 空調(diào)及其冬眠控制模式實現(xiàn)方法和實現(xiàn)裝置以及實現(xiàn)系統(tǒng)
- 空調(diào)及其睡眠控制模式實現(xiàn)方法和實現(xiàn)裝置以及實現(xiàn)系統(tǒng)
- 輸入設(shè)備實現(xiàn)方法及其實現(xiàn)裝置





