廖夢怡,何偉娜,李中華
(1.平頂山學院 河南 平頂山 467000;2.鄭州大學 河南 鄭州 450001)
在某種程度上,軟件工程就是用一些支持即插即用軟件部件來組成應用程序的一個過程,部件技術就是從一個部件庫中選擇一些部件,通過這些部件附帶的一些它能控制的屬性和行為與其他部件進行聯系,通過組裝使這些部件組成一個新的應用軟件。
隨著軟件技術的快速發展,基于部件開發的軟件工程在建造復雜軟件中越來越發揮著重要的作用。目前的軟件開發技術變得越來越復雜,一些新的應用程序領域的需要也在不斷的增加,基于部件的軟件工程由于自身的低維護費用和軟件產品的可靠性,成為實現這些高科技產品的一門關鍵技術。
部件的重用是部件開發的主要目標,開發代價和重用效益是其主要的設計標準,它們直接決定了軟件開發的成本和效益目標,是確定部件開發是否成功的主要標準,文中分別討論這兩種標準,以達到部件開發的最優化。
部件的可用性是指該部件經常被用到,并通過該部件支持的重用領域及其功能來評鑒該部件的可用性??捎眯杂脕碛行гu估部件開發的代價。
1)基于部件使用效益的分析
在一個系統領域部件開發過程中,對于要開發的部件必須考慮它的規模的大小,部件的類型,并參照它所處的支撐環境來定義所開發部件所處的層次。比如,要對一個協議進行開發,那它很可能就是一個系統部件的開發,如果使用的只是它的一個框架,可以只做系統層次上的設計和開發;而對于協議中的一個實體或者服務,則可以使用較低一級的部件進行開發,這樣就可以大大減少工作量,減少開發冗余,增加部件開發和使用的效率[1]。
2)基于效益和SDL語言的分層設計方法
對部件的規模和類型進行評估,對部件進行分層開發,可以提高部件開發和使用的效率,分層就是采用對部件進行不同級別的考慮和開發而提高部件開發效益的一種方法。
在通信軟件開發中廣泛使用的形式化描述語言SDL也采用了分層的描述體制,SDL在協議描述過程中從系統結構上把協議分為4個層次,即:系統級、功能級、進程級、過程級,它們是依次包含關系[2]。
在通信軟件部件開發過程中,將此兩者結合起來,文中提出一種新的設計方法,即基于效益和SDL語言的分層設計方法,在部件開發的過程中,把部件開發的級別也劃分為四級,如圖1所示。

圖1 部件開發等級Fig.1 Development level of component
在經過SDL語言形式化描述之后,被描述的各個部分就可以被看做同等級別的部件而進行開發,它在邏輯結構上有了國際統一的標準指導,保證了部件開發的準確性,還可以提高協議部件設計和開發的效益。
重用代價是部件開發的一個重要標準,如何減少部件重用的代價,成為部件開發成功與否的一個關鍵問題。分級設計方法主要是通過對需要開發的部件所處某一領域及部件模型的分析和分解,通過隨開發應用的時間需求長時期提高部件開發的實例冗余來減少可變特征部分不必要的開發來減少重用代價的。
1)部件重用代價的分析
在一個系統里用原有部件重用進行合成過程中,原來的部件重用有3種形式:
直接重用,不經過任何的修改;
經過修改之后適合新的系統;
沒有部件可以重用,需要完全重新開發。
這3種形式組成了新的軟件需要的所有部分,它們的設計和開發也就組成了部件庫重用代價的全部。
第3種形式是一個新的部件的設計過程,在它的設計和開發之后,重用它的時候,它也可以分為前兩種形式,因此暫不考慮第3種形式。可以考慮開發一個部件,它的重用只包括前兩種形式。根據這兩種形式,類似的可以把一個部件分為兩個部分:固定部分和可變部分,其中固定部分就是可以被直接重用的部分,可變部分就是可以修改或者認為在重用過程中可取可不取的部分。如圖2所示。

圖2 部件開發結構Fig.2 Development of components structure
2)基于重用代價的分級設計方法
部件重用是部件開發的最大動力,是一個部件庫開發的直接價值體現。因此部件重用的花費也就成為部件開發的一個最大指標。根據以上部件重用代價的分析,為了降低部件開發的成本,實現部件開發的可用性,提出一種基于特征分解的分級設計方法[3]。
分級的方法是基于一個部件庫的方法,如圖3所示:在開發一個新的部件模型或者具有新的特征的實例時,不再是開發和設計該部件的全部特征,而是要做以下兩方面的工作。
分解新部件,找出同類部件和部件模型中相似的部分,這部分可以直接參照部件庫其它部分的設計,不需要重復設計和開發;
找出與其他個別部件公共的部分,把它變成新的次級固定部分,進行設計和開發,補充部件庫,不但提供該部件的使用,還為以后該部件模型中該特征的重用提供設計以節省重用費用。
經過以上2個步驟,不但該部件的開發達到了開發代價的最小化,還為以后同類型部件的設計和開發提供了大量的相似部分特征。

圖3 部件特征分解Fig.3 Decomposition of components feature
基于代價重用最小化的部件分級設計方法可以使用以下的步驟:
①確定設計的部件領域,部件模型及重用的領域;
②對部件模型進行分析,劃分為固定部分和可變部分,固定部分就是在該領域對所有重用該模型的部件都需要的部分,可變部分是該領域該類部件有差異的部分或只有個別部件有的部分;
③把固定部分和可變部分轉化為該部件模型的特征,這樣一個部件的設計和開發就可以看做該部件特征集合的設計和開發。對部件進行驗證,看是否符合部件的特征、固定特征是否是該類部件的公共特征及可變部分是否可以提取出該類部件的共有特征;
④ 對可變特征進行細化分解,找出共有特征,把它變成該類部件的次級固定特征;
⑤對部件的固定特征進行設計和開發,對可變部分進行設計,在開發的過程中通過該部件特征的實例化對固定特征可變特征進行補充,對使用較多的部件特征也可以進行開發。盡量把可變部分轉化為固定部分。
⑥基于重用代價的分級設計方法通過整體上對一個部件模型的分解,結合該類部件的重用領域,對該部件劃分為固定特征和可變特征的方法來降低其開發的成本。這種方法實際上是通過模型部件中該部件的設計分解和實例化開發補充兩個步驟來降低其重用代價的。
在通信軟件部件設計和開發的過程中,對于一個部件的開發是沒有意義的,開發部件的目的就是為了提高協議或軟件開發的效率,開發部件就是在某一領域組建一個部件庫或者說一個部件集合,以備軟件開發中的重用,從而提高軟件開發的效率。開發部件都是基于開發一類或一個領域的一個部件庫而言的,因此前面所提出的分層和分級方法是一個部件的設計方法,其實也是一個部件庫的設計開發過程。因此說部件的開發和部件庫的開發是有很大聯系的。
采用基于部件庫開發的思路,結合分層和分級的方法,分別在橫(分級)豎(分層)兩個方向上進行考慮,提出一種新的二元設計方法,來滿足部件設計的目的。其步驟如下。
①當給出一個協議時或其某一部分時,結合原來通信協議部件庫中原有部件的描述特征,用SDL對其進行描述,根據分層的機制確定它的類型,并進行形式化的描述和設計。
②對要描述的部件利用分級方法進行特征值分解,集合部件庫中其他部件的特征進行適度開發,更新部件庫。
采用這種方法具有以下優點:
在第一步中進行的形式化描述可以保證部件開發的準確性,無二義性等特征,從整體上利用SDL語言提供了一種國際標準規范;
對部件的設計利用分層分級的方法,采用“協議歸類,用則設計,不用保留,不斷補充”的思路,極大的減少了部件開發的冗余,提高了部件開發和使用的效益。
在通信協議開發的過程中,采用系統的高效的方法不但保證了協議開發的準確性,也可以大大提高協議的效率。根據以上的分析,在分層分級的部件二元設計方法的基礎上給出通信協議軟件開發流程圖,如圖4所示。

圖4 形式化部件開發方法Fig.4 Development method of formal component
①利用分層的概念定義基于部件開發的范圍,內外環境,建立一個架構框架。部件開發的范圍指部件開發后的使用范圍,它對于部件功能的復雜性有重大影響。范圍越大,部件開發考慮的因素就越多,部件重用組裝產生的冗余就越多。怎樣定義部件的適用范圍,必須考慮其適用范圍和開發復雜度及重用冗余的平衡問題。定義架構框架主要指技術框架,包括以下兩部分[4]。
定義技術環境,主要包括開發語言、部件模型、執行環境、中間件及部件之間的互操作性等問題。
定義軟件基礎設施及開發標準,包括采用何種方法進行設計和標準化。對于通信協議部件,一般以RFC文檔作為開發標準,采用形式化描述語言SDL對部件進行形式化描述和設計保證其正確性。
②對部件利用SDL語言進行形式化描述,結合部件庫中原有部件的描述和設計來確定部件開發的級別和必要性,定義即將使用的部件模型。主要包括在當前部件開發的內外環境中,使用何種結構有利于該領域部件的交互及部件之間的交互,在通信協議部件的設計和開發上,一般采用分層的結構。
③利用分級的概念定義部件內部結構,包括部件的功能、業務,進行細分,利用特征值分解的方法確定固定部分和可變部分及其是否需要繼續分為更小的部件,畫出部件的功能明細圖。
在通信協議部件開發的過程中,部件的內部結構主要包括部件具有的功能模塊,部件提供的服務,部件接口等,它可以分為2個部分或根據需要進行更細致的劃分。
列出部件的功能,利用形式化描述語言如有限狀態機等畫出其事務處理過程,詳細描述通信過程的接口并給出確切的定義。
④評價部件設計和開發的適當性。對設計的部件進行技術可行性評估和效益代價評估,主要是部件開發的細化和部件使用的頻繁化進行協調,原則上對不經常使用的部件,只設計主要功能和接口,在開發使用的過程中再進行細化,對于經常使用的部件進行詳細的設計和開發,這樣就既考慮了部件開發的效益問題也考慮了部件開發的使用問題。
⑤ 組建部件庫,使用科學的方法管理部件庫,對存在的部件進行更新和完善,對部件庫進行補充和完善。
部件庫的設計有很多種方法,為了使結構更清晰、搜索更方便,在部件設計時在部件庫組織中把部件分為3個部分:名稱標記,關鍵字及簡述,主體設計[5]。
1)在名稱標記中,采用分級定義法。即對于部件名稱標記采用一種規范,規范如下:
部件名稱標記的組成有七部分組成,依次為:部件層次名稱,協議名稱,功能部件名稱,進程部件名稱,過程部件名稱,注釋,參數。其中注釋寫在[]內,參數寫在()內,各部分用下劃線連接,系統部件名稱寫在注釋[]內,可以用來表明該部件能夠使用的系統。
例如:fun_sip_ua_transaction_receive[ua_ua](msg),fun 表示部件層次為功能級,sip表示協議,ua表示功能部件名稱,transaction表示進程部件名稱,receive表示過程部件名稱,ua_ua可以表示在端到端SIP系統中,msg是參數。
各個部分如果缺省(表示該級別通用)可用x代替。第一個參數(部件層次)不能缺省,當名稱標記的7個部分不夠時,從前向后依次確認,后面缺省默認為通用(即_x)。
例如:fun_sip_ua_transaction[]()是對于事務進程的所有功能而言的。
注釋和參數可以缺省。
例如:fun_sip_ua_transaction_receive,表示該部件暫時不需要參數。
2)關鍵字及簡述關鍵字主要是在部件使用時便于用戶的選擇及部件庫的整合管理工作,對于用戶尋找類似信息提供方便,部件庫管理者則可以更方便對部件進行統計分類。
3)主體設計主要是部件的各種功能設計,包括主要功能設計、接口設計等。
1)部件庫的建立及檢索
依照上述的部件設計規范,把部件庫建立起來,可以根據多重方式進行檢索,在建立的部件庫中,在設計時就潛在的提供了一種檢索或查詢的方法,就是基于部件命名標記的關鍵字檢索方法,在部件庫的管理中,根據部件命名標記中的七部分標示,可以設置成多條件查詢,對使用者和管理者提供很多的方便。
另一種方法就是關鍵字和簡述中進行關鍵字檢索,找出含有關鍵字的所有部件,根據需要就行使用或修改[6]。
2)部件庫的管理
對部件庫的管理主要是需要一定的專業人員對部件庫進行不斷的更新和維護,用戶在使用過程中總結出的經驗和提出的意見對部件庫的更新具有重要的作用,要保持一個部件庫強大的功能,必須與時俱進,與不斷的協議更新相同步。
文中首先探討了通信協議部件開發的必要性,就軟件開發中部件開發一般考慮的因素,結合通信協議部件的特征[7],提出通信協議部件開發應考慮的一些附加因素,分析了部件開發的代價和效益,結合形式化方法中的SDL描述語言,提出了一種新的部件設計概念,即分層和分級的方法;最后提出部件庫設計的一種規范,并建立部件庫。
[1]潘紅艷,于全.用于通信網絡協議開發的形式化方法[J].計算機工程,2004,30(2):129-130.
PAN Hong-yan,YU Quan.Formal method for the development of communication network protocols[J].Computer Engineering,2004,30(2):129-130.
[2]王穎,倪朝,艾波.SDL形式語義定義現狀及其改進[J].通信學報,2000,21(4):75-79.
WANG Ying,NI Chao,AI Bo.Formal semantic definition of SDL[J].Journal of communication,2000,21(4):75-79.
[3]宋茂強.通信軟件設計基礎[M].北京:北京郵電大學出版社,2001.
[4]Katharine Whitehead.基于部件開發[M].北京:人民郵電出版社,2003.
[5]李臘元.通信協議形式化模型的研究[J].計算機學報,1998,21(5):419-427.
LI La-yuan.Research on formal models of communication protocols[J].Chinese Journal of computers,1998,21(5):419-427.
[6]Peter Maurer.部件級編程[M].北京:清華大學出版社,2003.
[7]李杰,王航.一種基于ModBus總線的通信方案探討[J].工業儀表與自動化裝置,2012(4):101-104.
LI Jie,WANG Hang.One kind of explore of communication scheme based on ModBus[J].Industrial Instrumentation&Automation,2012(4):101-104.