[發(fā)明專利]基于源代碼查詢的半自動(dòng)插樁方法無效
| 申請(qǐng)?zhí)枺?/td> | 201210532019.1 | 申請(qǐng)日: | 2012-12-11 |
| 公開(公告)號(hào): | CN103049504A | 公開(公告)日: | 2013-04-17 |
| 發(fā)明(設(shè)計(jì))人: | 張?zhí)?/a>;何英;李宣東 | 申請(qǐng)(專利權(quán))人: | 南京大學(xué) |
| 主分類號(hào): | G06F17/30 | 分類號(hào): | G06F17/30 |
| 代理公司: | 南京瑞弘專利商標(biāo)事務(wù)所(普通合伙) 32249 | 代理人: | 陳建和 |
| 地址: | 210093 江*** | 國省代碼: | 江蘇;32 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 基于 源代碼 查詢 半自動(dòng) 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明主要用于計(jì)算機(jī)程序動(dòng)態(tài)分析,主要涉及一種基于源代碼查詢的插樁方法。
背景技術(shù)
程序分析通常利用靜態(tài)程序分析和動(dòng)態(tài)程序分析對(duì)程序行為進(jìn)行自動(dòng)分析,進(jìn)而提高軟件質(zhì)量。動(dòng)態(tài)程序分析常借助于插樁方法來收集程序動(dòng)態(tài)運(yùn)行行為,某些與運(yùn)行環(huán)境相關(guān)的程序行為只能通過插樁來收集,而靜態(tài)程序分析無法進(jìn)行分析。軟件開發(fā)過程中,代碼審查者在代碼編寫階段完成后使用源代碼插樁方法對(duì)代碼進(jìn)行審查,通常審查者擁有閱讀源代碼權(quán)限但不便對(duì)代碼進(jìn)行修改。通過對(duì)程序運(yùn)行行為的分析盡早發(fā)現(xiàn)代碼中的錯(cuò)誤,進(jìn)而提高軟件質(zhì)量。源代碼插樁能夠充分地利用程序語義、可視化地顯示插樁代碼、并且不會(huì)提高代碼邏輯復(fù)雜性。
程序插樁技術(shù),是在保證被測(cè)程序原有邏輯完整性的基礎(chǔ)上在程序中插入一些探針,通過探針的執(zhí)行并拋出程序運(yùn)行的特征數(shù)據(jù),通過對(duì)這些數(shù)據(jù)的分析,可以獲得程序的控制流和數(shù)據(jù)流信息,進(jìn)而得到邏輯覆蓋等動(dòng)態(tài)信息,從而實(shí)現(xiàn)測(cè)試目的的方法。由于程序插樁技術(shù)是在被測(cè)程序中插入探針,然后通過探針的執(zhí)行來獲得程序的控制流和數(shù)據(jù)流信息,以此來實(shí)現(xiàn)測(cè)試的目的。因此,根據(jù)探針插入的時(shí)間可以分為目標(biāo)代碼插樁和源代碼插樁。CppIns是一個(gè)基于源代碼查詢的插樁方法及其軟件工具,本申請(qǐng)人已經(jīng)有過在先的專利申請(qǐng)和公開的軟件申請(qǐng)。目前主要提供C++代碼的代碼查詢和插樁功能。
現(xiàn)有插樁方法主要包括斷言機(jī)制、字節(jié)碼插樁、面向方面插樁等三類方法。斷言機(jī)制直接在寫源文件中添加插樁代碼,將會(huì)降低代碼閱讀性。字節(jié)碼插樁則直接對(duì)字節(jié)碼文件進(jìn)行修改,被插字節(jié)碼的源代碼無法可視化,且無法保證代碼插入過程的正確性。面向方面插樁在程序縱向繼承關(guān)系的基礎(chǔ)上增加了橫向方面關(guān)系,增加了程序的邏輯復(fù)雜性。
目前插樁技術(shù)主要存在的瓶頸主要有:插樁點(diǎn)及其代碼非可視化、插樁點(diǎn)自動(dòng)定位困難、難以做到插樁語句上下文敏感、自動(dòng)插樁性能較低的問題。
發(fā)明內(nèi)容
本發(fā)明目的是,鑒于上述問題,本發(fā)明旨在提供一個(gè)源代碼插樁方法,尤其是基于源代碼查詢的半自動(dòng)插樁方法。該方法結(jié)合代碼查詢技術(shù),有效的將代碼查詢得到的插樁位置以及上下文內(nèi)容與插樁機(jī)制相結(jié)合在一起。從源代碼中提取相應(yīng)的代碼信息,在源代碼信息中進(jìn)行代碼查詢,按照插樁語句模板進(jìn)行插樁語句定制,生成相應(yīng)的插樁代碼;最后將插樁代碼和源文件合并輸出帶有插樁語句的C++源代碼。
基于源代碼查詢的半自動(dòng)插樁方法,采用如下步驟:
步驟10:打開一個(gè)被測(cè)源程序或源文件工程;
步驟11:通過在CppIns編輯器中輸入相應(yīng)的插樁命令;
步驟12:CppIns工具解析并執(zhí)行插樁命令,得到所有符合條件的插樁點(diǎn)并生成對(duì)應(yīng)的插樁代碼;
步驟13:審查所有插樁點(diǎn)的定義:若發(fā)現(xiàn)帶有錯(cuò)誤的插樁點(diǎn),則進(jìn)入步驟14對(duì)其進(jìn)行修改;沒有發(fā)現(xiàn)帶有錯(cuò)誤的插樁點(diǎn),則直接進(jìn)入步驟15;
步驟14:修改插樁的定義至正確;
步驟15:將插樁代碼與原源文件合并生成新源文件。
在步驟11中,其中輸入相應(yīng)的CppIns插樁命令過程包括:
步驟30:打開CppIns命令編輯器;
步驟31:判斷是否需要對(duì)整個(gè)C++源文件工程或單個(gè)C++源文件進(jìn)行插樁,如果是,則跳轉(zhuǎn)到步驟32,如果不是,則跳轉(zhuǎn)到步驟35;
步驟32:按照CppIns命令語法規(guī)則給出目標(biāo)插樁點(diǎn)位置的CppIns命令描述;
步驟33:按照CppIns命令語法規(guī)則給出目標(biāo)插樁點(diǎn)插樁語句的模板描述;
步驟34:將步驟32和步驟33得到的命令描述和模板描述的字符串輸入到CppIns命令編輯器中;
步驟35:結(jié)束本次CppIns插樁命令;
在步驟12中,運(yùn)行相應(yīng)的CppIns插樁命令、得到所有的插樁點(diǎn)定義過程包括:
步驟40:從CppIns命令編輯器中獲得CppIns命令字符串,即查詢和插樁命令描述和插樁代碼模板描述的字符串;
步驟41:從已經(jīng)打開工程中的C++源代碼中生成相應(yīng)的代碼信息,這些代碼信息包括變量、語句、函數(shù)、類、表達(dá)式和運(yùn)算符信息;
步驟42:對(duì)步驟40中得到的CppIns查詢命令字符串進(jìn)行語法檢測(cè)和預(yù)處理得到檢索指令;
步驟43:按照檢索指令在步驟41中得到的代碼信息中進(jìn)行目標(biāo)元素檢索,得到相應(yīng)的目標(biāo)元素集合和相應(yīng)的輔助元素集合構(gòu)成的元素屬性值;
步驟44:將CppIns命令中插樁模板的參數(shù)替換成步驟43中的元素屬性值,得到相應(yīng)的插樁語句集合;
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于南京大學(xué),未經(jīng)南京大學(xué)許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210532019.1/2.html,轉(zhuǎn)載請(qǐng)聲明來源鉆瓜專利網(wǎng)。
- 同類專利
- 專利分類
G06F 電數(shù)字?jǐn)?shù)據(jù)處理
G06F17-00 特別適用于特定功能的數(shù)字計(jì)算設(shè)備或數(shù)據(jù)處理設(shè)備或數(shù)據(jù)處理方法
G06F17-10 .復(fù)雜數(shù)學(xué)運(yùn)算的
G06F17-20 .處理自然語言數(shù)據(jù)的
G06F17-30 .信息檢索;及其數(shù)據(jù)庫結(jié)構(gòu)
G06F17-40 .數(shù)據(jù)的獲取和記錄
G06F17-50 .計(jì)算機(jī)輔助設(shè)計(jì)
- 帶有前處理和后處理的數(shù)據(jù)庫復(fù)合查詢系統(tǒng)及方法
- 數(shù)據(jù)庫查詢的方法和系統(tǒng)
- 查詢系統(tǒng)、查詢終端以及查詢方法
- 交易信息查詢方法、查詢裝置及查詢系統(tǒng)
- 數(shù)據(jù)查詢與結(jié)果生成方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)
- 在RDF數(shù)據(jù)集上進(jìn)行OPTIONAL查詢的方法及存儲(chǔ)介質(zhì)
- 一種多表關(guān)聯(lián)查詢方法、裝置及設(shè)備
- 一種基于Impala的查詢方法和裝置
- 從查詢生成子查詢
- 一種基于通用查詢語言的查詢方法及查詢系統(tǒng)





