劉劍英 宮嵐
摘 要:針對(duì)Java系統(tǒng)再工程的需求,利用Microsoft Office軟件中強(qiáng)大的VBA工具,設(shè)計(jì)開(kāi)發(fā)一款適合部門內(nèi)部使用,主要用戶為SE及PG為主的開(kāi)發(fā)人員的Java源代碼分析軟件。系統(tǒng)以Java程序級(jí)代碼分析為主,根據(jù)程序的各種引用調(diào)用關(guān)系,生成樹(shù)狀結(jié)構(gòu)圖,展示代碼結(jié)構(gòu),建立結(jié)構(gòu)圖與代碼的鏈接,實(shí)現(xiàn)代碼的快速定位查找,方便開(kāi)發(fā)人員查看代碼、理解程序結(jié)構(gòu),降低了對(duì)既存Java應(yīng)用系統(tǒng)維護(hù)的風(fēng)險(xiǎn)和成本。
關(guān)鍵詞:VBA;Java;源代碼分析;再工程;結(jié)構(gòu)圖
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
Abstract:In order to solve Java system reengineering needs,using the powerful VBA of the microsoft office software,design and develop of Java language source code analysis system that suitable for internal use and major users for SE and PG based developer.System to Java program level code analysis,call relationships based on various references to the program,spanning tree structure diagram,display code structure,establish a link to the structure diagram and code,to achieve the rapid positioning of the code to find,facilitate developers to view the code,understanding program structure,reduce the risk and cost of existing Java application system maintenance.
Keywords:VBA;Java;source code analysis;reengineering;structure diagram
1 引言(Introduction)
Java是一種可以撰寫跨平臺(tái)應(yīng)用程序、面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,目前是嵌入式開(kāi)發(fā)、互聯(lián)網(wǎng)開(kāi)發(fā)、云計(jì)算和移動(dòng)互聯(lián)網(wǎng)開(kāi)發(fā)的主流編程語(yǔ)言。經(jīng)過(guò)20多年的發(fā)展,目前擁有全球最大的開(kāi)發(fā)者專業(yè)社群[1]。
目前Java相關(guān)的工作有很多是對(duì)現(xiàn)有系統(tǒng)進(jìn)行的再工程,如升級(jí)、維護(hù)、改造、云平臺(tái)轉(zhuǎn)換等。市場(chǎng)上的Java源代碼分析軟件多以系統(tǒng)級(jí)的大型軟件為主,功能強(qiáng)大但費(fèi)用高昂,適合中小企業(yè)及開(kāi)發(fā)人員個(gè)人使用的Java源代碼分析軟件則很難找到。本系統(tǒng)是專門面向中小型企業(yè)設(shè)計(jì)、開(kāi)發(fā)的Java語(yǔ)言源代碼分析軟件,主要用戶是以SE及PG為主的開(kāi)發(fā)人員,幫助系統(tǒng)開(kāi)發(fā)和維護(hù)人員快速準(zhǔn)確的理解既存系統(tǒng)的源程序,讓軟件開(kāi)發(fā)人員把主要精力放在解決業(yè)務(wù)問(wèn)題本身,而不是浪費(fèi)在理解前人寫的代碼上。
2 關(guān)鍵技術(shù)(Key technology)
2.1 開(kāi)發(fā)平臺(tái)
系統(tǒng)以Microsoft Office作為開(kāi)發(fā)平臺(tái),利用Microsoft Office軟件中強(qiáng)大的VBA工具進(jìn)行設(shè)計(jì)開(kāi)發(fā)。應(yīng)用時(shí)只需要系統(tǒng)安裝Microsoft Office即可,無(wú)需單獨(dú)的開(kāi)發(fā)和運(yùn)行環(huán)境。
2.2 關(guān)鍵技術(shù)
VBA(Visual Basic for Applications)是Visual Basic的一種宏語(yǔ)言,是Microsoft開(kāi)發(fā)出來(lái)在其桌面應(yīng)用程序中執(zhí)行通用自動(dòng)化(OLE)任務(wù)的編程語(yǔ)言,主要用其來(lái)擴(kuò)展Windows的應(yīng)用程序功能。VBA作為VB的一個(gè)子集,可以說(shuō)是一種應(yīng)用程式視覺(jué)化的Basic腳本,其語(yǔ)言結(jié)構(gòu)與VB相似,集成開(kāi)發(fā)環(huán)境IDE幾乎相同[2]。
3 系統(tǒng)主要功能(Main function of the system)
本系統(tǒng)基于軟件靜態(tài)分析,以Java程序級(jí)代碼分析為主,不對(duì)整個(gè)系統(tǒng)進(jìn)行分析,不實(shí)際運(yùn)行代碼,不查找代碼中存在的結(jié)構(gòu)性錯(cuò)誤、安全漏洞等問(wèn)題,也不進(jìn)行詞法分析、語(yǔ)法分析、語(yǔ)義分析、控制流及數(shù)據(jù)流分析、內(nèi)存泄漏分析等復(fù)雜功能的開(kāi)發(fā)。系統(tǒng)主要根據(jù)程序的各種引用調(diào)用關(guān)系,生成樹(shù)狀結(jié)構(gòu)圖,展示代碼結(jié)構(gòu),建立鏈接,實(shí)現(xiàn)代碼的快速定位查找,方便開(kāi)發(fā)人員查看代碼、理解程序結(jié)構(gòu)。
根據(jù)業(yè)務(wù)功能分析,系統(tǒng)功能主要分為六個(gè)模塊:系統(tǒng)啟動(dòng)及關(guān)閉模塊、源代碼讀入及統(tǒng)計(jì)模塊、源代碼寫入模塊、語(yǔ)法顏色高亮顯示模塊、樹(shù)狀結(jié)構(gòu)模塊、創(chuàng)建鏈接模塊,系統(tǒng)功能模塊圖如圖1所示。
(1)配置管理模塊
系統(tǒng)啟動(dòng)時(shí)讀入配置文件,根據(jù)配置文件的內(nèi)容決定Excel文檔中Java代碼的語(yǔ)法高亮顯示顏色。用戶可以通過(guò)設(shè)定窗口自定義配置內(nèi)容,在系統(tǒng)關(guān)閉的時(shí)候系統(tǒng)會(huì)將用戶的自定義內(nèi)容保存到配置文件中。
(2)源代碼讀入模塊
實(shí)現(xiàn)對(duì)Java源文件內(nèi)容的讀取,并在讀取的過(guò)程中統(tǒng)計(jì)代碼的總行數(shù)、空白行數(shù)、注釋行數(shù)、有效行數(shù)及程序中使用的package、import等信息,以及判定源代碼的方法、變量、標(biāo)簽等的位置并設(shè)置標(biāo)志位。
(3)源代碼寫入模塊
主要實(shí)現(xiàn)新建Excel文檔,插入Sheet頁(yè),將源代碼寫入Excel文檔,以及文檔的保存等功能。
(4)語(yǔ)法顏色高亮顯示模塊
語(yǔ)法顏色高亮顯示模塊主要實(shí)現(xiàn)Java關(guān)鍵字、Java系統(tǒng)類高亮表示、注釋行高亮表示、自定義方法高亮表示、標(biāo)簽高亮表示、括號(hào)成對(duì)高亮表示等功能。
(5)樹(shù)狀結(jié)構(gòu)模塊
樹(shù)狀結(jié)構(gòu)模塊根據(jù)源代碼的各種引用調(diào)用關(guān)系,生成樹(shù)狀視圖,展示代碼的結(jié)構(gòu)。
(6)創(chuàng)建鏈接模塊
創(chuàng)建樹(shù)狀視圖各節(jié)點(diǎn)與源代碼的鏈接,實(shí)現(xiàn)代碼的快速定位查找,方便開(kāi)發(fā)者查看代碼。系統(tǒng)還根據(jù)代碼創(chuàng)建標(biāo)簽,建立代碼中自定義方法的定義位置和調(diào)用位置的鏈接,方便查找代碼。
4 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(Design and implementation)
主程序設(shè)計(jì)。首先系統(tǒng)從計(jì)算機(jī)中讀取Java源文件,讀取模式為逐行讀入,每讀入一行代碼即分析該代碼行是否為空白行、注釋行等信息,并判斷代碼行中是否包含用戶自定義的方法等信息,并添加標(biāo)志位,系統(tǒng)將代碼行及標(biāo)志位記入臨時(shí)數(shù)組中,直到Java源文件讀取結(jié)束。
讀取源文件結(jié)束后,系統(tǒng)根據(jù)臨時(shí)數(shù)組中的數(shù)據(jù)將代碼逐行寫入Excel文檔中,然后系統(tǒng)根據(jù)標(biāo)志位等信息生成樹(shù)狀結(jié)構(gòu)圖,并建立樹(shù)狀視圖各節(jié)點(diǎn)與源代碼的鏈接,最后系統(tǒng)逐行逐詞判斷是否Java關(guān)鍵字、Java系統(tǒng)類、括號(hào)等信 息并設(shè)置語(yǔ)法顏色高亮顯示等信息。主程序流程如圖2所示。
以下為系統(tǒng)部分關(guān)鍵代碼。
(1)系統(tǒng)啟動(dòng)后讀入配置文件,并根據(jù)配置文件加載系統(tǒng)所需的環(huán)境變量。
5 結(jié)論(Conclusion)
本Java語(yǔ)言源代碼分析系統(tǒng)短小精干、實(shí)用性強(qiáng),是一款適合部門內(nèi)部或個(gè)人使用的小型工具軟件,而不是一個(gè)巨大的復(fù)雜的系統(tǒng)。軟件通過(guò)對(duì)Java語(yǔ)言既存系統(tǒng)程序代碼的分析,幫助系統(tǒng)開(kāi)發(fā)工程師和系統(tǒng)維護(hù)人員快速準(zhǔn)確的理解既存系統(tǒng)的Java源程序,讓軟件工程師把主要精力放在解決軟件開(kāi)發(fā)項(xiàng)目本身的業(yè)務(wù)問(wèn)題,不必再浪費(fèi)時(shí)間反復(fù)閱讀前人所寫的代碼,大大降低了對(duì)既存Java應(yīng)用系統(tǒng)維護(hù)的風(fēng)險(xiǎn)和維護(hù)成本。
參考文獻(xiàn)(References)
[1] 錢宇虹.基于Java平臺(tái)的多語(yǔ)言混合編程[J].軟件工程師,2014(11):39-41.
[2] 布倫[美].Excel專業(yè)開(kāi)發(fā)MicrosoftExcel及VBA應(yīng)用開(kāi)發(fā)權(quán)威指南(第2版)[M].北京:電子工業(yè)出版社,2013.
[3] John Green[美],等.Excel 2007 VBA參考大全(修訂版)[M].北京:人民郵電出版社,2013.
[4] Excel Home.Excel 2010應(yīng)用大全[M].北京:人民郵電出版社,2011.
[5] Excel Home.別怕,Excel VBA其實(shí)很簡(jiǎn)單[M].北京:人民郵電出版社,2012.
[6] 沃肯巴赫[美].Excel 2010高級(jí)VBA編程寶典[M].北京:清華大學(xué)出版社,2012.