欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于代碼查詢進(jìn)行源代碼插樁的方法

文檔序號:6566060閱讀:350來源:國知局
專利名稱:基于代碼查詢進(jìn)行源代碼插樁的方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機程序動態(tài)分析,主要涉及一種基于代碼查詢的插樁方法。
背景技術(shù)
程序分析通常利用靜態(tài)程序分析和動態(tài)程序分析對程序行為進(jìn)行自動分析,進(jìn)而提高軟件質(zhì)量。動態(tài)程序分析常借助于插樁方法來收集程序動態(tài)運行行為,某些與運行環(huán)境相關(guān)的程序行為只能通過插樁來收集,而靜態(tài)程序分析無法進(jìn)行分析。軟件開發(fā)過程中, 代碼審查者在代碼編寫階段完成后使用源代碼插樁方法對代碼進(jìn)行審查,通常審查者擁有閱讀源代碼權(quán)限但不便對代碼進(jìn)行修改。通過對程序運行行為的分析盡早發(fā)現(xiàn)代碼中的錯誤,進(jìn)而提高軟件質(zhì)量。源代碼插樁能夠充分地利用程序語義、可視化地顯示插樁代碼、并且不會提高代碼邏輯復(fù)雜性。程序插樁技術(shù),是在保證被測程序原有邏輯完整性的基礎(chǔ)上在程序中插入一些探針,通過探針的執(zhí)行并拋出程序運行的特征數(shù)據(jù),通過對這些數(shù)據(jù)的分析,可以獲得程序的控制流和數(shù)據(jù)流信息,進(jìn)而得到邏輯覆蓋等動態(tài)信息,從而實現(xiàn)測試目的的方法。由于程序插樁技術(shù)是在被測程序中插入探針,然后通過探針的執(zhí)行來獲得程序的控制流和數(shù)據(jù)流信息,以此來實現(xiàn)測試的目的。因此,根據(jù)探針插入的時間可以分為目標(biāo)代碼插樁和源代碼插樁?,F(xiàn)有插樁方法主要包括斷言機制、字節(jié)碼插樁、面向方面插樁等三類方法。斷言機制直接在寫源文件中添加插樁代碼,將會降低代碼閱讀性。字節(jié)碼插樁則直接對字節(jié)碼文件進(jìn)行修改,被插字節(jié)碼的源代碼無法可視化,且無法保證代碼插入過程的正確性。面向方面插樁在程序縱向繼承關(guān)系的基礎(chǔ)上增加了橫向方面關(guān)系,增加了程序的邏輯復(fù)雜性。目前插樁技術(shù)主要存在的瓶頸主要有插樁點及其代碼非可視化、插樁點自動定位困難、難以做到插樁語句上下文敏感、自動插樁性能較低的問題。代碼查詢技術(shù)在軟件設(shè)計有著十分重要的地位。一些查詢工具被設(shè)計用于幫助程序員理解程序中大量經(jīng)常變化和復(fù)雜的關(guān)系。目前,代碼查詢技術(shù)已經(jīng)被廣泛的用于軟件代碼查詢技術(shù)在軟件分析和測試工作中發(fā)揮著重要的作用,在軟件架構(gòu)分析,逆向工程,一致性驗證,代碼審查等方面都有廣泛的應(yīng)用。從另一方面看,代碼查詢已經(jīng)延伸至系統(tǒng)框架錯誤檢測,識別重構(gòu)可能,定位項目缺陷,查詢橫切關(guān)注點,監(jiān)測開發(fā)過程,評估設(shè)計適量, 跟蹤冗余依賴條件等等。通常插樁過程分兩步進(jìn)行(1)定位插樁語句將要插入的位置(2) 構(gòu)建插樁語句。目前插樁技術(shù)主要存在的瓶頸主要有插樁點及其代碼非可視化、插樁點自動定位困難、難以做到插樁語句上下文敏感、自動插樁性能較低的問題。

發(fā)明內(nèi)容
本發(fā)明目的是,鑒于上述問題,本發(fā)明旨在提供一個源代碼插樁方法,該方法結(jié)合代碼查詢技術(shù),有效的將代碼查詢得到的插樁位置以及上下文內(nèi)容與插樁機制相結(jié)合在一起。
本發(fā)明是通過以下的技術(shù)方案實現(xiàn)的無痕可管理的源代碼手動定義標(biāo)志插樁方法
步驟10 打開一個工程(程序);
步驟11 通過在JSearch編輯器里輸入相應(yīng)的插樁命令; 步驟12 工具運行Jkarch命令,得到所有的插樁點定義
步驟13 審查所有插樁點的定義若發(fā)現(xiàn)帶有錯誤的插樁點,則進(jìn)入步驟14對其進(jìn)行修改;沒有發(fā)現(xiàn)帶有錯誤的插樁點,則直接進(jìn)入步驟15 ; 步驟14 修改插樁的定義至正確; 步驟15 將插樁點與原源文件合并生成新源文件; 其中步驟11和步驟12所使用的JSearch命令符合下面的語法規(guī)范 S ; = find Id:T satisfying CS IS T : = object
statement method class interface
CS ; = {exist Id:T}{all Id:T} where CE CE = CE && CE CE I I CE !CE (CE)
Id. Att=' value' Id Rel Id Att : = name
dataType specificType returnType paramsType Rel : = extend use
change
isln
call
IS := insert before Id IN insert after Id IN IS
IN := "STR〃 STR := STR String STR STR %Att% STRNULL
查詢命令S以關(guān)鍵字find開始,后跟一個Id: T的聲明格式,再接satisfying關(guān)鍵字, 最后以條件語句CS結(jié)尾。它的含義是要查詢滿足查詢條件CS的T類型的程序元素。語法規(guī)則中的T是指程序元素的類型,它可以是object、statement、function、 interface和class的其中之一,分別對應(yīng)于變量、語句、方法、接口和類。Id:T聲明了一個類型為T,別名為Id的元素。Id作為它聲明元素的別名在之后的查詢條件表達(dá)式CE中被使用。在條件表達(dá)式中出現(xiàn)的Id必須先被聲明,并且同名的Id不能被重復(fù)聲明,以免混淆。 緊跟在關(guān)鍵字find之后聲明的Id就對應(yīng)于查詢目標(biāo)元素。條件語句CS描述的是目標(biāo)元素需要滿足的查詢條件。它的語法規(guī)則在形式上符合帶量詞的一階謂詞的公式,具體含義是存在Tll類型的元素Idll、T12類型的元素 Idl2……,且對任一 T21類型的元素Id21、T22類型的元素Id22……,使得條件表達(dá)式CE成立。其中,Idli (i=l,2…)是緊跟關(guān)鍵字exist之后的元素的別名,并且它聲明的類型為 Tli:Id2j (j=l,2…)是緊跟關(guān)鍵字all之后的元素別名,并且它聲明的類型為T2j。條件表達(dá)式CE是一個布爾邏輯表達(dá)式,支持與(‘&&’)、或(‘ I I ’)、非(‘ ! ’) 的邏輯運算符。用戶還可以通過在條件表達(dá)式中添加括號’(‘和’)’,來改變運算符的運算先后次序。可以看到,在有關(guān)CE的語法規(guī)則中有兩個條件表達(dá)式Id. Att=’ value’和Id Rel Id,它們是結(jié)構(gòu)最簡單的條件表達(dá)式,本文把這兩個表達(dá)式稱作原子表達(dá)式。任何一個條件表達(dá)式都是在一個或多個原子表達(dá)式的基礎(chǔ)上添加與&&、或11、非!以及括號(和)等運算符拼接而成的。其中,Id. Att=’value’稱為屬性條件表達(dá)式,本文規(guī)定如果元素Id的Att 屬性的屬性值等于value,則表達(dá)式的值為True ;否則表達(dá)式的值為i^ilse。Idl Rel Id2 稱為關(guān)系條件表達(dá)式,規(guī)定如果元素Idl與Id2間存在關(guān)系Rel,則表達(dá)式的值為True,否則表達(dá)式的值為i^alse。下表定義了針對不同的程序元素定義了一系列的屬性(表1),同時也定義了元素間的一系列關(guān)系(表2)。 表格1程序元素的屬性
權(quán)利要求
1.一種基于代碼查詢進(jìn)行源代碼插樁的方法,其特征是包括步驟 步驟10 打開一個或多個工程(程序);步驟11 通過在Jkarch命令編輯器里輸入相應(yīng)的JSearch插樁命令; 步驟12 工具運行Jkarch命令,得到所有的插樁點定義;步驟13 審查所有插樁點的定義若發(fā)現(xiàn)帶有錯誤的插樁點,則進(jìn)入步驟14對其進(jìn)行修改;沒有發(fā)現(xiàn)帶有錯誤的插樁點,則直接進(jìn)入步驟15 ; 步驟14 修改插樁的定義至正確; 步驟15 將插樁點與原源文件合并生成新源文件。
2.根據(jù)權(quán)利要求1所述的基于代碼查詢進(jìn)行源代碼插樁的方法,其特征是所述的輸入 JSearch插樁命令即步驟11中,其中輸入相應(yīng)的Jkarch插樁命令過程包括步驟30 打開JSearch命令編輯器;步驟31 判斷是否需要在工程中的源文件上定義插樁點,如果是,則跳轉(zhuǎn)到步驟32,如果不是,則跳轉(zhuǎn)到步驟35;步驟32 按照J(rèn)karch命令語法規(guī)則給出目標(biāo)插樁點位置的JSearch命令描述; 步驟33 按照J(rèn)karch命令語法規(guī)則給出目標(biāo)插樁點插樁語句的模板描述; 步驟34 將步驟32和步驟33得到的命令描述和模板描述的字符串輸入到JSearch命令編輯器中;步驟35:結(jié)束本次插樁定義。
3.根據(jù)權(quán)利要求1所述的基于代碼查詢進(jìn)行源代碼插樁的方法,其特征是運行 Jkarch插樁命令即步驟12,其中運行相應(yīng)的Jkarch插樁命令、得到所有的插樁點定義過程包括步驟40 從JSearch命令編輯器中獲得JSearch命令字符串,即命令描述和模板描述的字符串;步驟41 從已經(jīng)打開工程中的Java源代碼中生成相應(yīng)的代碼信息,這些代碼信息包括類、接口、方法、對象和語句信息;步驟42 對步驟40中得到的JSearch命令字符串進(jìn)行語法檢測和預(yù)處理得到檢索指令;步驟43 按照檢索指令在步驟41中得到的代碼信息中進(jìn)行目標(biāo)元素檢索,得到相應(yīng)的目標(biāo)元素集合和相應(yīng)的輔助元素集合構(gòu)成的元素屬性值;步驟44 將JSearch命令中插樁模板的參數(shù)替換成步驟43中的元素屬性值,得到相應(yīng)的插樁語句集合;步驟45 將步驟44中得到的插樁語句集合生成相應(yīng)的插樁點。
4.根據(jù)權(quán)利要求3所述的基于代碼查詢進(jìn)行源代碼插樁的方法,其特征是生成代碼信息即所述步驟41中,從源代碼生成與JSearch命令字符串相應(yīng)的代碼信息的方式是首先生成源代碼相應(yīng)的抽象語法樹,在將語法樹中的類、接口、方法、對象和語句信息依次從語法樹中抽取出來,形成表的數(shù)據(jù)結(jié)構(gòu)。
5.根據(jù)權(quán)利要求3所述的基于代碼查詢進(jìn)行源代碼插樁的方法,其特征是語法檢查及檢索準(zhǔn)備工作即步驟42中,其中檢測和預(yù)處理即檢查和檢索準(zhǔn)備工作的過程包括步驟601 匹配關(guān)鍵字find ;步驟602 匹配Target元素,并將其存放到Query, target中; 步驟603 匹配關(guān)鍵satisfying ;步驟604 當(dāng)匹配關(guān)鍵字exist成功或者匹配關(guān)鍵字all成功,則跳轉(zhuǎn)步驟605,,否則跳轉(zhuǎn)步驟608 ;步驟605 構(gòu)造相應(yīng)的predicate ;PM 606 -M predicatelist Query, predicates ψ ;步驟607 跳轉(zhuǎn)步驟604 ; 步驟608 匹配關(guān)鍵字where ; 步驟609 當(dāng)掃描完整個字符串,則跳轉(zhuǎn)618 ;步驟610 如果匹配Att表達(dá)式成功,則跳轉(zhuǎn)步驟611,否則跳轉(zhuǎn)步驟612 ;步驟611 生成AttrCondition對象,存放到Query. conditionLex隊列中,跳轉(zhuǎn)步驟·617 ;步驟612 如果匹配Rel表達(dá)式成功,則跳轉(zhuǎn)步驟613,否則跳轉(zhuǎn)步驟614 ;步驟613 生成RelCondition對象,存放到Query. conditionLex隊列中,跳轉(zhuǎn)步驟·617 ;步驟614 如果匹配運算符成功,則跳轉(zhuǎn)步驟615,否則跳轉(zhuǎn)步驟616步驟615 生成Operator對象,存放到Query. conditionLex隊列中,跳轉(zhuǎn)步驟617 ;步驟616:返回出錯狀態(tài);步驟617 跳轉(zhuǎn)步驟609 ;步驟618 返回Query單次查詢結(jié)構(gòu)。
6.根據(jù)權(quán)利要求3所述的基于代碼查詢進(jìn)行源代碼插樁的方法,其特征是目標(biāo)元素檢索即步驟43中,其中檢索過程包括步驟701 初始化運算符棧op_stack ; 步驟702 初始化操作數(shù)棧r_stack ;步驟703 當(dāng)conditionLex列表中的所有對象已經(jīng)處理完,則跳轉(zhuǎn)步驟714 ; 步驟704 從conditionLex列表中取出一個Lex對象1 步驟705 如果1的類型是Attr或者Rel,則跳轉(zhuǎn)步驟706,否者跳轉(zhuǎn)步驟707 ; 步驟706 將1壓入操作數(shù)棧,跳轉(zhuǎn)步驟703 ;步驟707 如果1的類型是Operator,則跳轉(zhuǎn)步驟708,否則跳轉(zhuǎn)步驟703 ;步驟708 如果1的優(yōu)先級比top (op_stack)大,則跳轉(zhuǎn)步驟709,否則跳轉(zhuǎn)步驟710 ;步驟709 將1壓入op_stack中,跳轉(zhuǎn)步驟703 ;步驟710:如果1的優(yōu)先級與t0p(0p_stack)相等,則跳轉(zhuǎn)步驟711,否則跳轉(zhuǎn)步驟·712 ;步驟711 彈出op_stack元素,跳轉(zhuǎn)步驟703 ; 步驟712 彈出[stack的元素,計算相應(yīng)的集合; 步驟713 跳轉(zhuǎn)步驟703 ; 步驟714 返回r_stack彈出元素。
7.根據(jù)權(quán)利要求1或3所述的基于代碼查詢進(jìn)行源代碼插樁的方法,其特征是插樁點即步驟12、步驟13、步驟14、步驟15和步驟45中,其實現(xiàn)在源文件編輯器標(biāo)尺上增加相應(yīng)的標(biāo)記,該標(biāo)記指定了插樁語句應(yīng)該插入的字符位置、文件行數(shù)和插入內(nèi)容。
8.根據(jù)權(quán)利要求7所述的基于代碼查詢進(jìn)行源代碼插樁的方法,其特征是所述的插樁點定義方式,所有插樁標(biāo)志均隨程序(工程)進(jìn)行插樁標(biāo)志在程序(工程)關(guān)閉后自動進(jìn)行保存,在下次打開工程時插樁標(biāo)志依舊能夠在源代碼編輯器的標(biāo)尺上進(jìn)行還原。
全文摘要
一種使用基于代碼查詢進(jìn)行源代碼插樁的方法,包括步驟步驟10打開一個工程;步驟11通過在JSearch編輯器里輸入相應(yīng)的插樁命令;步驟12工具運行JSearch命令,得到所有的插樁點定義步驟13審查所有插樁點的定義若發(fā)現(xiàn)帶有錯誤的插樁點,則進(jìn)入步驟14對其進(jìn)行修改;沒有發(fā)現(xiàn)帶有錯誤的插樁點,則直接進(jìn)入步驟15;步驟14修改插樁的定義至正確;步驟15將插樁點與原源文件合并生成新源文件;本發(fā)明為明確定義的代碼查詢和插樁命令,參數(shù)化的插樁語句模板,插樁代碼可視化,自動插樁高效性等。
文檔編號G06F11/36GK102298552SQ20111027589
公開日2011年12月28日 申請日期2011年9月19日 優(yōu)先權(quán)日2011年9月19日
發(fā)明者張?zhí)? 趙建華, 陶永晶 申請人:南京大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
海丰县| 久治县| 开阳县| 乌兰浩特市| 元江| 贡觉县| 天台县| 无为县| 余江县| 应城市| 湖口县| 灵寿县| 钟山县| 抚远县| 镇远县| 云和县| 卢湾区| 南汇区| 安岳县| 寿宁县| 县级市| 镇平县| 阿瓦提县| 河南省| 汨罗市| 无为县| 宁海县| 杨浦区| 苗栗市| 青铜峡市| 岳池县| 建阳市| 马边| 利川市| 同德县| 双江| 八宿县| 兰溪市| 福海县| 元阳县| 中牟县|