陳海郎
摘要:隨著軟件開發技術的不斷發展,人們在管理信息系統的開發過程中總結出越來越多重復性的工作。這些重復性的工作增加了開發人員重復性編碼的工作量,延長了市場需求響應時間,提高了開發成本等,同時在團隊開發過程中,由于隊員之間的代碼編寫能力參差不齊,編碼風格不統一,代碼的質量和可維護性得不到保證。從管理系統系統的應用角度分析,設計并實現了一種基于模板的管理信息系統代碼生成方法。該方法通過提煉公共模塊用作模板定制,構建一種基于Rete算法的代碼自動生成引擎,能夠快速生成統一編碼風格的代碼,提高系統開發效益和質量。該方法在“進銷存”管理信息系統開發中得到了應用,并取得了良好的代碼自動生成效果。
Abstract: With the continuous development of software development technology, people have summarized more and more repetitive work in the development process of management information systems. These repetitive tasks increase the workload of developers' repetitive coding, prolong the response time of market demand, increase the development cost, etc., and in the process of team development, because the code writing ability between the players is uneven, the coding style is not uniform, and the quality and maintainability of the code cannot be guaranteed. From the perspective of the application system of management system, a template-based management information system code generation method is designed and implemented. The method uses the refinement common module as template customization to build an automatic code generation engine based on Rete algorithm, which can quickly generate code of unified coding style and improve system development efficiency and quality. This method has been applied in the development of the "invoicing" management information system, and has achieved good automatic code generation.
關鍵詞:模板;Rete算法;代碼自動生成;管理信息系統
Key words: template;Rete algorithm;automatic code generation;management information system
中圖分類號:0TP311.5 文獻標識碼:A 文章編號:1006-4311(2018)32-0213-04
0 引言
隨著信息時代的不斷深入,管理信息系統的種類越來越多,需求量越來越大。因此,能否在確保軟件質量的前提下,提高軟件開發效率,以快速響應市場需求是軟件企業重點考慮的問題。雖然現有的軟件開發大部分都有建模過程,如瀑布模型、噴泉模型、螺旋模型及漸增式模型等,但此時的系統建模主要針對開發初期對系統的分析和設計,后期的實現仍然需要開發人員手動編寫代碼,這樣并沒有在真正意義上提高軟件開發的效率。另外,許多開發人員在軟件開發的初期使用UML或其他建模語言來描述軟件開發項目的流程,開發前期就會產生大量的文檔和設計模型,然而這些文檔和模型僅僅存在于設計階段,當進入實現階段時,既有文檔和設計模型的價值得不到應有的體現。隨著編碼階段的繼續進行,系統不斷地被修改而我們修改的僅僅只是代碼,代碼與文檔及設計模型之間的關聯將變的脆弱,也就是說設計與實現脫節,不利于系統的維護和開發效率的提高。
針對傳統的軟件開發周期長、軟件設計與實現脫節和軟件代碼重用性差等問題,通過對管理信息系統的應用分析研究發現:盡管當前管理信息系統種類繁多,但是仍然是以數據的增加、修改、刪除和查找的功能實現為主,不同的管理信息之間主要以業務流程和界面風格的不同進行區分。本文基本模板的管理信息系統代碼自動生成研究,對提高軟件抽象層次將管理信息系統開發從日益復雜的技術和層出不窮的框架中解放出來,加快信息管理系統快速成型,進而解決代碼重用性問題,提高軟件開發效率和質量等具有重要的意義。
1 代碼自動生成設計
1.1 代碼自動生成基本原理
管理信息系統的操作是對數據的操作,被操作數據主要數據庫表或實體對象。其開發過程是操作實現的程序頁面新建、疊加的過程,并且程序頁面的數量是有限集合。根據有限狀態自動機理論,管理信息系統代碼生成過程可用一個M=(P,D,O,δ,p0)五元組表示,其中:
P表示頁面的有限集合,
D是數據的有限集合,
O是操作的有限集合,
p0∈P是初始狀態,即未開始生成目標源代碼狀態。
依據上述對管理信息系統代碼自動生成過程的抽象定義,可設計一種代碼自動生成工具按照下面的方式:假設處于未生代碼初始狀態,當代碼引擎接受操作輸入指令時,代碼引擎結合頁面生成規則(即代碼模板)完成移動函數的變換,即可完成目標源代碼的生成,并進入下一個狀態,即δ(pn-1,d,o)=pn(n∈N*)。
1.2 自動生成代碼的模型設計
根據代碼生成基本原理,本文通過構建數據模型作代碼生成過程的輸入,為實現代碼自動生成提供必要的參數信息。同時為了更好地實現軟件復用,將管理信息系統代碼結構相似或公共部分進行分析研究,以完成代碼模板的定制,并將代碼模板作為代碼生成的輸入。模板引擎接收到模板文件和數據模型輸入后,通過對數據模型和模板的解析形式,以實現目標源代碼的輸出。代碼生成的模型如圖1所示。
2 代碼自動生成實現
2.1 代碼模板定制
模板是最終生成的代碼原型[1]。根據代碼的組成形式,可分為靜態對象和動態對象。靜態對象是指代碼生成過程中無需改變直接輸出的部分。該對象通常是經過了嚴格測試的目標源代碼。動態對象是需要引入特殊的動態標簽,通過變量或函數的方式進行定制。在模板引擎驅動下進行模板解析時,該對象需要借助數據模型來完成動態對象到目標源代碼的動態轉化。
代碼模板定制通常需要結合信息管理系統所采用的開發架構或語言規范進行具體定制,以確保最終生成的目標代碼具有高可用性和可維護性。本文選用基于J2EE的MVC管理信息系統開發規范,對管理信息系統的代碼模板定制進行具體介紹。MVC框架可分為表示層、業務邏輯層、數據持久層和領域模塊層。其具有可復用性較好、維護方便和搭建結構清晰等特點,有利于分開管理數據和模板。根據MVC框架各個分層特點,本研究需要設計四種類型模板用于生成J2EE各層的目標源代碼。代碼自動生成的模板定義如表1所示。
2.2 基于XML的數據模型定制
數據模型主要是對管理信息系統的所需的實體對象數據和功能操作信息進行定義的記錄文件,需要用于更替模板文件中的動態部分,從而生成目標源代碼。本文采用XML文件的格式對的數據模型進行定制。之所以選用XML文件的格式進行數據模型定制,是由XML文件的特點所決定的。XML是一種簡單、可擴展性強、與平臺無關并被廣泛使用的標記語言,既方便對關系實體對象數據和功能操作信息記錄與維護,也有利于模板引擎對該類型文件進行解析。
基于XML的數據模型不僅能夠為生成目標源代碼提供較為完備的必需信息,而且還是一份完整的維護文檔。當用戶需求發生改變時,只需要對數據模型文件做出相應修改或調整后,重新生成目標源代碼即可,無需在目標源代碼的基礎上進行修改。定義的格式如下所示。
X6:生成類型為“虛擬路徑訪問”的數據操作方法目標源代碼,對應節點類型為V。
如圖2所示,在進行目標源代碼生成規則推理時,事實數據(Facts)為待推理的模板文件數據。其采用三元組(對象、屬性、值)的方式進行描述。例如生成用戶實體對象的數據修改方法可描述為(Users實體對象,Method,update)。基于Rete算法的模板引擎實現偽代碼描述如下:
算法輸入:管理信息系統實體數據三元組列表 Facts= {Fa1,Fa2,…,Fan};
算法輸出:代碼生成模型匹配到的規則 Ru,R={?覫,Ru1,Ru2,…,Run};
Rete Match(Facts)
1. Result to ?覫 //匹配結果初始化
2. Get Next Rule(Nets)to rule //從Nets中逐個取出規則模式
3. WHILE rule IS NOT NULL //判斷當前檢測模式是否存在所對應的AlphaNode中
4. rule is TRUE //當前檢測模式存在標識
5. FOR pattern in rule.patterns //構建Beta網絡中的JoinNode
6. Pattern is FALSE //Beta網絡節點處理完畢狀態標識
7. FOR fact in rule.Facts //處理待推理的實體數據
8. match(fact,pattern)to Pattern
9. IF Pattern is TRUE BREAK;//跳出當前FOR循環,重復步驟5
10. END FOR
11. IF Pattern is FALSE
12. Rule is FALSE //當前檢測模式處理完畢標識
13. BREAK;
14. END IF
15. END FOR
16. Get Next Rule(Nets)to rule
17. RETURN rule; //返回匹配到的規則
3 代碼自動生成的應用與效果分析
本文以完成生產部署的“進銷存”管理信息系統為實例,分別對使用本代碼自動生成工具生成代碼和最終發布代碼進行統計分析,以完成對該工具產生的作用與效果說明。使用代碼生成工具生成的代碼是指為有修改過的原始生成代碼,而最終發布代碼是指系統正式投入使用時所有的代碼。為了獲得代碼相關統計數據,本文使用SourceCounter源代碼統計工具對本代碼自動生成工具所生成的代碼和最終發布的代碼進行數據統計。在使用SourceCounter統計前,設定編碼生產率為每個月4000行/每人,一個月工作天數為20天/每人,每個月的成本為10000元/每人。根據該統計工具統計后得到的結果并對結果進行相應分析得出了如表2所示。
從表2可得知:該管理信息系統開發的代碼生成比例可達84.65%。假設以5個人組成的團隊對該項目進行編碼,在不使用該代碼自動生成工具的情況下大概需要6個月才能完成,使用該代碼自動生成工具后只需1個半月完成編碼工作。
4 結語
本文運用有限狀態自動機理論對代碼生成技術的基本原理進行了論述,并在此基礎上設計了管理信息系統代碼生成模型。該模型主要包括模板文件和代碼生成引擎。然后提出并實現了一種基于XML的模板定制方法,構建一種了基于Rete算法的代碼自動生成引擎。最終應用實例表明該代碼生成技術能夠完成大部分的代碼編寫工作,進而縮短系統的開發周期,降低開發難度。同時應用實例表明,該項代碼生成技術設計的模板表現能力有限,對于復雜性的需求不能很好地完成高層次的抽象化公共模塊提煉,代碼自動生成比例達不到100%,后繼還可以通過不斷豐富模板自定義方式,使該項目技術能夠完成更多的代碼編寫工作。
參考文獻:
[1]吳步丹.基于模板的工作流應用系統代碼自動生成[J].華中科技大學學報,2013(12):18.21.
[2]Forgy C L. Rete: a fast algorithm for the many pattern/mane object pattern match problem. Artificial Interlligence,1982,19(1):17-37.
[3]孫新,等.一種基于共享度模型的改進Rete算法[J].自動化學報,2017(43):1571-1579.