毛洪川 韓潔 胡豪 王芳
摘 要 近年來,大型應(yīng)用系統(tǒng)軟件逐漸增多,軟件的質(zhì)量和開發(fā)效率嚴(yán)重制約著系統(tǒng)軟件的發(fā)展,軟件代碼的復(fù)用再次成為軟件開發(fā)的研究熱點,軟件構(gòu)件的建立為軟件的重用提供了基本的技術(shù)支持。軟件的構(gòu)件庫研究,被軟件行業(yè)的執(zhí)行者認(rèn)為是提高軟件開發(fā)的生產(chǎn)效率、解決軟件危機和提高軟件產(chǎn)品質(zhì)量的必要途徑之一。通過軟件構(gòu)件的重用,可以提高軟件開發(fā)過程的質(zhì)量和工作效率。
關(guān)鍵詞 軟件重用;軟件構(gòu)件;軟件構(gòu)件技術(shù)
中圖分類號 TP3 文獻標(biāo)識碼 A 文章編號 1674-6708(2018)212-0094-03
1 研究背景
構(gòu)件庫技術(shù)是通過組裝一系列可復(fù)用的獨立軟件構(gòu)件來組建軟件系統(tǒng)的一種軟件技術(shù)。利用這種構(gòu)件組裝技術(shù),軟件開發(fā)人員可以有效地使用有效的獨立構(gòu)件來復(fù)用軟件,減少重復(fù)開發(fā),縮短軟件開發(fā)時間,降低軟件開發(fā)成本。
構(gòu)件庫技術(shù)封裝類的組合,表示可以執(zhí)行一個或者多個功能點的特定類集合,還可以為不同的用戶提供不同的接口。構(gòu)件庫的建立隱藏了構(gòu)件的具體代碼實現(xiàn)并僅通過對外接口來進行軟件的復(fù)用。用分層的表示方法來說,構(gòu)件庫的建立可以將軟件系統(tǒng)底層中的多個邏輯處理單元組合成更高一層次的軟件構(gòu)件,甚至可直接將這些可復(fù)用的軟件單元封裝成一個完成的軟件系統(tǒng),使軟件構(gòu)件的復(fù)用從最底層的代碼層和對象層到軟件體系架構(gòu)層和系統(tǒng)層都可以實現(xiàn),從而使軟件像硬件一樣,通過各種構(gòu)件的組合可以快速的開發(fā)。
2 基于構(gòu)件開發(fā)優(yōu)點
軟件的構(gòu)件開發(fā)與軟件系統(tǒng)的開發(fā)一樣,在開發(fā)過程中可能包含有一定的問題和缺陷,但是當(dāng)這個軟件構(gòu)件被其他軟件復(fù)用時,那么復(fù)用的軟件構(gòu)件中所包含的問題和Bug已經(jīng)趨于穩(wěn)定,可能出現(xiàn)新的問題和Bug也會很少。對新開發(fā)的軟件系統(tǒng)而言,復(fù)用穩(wěn)定的軟件構(gòu)件相對于完全重新編碼而言,軟件的可靠性更高。從用戶的角度看,軟件構(gòu)件可以被很好的集成在一起,擁有相同或相似的功能和用戶界面?;跇?gòu)件開發(fā)軟件的優(yōu)點。
1)縮短上市周期。一個新開發(fā)的軟件系統(tǒng)在軟件的研制初期,可以根據(jù)用戶提出的需求在軟件的構(gòu)件庫中查找可復(fù)用的軟件構(gòu)件,再以選定后軟件構(gòu)件為基礎(chǔ)開發(fā)應(yīng)用軟件時,只需要編寫除復(fù)用軟件構(gòu)件外的其他軟件功能代碼即可。復(fù)用的代碼越多,需要重新編寫的代碼就越少,軟件系統(tǒng)所需要的開發(fā)周期就會相應(yīng)的縮短,從而采用軟件構(gòu)件可以有效地縮短軟件產(chǎn)品的上市周期。
2)節(jié)省維護成本。在軟件研制的生存周期內(nèi),軟件的后期維護在整個軟件的生存周期中是時間最長的,同時相應(yīng)的開發(fā)成本也是最高的。對于大型軟件應(yīng)用系統(tǒng)而言,主要的成本消耗就是找后期的軟件產(chǎn)品維護上,軟件重新開發(fā)需求縮減可以很大程度降低軟件開發(fā)的總成本。當(dāng)維護一個由軟件構(gòu)件所集成出來不同軟件產(chǎn)品時,只需要維護這個相對穩(wěn)定軟件構(gòu)件,以及每個軟件系統(tǒng)中其他需求部分即可。在維護軟件系統(tǒng)是所有的變化只會出現(xiàn)在一個構(gòu)件中產(chǎn)生,就可以保持軟件產(chǎn)品一致性。與同時維護幾個完全不同的軟件應(yīng)用相比較,采用軟件構(gòu)件方式可以大大節(jié)省軟件維護成本。
3)節(jié)省測試成本。當(dāng)一個軟件構(gòu)建被復(fù)用時,與該本構(gòu)件所有相關(guān)的測試用例和結(jié)果也可被復(fù)用。對于軟件而言,必須測試的對象是除復(fù)用軟件構(gòu)件以外其他新模塊的測試,還要對新模塊和復(fù)用的軟件構(gòu)件之間的集成代碼的測試和與軟件構(gòu)件集成后的系統(tǒng)測試。因此,相對于完全新開發(fā)的代碼測試與調(diào)試的數(shù)量大大縮減了,通過軟件構(gòu)件的復(fù)用可以大大節(jié)省測試的成本。
4)使軟件開發(fā)標(biāo)準(zhǔn)化。遵循軟件開發(fā)標(biāo)準(zhǔn)而精心設(shè)計出來的軟件構(gòu)件,是軟件開發(fā)人員以最好實踐經(jīng)驗為基礎(chǔ)設(shè)計出來接近完美的構(gòu)件。當(dāng)軟件開發(fā)人員以構(gòu)件為基礎(chǔ)進行軟件開發(fā)時,復(fù)用的軟件構(gòu)件將新開發(fā)的軟件代碼的編碼風(fēng)格產(chǎn)生一定約束。這就導(dǎo)致構(gòu)件必須要進行標(biāo)準(zhǔn)化的開發(fā)。
3 軟件構(gòu)件技術(shù)
軟件構(gòu)件是可以在軟件應(yīng)用系統(tǒng)中清楚地識別出來的可復(fù)用的構(gòu)件。而可以復(fù)用的軟件構(gòu)件是指相對于軟件應(yīng)用的其他需求而言具有相對獨立特性且有可重復(fù)利用價值的構(gòu)件。
一般可復(fù)用的軟件構(gòu)件應(yīng)具有以下屬性:
1)通用性:必須提供可以被其他軟件應(yīng)用可以通用的功能。
2)可用性:對構(gòu)件需求的描述必須使使用者易于理解和使用。
3)質(zhì)量:構(gòu)件及其適應(yīng)性的改進后必須經(jīng)過驗證。
4)適應(yīng)性:通過適應(yīng)性的改進,可以在不同的環(huán)境中使用復(fù)用的構(gòu)件。
5)可移植性:構(gòu)件應(yīng)能夠在不同的硬件操作平臺和軟件環(huán)境中工作。
隨著對軟件構(gòu)件技術(shù)認(rèn)識的深入,軟件構(gòu)件的概念已經(jīng)不僅僅局限于軟件的源代碼,而是從技術(shù)要求開始,擴展到軟件的需求和需求的規(guī)則約束、系統(tǒng)需求和整體的軟件架構(gòu)、文檔、不同階段的測試計劃、測試說明、測試記錄和測試報告等有用信息的軟件開發(fā)活動,這些內(nèi)容都可以被稱為可復(fù)用軟件構(gòu)件。
近年來構(gòu)件技術(shù)以成為軟件復(fù)用的核心技術(shù),并逐漸受到軟件開發(fā)人員重視的一個重要研究分支。其主要研究內(nèi)容包括:
1)如何獲取構(gòu)件:在軟件的研制過程中根據(jù)軟件的需求有目的地研制軟件可復(fù)用的通用構(gòu)件和如何從現(xiàn)有軟件系統(tǒng)的需求中提取可復(fù)用的通用軟件構(gòu)件。
2)構(gòu)件模型建立:研究目前已獲取的軟件構(gòu)件的特點和其他潛在軟件共用構(gòu)件之間的公共依賴關(guān)系。
3)構(gòu)件描述:基于軟件的構(gòu)件特點,要對構(gòu)件的特征進行準(zhǔn)確的描述和理解。
4)構(gòu)件的分類:研究所有類型構(gòu)件分類策略、集成模式和檢索策略,建立完整構(gòu)件庫系統(tǒng),支持構(gòu)件的有效管理。
5)構(gòu)件集成:研究了基于構(gòu)件模型的構(gòu)件集成機制,包括基于構(gòu)件對象互操作性的源碼級別集成和部件級集成。
4 構(gòu)件庫系統(tǒng)的設(shè)計與實現(xiàn)
采用C/S架構(gòu)和XML語言結(jié)合的構(gòu)件庫設(shè)計模型(見圖1),本模型中所有軟件構(gòu)件都有詳細(xì)的構(gòu)件描述,并使用工程化的方法對現(xiàn)有的軟件構(gòu)件進行實例化的驗證。軟件構(gòu)件的提供者只有通過軟件構(gòu)件系統(tǒng)的實例化驗證,才可以在相應(yīng)類型的構(gòu)件庫中增加或更新構(gòu)件。構(gòu)件使用者可以通過檢索構(gòu)件庫中XML文檔來獲得構(gòu)件。
4.1 構(gòu)件的增加
軟件構(gòu)件的提供者在進入構(gòu)件庫管理系統(tǒng)界面時,首先將構(gòu)件的詳細(xì)信息、主要功能和相應(yīng)的接口說明等詳細(xì)的構(gòu)件信息輸入到系統(tǒng)內(nèi)。待構(gòu)件庫管理組織審核通過后,將輸入的構(gòu)件的信息生成XML文檔,構(gòu)件庫管理員驗證XML文檔格式和構(gòu)件有效性,驗證后進行由管理員對此次提交的構(gòu)件進行添加操作,構(gòu)件添加的部分功能全部封裝在addCpt類中,具體實現(xiàn)如下:
D o c u m e n t d o c = s a x B u i l d e r. build(newFile(“Cpts.xml”));//解析XML文件
Widget?editCom=?new?Widget?(“Component”);//按照構(gòu)件的分類簡歷不同的軟件界面
W i d g e t?e d i t C o m F = n e w?W i d g e t?(“ComponentForm”);
W i d g e t?e d i t R e p = n e w?W i d g e t?(“Represstation”);
………
editRep.setText(sourceCode);/將構(gòu)件的詳細(xì)信息寫入構(gòu)件庫系統(tǒng)中
………
editCom.addContent(editComF);//把相近功能的軟件構(gòu)件關(guān)聯(lián)起來
………
Element?root=doc.getRootElement();/獲得XML文件根目錄節(jié)點
……………
root.addContent(editCom);//把新增的構(gòu)件加入到XML文件根目錄節(jié)點
……………
Schema?Validation?validateCom=new? SchemaValidation();//驗證新增軟件構(gòu)件
InputStream?xmlString=validateCom. getClass().getResource?AsStream(“compents. xml”);//獲取相應(yīng)構(gòu)件的XML文件
InputStream?schemaStr=validatecom. g e t C l a s s ( ).g e t R e s o u r o e? AsStream(sStream((”);//獲取XML文件的根節(jié)點
SAXReader?reader=createSAXReader(schemaS tr);//對需要驗證的構(gòu)件進行XML信息解析
D o c u m e n t?d o c u m e n t = r e a d e r. read(xmIString);//對XML文件進行驗證;
……………
eltRep.setText(sourceCode);/把生成XML文檔的構(gòu)件詳細(xì)信息寫入構(gòu)件庫系統(tǒng)
……………
4.2 構(gòu)件的檢索
軟件構(gòu)件的使用者根據(jù)構(gòu)件分類的詳細(xì)描述,在不同類型的構(gòu)件庫中進行構(gòu)件檢索,也可結(jié)合界面的樹形結(jié)構(gòu)對需要的構(gòu)件進行構(gòu)件檢索,檢索結(jié)果包括樹形結(jié)構(gòu)所有分支的數(shù)量、每個分支的構(gòu)件結(jié)構(gòu),并且找出他或她需要檢索哪個分支構(gòu)件描述。當(dāng)檢索構(gòu)件時,構(gòu)件使用者根據(jù)查詢要求從各個方面選擇術(shù)語合法的構(gòu)件描述。當(dāng)查詢條件中有多個方面時,由每個方面檢索的構(gòu)件集的交集形成最終結(jié)果集。
構(gòu)件庫系統(tǒng)中層次劃分完成的XML文件具有嵌套其他相關(guān)相近構(gòu)件的功能,每個構(gòu)件的開始標(biāo)記都對應(yīng)有一個結(jié)束標(biāo)記,并且標(biāo)記構(gòu)件之間的嵌套沒有錯位,保證構(gòu)件的版本正確,因此構(gòu)件庫系統(tǒng)采用的堆棧的方式來記錄XML文檔結(jié)構(gòu)。堆棧的特征是先入先出,在start元素(?)中使用push方法向堆棧添加刻面名稱,在end元素(?)中使用pop_ back方法將其彈出。對startelement?(?)方法的每次調(diào)用都必須對應(yīng)于對endele?-?element?(?)方法的調(diào)用,因此push和pop是成對的,只需分析堆棧的結(jié)構(gòu),用字符方法對匹配刻面的術(shù)語做相應(yīng)的處理,就可以知道文檔結(jié)構(gòu)中的當(dāng)前標(biāo)記。
4.3 構(gòu)件的更新和刪除
軟件構(gòu)件的管理者可以在構(gòu)件庫管理系統(tǒng)中更新或刪除構(gòu)件,首先管理者檢索構(gòu)件提供者提供的構(gòu)件是否已存在,如果存在將新提交的構(gòu)件和現(xiàn)有的構(gòu)件進行版本比對并進行顯示,列出新構(gòu)件所增加的詳細(xì)內(nèi)容并更新此構(gòu)件。當(dāng)構(gòu)件庫中的構(gòu)件長時間未使用或已有新版本替代時,構(gòu)件庫管理員直接調(diào)用remove?content方法刪除構(gòu)件節(jié)點并將其保存到回收站,并將構(gòu)件刪除的詳細(xì)原因進行說明。
4.4 構(gòu)件的集成
一個大的應(yīng)用系統(tǒng)一般是由多個獨立的構(gòu)件組成,在提高軟件生產(chǎn)率和軟件產(chǎn)品質(zhì)量的技術(shù)上,復(fù)用構(gòu)件的集成為大型應(yīng)用系統(tǒng)的研制提供了保障,由于軟件代碼的可以進行復(fù)用,因此從已經(jīng)建立的構(gòu)件庫中來集成軟件應(yīng)用系統(tǒng)將變得非容易。因此在進行大的軟件系統(tǒng)研制時,就應(yīng)考慮到軟件架構(gòu)的復(fù)用、軟件代碼的復(fù)用等可復(fù)用的構(gòu)件,構(gòu)件的集成可以以及客服用的算法和架構(gòu)設(shè)計在一些通用借口而的基礎(chǔ)上集各種各樣的軟件應(yīng)用系統(tǒng),基于構(gòu)件的集成,軟件的開發(fā)人員還可以將大系統(tǒng)分解成更小的獨立的構(gòu)件,更有效的進行軟件設(shè)計。
5 結(jié)論
軟件重用對于提高開發(fā)效率和軟件質(zhì)量具有很大的開發(fā)潛力。正確使用構(gòu)件庫可以實現(xiàn)軟件重用。在構(gòu)件庫的支持下,軟件工程師不僅可以“帶頭”,而且可以避免軟件的重復(fù)開發(fā)。
參考文獻
[1]楊敬君.基于構(gòu)件的軟件復(fù)用技術(shù)研究與應(yīng)用實踐[D].大連:大連海事大學(xué),2009.
[2]楊森.曹寶香基于J2EE和XML的構(gòu)件庫系統(tǒng)設(shè)計[J].計算機技術(shù)與發(fā)展,2009,19(8):100-103.