康劍
摘要:本文目標(biāo)提出一個(gè)在反向工程領(lǐng)域中的商業(yè)智慧概念及其恢復(fù)方法。我們發(fā)現(xiàn)在用反向工程技術(shù)分析已有程序時(shí),反向技術(shù)本身缺乏一種主動(dòng)理解程序的智慧,進(jìn)而不能夠運(yùn)用這種智慧實(shí)現(xiàn)更好的進(jìn)行程序理解。我們將這種智慧稱之為商業(yè)智能,我們希望通過(guò)所提出商業(yè)智能恢復(fù)方法,使反向技術(shù)具備主動(dòng)恢復(fù)商業(yè)智慧的能力,從而幫助反向工程技術(shù)更好的理解程序本身。
關(guān)鍵詞:程序理解;反向工程;商業(yè)智能
中圖分類號(hào):TP391.41 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2017)05-0244-01
1 簡(jiǎn)介
反向工程技術(shù)是用以理解程序的重要方法,反向技術(shù)期望抽取程序中的有用要素信息,并用這些要素信息進(jìn)一步建立程序的抽象結(jié)構(gòu),借此進(jìn)一步描繪出軟件設(shè)計(jì)的原型。這些要素信息包括:項(xiàng)目、組件、模塊、架構(gòu)、特性、需求等等。然而,當(dāng)前反向技術(shù)停滯在代碼理解階段,比如:系統(tǒng)分解技術(shù)、程序分解技術(shù)、程序轉(zhuǎn)換技術(shù)、程序抽取技術(shù)等,這些技術(shù)目前,仍然不能達(dá)到軟件特性理解和軟件需求理解的高度。
2 介紹現(xiàn)有的商業(yè)智能恢復(fù)方法
2.1 程序抽取方法
程序抽取方法是常見的基于數(shù)據(jù)流分析的方法,且已成為多種程序理解工具的基礎(chǔ)功能。程序當(dāng)中特別的字段,以及特別變量都可以在數(shù)據(jù)流的節(jié)點(diǎn)上得以體現(xiàn)。比如,當(dāng)你希望查找到某個(gè)程序中存在的語(yǔ)法錯(cuò)誤時(shí),你不需要等待整個(gè)程序運(yùn)行完畢,你會(huì)選擇截取整個(gè)完整程序中某單獨(dú)一段程序加以執(zhí)行,即可有效尋找這段程序中存在的語(yǔ)法問(wèn)題。
2.2 線性程序分割方法
傳統(tǒng)的程序分割方法是非線性的,這是因?yàn)橥ǔG闆r下,程序分割能力一定受到計(jì)算機(jī)資源的限制,且難以滿足在線實(shí)時(shí)的程序分割需求。本文中,我們?cè)O(shè)想一種線性程序分割方法,它可以基于程序的不同類型提出將源程序按照商業(yè)智能模塊進(jìn)行分割。并且,因?yàn)樯虡I(yè)模塊具備線性邏輯分析的基礎(chǔ),這種線性程序分割方法就可以達(dá)到線性分割理解程序的目的。同時(shí),在進(jìn)行程序分割時(shí),商業(yè)智能模塊和源程序模塊必然存在一一對(duì)應(yīng)的關(guān)系,這樣就避免了重復(fù)使用計(jì)算資源和侵占計(jì)算資源,進(jìn)而又實(shí)現(xiàn)自動(dòng)化效率提升的目標(biāo)。
2.3 商業(yè)智能矩陣分解方法
商業(yè)智能矩陣分解方法是建立在數(shù)據(jù)模型基礎(chǔ)之上的一種軟件理解方法。這種方法的實(shí)質(zhì)在于解釋:分解后所獲得的商業(yè)數(shù)據(jù)及其結(jié)果,與分解過(guò)程中的所選擇的假設(shè)條件和方法是存在必然的關(guān)聯(lián)關(guān)系。在面對(duì)大段程序代碼的時(shí)候,這種方法就凸顯出它必然優(yōu)勢(shì),因?yàn)樽铋_始的程序理解和程序分解工作是從頂層出發(fā)的,這就要求程序分解方法必須具備有效的追蹤功能,追蹤何時(shí)何處拆分,和何時(shí)何處組合,最終能夠找到變化路徑并恢復(fù)程序原形。
3 提出商業(yè)智能恢復(fù)方法
3.1 商業(yè)智能恢復(fù)與反向工程之間的關(guān)系
商業(yè)智能恢復(fù)和反向工程間存在著5層級(jí)關(guān)系,這既代表商業(yè)智能恢復(fù)的5個(gè)層級(jí),也代表著反向工程的5個(gè)層級(jí),且每個(gè)層級(jí)的商業(yè)智能恢復(fù)方法和每個(gè)層級(jí)的反向工程方法都存在一對(duì)一關(guān)系:
(1)程序代碼反向工程與商業(yè)智能數(shù)據(jù)恢復(fù)保持一致。給定一段源代碼,我們一定可以確定商業(yè)數(shù)據(jù)一定嵌入在該段程序的代碼中間。(2)程序結(jié)構(gòu)反向工程與商業(yè)算法恢復(fù)保持一致。用程序分割方法從代碼中抽取程序結(jié)構(gòu),就是將不同種定義對(duì)象標(biāo)注出來(lái),再將其關(guān)系結(jié)構(gòu)提取出來(lái)。商業(yè)算法同樣可以解釋不同程序模塊之間的聯(lián)系,從而解釋程序結(jié)構(gòu)。組件模型的反向工程與商業(yè)智能的數(shù)據(jù)模型恢復(fù)保持一致。商業(yè)智能的算法設(shè)計(jì)就在這個(gè)區(qū)間內(nèi)實(shí)現(xiàn)。對(duì)于程序本身來(lái)說(shuō),這相當(dāng)于程序的控制流程,用來(lái)解釋項(xiàng)目與組件之間的關(guān)系。架構(gòu)反向工程與商業(yè)智能物理模型恢復(fù)保持一致。商業(yè)智能的物理模型是與軟件架構(gòu)保持一致的,這個(gè)架構(gòu)可以有效的將組件與軟件需求聯(lián)系起來(lái)。(3)需求反向工程與商業(yè)智能邏輯恢復(fù)保持一致。簡(jiǎn)單來(lái)說(shuō),軟件的需求就是商業(yè)邏輯本身,只不過(guò)是通過(guò)功能定義加以實(shí)現(xiàn)的。
3.2 一種線性程序分割方法
我們首先需要定義商業(yè)智能的基本組成。商業(yè)智能是由一個(gè)個(gè)相關(guān)聯(lián)的概念信息組成的,每一個(gè)獨(dú)立的概念信息又可以稱之為一個(gè)單元,若干個(gè)強(qiáng)關(guān)系的單元組成了一條規(guī)則,若干條強(qiáng)關(guān)系的規(guī)則組成了一個(gè)模型。我們?cè)賹⑺羞@些找到的單元、規(guī)則、模型都放在一個(gè)數(shù)據(jù)庫(kù)內(nèi),進(jìn)而組成了商業(yè)智能數(shù)據(jù)庫(kù)。有了這個(gè)商業(yè)智能數(shù)據(jù)庫(kù),我們就具備了運(yùn)用商業(yè)智能的進(jìn)行程序線性分析和理解程序的基礎(chǔ)。
3.3 構(gòu)建商業(yè)智能矩陣
在一個(gè)標(biāo)準(zhǔn)的矩陣中間,商業(yè)智能單元1和程序段1存在著一一對(duì)應(yīng)的強(qiáng)關(guān)系,但同時(shí),商業(yè)智能單元1可能又與程序段2、3、4等存在著某種弱關(guān)系。商業(yè)智能矩陣方法是最佳的尋找強(qiáng)弱關(guān)系的方法,并且能夠幫助軟件理解工具在最快時(shí)間找到一條關(guān)系度最強(qiáng)的商業(yè)邏輯主線,這條商業(yè)邏輯主線在最大可能程度上,就是這個(gè)軟件程序的設(shè)計(jì)需求或性能描述的一部分。
4 結(jié)語(yǔ)
反向工程仍然是程序理解的重要方法,但是我們確信沒(méi)有商業(yè)智能恢復(fù)的幫助,反向工程對(duì)于程序的理解能力,仍將停留在代碼分析的層面,這無(wú)法達(dá)到我們對(duì)程序設(shè)計(jì)需求和功能特性理解的高度。但我們?nèi)匀恍枰钊胙芯可虡I(yè)智能的恢復(fù)方法,使之針對(duì)具體問(wèn)題行之有效,更快更準(zhǔn),比如說(shuō):系統(tǒng)軟件網(wǎng)頁(yè)化、云端服務(wù)智能終端化等等。endprint
數(shù)字技術(shù)與應(yīng)用2017年5期