• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      軟件工廠模式的軟件產(chǎn)品快速構(gòu)建技術(shù)

      2021-09-18 07:49:03馬晨溪李彥平
      關(guān)鍵詞:逆向工程

      馬晨溪 李彥平

      摘要:在研究了現(xiàn)代信息系統(tǒng)軟件架構(gòu)模式的基礎(chǔ)上,提出了軟件工廠模式的項(xiàng)目軟件快速開發(fā)和構(gòu)建技術(shù)。設(shè)計(jì)了一個(gè)自動(dòng)模型開發(fā)和代碼自動(dòng)生成方法,通過CodeSmith代碼模板可以將數(shù)據(jù)模型轉(zhuǎn)化成為平臺(tái)無關(guān)的可執(zhí)行程序,并在此基礎(chǔ)上研究了基于逆向工程的項(xiàng)目文檔自動(dòng)生成技術(shù)。通過在實(shí)際項(xiàng)目中的驗(yàn)證,使軟件產(chǎn)品的開發(fā)時(shí)間縮短到1/10,設(shè)計(jì)文檔編寫的時(shí)間縮短到1/17,并且代碼質(zhì)量極大提高,應(yīng)用開發(fā)和維護(hù)成本大大降低。

      關(guān)鍵詞:MDA;模型驅(qū)動(dòng);軟件架構(gòu);代碼模板;逆向工程;軟件產(chǎn)品線

      中圖分類號(hào):TP311文獻(xiàn)標(biāo)志碼:A文章編號(hào):1008-1739(2021)15-61-5

      0引言

      如何提高軟件項(xiàng)目開發(fā)效率、降低研發(fā)成本、交付高質(zhì)量的、客戶滿意的軟件系統(tǒng)一直是軟件開發(fā)企業(yè)追求的終極目標(biāo)。而實(shí)現(xiàn)這一切的根基是建立在組織的核心資產(chǎn)建設(shè)和一套先進(jìn)的軟件工程方法,其中核心資產(chǎn)包括穩(wěn)定可靠的軟件架構(gòu)、正確的業(yè)務(wù)邏輯和注釋清晰的軟件構(gòu)件集合,可以不依賴于組織人力資源的變化而持續(xù)演進(jìn)和發(fā)展。而一套先進(jìn)的軟件工程方法和自動(dòng)化開發(fā)平臺(tái)是實(shí)現(xiàn)核心資產(chǎn)快速構(gòu)建的前提和保證。

      從架構(gòu)、開發(fā)方法和工具3個(gè)方面闡述了大型項(xiàng)目的開發(fā)方法,結(jié)合工具的使用,提出了一套軟件工廠模式的自動(dòng)化開發(fā)平臺(tái)和產(chǎn)品線開發(fā)方法[1],將模型驅(qū)動(dòng)開發(fā)(MDD)自動(dòng)化代碼生成、軟件架構(gòu)、設(shè)計(jì)模式、平臺(tái)+插件、基于模板的開發(fā)、基于逆向工程的文檔自動(dòng)生成等幾個(gè)方面的技術(shù)相結(jié)合,解決大型軟件系統(tǒng)開發(fā)中速度和質(zhì)量二者不可兼得的問題。

      1軟件工廠模式軟件產(chǎn)品開發(fā)

      采用軟件工廠模式的軟件開發(fā)方法的核心關(guān)鍵是基于MDA的軟件開發(fā)過程[2],采用模型驅(qū)動(dòng)開發(fā)(MDD)快速構(gòu)建系統(tǒng)[3],主要特點(diǎn)是在軟件開發(fā)生命周期的需求階段建立模型,并在模型的基礎(chǔ)上快速導(dǎo)出目標(biāo)系統(tǒng)。

      軟件工廠模式軟件產(chǎn)品開發(fā)分為業(yè)務(wù)對(duì)象模型開發(fā)、自動(dòng)化代碼生成和自動(dòng)化文檔生成3個(gè)階段,整個(gè)過程如圖1所示。

      第1步是業(yè)務(wù)對(duì)象模型開發(fā)(AMD)。該階段,首先采用面向?qū)ο蠓治龊驮O(shè)計(jì)方法,對(duì)用戶需求進(jìn)行建模,建立領(lǐng)域的概念模型[6]和業(yè)務(wù)對(duì)象模型[4],分析出系統(tǒng)的界面類、控制類和實(shí)體類,然后對(duì)實(shí)體類進(jìn)行建模抽象出系統(tǒng)的實(shí)體對(duì)象模型,并進(jìn)行數(shù)據(jù)建模,建立系統(tǒng)的數(shù)據(jù)庫物理模型。

      第2步是自動(dòng)代碼生成(ASCG)階段。根據(jù)系統(tǒng)的架構(gòu)約束要求選擇合適的架構(gòu)實(shí)現(xiàn)模板、目標(biāo)系統(tǒng)的編程語言和數(shù)據(jù)庫實(shí)體,采用CodeSmith工具編寫架構(gòu)各層(數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層和界面層)的代碼模板文件以及代碼引擎模板。然后運(yùn)行代碼引擎自動(dòng)生成架構(gòu)各層的軟件代碼和為便于集成開發(fā)環(huán)境(IDE)開發(fā)的解決方案文件(如sln等),對(duì)代碼業(yè)務(wù)邏輯進(jìn)行簡單的定制和修改,通過IDE進(jìn)行編譯自動(dòng)生成可執(zhí)行軟件。

      第3步是用自動(dòng)文檔生成(ADG)階段。生成符合組織文檔規(guī)范要求的數(shù)據(jù)庫設(shè)計(jì)、概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)文檔。通過代碼逆向分析工具抽取類的屬性、方法以及類之間的關(guān)系自動(dòng)生成符合組織文檔規(guī)范要求的數(shù)據(jù)庫設(shè)計(jì)、概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)說明等文檔[5]。

      2自動(dòng)模型開發(fā)

      AMD是一種自動(dòng)化的實(shí)體對(duì)象生成方法,能夠根據(jù)數(shù)據(jù)庫模型自動(dòng)生成代碼,根據(jù)數(shù)據(jù)庫表一對(duì)一、一對(duì)多、多對(duì)一關(guān)系生成實(shí)體類,支持多平臺(tái)語言,方便上層應(yīng)用使用[2]。

      自動(dòng)模型開發(fā)的原理是讀取數(shù)據(jù)庫元數(shù)據(jù),按照指定的經(jīng)過測試的成熟代碼模板文件、領(lǐng)域規(guī)則和軟件架構(gòu)約束,混合產(chǎn)生源代碼。典型的代碼生成器模型如圖2所示,為了能夠自動(dòng)生成程序代碼,必需的4個(gè)關(guān)鍵要素是設(shè)計(jì)模式(所產(chǎn)生代碼的模板文件)、領(lǐng)域元數(shù)據(jù)、領(lǐng)域規(guī)則和軟件架構(gòu)約束。

      3自動(dòng)代碼生成

      軟件架構(gòu)是軟件系統(tǒng)的頂層設(shè)計(jì)[3],基于最常用的分層架構(gòu)模式和軟件系統(tǒng)的使用場景,采用CodeSmith工具設(shè)計(jì)編寫了軟件架構(gòu)各層(界面層、業(yè)務(wù)處理層、數(shù)據(jù)訪問層和領(lǐng)域模型層)模板及代碼引擎模板,以支持代碼的自動(dòng)生成[6]。如表1所示。在領(lǐng)域模型層定義了主要包括業(yè)務(wù)對(duì)象和屬性相應(yīng)的getter和getter方法;在數(shù)據(jù)訪問層模板中,通過接口定義了不同的接口方法,包括數(shù)據(jù)庫CRUD操作;在業(yè)務(wù)邏輯層的模板中,定義了初始化、表單驗(yàn)證、CRUD常用業(yè)務(wù)邏輯;在界面層模板中,定義了面向最終用戶的頁面流邏輯;代碼生成引擎,定義了集成多類模板和批量執(zhí)行的功能,并能夠根據(jù)項(xiàng)目需要生成目標(biāo)平臺(tái)的工程項(xiàng)目文件,便于使用IDE打開項(xiàng)目文件并進(jìn)行編譯和調(diào)試。

      每個(gè)層次的模板都具有各自獨(dú)立的功能,通過代碼生成引擎串聯(lián)起來形成完整的系統(tǒng),如圖3所示。

      (1)數(shù)據(jù)訪問層模板

      數(shù)據(jù)訪問層主要包括用于與數(shù)據(jù)庫關(guān)聯(lián)映射的實(shí)體對(duì)象以及數(shù)據(jù)訪問層(Dao)接口層和接口實(shí)現(xiàn)(DaoImpl)3個(gè)模板文件。業(yè)務(wù)數(shù)據(jù)庫中的每張數(shù)據(jù)表都會(huì)對(duì)應(yīng)生成一個(gè)Model對(duì)象,每個(gè)Model對(duì)象定義了get/set方法,Dao定義操作數(shù)據(jù)庫的基本功能(如增刪改查),接口實(shí)現(xiàn)DaoImpl層實(shí)現(xiàn)Dao層定義接口的具體實(shí)現(xiàn),為業(yè)務(wù)層提供調(diào)用接口,適應(yīng)不同的數(shù)據(jù)庫類型,如Oracle、sqlserver、國產(chǎn)數(shù)據(jù)庫和Nosql數(shù)據(jù)庫等。

      (2)業(yè)務(wù)邏輯層模板:調(diào)用DaoImpl層接口,向界面層提供調(diào)用接口服務(wù)。

      BLL.cst:生成業(yè)務(wù)邏輯層代碼的模板文件主要的方法包括:

      CheckValid:對(duì)界面輸入進(jìn)行數(shù)據(jù)有效性、合法性檢查,包括非空、類型和長度等;

      Delete:根據(jù)主鍵從數(shù)據(jù)庫中刪除相關(guān)記錄,并返回受影響的行數(shù);

      GetAllList:從數(shù)據(jù)庫中讀取并返回所有數(shù)據(jù)對(duì)象列表;

      GetDataById:根據(jù)數(shù)據(jù)對(duì)象的主鍵從數(shù)據(jù)庫中獲取數(shù)據(jù)對(duì)象的實(shí)例;

      GetPageList:從數(shù)據(jù)庫中分頁讀取數(shù)據(jù)僅用于在數(shù)據(jù)控件中顯示;

      Insert:將數(shù)據(jù)對(duì)象新增到數(shù)據(jù)庫中,并返回受影響的行數(shù);

      IsExist:檢測是否存在該主鍵的數(shù)據(jù);

      Update:根據(jù)主鍵將業(yè)務(wù)對(duì)象數(shù)據(jù)更新到數(shù)據(jù)庫中。

      (3)用戶界面層生成模板

      支持桌面應(yīng)用和Web應(yīng)用2類,以滿足C/S和B/S兩種不同的架構(gòu)模式。根據(jù)數(shù)據(jù)庫描述文件的備注文件生成界面標(biāo)簽(label)項(xiàng),根據(jù)數(shù)據(jù)庫字段的類型生成表單元素,包括文本框、組合框、按鈕及圖片等,生成表單的提交按鈕、取消按鈕以及響應(yīng)事件,包括表單初始化、數(shù)據(jù)填充、表單驗(yàn)證及取消等。主要的模板文件示例如圖4所示。

      (4)配置文件生成模板

      系統(tǒng)運(yùn)行必須配置文件,如數(shù)據(jù)庫連接等,也在代碼引擎運(yùn)行時(shí)根據(jù)生成配置自動(dòng)修改,如數(shù)據(jù)庫類型、數(shù)據(jù)庫名稱、鏈接用戶名、密碼等。

      (5)解決方案生成模板

      根據(jù)目標(biāo)語言的類型和軟件開發(fā)的IDE環(huán)境,生成項(xiàng)目解決方案。支持VisualStudio2010以上版本、Eclipse3.5以上版本,支持exe、dll、jar等類型的組件和運(yùn)行程序,打開解決方案文件,相關(guān)生成的領(lǐng)域模型層、數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層和界面層類文件能夠自動(dòng)加載。編譯執(zhí)行就可以生成可執(zhí)行軟件。包括的模板文件有:

      WebConfig.cst:生成WebConfig的模板文件;

      csproj.cst:生成csproj.cs文件的模板文件;

      Default.asp..cst:生成defalut.asp文件的模板文件;

      sln.cst生成sln文件的模板文件;

      vs2010.cst:生成2010工程解決方案的主文件,被BuildAll.cst調(diào)用。

      (6)代碼生成引擎

      支持根據(jù)項(xiàng)目需求,批量選擇多個(gè)數(shù)據(jù)庫表,完成領(lǐng)域模型層、數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層和界面層代碼的批量生成,生成工程文件的模板文件。啟動(dòng)界面如圖5所示。

      開發(fā)人員根據(jù)需要設(shè)置作者名稱、組織名稱、系統(tǒng)中英文名稱、命名空間、代碼輸出路徑以及軟件架構(gòu)數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層、客戶端C/S軟件或Web網(wǎng)站界面,選擇待生成的多個(gè)數(shù)據(jù)庫實(shí)體,點(diǎn)擊“generate“,根據(jù)用戶的選項(xiàng)將自動(dòng)生成軟件代碼和項(xiàng)目解決方案文件。主界面如圖6所示。

      生成后的文檔的代碼結(jié)構(gòu)如圖7所示。

      (7)與傳統(tǒng)的人工代碼編寫方法的對(duì)比

      通過對(duì)一個(gè)由4個(gè)軟件組成的中等規(guī)模軟件系統(tǒng)來測算,新開發(fā)代碼行數(shù)95 387,按照平均每人每天開發(fā)代碼行數(shù)100計(jì)算,需要953/22/8≈8個(gè)人5個(gè)月的工時(shí),使用自動(dòng)代碼生成方法,軟件代碼在分鐘級(jí)生成,60%以上的業(yè)務(wù)邏輯實(shí)現(xiàn)基本生成,只需要在需要定制的部分做出修改,加上調(diào)試和測試的時(shí)間,總的研制時(shí)間不會(huì)超過1個(gè)月。軟件開發(fā)的時(shí)間降低到1/10。這樣的結(jié)果是建立在有可靠穩(wěn)定的代碼模板和成熟的關(guān)鍵算法組件的基礎(chǔ)之上。通過軟件代碼模板的編寫達(dá)到“一次編寫,永久使用”的目的,極大地降低了人力成本,提高了軟件測試用例的通過率。

      4自動(dòng)文檔生成

      在軟件項(xiàng)目研制中,除了軟件代碼之外,工作量最大、最耗時(shí)的是數(shù)據(jù)庫設(shè)計(jì)說明文檔和軟件設(shè)計(jì)說明文檔的編寫工作,對(duì)于大型軟件項(xiàng)目常常需要耗費(fèi)1~2個(gè)月的編寫時(shí)間。針對(duì)這2類文檔,研制了DBDcoumentCreater數(shù)據(jù)庫設(shè)計(jì)文檔生成工具和DocBuilder兩類工具。

      (1)數(shù)據(jù)庫設(shè)計(jì)說明文檔自動(dòng)生成

      為了提高數(shù)據(jù)庫設(shè)計(jì)文檔的編寫效率,研制了DBDcoumentCreater數(shù)據(jù)庫設(shè)計(jì)文檔生成工具,能夠讀取領(lǐng)域元數(shù)據(jù),通過讀取數(shù)據(jù)庫表包含數(shù)據(jù)庫字段名稱、類型、長度、非空項(xiàng)說明和主鍵、外鍵等內(nèi)容生成數(shù)據(jù)庫描述文檔。數(shù)據(jù)庫說明文檔自動(dòng)生成過程如圖8所示。

      (2)軟件設(shè)計(jì)說明文檔自動(dòng)生成

      軟件設(shè)計(jì)文檔包括概要設(shè)計(jì)部分和詳細(xì)設(shè)計(jì)兩部分,主要使用了DocBuilder和Doxgen兩個(gè)工具,通過逆向分析對(duì)軟件代碼的類和類間關(guān)系進(jìn)行抽取,然后按照文檔模板的特定格式要求,對(duì)章節(jié)內(nèi)容進(jìn)行填充。設(shè)計(jì)說明文檔自動(dòng)生成過程如圖9所示。

      ①軟件概要設(shè)計(jì)文檔(軟件架構(gòu)設(shè)計(jì)):主要包括邏輯視圖、部署視圖、開發(fā)視圖、進(jìn)程視圖和用例視圖。在邏輯視圖中類包的組成通常由表格組成,詳細(xì)描述類及其說明文件。文檔模板根據(jù)逆向生成的類及其注釋自動(dòng)生成表格及其說明文件。

      ②軟件詳細(xì)設(shè)計(jì)文檔:主要是對(duì)類包內(nèi)每個(gè)類的屬性、操作、操作內(nèi)部算法的描述以及類關(guān)系的描述,通過代碼逆向工程方法獲取上述內(nèi)容,根據(jù)文檔模板,按照模板格式依次批量生成類的詳細(xì)設(shè)計(jì)內(nèi)容,尤其對(duì)于大型項(xiàng)目來講,將會(huì)帶來效率的極大提升。

      (3)與傳統(tǒng)文檔編寫方法的對(duì)比

      通過對(duì)一個(gè)由4個(gè)軟件組成的中等規(guī)模軟件系統(tǒng)來測算,數(shù)據(jù)庫設(shè)計(jì)文檔和軟件設(shè)計(jì)文檔的總頁數(shù)在998頁,大量時(shí)間耗費(fèi)在類詳細(xì)設(shè)計(jì)部分,按照一周可以編寫160頁文檔計(jì)算,耗費(fèi)的人時(shí)在170人時(shí),在采用自動(dòng)化文檔生成方法之后,假設(shè)一篇設(shè)計(jì)文檔需要2 h進(jìn)行文檔格式標(biāo)準(zhǔn)化,4個(gè)軟件的總設(shè)計(jì)時(shí)長不超過10 h。將文檔編寫的時(shí)間降低到1/17,而且設(shè)計(jì)文檔和軟件代碼高度一致,避免了人為編寫造成的設(shè)計(jì)文檔與代碼不一致的情況。

      5結(jié)束語

      詳細(xì)介紹了基于模板的MDD、ASDG、ADG軟件產(chǎn)品開發(fā)的具體實(shí)現(xiàn)過程,通過本方法,可以實(shí)現(xiàn)模板一次編寫,多樣化產(chǎn)品生成的軟件工廠軟件產(chǎn)品開發(fā)模式,使軟件系統(tǒng)的構(gòu)建可以像工業(yè)系統(tǒng)生產(chǎn)流水線一樣,通過用戶簡單的定制,選擇不同類型的模板、數(shù)據(jù)模型,平臺(tái)就能夠按照用戶的需求自動(dòng)化生產(chǎn),批量生成所見及所得的軟件產(chǎn)品。產(chǎn)生的代碼非常健壯,是高品質(zhì)、高一致性、高效率的統(tǒng)一體;產(chǎn)生的文檔與設(shè)計(jì)一致,是風(fēng)格一致、邏輯清晰、可讀性強(qiáng)、整潔規(guī)范的統(tǒng)一體;產(chǎn)生的測試用例可重用、可復(fù)用、可執(zhí)行,是一致性、覆蓋率高、可執(zhí)行性高、執(zhí)行準(zhǔn)確、持續(xù)更新、復(fù)用性高的統(tǒng)一體。

      參考文獻(xiàn)

      [1]普爾.軟件產(chǎn)品線工程[M].張佳驥,李彥平,譯.北京:國防工業(yè)出版社,2010.

      [2]袁曉桂,吳掬鷗.基于MDA的軟件開發(fā)方法的研究.現(xiàn)代電子技術(shù),2017,40(14):52-54.

      [3]岳輝,王全宇.基于MDD的住宅報(bào)警系統(tǒng)開發(fā)模型分析[J].蘭州交通大學(xué)學(xué)報(bào),2013,32(4):31-34.

      [4]埃文斯.領(lǐng)域驅(qū)動(dòng)設(shè)計(jì):軟件核心復(fù)雜性應(yīng)對(duì)之道[M].趙俐,盛海艷,劉霞,譯.北京:人民郵電出版社.

      [5]葉彭飛,彭鑫,趙文耘.通過靜態(tài)分析逆向恢復(fù)面向?qū)ο蟪绦蛑械挠脹r[J].計(jì)算機(jī)研究與發(fā)展,2010,47(12):2192-2200.

      [6]朱曉輝,王杰華,石振國,等. NET下基于PowerDesigner和CodeSmith的軟件自動(dòng)化開發(fā)技術(shù)[J].計(jì)算機(jī)科學(xué),2010,37(7):156-159.

      猜你喜歡
      逆向工程
      基于Geomagic的汽車內(nèi)門把手逆向設(shè)計(jì)
      基于臉型特征數(shù)據(jù)的防霾口罩造型設(shè)計(jì)研究
      中國市場(2017年7期)2017-04-01 13:09:06
      應(yīng)用型大學(xué)本科數(shù)字化設(shè)計(jì)制造綜合實(shí)訓(xùn)教學(xué)改革與探索
      基于小轎車車門拉手的逆向建模設(shè)計(jì)
      科技視界(2016年27期)2017-03-14 22:45:40
      一種改進(jìn)的點(diǎn)云數(shù)據(jù)組合精簡算法
      基于Hibernate逆向工程對(duì)企業(yè)組織建模研究
      逆向工程技術(shù)在高職模具專業(yè)創(chuàng)新能力培養(yǎng)中的應(yīng)用
      科技視界(2016年22期)2016-10-18 15:22:03
      分析汽車行業(yè)中逆向工程的汽車儀表板開發(fā)
      Q6兒童假人頸部有限元模型的建立與驗(yàn)證
      人體骨骼三維模型重建技術(shù)的研究
      科技視界(2015年29期)2015-10-19 11:13:59
      冕宁县| 满城县| 武功县| 吉木乃县| 宜兰县| 习水县| 深州市| 建湖县| 青川县| 富裕县| 肃宁县| 西吉县| 尉犁县| 新乡县| 攀枝花市| 新平| 黄冈市| 水富县| 沭阳县| 沁阳市| 巫山县| 白朗县| 木里| 香港 | 城步| 新巴尔虎左旗| 柳林县| 岫岩| 廊坊市| 明光市| 聂荣县| 沂南县| 南华县| 化州市| 永胜县| 从化市| 五莲县| 唐海县| 册亨县| 连江县| 惠州市|