專(zhuān)利名稱(chēng):執(zhí)行abap源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種執(zhí)行ABAP (高級(jí)企業(yè)應(yīng)用編碼語(yǔ)言)源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),更詳細(xì)地涉及如下的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),由德國(guó)SAP公司開(kāi)發(fā)的ABAP/4語(yǔ)言是用于以作為客戶(hù)服務(wù)器環(huán)境的SAP R/3為基礎(chǔ)來(lái)開(kāi)發(fā)企業(yè)的企業(yè)資源計(jì)劃(ERP, Enterprise Resource Planning)等的第四代語(yǔ)言,但與Java等第四代語(yǔ)言不同,對(duì)ABAP編程沒(méi)有定型的大小寫(xiě)區(qū)分(Case-sensitive)和編碼格式(Format)的限制,因而通過(guò)檢查因ABAP開(kāi)發(fā)人員對(duì)ABAP語(yǔ)言及SAP R/3的誤解、誤用及失誤等原因產(chǎn)生的系統(tǒng)故障及停止、數(shù)據(jù)損失及改變、性能降低過(guò)大、功能的錯(cuò)誤運(yùn)行及結(jié)果、復(fù)雜的代碼結(jié)構(gòu)及拼寫(xiě)錯(cuò)誤等編碼缺陷使得ABAP應(yīng)用的維護(hù)性、性能性、準(zhǔn)確性、穩(wěn)定性以及安全性等變得可靠。
背景技術(shù):
能夠檢查ABAP軟件所包含的各種代碼缺陷的方法當(dāng)中有如下方法通過(guò)僅用源代碼進(jìn)行靜態(tài)分析,能夠在事前探知在實(shí)際運(yùn)行中可能發(fā)生的代碼缺陷的代碼檢查方法;以通過(guò)運(yùn)行源代碼得到的結(jié)果值為基礎(chǔ)來(lái)查找代碼缺陷的測(cè)試方法。就代碼檢查方法而言,在測(cè)試之前去除代碼缺陷,從而不僅能夠縮短開(kāi)發(fā)時(shí)間、減少測(cè)試費(fèi)用及時(shí)間,而且還由于應(yīng)用的開(kāi)發(fā)以具有一貫性的編碼格式為基礎(chǔ),因而能夠減少日后的維護(hù)費(fèi)用,因此特別高效。以往的ABAP代碼檢查,利用在開(kāi)發(fā)代碼后(編譯后)通過(guò)手動(dòng)操作來(lái)檢驗(yàn)代碼的方法和作為通過(guò)運(yùn)行程序來(lái)實(shí)時(shí)查找安全脆弱點(diǎn)的測(cè)試方法的代碼分析器(CodeProf iler),但在開(kāi)發(fā)代碼的步驟中(編譯前)若不運(yùn)行代碼,而僅用ABAP代碼就無(wú)法探知違反ABAP應(yīng)用的維護(hù)性、性能性、準(zhǔn)確性、穩(wěn)定性以及安全性等的代碼。
發(fā)明內(nèi)容
技術(shù)問(wèn)題因此,本發(fā)明是考慮如上所述的以往的技術(shù)問(wèn)題而提出的,本發(fā)明的目的在于,根據(jù)預(yù)先定義的ABAP語(yǔ)法(巴科斯范式)對(duì)ABAP源代碼進(jìn)行詞匯及句子分析來(lái)構(gòu)建抽象句子樹(shù)的樹(shù)狀數(shù)據(jù)結(jié)構(gòu),并在抽象句子樹(shù)中進(jìn)行意義分析來(lái)構(gòu)建符號(hào)表的表數(shù)據(jù)結(jié)構(gòu)。本發(fā)明的再一目的在于,ABAP代碼檢查工具的源代碼缺陷檢查,以能夠以上述中所構(gòu)建的表以及樹(shù)狀數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)檢查與各種編碼規(guī)范相關(guān)的源代碼的缺陷來(lái)提供代碼缺陷報(bào)告書(shū)以修改所違反的代碼缺陷。技術(shù)方案為了解決本發(fā)明所要解決的問(wèn)題,本發(fā)明的一實(shí)施例提出了一種執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),包括=ABAP源代碼語(yǔ)法分析部,其對(duì)作為代碼檢查對(duì)象的ABAP源代碼進(jìn)行詞匯、句子及意義分析,并分別存儲(chǔ)在抽象句子樹(shù)和符號(hào)表的數(shù)據(jù)結(jié)構(gòu);ABAP源代碼缺陷檢查部,其以上述數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)在程序路徑分析模塊中對(duì)與選自ABAP規(guī)范管理模塊中的編碼規(guī)范相關(guān)的源代碼以及語(yǔ)法結(jié)構(gòu)進(jìn)行代碼缺陷檢查,來(lái)生成代碼缺陷報(bào)告書(shū)以能夠修改違反規(guī)范的代碼缺陷。有利的效果具有以上結(jié)構(gòu)以及作用的本發(fā)明的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)僅用源代碼對(duì)包含在ABAP軟件中的各種代碼缺陷進(jìn)行靜態(tài)分析,可提供能夠在事前探知在實(shí)際執(zhí)行時(shí)可能發(fā)生的代碼缺陷。并且,通過(guò)在測(cè)試之前去除因ABAP開(kāi)發(fā)人員對(duì)ABAP語(yǔ)言及SAP R/3的誤解、誤用以及失誤等原因產(chǎn)生的系統(tǒng)故障及停止、數(shù)據(jù)損失及改變、性能降低過(guò)大、功能的錯(cuò)誤運(yùn)行及結(jié)果、復(fù)雜的代碼結(jié)構(gòu)及拼寫(xiě)錯(cuò)誤等編碼缺陷,具有不僅能夠縮短開(kāi)發(fā)時(shí)間、減少測(cè)試費(fèi)用及時(shí)間,而且還由于應(yīng)用的開(kāi)發(fā)以具有一貫性的編碼格式為基礎(chǔ),因而能夠減少日后的維護(hù)費(fèi)用的更好的效果。
圖I是表示本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)的整體框圖;圖2是表示本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)的執(zhí)行方法的流程圖;圖3是表示本發(fā)明的一實(shí)施例的選擇作為執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)的檢查對(duì)象的ABAP源代碼文件的畫(huà)面例示圖;圖4是表示作為本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)的代碼檢查對(duì)象ABAP源代碼的例示圖;圖5是表示本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)的詞匯分析模塊的例示圖;圖6是表示本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)的句子分析模塊的例示圖;圖7是表示本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)的抽象句子樹(shù)的數(shù)據(jù)結(jié)構(gòu)的例示圖;圖8是表示本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)的抽象句子樹(shù)的例示圖;圖9是表示本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)的符號(hào)表數(shù)據(jù)結(jié)構(gòu)的類(lèi)圖;圖10是表示本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)運(yùn)行句子以及意義分析時(shí)的屏幕截圖;圖11是表示本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)選擇編碼規(guī)范時(shí)的畫(huà)面例示圖;圖12是表示本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)在運(yùn)行控制流程路徑模式的代碼檢查后生成的代碼缺陷報(bào)告書(shū)的畫(huà)面的例示圖;圖13是表示本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)在運(yùn)行控制及數(shù)據(jù)流程路徑模式的代碼檢查后生成的代碼缺陷報(bào)告書(shū)的畫(huà)面的例示圖;以及圖14是表示本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)在運(yùn)行控制流程及調(diào)用路徑模式的代碼檢查后生成的代碼缺陷報(bào)告書(shū)的畫(huà)面的例示圖。附圖主要部分標(biāo)記的說(shuō)明100 =ABAP源代碼語(yǔ)法分析部110 詞匯分析模塊120 :句子分析模塊130 :抽象句子樹(shù)存儲(chǔ)處理模塊
140 :意義分析模塊150 :符號(hào)表存儲(chǔ)處理模塊200 =ABAP源代碼缺陷檢查部210 =ABAP規(guī)范數(shù)據(jù)庫(kù)220 =ABAP規(guī)范管理模塊230 :程序路徑分析模塊240 :代碼缺陷報(bào)告書(shū)生成模塊
具體實(shí)施例方式用于解決上述問(wèn)題的本發(fā)明的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),其特征在于,包括ABAP源代碼語(yǔ)法分析部,其對(duì)作為代碼檢查對(duì)象的ABAP源代碼進(jìn)行詞匯、句子以及意義分析,并分別存儲(chǔ)在抽象句子樹(shù)和符號(hào)表的數(shù)據(jù)結(jié)構(gòu);ABAP源代碼缺陷檢查部,其以上述數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)在程序路徑分析模塊中對(duì)與選自ABAP規(guī)范管理模塊中的編碼規(guī)范相關(guān)的源代碼以及語(yǔ)法結(jié)構(gòu)進(jìn)行代碼缺陷檢查,來(lái)生成代碼缺陷報(bào)告書(shū)以能夠修改違反規(guī)范的代碼缺陷。這時(shí),特征在于,上述ABAP源代碼語(yǔ)法分析部包括詞匯分析模塊,其以文件為單位讀取作為檢查對(duì)象的ABAP源代碼文件,根據(jù)預(yù)先定義的ABAP語(yǔ)法(巴科斯范式)將ABAP源代碼分離為表示一連串字符串的標(biāo)記(Token)單位(關(guān)鍵詞、標(biāo)識(shí)符、符號(hào)標(biāo)識(shí)符、常量、運(yùn)算符);句子分析模塊,其檢查以各個(gè)文件為單位分離的標(biāo)記的句子(語(yǔ)法)是否違反預(yù)先定義的ABAP語(yǔ)法,若有語(yǔ)法錯(cuò)誤就抽取相關(guān)文件的語(yǔ)法錯(cuò)誤消息,若沒(méi)有語(yǔ)法錯(cuò)誤,就分析語(yǔ)句的句子,并賦予句子之間的控制流程關(guān)系的意義來(lái)抽取各個(gè)文件單位的句子結(jié)構(gòu);抽象句子樹(shù)存儲(chǔ)處理模塊,其以各個(gè)文件為單位,將上述句子分析模塊中所抽取的信息存儲(chǔ)到樹(shù)數(shù)據(jù)結(jié)構(gòu)中;意義分析模塊,其從上述抽象句子樹(shù)存儲(chǔ)處理模塊中抽取構(gòu)成各個(gè)文件的符號(hào)類(lèi)型(類(lèi)、方法、變量、表單、函數(shù)、事件、對(duì)話(huà)、處理塊)和它們之間的鏈接關(guān)系信息以及缺陷檢查所需的各個(gè)符號(hào)類(lèi)型的缺陷模式結(jié)構(gòu);符號(hào)表存儲(chǔ)處理模塊,其將上述意義分析模塊中所抽取的信息存儲(chǔ)到作為各個(gè)文件的構(gòu)成要素的符號(hào)表數(shù)據(jù)結(jié)構(gòu)。這時(shí),特征在于,上述ABAP源代碼缺陷檢查部包括
ABAP規(guī)范數(shù)據(jù)庫(kù),其根據(jù)缺陷嚴(yán)重程度以及程序設(shè)計(jì)特性,通過(guò)ABAP規(guī)范管理模塊的處理,來(lái)存儲(chǔ)并管理各種編碼規(guī)范種類(lèi)(ABAP及SQL編碼風(fēng)格、編碼標(biāo)準(zhǔn)、架構(gòu)標(biāo)準(zhǔn)、SQL標(biāo)準(zhǔn)、運(yùn)行時(shí)錯(cuò)誤、安全脆弱點(diǎn))、各個(gè)規(guī)范的符號(hào)類(lèi)型、缺陷模式結(jié)構(gòu)類(lèi)型以及缺陷條件類(lèi)型;ABAP規(guī)范管理模塊,其從上述ABAP規(guī)范數(shù)據(jù)庫(kù)中選擇編碼規(guī)范,按各個(gè)文件檢索與和所選擇的規(guī)范相關(guān)的符號(hào)和缺陷模式結(jié)構(gòu)相對(duì)應(yīng)的符號(hào)表的符號(hào)值,并從抽象句子樹(shù)中抽取按所檢索到的各個(gè)符號(hào)值相對(duì)應(yīng)的所有語(yǔ)法結(jié)構(gòu)以及源代碼并傳輸?shù)匠绦蚵窂椒治瞿K;程序路徑分析模塊,其根據(jù)所選擇的規(guī)范的程序路徑模式(控制流程、控制以及數(shù)據(jù)流程或者控制流程及調(diào)用)、缺陷模式結(jié)構(gòu)和缺陷條件來(lái)對(duì)上述所抽取的各個(gè)符號(hào)值的語(yǔ)法結(jié)構(gòu)以及源代碼進(jìn)行缺陷檢查;代碼缺陷報(bào)告書(shū)生成模塊,若存在違反上述所選擇的編碼規(guī)范的缺陷,該代碼缺陷報(bào)告書(shū)生成模塊就生成代碼缺陷報(bào)告書(shū)。
這時(shí),特征在于,上述ABAP源代碼語(yǔ)法分析部以各個(gè)文件為單位接收經(jīng)句子分析后的標(biāo)記,用作為自下而上的句子分析法(Bottom-up SyntaxAnalysis)的LR (I)解析算法按標(biāo)記的語(yǔ)法結(jié)構(gòu)進(jìn)行分析,以各個(gè)文件為單位抽取句子結(jié)構(gòu)之間的控制流程關(guān)系并存儲(chǔ)到抽象句子樹(shù)的數(shù)據(jù)結(jié)構(gòu)中。這時(shí),特征在于,上述ABAP源代碼語(yǔ)法分析部從抽象句子樹(shù)的數(shù)據(jù)結(jié)構(gòu)中抽取構(gòu)成各個(gè)文件的符號(hào)類(lèi)型和它們之間的符號(hào)鏈接關(guān)系、類(lèi)別(Type)信息、名稱(chēng)鏈接關(guān)系,并將缺陷檢查所需的各個(gè)符號(hào)類(lèi)型的缺陷模式結(jié)構(gòu)信息存儲(chǔ)到符號(hào)表的數(shù)據(jù)結(jié)構(gòu)中。這時(shí),特征在于,上述ABAP源代碼語(yǔ)法分析部在分析ABAP源代碼時(shí),若選擇有ABAP文件(*. abap)的上級(jí)目錄,將包括下級(jí)目錄在內(nèi)的所有ABAP文件都作為檢查對(duì)象來(lái)進(jìn)行分析,或者只選擇一個(gè)文件也將作為檢查對(duì)象來(lái)進(jìn)行分析。這時(shí),特征在于,上述程序路徑分析模塊執(zhí)行如下功能,該項(xiàng)功能是指,在由ABAP規(guī)范管理部在ABAP規(guī)范數(shù)據(jù)庫(kù)中所定義的編碼規(guī)范的程序路徑模式、缺陷模式結(jié)構(gòu)和缺陷條件下抽取的各個(gè)符號(hào)值的語(yǔ)法結(jié)構(gòu)以及源代碼中識(shí)別相關(guān)編碼規(guī)范的代碼缺陷的功倉(cāng)泛。這時(shí),特征在于,上述ABAP規(guī)范管理模塊執(zhí)行如下功能,該功能是指,從ABAP規(guī)范數(shù)據(jù)庫(kù)中選擇各個(gè)種類(lèi)的編碼規(guī)范并設(shè)定詳細(xì)選項(xiàng),從所選擇的規(guī)范中按各個(gè)文件檢索與相關(guān)的符號(hào)和缺陷模式結(jié)構(gòu)相對(duì)應(yīng)的符號(hào)表的符號(hào)值,并從抽象句子樹(shù)中抽取按所檢索到的各個(gè)符號(hào)值相對(duì)應(yīng)的所有語(yǔ)法結(jié)構(gòu)以及源代碼并傳輸?shù)匠绦蚵窂椒治瞿K的功能。這時(shí),特征在于,上述ABAP規(guī)范數(shù)據(jù)庫(kù)為存儲(chǔ)有各種種類(lèi)(ABAP及SQL編碼風(fēng)格、編碼標(biāo)準(zhǔn)、架構(gòu)標(biāo)準(zhǔn)、SQL標(biāo)準(zhǔn)、運(yùn)行時(shí)錯(cuò)誤、安全脆弱點(diǎn))的編碼規(guī)范的數(shù)據(jù)庫(kù),按各個(gè)規(guī)范由種類(lèi)類(lèi)型、符號(hào)類(lèi)型、程序路徑模式、缺陷模式結(jié)構(gòu)類(lèi)型、缺陷條件、規(guī)范名稱(chēng)、規(guī)范ID、錯(cuò)誤類(lèi)別、錯(cuò)誤消息的數(shù)據(jù)結(jié)構(gòu)構(gòu)成,并通過(guò)ABAP規(guī)范管理模塊來(lái)管理規(guī)范的添加或者變更。以下,將通過(guò)本發(fā)明的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)的實(shí)施例進(jìn)行詳細(xì)說(shuō)明。圖I是表示本發(fā)明的一實(shí)施例的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)的整體框圖。如圖I所示,本發(fā)明,即執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)包括ABAP源代碼語(yǔ)法分析部100,其對(duì)作為代碼檢查對(duì)象的ABAP源代碼進(jìn)行詞匯、句子以及意義分析,并分別存儲(chǔ)在抽象句子樹(shù)和符號(hào)表的數(shù)據(jù)結(jié)構(gòu);ABAP源代碼缺陷檢查部200,其以上述數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)在程序路徑分析模塊中對(duì)與選自ABAP規(guī)范管理模塊中的編碼規(guī)范相關(guān)的源代碼以及語(yǔ)法結(jié)構(gòu) 進(jìn)行代碼缺陷檢查,來(lái)生成代碼缺陷報(bào)告書(shū)以能夠修改違反規(guī)范的代碼缺陷。這時(shí),特征在于,上述ABAP源代碼語(yǔ)法分析部100包括詞匯分析模塊110,其以文件為單位讀取作為檢查對(duì)象的ABAP源代碼文件,根據(jù)預(yù)先定義的ABAP語(yǔ)法(巴科斯范式)將ABAP源代碼分離為表示一連串字符串的標(biāo)記單位(關(guān)鍵詞、標(biāo)識(shí)符、符號(hào)標(biāo)識(shí)符、常量、運(yùn)算符);句子分析模塊120,其檢查以各個(gè)文件為單位分離的標(biāo)記的句子(語(yǔ)法)是否違反預(yù)先定義的ABAP語(yǔ)法,若有語(yǔ)法錯(cuò)誤就抽取相關(guān)文件的語(yǔ)法錯(cuò)誤消息,若沒(méi)有語(yǔ)法錯(cuò)誤,就分析語(yǔ)句的句子,并賦予句子之間的控制流程關(guān)系的意義來(lái)抽取各個(gè)文件單位的句子結(jié)構(gòu);抽象句子樹(shù)存儲(chǔ)處理模塊130,其以各個(gè)文件為單位,將上述句子分析模塊中所抽取的信息存儲(chǔ)到樹(shù)狀數(shù)據(jù)結(jié)構(gòu)中;意義分析模塊140,其從上述抽象句子樹(shù)存儲(chǔ)處理模塊中抽取構(gòu)成各個(gè)文件的符號(hào)類(lèi)型(類(lèi)、方法、變量、表單、函數(shù)、事件、對(duì)話(huà)、處理塊)和它們之間的鏈接關(guān)系信息以及缺陷檢查所需的各個(gè)符號(hào)類(lèi)型的缺陷模式結(jié)構(gòu);符號(hào)表存儲(chǔ)處理模塊150,其將上述意義分析模塊中所抽取的信息存儲(chǔ)到作為各個(gè)文件的構(gòu)成要素的符號(hào)表數(shù)據(jù)結(jié)構(gòu)。這時(shí),特征在于,上述ABAP源代碼缺陷檢查部200包括ABAP規(guī)范數(shù)據(jù)庫(kù)210,其根據(jù)缺陷嚴(yán)重程度以及程序設(shè)計(jì)特性,通過(guò)ABAP規(guī)范管理模塊的處理,來(lái)存儲(chǔ)并管理各種編碼規(guī)范種類(lèi)(ABAP及SQL編碼風(fēng)格、編碼標(biāo)準(zhǔn)、架構(gòu)標(biāo)準(zhǔn)、SQL標(biāo)準(zhǔn)、運(yùn)行時(shí)錯(cuò)誤、安全脆弱點(diǎn))、各個(gè)規(guī)范的符號(hào)類(lèi)型、缺陷模式結(jié)構(gòu)類(lèi)型以及缺陷條件類(lèi)型;ABAP規(guī)范管理模塊220,其從上述ABAP規(guī)范數(shù)據(jù)庫(kù)中選擇編碼規(guī)范,按各個(gè)文件檢索與和所選擇的規(guī)范相關(guān)的符號(hào)和缺陷模式結(jié)構(gòu)相對(duì)應(yīng)的符號(hào)表的符號(hào)值,并從抽象句子樹(shù)中抽取按所檢索到的各個(gè)符號(hào)值相對(duì)應(yīng)的所有語(yǔ)法結(jié)構(gòu)以及源代碼并傳輸?shù)匠绦蚵窂椒治瞿K;程序路徑分析模塊230,其根據(jù)所選擇的規(guī)范的程序路徑模式(控制流程、控制及數(shù)據(jù)流程或者控制流程及調(diào)用)、缺陷模式結(jié)構(gòu)和缺陷條件來(lái)對(duì)上述所抽取的各個(gè)符號(hào)值的語(yǔ)法結(jié)構(gòu)以及源代碼進(jìn)行缺陷檢查;代碼缺陷報(bào)告書(shū)生成模塊240,若存在違反上述所選擇的編碼規(guī)范的缺陷,該代碼缺陷報(bào)告書(shū)生成模塊就生成代碼缺陷報(bào)告書(shū)。本發(fā)明大體分為ABAP源代碼語(yǔ)法分析部和ABAP源代碼缺陷檢查部,其中,所述ABAP源代碼語(yǔ)法分析部對(duì)作為檢查對(duì)象的ABAP源代碼進(jìn)行詞匯、句子以及意義分析,并分別存儲(chǔ)在抽象句子樹(shù)和符號(hào)表的數(shù)據(jù)結(jié)構(gòu),所述ABAP源代碼缺陷檢查部以上述數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)在程序路徑分析模塊中對(duì)與選自ABAP規(guī)范管理模塊中的編碼規(guī)范相關(guān)的源代碼以及語(yǔ)法結(jié)構(gòu)進(jìn)行代碼缺陷檢查,來(lái)生成代碼缺陷報(bào)告書(shū)以能夠修改違反規(guī)范的代碼缺陷。上述ABAP源代碼語(yǔ)法分析部的功能如下。如圖3所示,若使用者選擇如圖4所示的有ABAP文件(*. abap)的上級(jí)目錄,將包括下級(jí)目錄在內(nèi)的所有ABAP文件作為檢查對(duì)象,或者如圖4的例題ABAP文件,選擇一個(gè)文件作為檢查對(duì)象,讀取所選擇的文件設(shè)定索引,按照作為檢查對(duì)象的所有ABAP源代碼文件的索引順序傳輸?shù)皆~匯分析模塊110。作為參考,圖4中的左側(cè)的行序號(hào)是為了便于說(shuō)明而記錄的。這時(shí),上述詞匯分析模塊以文件為單位讀取作為如同圖4的例題源一樣的檢查對(duì)象的ABAP文件,根據(jù)預(yù)先定義的ABAP語(yǔ)法的ABAP巴克斯范式(Backus Normal Form, BNF)將ABAP源代碼分離為表示一連串字符串的標(biāo)記單位,并傳輸?shù)骄渥臃治瞿K120。
用于執(zhí)行上述功能的詞匯分析模塊的標(biāo)記是指在語(yǔ)法上無(wú)法再進(jìn)行分化的基本的語(yǔ)言要素,區(qū)分為關(guān)鍵詞(keyword)、標(biāo)識(shí)符(identifier),符號(hào)標(biāo)識(shí)符(symbol-identifier)、常量(constant)、運(yùn)算符(operator)這些符號(hào)而賦予到各標(biāo)記。如圖5所示,表示將所輸入的圖4的第一行和第四行的語(yǔ)句轉(zhuǎn)換為作為字符串的標(biāo)記,按各標(biāo)記賦予標(biāo)記的符號(hào)的例。但是,行尾(end)、空白、還有注釋不是標(biāo)記。上述句子分析模塊以各文件為單位接收如圖5的例題一樣經(jīng)句子分析后的標(biāo)記,并分析標(biāo)記的句子是否違反預(yù)先定義的ABAP語(yǔ)法(BNF),若有語(yǔ)法錯(cuò)誤就將相關(guān)文件的語(yǔ)法錯(cuò)誤消息作為ABAP語(yǔ)法錯(cuò)誤消息來(lái)進(jìn)行通報(bào),若沒(méi)有語(yǔ)法錯(cuò)誤,就以作為自下而上的句子分析法(Bottom-up Syntax Analysis)的LR (I)解析算法來(lái)分析標(biāo)記的句子結(jié)構(gòu),以各文件為單位抽取句子結(jié)構(gòu)之間的控制流程關(guān)系,通過(guò)抽象句子樹(shù)存儲(chǔ)處理模塊130的處理來(lái)存儲(chǔ)到抽象句子樹(shù)的數(shù)據(jù)結(jié)構(gòu)中,并以各文件為單位將所生成的抽象句子樹(shù)的語(yǔ)法結(jié)構(gòu)信息傳輸?shù)揭饬x分析模塊。作為上述語(yǔ)法檢查的實(shí)施例,圖6中,檢查標(biāo)記化的圖4的第四行的類(lèi)聲明語(yǔ)句中是否存在違反類(lèi)BNF的語(yǔ)法錯(cuò)誤。追加性地,所有ABAP的一個(gè)語(yǔ)句的結(jié)尾必須始終要以作為運(yùn)算符的結(jié)束符的”
來(lái)結(jié)束。假如,文件違反了 ABAP語(yǔ)法,就如圖10所示地,對(duì)相應(yīng)文件表示出錯(cuò)誤文件(Erroneous Files)的文件數(shù)量以及錯(cuò)誤位置,并從意義分析對(duì)象中排除。作為生成上述抽象句子樹(shù)的實(shí)施例,圖8是在對(duì)圖4的例題源進(jìn)行句子分析后生成的樹(shù)狀數(shù)據(jù)結(jié)構(gòu)。在圖7中察看如上所述的抽象句子樹(shù)的數(shù)據(jù)結(jié)構(gòu),各文件的各節(jié)點(diǎn)表示意義上的一個(gè)單位的語(yǔ)句(Statement),各語(yǔ)句由源的物理位置(ID)、表達(dá)式(Expression,語(yǔ)法結(jié)構(gòu)以及源代碼)和語(yǔ)句之間的鏈接關(guān)系[父節(jié)點(diǎn)(father,比自身節(jié)點(diǎn)深度靠前的節(jié)點(diǎn))、子節(jié)點(diǎn)(child,比自身節(jié)點(diǎn)深度靠后的節(jié)點(diǎn))、下一節(jié)點(diǎn)(next,與自身節(jié)點(diǎn)處于相同深度的節(jié)點(diǎn))、上一節(jié)點(diǎn)(pervious,與自身節(jié)點(diǎn)處于相同深度的節(jié)點(diǎn))、表節(jié)點(diǎn)(list,與自身節(jié)點(diǎn)處于相同深度且同時(shí)位于相同的源行列的節(jié)點(diǎn))的數(shù)據(jù)結(jié)構(gòu)構(gòu)成。如圖8所示,如同方向圖一樣對(duì)節(jié)點(diǎn)之間的鏈接關(guān)系如同將節(jié)點(diǎn)之間的控制流程進(jìn)行了圖示化,各節(jié)點(diǎn)表示節(jié)點(diǎn)之間的控制流程的鏈接(link),沒(méi)有下一節(jié)點(diǎn)的節(jié)點(diǎn)將表示語(yǔ)句的結(jié)束。上述意義分析模塊140從圖8中的抽象樹(shù)的數(shù)據(jù)結(jié)構(gòu)中抽取構(gòu)成各個(gè)文件的符號(hào)類(lèi)型和它們之間的符號(hào)鏈接關(guān)系、類(lèi)別(Type)信息、名稱(chēng)鏈接關(guān)系,通過(guò)符號(hào)表存儲(chǔ)處理模塊150將缺陷檢查所需的各個(gè)符號(hào)類(lèi)型的缺陷模式結(jié)構(gòu)信息存儲(chǔ)到符號(hào)表的數(shù)據(jù)結(jié)構(gòu)中。并且,為了執(zhí)行從ABAP規(guī)范管理模塊220中選擇的編碼規(guī)范,首先檢索符號(hào)表的數(shù)據(jù)結(jié)構(gòu)。察看如上所述的符號(hào)表的數(shù)據(jù)結(jié)構(gòu),由子系統(tǒng)(Subsystem)、文件(File)、類(lèi)(Class)、方法(Method)、變量(Variable)、表單(Form)、函數(shù)(Function)、事件(Events)、對(duì)話(huà)(Dialog)、處理塊(Processing Block)這些類(lèi)數(shù)據(jù)結(jié)構(gòu)構(gòu)成。如圖9所示,各類(lèi)由類(lèi)名稱(chēng)、屬性名稱(chēng)、方法名稱(chēng)構(gòu)成,鏈接線(xiàn)表示各類(lèi)之間的關(guān)系。 方法執(zhí)行從抽象句子樹(shù)中讀取各符號(hào)類(lèi)型的語(yǔ)法結(jié)構(gòu)以及源代碼的功能。下面將具體說(shuō)明ABAP源代碼缺陷檢查部200。上述ABAP規(guī)范數(shù)據(jù)庫(kù)210用存儲(chǔ)有如圖11所示的6個(gè)種類(lèi)的各種編碼規(guī)范的數(shù)據(jù)庫(kù),通過(guò)ABAP規(guī)范管理模塊220來(lái)管理規(guī)范的添加或者變更等。察看上述ABAP規(guī)范數(shù)據(jù)庫(kù)的結(jié)構(gòu),由種類(lèi)類(lèi)型、符號(hào)類(lèi)型、程序路徑模式、缺陷模式結(jié)構(gòu)類(lèi)型、缺陷條件、規(guī)范名稱(chēng)、規(guī)范ID、錯(cuò)誤類(lèi)別、錯(cuò)誤消息的數(shù)據(jù)結(jié)構(gòu)構(gòu)成。并且,編碼規(guī)范的種類(lèi)還可分為ABAP及SQL編碼風(fēng)格、編碼標(biāo)準(zhǔn)、架構(gòu)標(biāo)準(zhǔn)、SQL標(biāo)準(zhǔn)、運(yùn)行時(shí)錯(cuò)誤、安全脆弱點(diǎn)等。有關(guān)各種類(lèi)的編碼規(guī)范的名稱(chēng)和說(shuō)明的實(shí)施例如下。(I) ABAP 及 SQL 編碼風(fēng)格-Indentation (每個(gè)單位都要進(jìn)行縮進(jìn))-Line Length (每行要編寫(xiě)100字符以?xún)?nèi))-Hard-Coding (不得進(jìn)行硬編碼)(2)編碼標(biāo)準(zhǔn)-Variable Naming (應(yīng)遵守變量命名規(guī)范)-Recursive Calls (不得進(jìn)行遞歸調(diào)用)-Form Obsolete Statements (不得使用 form 語(yǔ)句)(3)架構(gòu)標(biāo)準(zhǔn)-Return Value Testing on SQL Statement(使用 SQL 語(yǔ)句后需要進(jìn)行錯(cuò)誤檢查)-Forbidden External Subroutine Invocation (不得調(diào)用其他程序的子程序)-Using Commit and Rollback on Try Block(若在Try語(yǔ)句記述了 commit work,就得在catch語(yǔ)句記述rollback work)(4) SQL 標(biāo)準(zhǔn)-Forbidden Nested Select Statement (不得記述多重 select 語(yǔ)句)-Forbidden Multiple Table Join (不得連接三個(gè)以上的表)-Select Statement with an GroupBy Function (在使用 Select 語(yǔ)句時(shí)不得使用groupby函數(shù))
(5)運(yùn)行時(shí)錯(cuò)誤-Division by zero (進(jìn)行除法運(yùn)算時(shí)不得除以0)-Unassigned Field Symbol (Field symbol 在使用前必須要初始化)-Infinite Loops (在編寫(xiě)Loop語(yǔ)句時(shí),必須記述exit代碼)(6)安全脆弱點(diǎn)-Call of System Function (不得使用系統(tǒng)函數(shù))-Call of Transactions (不得使用 Call Transaction 語(yǔ)句)
-Use of Database Hints (使用 Select 語(yǔ)句時(shí),不得使用 hints 語(yǔ)句)如圖11所示,ABAP規(guī)范管理模塊220從ABAP規(guī)范數(shù)據(jù)庫(kù)中選擇各個(gè)種類(lèi)的編碼規(guī)范并設(shè)定詳細(xì)選項(xiàng),從所選擇的規(guī)范中按各個(gè)文件檢索與相關(guān)的符號(hào)和缺陷模式結(jié)構(gòu)相對(duì)應(yīng)的符號(hào)表的符號(hào)值,并從抽象句子樹(shù)中抽取按所檢索到的各個(gè)符號(hào)值相對(duì)應(yīng)的所有語(yǔ)法結(jié)構(gòu)以及源代碼并傳輸?shù)匠绦蚵窂椒治瞿K230。上述程序路徑分析模塊執(zhí)行在由上述ABAP規(guī)范管理模塊在ABAP規(guī)范數(shù)據(jù)庫(kù)中所定義的編碼規(guī)范的程序路徑模式、缺陷模式結(jié)構(gòu)和缺陷條件抽取的各個(gè)符號(hào)值的語(yǔ)法結(jié)構(gòu)以及源代碼中識(shí)別相關(guān)編碼規(guī)范的代碼缺陷的功能,所檢測(cè)出的缺陷將被傳輸?shù)脚c各個(gè)源代碼的位置相鏈接的代碼缺陷報(bào)告書(shū)中,最終向使用者提供如圖12、13、14的實(shí)施例的代碼缺陷信息。為執(zhí)行如上所述的功能,程序路徑分析模塊的程序路徑模式被劃分為控制流程、控制及數(shù)據(jù)流程以及控制流程及調(diào)用,在ABAP規(guī)范數(shù)據(jù)庫(kù)中定義的所有編碼規(guī)范僅屬于一個(gè)程序路徑模式。通過(guò)上述各程序路徑模式在程序路徑分析模塊中檢查缺陷的實(shí)施例如下。(I)以控制流程的程序路徑模式為基礎(chǔ)進(jìn)行的檢查缺陷(參照?qǐng)D12)-規(guī)范名以及缺陷條件(無(wú)窮循環(huán),編寫(xiě)Loop語(yǔ)句時(shí)必須要記述exit代碼):ABAP規(guī)范數(shù)據(jù)庫(kù)。-檢索From符號(hào)中是否存在Loop語(yǔ)句ABAP規(guī)范管理模塊以及符號(hào)表。-讀取與From符號(hào)相關(guān)的句子結(jié)構(gòu)以及源代碼抽象句子樹(shù)。-通過(guò)控制流程路徑,分析Loop語(yǔ)句中是否存在Exit代碼程序路徑分析模塊。-若Loop語(yǔ)句中沒(méi)有Exit代碼,就識(shí)別為代碼缺陷,生成缺陷報(bào)告書(shū)代碼缺陷報(bào)告書(shū)生成模塊。-ABAP 源例題
權(quán)利要求
1.一種執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),其特征在于,包括 ABAP源代碼語(yǔ)法分析部,其對(duì)作為代碼檢查對(duì)象的ABAP源代碼進(jìn)行詞匯、句子以及意義分析,并分別存儲(chǔ)在抽象句子樹(shù)和符號(hào)表的數(shù)據(jù)結(jié)構(gòu); ABAP源代碼缺陷檢查部,其以上述數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)在程序路徑分析模塊中對(duì)與選自ABAP規(guī)范管理模塊中的編碼規(guī)范相關(guān)的源代碼以及語(yǔ)法結(jié)構(gòu)進(jìn)行代碼缺陷檢查,來(lái)生成代碼缺陷報(bào)告書(shū)以能夠修改違反規(guī)范的代碼缺陷。
2.根據(jù)權(quán)利要求I所述的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),其特征在于,上述ABAP源代碼語(yǔ)法分析部包括 詞匯分析模塊,其以文件為單位讀取作為檢查對(duì)象的ABAP源代碼文件,根據(jù)預(yù)先定義的ABAP語(yǔ)法(巴科斯范式)將ABAP源代碼分離為表示一連串字符串的標(biāo)記單位(關(guān)鍵詞、標(biāo)識(shí)符、符號(hào)標(biāo)識(shí)符、常量、運(yùn)算符); 句子分析模塊,其檢查以各個(gè)文件為單位分離的標(biāo)記的句子(語(yǔ)法)是否違反預(yù)先定義的ABAP語(yǔ)法,若有語(yǔ)法錯(cuò)誤就抽取相關(guān)文件的語(yǔ)法錯(cuò)誤消息,若沒(méi)有語(yǔ)法錯(cuò)誤,就分析語(yǔ)句的句子,并賦予句子之間的控制流程關(guān)系的意義來(lái)抽取各個(gè)文件單位的句子結(jié)構(gòu); 抽象句子樹(shù)存儲(chǔ)處理模塊,其以各個(gè)文件為單位,將上述句子分析模塊中所抽取的信息存儲(chǔ)到樹(shù)狀數(shù)據(jù)結(jié)構(gòu)中; 意義分析模塊,其從上述抽象句子樹(shù)存儲(chǔ)處理模塊中抽取構(gòu)成各個(gè)文件的符號(hào)類(lèi)型(類(lèi)、方法、變量、型、函數(shù)、事件、對(duì)話(huà)、處理塊)和它們之間的鏈接關(guān)系信息以及缺陷檢查所需的各個(gè)符號(hào)類(lèi)型的缺陷模式結(jié)構(gòu); 符號(hào)表存儲(chǔ)處理模塊,其將上述意義分析模塊中所抽取的信息存儲(chǔ)到作為各個(gè)文件的構(gòu)成要素的符號(hào)表數(shù)據(jù)結(jié)構(gòu)。
3.根據(jù)權(quán)利要求I所述的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),其特征在于,上述ABAP源代碼缺陷檢查部包括 ABAP規(guī)范數(shù)據(jù)庫(kù),其根據(jù)缺陷嚴(yán)重程度以及程序設(shè)計(jì)特性,通過(guò)ABAP規(guī)范管理模塊的處理,來(lái)存儲(chǔ)并管理各種編碼規(guī)范種類(lèi)(ABAP及SQL編碼風(fēng)格、編碼標(biāo)準(zhǔn)、架構(gòu)標(biāo)準(zhǔn)、SQL標(biāo)準(zhǔn)、運(yùn)行時(shí)錯(cuò)誤、安全脆弱點(diǎn))、各個(gè)規(guī)范的符號(hào)類(lèi)型、缺陷模式結(jié)構(gòu)類(lèi)型以及缺陷條件類(lèi)型; ABAP規(guī)范管理模塊,其從上述ABAP規(guī)范數(shù)據(jù)庫(kù)中選擇編碼規(guī)范,按各個(gè)文件檢索與和所選擇的規(guī)范相關(guān)的符號(hào)和缺陷模式結(jié)構(gòu)相對(duì)應(yīng)的符號(hào)表的符號(hào)值,并從抽象句子樹(shù)中抽取按所檢索到的各個(gè)符號(hào)值相對(duì)應(yīng)的所有語(yǔ)法結(jié)構(gòu)以及源代碼并傳輸?shù)匠绦蚵窂椒治瞿K; 程序路徑分析模塊,其根據(jù)所選擇的規(guī)范的程序路徑模式(控制流程、控制及數(shù)據(jù)流程或者控制流程及調(diào)用)、缺陷模式結(jié)構(gòu)和缺陷條件來(lái)對(duì)上述所抽取的各個(gè)符號(hào)值的語(yǔ)法結(jié)構(gòu)以及源代碼進(jìn)行缺陷檢查; 代碼缺陷報(bào)告書(shū)生成模塊,若存在違反上述所選擇的編碼規(guī)范的缺陷,該代碼缺陷報(bào)告書(shū)生成模塊就生成代碼缺陷報(bào)告書(shū)。
4.根據(jù)權(quán)利要求I所述的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),其特征在于,上述ABAP源代碼語(yǔ)法分析部以各個(gè)文件為單位接收經(jīng)句子分析后的標(biāo)記,用作為自下而上的句子分析法的LR (I)解析算法按標(biāo)記的語(yǔ)法結(jié)構(gòu)進(jìn)行分析,以各個(gè)文件為單位抽取句子結(jié)構(gòu)之間的控制流程關(guān)系并存儲(chǔ)到抽象句子樹(shù)的數(shù)據(jù)結(jié)構(gòu)中。
5.根據(jù)權(quán)利要求I所述的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),其特征在于,上述ABAP源代碼語(yǔ)法分析部從抽象句子樹(shù)的數(shù)據(jù)結(jié)構(gòu)中抽取構(gòu)成各個(gè)文件的符號(hào)類(lèi)型和它們之間的符號(hào)鏈接關(guān)系、類(lèi)別信息、名稱(chēng)鏈接關(guān)系,并將缺陷檢查所需的各個(gè)符號(hào)類(lèi)型的缺陷模式結(jié)構(gòu)信息存儲(chǔ)到符號(hào)表的數(shù)據(jù)結(jié)構(gòu)中。
6.根據(jù)權(quán)利要求I所述的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),其特征在于,上述ABAP源代碼語(yǔ)法分析部在分析ABAP源代碼時(shí),若選擇有ABAP文件的上級(jí)目錄,將包括下級(jí)目錄在內(nèi)的所有ABAP文件都作為檢查對(duì)象來(lái)進(jìn)行分析,或者只選擇一個(gè)文件也將作為檢查對(duì)象來(lái)進(jìn)行分析。
7.根據(jù)權(quán)利要求3所述的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),其特征在于,上述程序路徑分析模塊執(zhí)行如下功能,該項(xiàng)功能是指,在由ABAP規(guī)范管理部在ABAP規(guī)范數(shù)據(jù)庫(kù)中所定義的編碼規(guī)范的程序路徑模式、缺陷模式結(jié)構(gòu)和缺陷條件下抽取的各個(gè)符號(hào)值的語(yǔ)法結(jié)構(gòu)以及源代碼中識(shí)別相關(guān)編碼規(guī)范的代碼缺陷的功能。
8.根據(jù)權(quán)利要求3所述的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),其特征在于,上述ABAP規(guī)范管理模塊執(zhí)行如下功能,該功能是指,從ABAP規(guī)范數(shù)據(jù)庫(kù)中選擇各個(gè)種類(lèi)的編碼規(guī)范并設(shè)定詳細(xì)選項(xiàng),從所選擇的規(guī)范中按各個(gè)文件檢索與相關(guān)的符號(hào)和缺陷模式結(jié)構(gòu)相對(duì)應(yīng)的符號(hào)表的符號(hào)值,并從抽象句子樹(shù)中抽取按所檢索到的各個(gè)符號(hào)值相對(duì)應(yīng)的所有語(yǔ)法結(jié)構(gòu)以及源代碼并傳輸?shù)匠绦蚵窂椒治瞿K的功能。
9.根據(jù)權(quán)利要求3所述的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),其特征在于,上述ABAP規(guī)范數(shù)據(jù)庫(kù)為存儲(chǔ)有各種種類(lèi)(ABAP及SQL編碼風(fēng)格、編碼標(biāo)準(zhǔn)、架構(gòu)標(biāo)準(zhǔn)、SQL標(biāo)準(zhǔn)、運(yùn)行時(shí)錯(cuò)誤、安全脆弱點(diǎn))的編碼規(guī)范的數(shù)據(jù)庫(kù),按各個(gè)規(guī)范由種類(lèi)類(lèi)型、符號(hào)類(lèi)型、程序路徑模式、缺陷模式結(jié)構(gòu)類(lèi)型、缺陷條件、規(guī)范名稱(chēng)、規(guī)范ID、錯(cuò)誤類(lèi)別、錯(cuò)誤消息的數(shù)據(jù)結(jié)構(gòu)構(gòu)成,并通過(guò)ABAP規(guī)范管理模塊來(lái)管理規(guī)范的添加或者變更。
全文摘要
本發(fā)明涉及一種執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng),更詳細(xì)地涉及通過(guò)檢查系統(tǒng)故障及停止、數(shù)據(jù)損失及改變、性能降低過(guò)大、功能的錯(cuò)誤執(zhí)行及結(jié)果、復(fù)雜的代碼結(jié)構(gòu)及拼寫(xiě)錯(cuò)誤等的編碼缺陷使得ABAP應(yīng)用的維護(hù)性、性能性、準(zhǔn)確性、穩(wěn)定性以及安全性等變得可靠的執(zhí)行ABAP源代碼的代碼檢查的代碼檢查執(zhí)行系統(tǒng)。
文檔編號(hào)G06F11/36GK102804147SQ201080065453
公開(kāi)日2012年11月28日 申請(qǐng)日期2010年4月5日 優(yōu)先權(quán)日2010年3月29日
發(fā)明者李憲起 申請(qǐng)人:株式會(huì)社軟4軟