本發(fā)明涉及一種程序分析方法,特別涉及一種基于正則表達(dá)式的程序靜態(tài)分析方法。
背景技術(shù):
程序靜態(tài)分析是在不執(zhí)行程序的情況下對(duì)程序進(jìn)行分析,推測(cè)程序在運(yùn)行時(shí)可能表現(xiàn)出來(lái)的行為,是實(shí)現(xiàn)對(duì)軟件系統(tǒng)理解與分析的一種有效途徑和關(guān)鍵技術(shù)?,F(xiàn)有多種程序靜態(tài)分析方法,如:符號(hào)執(zhí)行,定理證明,類型推導(dǎo),抽象解釋等。但此類方法難以挖掘出具體的代碼元素,如函數(shù),變量名,數(shù)據(jù)結(jié)構(gòu)類型,返回值等信息。
機(jī)載系統(tǒng)設(shè)備一般包括慣性導(dǎo)航系統(tǒng)、飛行控制系統(tǒng)、火控系統(tǒng)等。隨著慣導(dǎo)功能復(fù)雜性的增強(qiáng),程序的規(guī)模也急劇增加,相應(yīng)的文檔規(guī)模也越來(lái)越大,在編制文檔過(guò)程中極大的增加了開(kāi)發(fā)人員的工作量?,F(xiàn)已有自動(dòng)生成文檔的方法,例如基于注釋的方法。此類方法雖然具有針對(duì)性強(qiáng)的優(yōu)點(diǎn),能夠直接生成程序的一部分文檔,但需要人工在代碼中添加注釋,當(dāng)代碼規(guī)模迅速增大時(shí),僅僅依靠人力幾乎不可能完成注釋添加工作,且會(huì)增加開(kāi)發(fā)人員的負(fù)擔(dān)。
在程序的開(kāi)發(fā)過(guò)程中,需要遵循一定的編碼規(guī)則。由于開(kāi)發(fā)人員較多,因此每個(gè)人可能未必能?chē)?yán)格遵循編碼規(guī)則,因此也需要一種檢測(cè)手段來(lái)查找不符合編碼規(guī)則的程序片段,并促使開(kāi)發(fā)人員修正此問(wèn)題。
此外,由于程序運(yùn)行在使用嵌入式處理器的慣導(dǎo)系統(tǒng)上,硬件資 源有限,為了更好的利用僅有的處理器和內(nèi)存資源,也需要一種程序優(yōu)化的方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明解決的技術(shù)問(wèn)題為:提供一種快捷高效的,基于正則表達(dá)式的程序靜態(tài)分析方法。
本發(fā)明的技術(shù)方案為:根據(jù)待評(píng)價(jià)程序的結(jié)構(gòu)和編碼規(guī)則,建立提取關(guān)鍵信息的正則表達(dá)式分析規(guī)則,從提取到的關(guān)鍵信息數(shù)據(jù)庫(kù)中,得到不符合待評(píng)價(jià)程序結(jié)構(gòu)和編碼規(guī)則的項(xiàng)目。
作為本技術(shù)方案的一種改進(jìn),所述的方法包括如下步驟:
步驟一,確定待評(píng)價(jià)程序需要分析的關(guān)鍵信息;
步驟二,根據(jù)待評(píng)價(jià)程序的結(jié)構(gòu)和編碼規(guī)則,建立提取關(guān)鍵信息的正則表達(dá)式分析規(guī)則,構(gòu)成正則表達(dá)式分析規(guī)則庫(kù);
步驟三,根據(jù)正則表達(dá)式分析規(guī)則庫(kù),提取待評(píng)價(jià)程序的關(guān)鍵信息,得到關(guān)鍵信息的數(shù)據(jù)字典和關(guān)鍵信息數(shù)據(jù)庫(kù);
步驟四,從關(guān)鍵信息數(shù)據(jù)庫(kù)中提取不符合待評(píng)價(jià)程序的結(jié)構(gòu)和編碼規(guī)則的項(xiàng)目,并生成不符合項(xiàng)分析報(bào)告。
作為本技術(shù)方案的一種改進(jìn),待評(píng)價(jià)程序的關(guān)鍵信息包括函數(shù)名、局部變量、全局變量、返回值、函數(shù)中使用的數(shù)據(jù)結(jié)構(gòu)和當(dāng)前函數(shù)調(diào)用的其他函數(shù)名。
作為本技術(shù)方案的一種改進(jìn),根據(jù)步驟三中得到的關(guān)鍵信息數(shù)據(jù)字典和關(guān)鍵信息數(shù)據(jù)庫(kù),和事先規(guī)定的設(shè)計(jì)文檔模版,生成得到程序?qū)?yīng)的設(shè)計(jì)文檔。
作為本技術(shù)方案的一種改進(jìn),根據(jù)正則表達(dá)式分析規(guī)則庫(kù),提取待評(píng)價(jià)程序的關(guān)鍵信息時(shí),還統(tǒng)計(jì)了每個(gè)函數(shù)和數(shù)據(jù)結(jié)構(gòu)的調(diào)用頻次。
本發(fā)明的有益效果為:首先,基于正則表達(dá)式的分析方法,可以快速有效的對(duì)程序進(jìn)行分析,并對(duì)程序進(jìn)行有針對(duì)性的優(yōu)化。
其次,能夠自動(dòng)生成設(shè)計(jì)文檔,大大減少了開(kāi)發(fā)人員的工作量。
再次,能夠?qū)Σ环暇幋a規(guī)則的程序片段進(jìn)行標(biāo)識(shí),快速定位不符合項(xiàng)程序片段,易于修改程序。
最后,適用性強(qiáng),適用所有型號(hào)的程序,可以兼容舊版本的程序。分析結(jié)果可以在多個(gè)項(xiàng)目之間復(fù)用,降低了其他型號(hào)的開(kāi)發(fā)成本,通過(guò)構(gòu)建的分析模型能夠進(jìn)一步的優(yōu)化程序。
附圖說(shuō)明
圖1本發(fā)明運(yùn)行的具體實(shí)施步驟流程圖;
圖2本發(fā)明的設(shè)計(jì)框架圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本技術(shù)方案作進(jìn)一步詳細(xì)說(shuō)明。
所述的方法,根據(jù)待評(píng)價(jià)程序的結(jié)構(gòu)和編碼規(guī)則,建立提取關(guān)鍵信息的正則表達(dá)式分析規(guī)則,從提取到的關(guān)鍵信息數(shù)據(jù)庫(kù)中,得到不符合待評(píng)價(jià)程序結(jié)構(gòu)和編碼規(guī)則的項(xiàng)目。
圖1顯示的是本方法的處理流程。圖1中有兩個(gè)功能組建,程序分析器和文檔生成器。通過(guò)分析程序的關(guān)鍵信息,建立正則表達(dá)式規(guī)則庫(kù),程序分析器可以對(duì)輸入的程序進(jìn)行分析并輸出數(shù)據(jù)字典,關(guān)鍵信息數(shù)據(jù)庫(kù)和統(tǒng)計(jì)與分析模型。文檔生成器能夠生成程序?qū)?yīng)的文檔 和不符合項(xiàng)報(bào)告。開(kāi)發(fā)人員可以根據(jù)統(tǒng)計(jì)與分析模型,以及不符合項(xiàng)報(bào)告來(lái)改進(jìn)和優(yōu)化程序。
使用本方法整個(gè)實(shí)施步驟參見(jiàn)附圖1,具體描述如下:
步驟1:提取程序需要分析的關(guān)鍵信息。對(duì)于程序來(lái)說(shuō),程序的關(guān)鍵信息包括函數(shù)名、局部變量、全局變量、返回值、函數(shù)中使用的數(shù)據(jù)結(jié)構(gòu)和當(dāng)前函數(shù)調(diào)用的其他函數(shù)名。
步驟2:結(jié)合程序關(guān)鍵信息,建立程序的編碼規(guī)則。根據(jù)編碼規(guī)則,建立分析和解析程序的正則表達(dá)式規(guī)則庫(kù)。正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符及這些字符的組合,用來(lái)表達(dá)對(duì)字符串的一種過(guò)濾邏輯。正則表達(dá)式能夠自由方便的進(jìn)行字符串匹配,具有適用性強(qiáng),靈活且易于修改的特點(diǎn)。正則表達(dá)式規(guī)則庫(kù)是多條正則表達(dá)式規(guī)則的集合,它是能夠進(jìn)行程序分析的前提,提供了對(duì)程序關(guān)鍵信息的映射關(guān)系。程序關(guān)鍵信息中的每一個(gè)要素,如程序中的函數(shù)名,對(duì)應(yīng)于正則表達(dá)式規(guī)則庫(kù)中的一條規(guī)則,程序分析器可以通過(guò)此規(guī)則找到每個(gè)函數(shù),同理,可以找到其他的程序關(guān)鍵信息。
步驟3:根據(jù)正則表達(dá)式分析規(guī)則庫(kù),提取待評(píng)價(jià)程序的關(guān)鍵信息。分析過(guò)程基于正則表達(dá)式規(guī)則。根據(jù)正則表達(dá)式規(guī)則匹配程序中的相應(yīng)程序關(guān)鍵信息,自動(dòng)生成關(guān)鍵信息數(shù)據(jù)庫(kù)、數(shù)據(jù)字典,并建立統(tǒng)計(jì)與分析模型。關(guān)鍵信息數(shù)據(jù)庫(kù)是用來(lái)存儲(chǔ)程序關(guān)鍵信息的數(shù)據(jù)庫(kù),數(shù)據(jù)字典是存放數(shù)據(jù)庫(kù)所用的有關(guān)信息,描述了數(shù)據(jù)庫(kù)的格式,為數(shù)據(jù)庫(kù)提供存取和控制管理。
步驟4:從關(guān)鍵信息數(shù)據(jù)庫(kù)中提取不符合待評(píng)價(jià)程序的結(jié)構(gòu)和編碼規(guī)則的項(xiàng)目。使用文檔生成器生成文檔。文檔生成器訪問(wèn)步驟3建立的數(shù)據(jù)字典和關(guān)鍵信息數(shù)據(jù)庫(kù),并結(jié)合規(guī)定的文檔模版,生成程序?qū)?yīng)的文檔。此文檔模版規(guī)定了需要輸出的文檔格式以及文檔中需要填寫(xiě)的內(nèi)容。此外,在解析程序的過(guò)程中,識(shí)別程序中不符合編碼規(guī)則的程序片段,生成不符合項(xiàng)分析報(bào)告。
步驟5:根據(jù)不符合項(xiàng)分析報(bào)告,對(duì)不符合慣導(dǎo)編碼規(guī)則的程序片段進(jìn)行修正,使之完全符合標(biāo)準(zhǔn),此方式降低了人工在海量的程序片段中進(jìn)行檢查的成本,能夠快速定位不符合項(xiàng)的位置。
步驟6;重新使用程序分析器對(duì)改進(jìn)后的程序進(jìn)行分析,查看不符合項(xiàng)報(bào)告。若不存在不符合項(xiàng),則說(shuō)明已經(jīng)完成對(duì)所有不符合項(xiàng)的修正。否則重復(fù)步驟6,直到不存在不符合項(xiàng)為止。
步驟7:根據(jù)步驟4建立的統(tǒng)計(jì)和分析模型,結(jié)合慣導(dǎo)硬件系統(tǒng),對(duì)程序進(jìn)行優(yōu)化。統(tǒng)計(jì)程序中使用頻度最高的函數(shù)體,全局變量和數(shù)據(jù)結(jié)構(gòu),根據(jù)“2-8法則”,對(duì)這些程序關(guān)鍵信息的優(yōu)化能夠大幅提升程序運(yùn)行效率。
實(shí)施例
應(yīng)用場(chǎng)景如下:在某型號(hào)飛機(jī)上,該型慣導(dǎo)系統(tǒng)的硬件單片機(jī)基本配置如下:
CPU類型:PowerPC8245處理器。
操作系統(tǒng):VXworks5.5。
程序需支持此CPU,且使用此操作系統(tǒng)API。
圖2是本發(fā)明在應(yīng)用場(chǎng)景下的設(shè)計(jì)框架圖。
根據(jù)程序的運(yùn)行環(huán)境(CPU和操作系統(tǒng)),以及程序關(guān)鍵信息,建立程序的編碼規(guī)則。規(guī)定程序關(guān)鍵信息包括函數(shù)名、局部變量、全局變量、返回值、函數(shù)中使用的數(shù)據(jù)結(jié)構(gòu)和當(dāng)前函數(shù)調(diào)用的其他函數(shù)名。函數(shù)輸入?yún)?shù)的變量命名規(guī)則:名稱前綴為程序指定的特定字符串,能夠唯一識(shí)別對(duì)應(yīng)的程序關(guān)鍵信息。
通過(guò)操作界面,載入需要分析的程序,可以是單個(gè)文件,也可以是一批文件存放在某個(gè)文件夾。
點(diǎn)擊“開(kāi)始分析”按鈕,調(diào)用程序分析器對(duì)程序進(jìn)行分析,并得到XML格式的數(shù)據(jù)字典和關(guān)鍵信息數(shù)據(jù)庫(kù)。在分析完畢之后,文檔生成器會(huì)自動(dòng)根據(jù)以上結(jié)果生成程序?qū)?yīng)的文檔和不符合項(xiàng)分析報(bào)告。
根據(jù)不符合項(xiàng)分析報(bào)告改進(jìn)程序。不符合項(xiàng)分析報(bào)告中,包括不符合項(xiàng)的統(tǒng)計(jì)信息,如不符合項(xiàng)的個(gè)數(shù),所在的文件以及所在文件的行數(shù)和其所在的函數(shù)。根據(jù)此信息,對(duì)程序進(jìn)行修改,使之符合慣導(dǎo)的編碼規(guī)則。
根據(jù)統(tǒng)計(jì)和分析模型,對(duì)輸入的程序中,出現(xiàn)頻率最高的函數(shù)體和數(shù)據(jù)結(jié)構(gòu)進(jìn)行分析。對(duì)數(shù)據(jù)結(jié)構(gòu)中的變量的存儲(chǔ)空間,以及順序進(jìn)行調(diào)整;優(yōu)化數(shù)據(jù)結(jié)構(gòu)的在內(nèi)存中的對(duì)齊方式;并刪去不使用的數(shù)據(jù)結(jié)構(gòu)項(xiàng),將此數(shù)據(jù)結(jié)構(gòu)中的使用頻度最少變量提出,建立單獨(dú)的變量,能夠有效減少使用頻度最高的數(shù)據(jù)結(jié)構(gòu)所占用的空間,提高對(duì)其訪問(wèn)的效率。
通過(guò)實(shí)際驗(yàn)證,本發(fā)明能夠在200ms內(nèi)完成10萬(wàn)行規(guī)模級(jí)的程序的分析工作,并輸出程序?qū)?yīng)的文檔和不符合項(xiàng),通過(guò)不符合項(xiàng)和統(tǒng)計(jì)與分析模型對(duì)程序改進(jìn),優(yōu)化后的程序執(zhí)行效率提高約1.6%。原本人工完成10萬(wàn)行規(guī)模級(jí)程序?qū)?yīng)的設(shè)計(jì)文檔,需要約216小時(shí)/人,現(xiàn)在可自動(dòng)生成文檔,無(wú)需人工介入,極大節(jié)約人力成本。
本發(fā)明還可以有其它多種實(shí)施例,在不背離本發(fā)明精神和實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員可根據(jù)本發(fā)明做出各種相應(yīng)的改變,但這些相應(yīng)的改變都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。