毛洪川 韓潔 胡豪 王芳

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