廖夢怡,何偉娜,李中華
(1.平頂山學(xué)院 河南 平頂山 467000;2.鄭州大學(xué) 河南 鄭州 450001)
在某種程度上,軟件工程就是用一些支持即插即用軟件部件來組成應(yīng)用程序的一個(gè)過程,部件技術(shù)就是從一個(gè)部件庫中選擇一些部件,通過這些部件附帶的一些它能控制的屬性和行為與其他部件進(jìn)行聯(lián)系,通過組裝使這些部件組成一個(gè)新的應(yīng)用軟件。
隨著軟件技術(shù)的快速發(fā)展,基于部件開發(fā)的軟件工程在建造復(fù)雜軟件中越來越發(fā)揮著重要的作用。目前的軟件開發(fā)技術(shù)變得越來越復(fù)雜,一些新的應(yīng)用程序領(lǐng)域的需要也在不斷的增加,基于部件的軟件工程由于自身的低維護(hù)費(fèi)用和軟件產(chǎn)品的可靠性,成為實(shí)現(xiàn)這些高科技產(chǎn)品的一門關(guān)鍵技術(shù)。
部件的重用是部件開發(fā)的主要目標(biāo),開發(fā)代價(jià)和重用效益是其主要的設(shè)計(jì)標(biāo)準(zhǔn),它們直接決定了軟件開發(fā)的成本和效益目標(biāo),是確定部件開發(fā)是否成功的主要標(biāo)準(zhǔn),文中分別討論這兩種標(biāo)準(zhǔn),以達(dá)到部件開發(fā)的最優(yōu)化。
部件的可用性是指該部件經(jīng)常被用到,并通過該部件支持的重用領(lǐng)域及其功能來評(píng)鑒該部件的可用性。可用性用來有效評(píng)估部件開發(fā)的代價(jià)。
1)基于部件使用效益的分析
在一個(gè)系統(tǒng)領(lǐng)域部件開發(fā)過程中,對(duì)于要開發(fā)的部件必須考慮它的規(guī)模的大小,部件的類型,并參照它所處的支撐環(huán)境來定義所開發(fā)部件所處的層次。比如,要對(duì)一個(gè)協(xié)議進(jìn)行開發(fā),那它很可能就是一個(gè)系統(tǒng)部件的開發(fā),如果使用的只是它的一個(gè)框架,可以只做系統(tǒng)層次上的設(shè)計(jì)和開發(fā);而對(duì)于協(xié)議中的一個(gè)實(shí)體或者服務(wù),則可以使用較低一級(jí)的部件進(jìn)行開發(fā),這樣就可以大大減少工作量,減少開發(fā)冗余,增加部件開發(fā)和使用的效率[1]。
2)基于效益和SDL語言的分層設(shè)計(jì)方法
對(duì)部件的規(guī)模和類型進(jìn)行評(píng)估,對(duì)部件進(jìn)行分層開發(fā),可以提高部件開發(fā)和使用的效率,分層就是采用對(duì)部件進(jìn)行不同級(jí)別的考慮和開發(fā)而提高部件開發(fā)效益的一種方法。
在通信軟件開發(fā)中廣泛使用的形式化描述語言SDL也采用了分層的描述體制,SDL在協(xié)議描述過程中從系統(tǒng)結(jié)構(gòu)上把協(xié)議分為4個(gè)層次,即:系統(tǒng)級(jí)、功能級(jí)、進(jìn)程級(jí)、過程級(jí),它們是依次包含關(guān)系[2]。
在通信軟件部件開發(fā)過程中,將此兩者結(jié)合起來,文中提出一種新的設(shè)計(jì)方法,即基于效益和SDL語言的分層設(shè)計(jì)方法,在部件開發(fā)的過程中,把部件開發(fā)的級(jí)別也劃分為四級(jí),如圖1所示。
圖1 部件開發(fā)等級(jí)Fig.1 Development level of component
在經(jīng)過SDL語言形式化描述之后,被描述的各個(gè)部分就可以被看做同等級(jí)別的部件而進(jìn)行開發(fā),它在邏輯結(jié)構(gòu)上有了國際統(tǒng)一的標(biāo)準(zhǔn)指導(dǎo),保證了部件開發(fā)的準(zhǔn)確性,還可以提高協(xié)議部件設(shè)計(jì)和開發(fā)的效益。
重用代價(jià)是部件開發(fā)的一個(gè)重要標(biāo)準(zhǔn),如何減少部件重用的代價(jià),成為部件開發(fā)成功與否的一個(gè)關(guān)鍵問題。分級(jí)設(shè)計(jì)方法主要是通過對(duì)需要開發(fā)的部件所處某一領(lǐng)域及部件模型的分析和分解,通過隨開發(fā)應(yīng)用的時(shí)間需求長時(shí)期提高部件開發(fā)的實(shí)例冗余來減少可變特征部分不必要的開發(fā)來減少重用代價(jià)的。
1)部件重用代價(jià)的分析
在一個(gè)系統(tǒng)里用原有部件重用進(jìn)行合成過程中,原來的部件重用有3種形式:
直接重用,不經(jīng)過任何的修改;
經(jīng)過修改之后適合新的系統(tǒng);
沒有部件可以重用,需要完全重新開發(fā)。
這3種形式組成了新的軟件需要的所有部分,它們的設(shè)計(jì)和開發(fā)也就組成了部件庫重用代價(jià)的全部。
第3種形式是一個(gè)新的部件的設(shè)計(jì)過程,在它的設(shè)計(jì)和開發(fā)之后,重用它的時(shí)候,它也可以分為前兩種形式,因此暫不考慮第3種形式??梢钥紤]開發(fā)一個(gè)部件,它的重用只包括前兩種形式。根據(jù)這兩種形式,類似的可以把一個(gè)部件分為兩個(gè)部分:固定部分和可變部分,其中固定部分就是可以被直接重用的部分,可變部分就是可以修改或者認(rèn)為在重用過程中可取可不取的部分。如圖2所示。
圖2 部件開發(fā)結(jié)構(gòu)Fig.2 Development of components structure
2)基于重用代價(jià)的分級(jí)設(shè)計(jì)方法
部件重用是部件開發(fā)的最大動(dòng)力,是一個(gè)部件庫開發(fā)的直接價(jià)值體現(xiàn)。因此部件重用的花費(fèi)也就成為部件開發(fā)的一個(gè)最大指標(biāo)。根據(jù)以上部件重用代價(jià)的分析,為了降低部件開發(fā)的成本,實(shí)現(xiàn)部件開發(fā)的可用性,提出一種基于特征分解的分級(jí)設(shè)計(jì)方法[3]。
分級(jí)的方法是基于一個(gè)部件庫的方法,如圖3所示:在開發(fā)一個(gè)新的部件模型或者具有新的特征的實(shí)例時(shí),不再是開發(fā)和設(shè)計(jì)該部件的全部特征,而是要做以下兩方面的工作。
分解新部件,找出同類部件和部件模型中相似的部分,這部分可以直接參照部件庫其它部分的設(shè)計(jì),不需要重復(fù)設(shè)計(jì)和開發(fā);
找出與其他個(gè)別部件公共的部分,把它變成新的次級(jí)固定部分,進(jìn)行設(shè)計(jì)和開發(fā),補(bǔ)充部件庫,不但提供該部件的使用,還為以后該部件模型中該特征的重用提供設(shè)計(jì)以節(jié)省重用費(fèi)用。
經(jīng)過以上2個(gè)步驟,不但該部件的開發(fā)達(dá)到了開發(fā)代價(jià)的最小化,還為以后同類型部件的設(shè)計(jì)和開發(fā)提供了大量的相似部分特征。
圖3 部件特征分解Fig.3 Decomposition of components feature
基于代價(jià)重用最小化的部件分級(jí)設(shè)計(jì)方法可以使用以下的步驟:
①確定設(shè)計(jì)的部件領(lǐng)域,部件模型及重用的領(lǐng)域;
②對(duì)部件模型進(jìn)行分析,劃分為固定部分和可變部分,固定部分就是在該領(lǐng)域?qū)λ兄赜迷撃P偷牟考夹枰牟糠?,可變部分是該領(lǐng)域該類部件有差異的部分或只有個(gè)別部件有的部分;
③把固定部分和可變部分轉(zhuǎn)化為該部件模型的特征,這樣一個(gè)部件的設(shè)計(jì)和開發(fā)就可以看做該部件特征集合的設(shè)計(jì)和開發(fā)。對(duì)部件進(jìn)行驗(yàn)證,看是否符合部件的特征、固定特征是否是該類部件的公共特征及可變部分是否可以提取出該類部件的共有特征;
④ 對(duì)可變特征進(jìn)行細(xì)化分解,找出共有特征,把它變成該類部件的次級(jí)固定特征;
⑤對(duì)部件的固定特征進(jìn)行設(shè)計(jì)和開發(fā),對(duì)可變部分進(jìn)行設(shè)計(jì),在開發(fā)的過程中通過該部件特征的實(shí)例化對(duì)固定特征可變特征進(jìn)行補(bǔ)充,對(duì)使用較多的部件特征也可以進(jìn)行開發(fā)。盡量把可變部分轉(zhuǎn)化為固定部分。
⑥基于重用代價(jià)的分級(jí)設(shè)計(jì)方法通過整體上對(duì)一個(gè)部件模型的分解,結(jié)合該類部件的重用領(lǐng)域,對(duì)該部件劃分為固定特征和可變特征的方法來降低其開發(fā)的成本。這種方法實(shí)際上是通過模型部件中該部件的設(shè)計(jì)分解和實(shí)例化開發(fā)補(bǔ)充兩個(gè)步驟來降低其重用代價(jià)的。
在通信軟件部件設(shè)計(jì)和開發(fā)的過程中,對(duì)于一個(gè)部件的開發(fā)是沒有意義的,開發(fā)部件的目的就是為了提高協(xié)議或軟件開發(fā)的效率,開發(fā)部件就是在某一領(lǐng)域組建一個(gè)部件庫或者說一個(gè)部件集合,以備軟件開發(fā)中的重用,從而提高軟件開發(fā)的效率。開發(fā)部件都是基于開發(fā)一類或一個(gè)領(lǐng)域的一個(gè)部件庫而言的,因此前面所提出的分層和分級(jí)方法是一個(gè)部件的設(shè)計(jì)方法,其實(shí)也是一個(gè)部件庫的設(shè)計(jì)開發(fā)過程。因此說部件的開發(fā)和部件庫的開發(fā)是有很大聯(lián)系的。
采用基于部件庫開發(fā)的思路,結(jié)合分層和分級(jí)的方法,分別在橫(分級(jí))豎(分層)兩個(gè)方向上進(jìn)行考慮,提出一種新的二元設(shè)計(jì)方法,來滿足部件設(shè)計(jì)的目的。其步驟如下。
①當(dāng)給出一個(gè)協(xié)議時(shí)或其某一部分時(shí),結(jié)合原來通信協(xié)議部件庫中原有部件的描述特征,用SDL對(duì)其進(jìn)行描述,根據(jù)分層的機(jī)制確定它的類型,并進(jìn)行形式化的描述和設(shè)計(jì)。
②對(duì)要描述的部件利用分級(jí)方法進(jìn)行特征值分解,集合部件庫中其他部件的特征進(jìn)行適度開發(fā),更新部件庫。
采用這種方法具有以下優(yōu)點(diǎn):
在第一步中進(jìn)行的形式化描述可以保證部件開發(fā)的準(zhǔn)確性,無二義性等特征,從整體上利用SDL語言提供了一種國際標(biāo)準(zhǔn)規(guī)范;
對(duì)部件的設(shè)計(jì)利用分層分級(jí)的方法,采用“協(xié)議歸類,用則設(shè)計(jì),不用保留,不斷補(bǔ)充”的思路,極大的減少了部件開發(fā)的冗余,提高了部件開發(fā)和使用的效益。
在通信協(xié)議開發(fā)的過程中,采用系統(tǒng)的高效的方法不但保證了協(xié)議開發(fā)的準(zhǔn)確性,也可以大大提高協(xié)議的效率。根據(jù)以上的分析,在分層分級(jí)的部件二元設(shè)計(jì)方法的基礎(chǔ)上給出通信協(xié)議軟件開發(fā)流程圖,如圖4所示。
圖4 形式化部件開發(fā)方法Fig.4 Development method of formal component
①利用分層的概念定義基于部件開發(fā)的范圍,內(nèi)外環(huán)境,建立一個(gè)架構(gòu)框架。部件開發(fā)的范圍指部件開發(fā)后的使用范圍,它對(duì)于部件功能的復(fù)雜性有重大影響。范圍越大,部件開發(fā)考慮的因素就越多,部件重用組裝產(chǎn)生的冗余就越多。怎樣定義部件的適用范圍,必須考慮其適用范圍和開發(fā)復(fù)雜度及重用冗余的平衡問題。定義架構(gòu)框架主要指技術(shù)框架,包括以下兩部分[4]。
定義技術(shù)環(huán)境,主要包括開發(fā)語言、部件模型、執(zhí)行環(huán)境、中間件及部件之間的互操作性等問題。
定義軟件基礎(chǔ)設(shè)施及開發(fā)標(biāo)準(zhǔn),包括采用何種方法進(jìn)行設(shè)計(jì)和標(biāo)準(zhǔn)化。對(duì)于通信協(xié)議部件,一般以RFC文檔作為開發(fā)標(biāo)準(zhǔn),采用形式化描述語言SDL對(duì)部件進(jìn)行形式化描述和設(shè)計(jì)保證其正確性。
②對(duì)部件利用SDL語言進(jìn)行形式化描述,結(jié)合部件庫中原有部件的描述和設(shè)計(jì)來確定部件開發(fā)的級(jí)別和必要性,定義即將使用的部件模型。主要包括在當(dāng)前部件開發(fā)的內(nèi)外環(huán)境中,使用何種結(jié)構(gòu)有利于該領(lǐng)域部件的交互及部件之間的交互,在通信協(xié)議部件的設(shè)計(jì)和開發(fā)上,一般采用分層的結(jié)構(gòu)。
③利用分級(jí)的概念定義部件內(nèi)部結(jié)構(gòu),包括部件的功能、業(yè)務(wù),進(jìn)行細(xì)分,利用特征值分解的方法確定固定部分和可變部分及其是否需要繼續(xù)分為更小的部件,畫出部件的功能明細(xì)圖。
在通信協(xié)議部件開發(fā)的過程中,部件的內(nèi)部結(jié)構(gòu)主要包括部件具有的功能模塊,部件提供的服務(wù),部件接口等,它可以分為2個(gè)部分或根據(jù)需要進(jìn)行更細(xì)致的劃分。
列出部件的功能,利用形式化描述語言如有限狀態(tài)機(jī)等畫出其事務(wù)處理過程,詳細(xì)描述通信過程的接口并給出確切的定義。
④評(píng)價(jià)部件設(shè)計(jì)和開發(fā)的適當(dāng)性。對(duì)設(shè)計(jì)的部件進(jìn)行技術(shù)可行性評(píng)估和效益代價(jià)評(píng)估,主要是部件開發(fā)的細(xì)化和部件使用的頻繁化進(jìn)行協(xié)調(diào),原則上對(duì)不經(jīng)常使用的部件,只設(shè)計(jì)主要功能和接口,在開發(fā)使用的過程中再進(jìn)行細(xì)化,對(duì)于經(jīng)常使用的部件進(jìn)行詳細(xì)的設(shè)計(jì)和開發(fā),這樣就既考慮了部件開發(fā)的效益問題也考慮了部件開發(fā)的使用問題。
⑤ 組建部件庫,使用科學(xué)的方法管理部件庫,對(duì)存在的部件進(jìn)行更新和完善,對(duì)部件庫進(jìn)行補(bǔ)充和完善。
部件庫的設(shè)計(jì)有很多種方法,為了使結(jié)構(gòu)更清晰、搜索更方便,在部件設(shè)計(jì)時(shí)在部件庫組織中把部件分為3個(gè)部分:名稱標(biāo)記,關(guān)鍵字及簡述,主體設(shè)計(jì)[5]。
1)在名稱標(biāo)記中,采用分級(jí)定義法。即對(duì)于部件名稱標(biāo)記采用一種規(guī)范,規(guī)范如下:
部件名稱標(biāo)記的組成有七部分組成,依次為:部件層次名稱,協(xié)議名稱,功能部件名稱,進(jìn)程部件名稱,過程部件名稱,注釋,參數(shù)。其中注釋寫在[]內(nèi),參數(shù)寫在()內(nèi),各部分用下劃線連接,系統(tǒng)部件名稱寫在注釋[]內(nèi),可以用來表明該部件能夠使用的系統(tǒng)。
例如:fun_sip_ua_transaction_receive[ua_ua](msg),fun 表示部件層次為功能級(jí),sip表示協(xié)議,ua表示功能部件名稱,transaction表示進(jìn)程部件名稱,receive表示過程部件名稱,ua_ua可以表示在端到端SIP系統(tǒng)中,msg是參數(shù)。
各個(gè)部分如果缺?。ū硎驹摷?jí)別通用)可用x代替。第一個(gè)參數(shù)(部件層次)不能缺省,當(dāng)名稱標(biāo)記的7個(gè)部分不夠時(shí),從前向后依次確認(rèn),后面缺省默認(rèn)為通用(即_x)。
例如:fun_sip_ua_transaction[]()是對(duì)于事務(wù)進(jìn)程的所有功能而言的。
注釋和參數(shù)可以缺省。
例如:fun_sip_ua_transaction_receive,表示該部件暫時(shí)不需要參數(shù)。
2)關(guān)鍵字及簡述關(guān)鍵字主要是在部件使用時(shí)便于用戶的選擇及部件庫的整合管理工作,對(duì)于用戶尋找類似信息提供方便,部件庫管理者則可以更方便對(duì)部件進(jìn)行統(tǒng)計(jì)分類。
3)主體設(shè)計(jì)主要是部件的各種功能設(shè)計(jì),包括主要功能設(shè)計(jì)、接口設(shè)計(jì)等。
1)部件庫的建立及檢索
依照上述的部件設(shè)計(jì)規(guī)范,把部件庫建立起來,可以根據(jù)多重方式進(jìn)行檢索,在建立的部件庫中,在設(shè)計(jì)時(shí)就潛在的提供了一種檢索或查詢的方法,就是基于部件命名標(biāo)記的關(guān)鍵字檢索方法,在部件庫的管理中,根據(jù)部件命名標(biāo)記中的七部分標(biāo)示,可以設(shè)置成多條件查詢,對(duì)使用者和管理者提供很多的方便。
另一種方法就是關(guān)鍵字和簡述中進(jìn)行關(guān)鍵字檢索,找出含有關(guān)鍵字的所有部件,根據(jù)需要就行使用或修改[6]。
2)部件庫的管理
對(duì)部件庫的管理主要是需要一定的專業(yè)人員對(duì)部件庫進(jìn)行不斷的更新和維護(hù),用戶在使用過程中總結(jié)出的經(jīng)驗(yàn)和提出的意見對(duì)部件庫的更新具有重要的作用,要保持一個(gè)部件庫強(qiáng)大的功能,必須與時(shí)俱進(jìn),與不斷的協(xié)議更新相同步。
文中首先探討了通信協(xié)議部件開發(fā)的必要性,就軟件開發(fā)中部件開發(fā)一般考慮的因素,結(jié)合通信協(xié)議部件的特征[7],提出通信協(xié)議部件開發(fā)應(yīng)考慮的一些附加因素,分析了部件開發(fā)的代價(jià)和效益,結(jié)合形式化方法中的SDL描述語言,提出了一種新的部件設(shè)計(jì)概念,即分層和分級(jí)的方法;最后提出部件庫設(shè)計(jì)的一種規(guī)范,并建立部件庫。
[1]潘紅艷,于全.用于通信網(wǎng)絡(luò)協(xié)議開發(fā)的形式化方法[J].計(jì)算機(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形式語義定義現(xiàn)狀及其改進(jìn)[J].通信學(xué)報(bào),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]宋茂強(qiáng).通信軟件設(shè)計(jì)基礎(chǔ)[M].北京:北京郵電大學(xué)出版社,2001.
[4]Katharine Whitehead.基于部件開發(fā)[M].北京:人民郵電出版社,2003.
[5]李臘元.通信協(xié)議形式化模型的研究[J].計(jì)算機(jī)學(xué)報(bào),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.部件級(jí)編程[M].北京:清華大學(xué)出版社,2003.
[7]李杰,王航.一種基于ModBus總線的通信方案探討[J].工業(yè)儀表與自動(dòng)化裝置,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.