摘要:為解決傳統(tǒng)的基于標(biāo)準(zhǔn)過(guò)程裁剪中標(biāo)準(zhǔn)過(guò)程只有單一抽象層次,造成裁剪工作量大的問(wèn)題,本文對(duì)標(biāo)準(zhǔn)軟件過(guò)程分層結(jié)構(gòu)進(jìn)行研究并通過(guò)繼承機(jī)制簡(jiǎn)化過(guò)程的定義,多抽象層次的標(biāo)準(zhǔn)過(guò)程的提出還可以滿(mǎn)足不同描述的需要,然后根據(jù)現(xiàn)有的構(gòu)件描述框架對(duì)不同層次的標(biāo)準(zhǔn)過(guò)程給出了不同的描述方案。最后根據(jù)構(gòu)件描述的特點(diǎn),提出一種構(gòu)件檢索方法,并在理論上分析了和在實(shí)驗(yàn)上的證明了該算法的可行性和有效性。
關(guān)鍵詞:標(biāo)準(zhǔn)軟件過(guò)程;過(guò)程構(gòu)件;過(guò)程繼承;構(gòu)件檢索
1 引言
利用已有的過(guò)程資產(chǎn)來(lái)建立新的過(guò)程,稱(chēng)為過(guò)程復(fù)用[1]。以標(biāo)準(zhǔn)過(guò)程庫(kù)中的標(biāo)準(zhǔn)過(guò)程為基礎(chǔ)的過(guò)程復(fù)用被認(rèn)為是提高軟件開(kāi)發(fā)的效率和質(zhì)量的重要手段,然而標(biāo)準(zhǔn)過(guò)程是通用的開(kāi)發(fā)框架和規(guī)范,往往是高層抽象的,在裁剪時(shí)需要添加大量和具體開(kāi)發(fā)相關(guān)的過(guò)程細(xì)節(jié)。對(duì)于具有核心業(yè)務(wù)的軟件企業(yè)來(lái)說(shuō),開(kāi)展的大量軟件項(xiàng)目具有較大相似性。如果能提供針對(duì)某類(lèi)應(yīng)用的標(biāo)準(zhǔn)軟件過(guò)程將進(jìn)一步提高軟件過(guò)程裁剪和定義的效率[2],那么如何簡(jiǎn)化這些類(lèi)似標(biāo)準(zhǔn)軟件過(guò)程的定義呢?另外在描述標(biāo)準(zhǔn)軟件過(guò)程時(shí),用哪些必要的屬性來(lái)描述和區(qū)分不同標(biāo)準(zhǔn)軟件過(guò)程同樣是需要解決的問(wèn)題。
本文從應(yīng)用級(jí)的角度對(duì)標(biāo)準(zhǔn)軟件過(guò)程分層結(jié)構(gòu)進(jìn)行研究并通過(guò)繼承機(jī)制簡(jiǎn)化過(guò)程的定義,分層結(jié)構(gòu)的提出又滿(mǎn)足了不同描述的需要。最后通過(guò)一個(gè)實(shí)例對(duì)構(gòu)件的可重用性與分層結(jié)構(gòu)的易于擴(kuò)展性進(jìn)行整合,從中可以看出這種方式可以提高企業(yè)中各個(gè)具體軟件開(kāi)發(fā)過(guò)程的定義效率。
2 標(biāo)準(zhǔn)過(guò)程的分層結(jié)構(gòu)圖
分層標(biāo)準(zhǔn)過(guò)程結(jié)構(gòu)根據(jù)過(guò)程具有多種抽象粒度,把標(biāo)準(zhǔn)軟件過(guò)程按照功能的擴(kuò)展性,分成若干層,每一層向其上層提供服務(wù),并利用下層的服務(wù)。本文中把軟件過(guò)程分為通用基本過(guò)程(核心層)、面向具體應(yīng)用的專(zhuān)用過(guò)程(簡(jiǎn)稱(chēng)應(yīng)用專(zhuān)用過(guò)程)和活動(dòng)級(jí)過(guò)程(定制層)三類(lèi)[2,3],其結(jié)構(gòu)框架如圖1所示。最內(nèi)層為“核心層”,完成最為基本的公用操作。向外各層逐漸進(jìn)行功能擴(kuò)展,滿(mǎn)足用戶(hù)不同的需求。在一些情況下,內(nèi)部層次全部被隱藏起來(lái),只有外部層次和一部分精心選擇的功能可以被系統(tǒng)外部所見(jiàn)。
(1)通用基本過(guò)程。完成的是軟件系統(tǒng)的一些通用的公共操作,這些操作能夠盡量做到可以方便地移植到其他軟件上,我們稱(chēng)之為通用核心層。由于這類(lèi)過(guò)程描述的是具有某些共性的軟件過(guò)程的抽象描述,因此在裁剪時(shí)需要添加大量和具體應(yīng)用相關(guān)的內(nèi)容,工作量比較大。從面向?qū)ο蟮慕嵌瓤?。通用核心層?gòu)成了一個(gè)或一組基類(lèi),以后各層的操作都是在繼承基類(lèi)的基礎(chǔ)上逐漸增強(qiáng)功能而得到的。
(2)應(yīng)用專(zhuān)用過(guò)程。與業(yè)務(wù)直接相關(guān)的基本操作,比通用基本過(guò)程更詳細(xì)和具體,描述了更多細(xì)節(jié)。同時(shí)它是在通用核心層的基礎(chǔ)上(繼承),使用通用核心層提供的服務(wù)完成整個(gè)過(guò)程定義。根據(jù)系統(tǒng)的大小和復(fù)雜的程度,專(zhuān)用過(guò)程也可能存在多個(gè)層次,應(yīng)用層又可劃分為核心業(yè)務(wù)層和次要業(yè)務(wù)層。越低層描述了越多的細(xì)節(jié),和應(yīng)用越接近,同時(shí)只能被少數(shù)的符合條件的開(kāi)發(fā)項(xiàng)目復(fù)用。
(3)活動(dòng)級(jí)過(guò)程。由于某些業(yè)務(wù)的特殊性需要定制專(zhuān)門(mén)的過(guò)程,也稱(chēng)為定制層。活動(dòng)級(jí)過(guò)程是把活動(dòng)作為復(fù)用的對(duì)象,主要定義過(guò)程中包含的各個(gè)活動(dòng)和活動(dòng)間的關(guān)系,執(zhí)行活動(dòng)的角色和需要的資源。靈活性最強(qiáng),可以在任何過(guò)程中復(fù)用。
(4)用戶(hù)系統(tǒng)是在定制層的基礎(chǔ)上,使用定制層提供的服務(wù),完成與用戶(hù)的交互任務(wù),實(shí)現(xiàn)用戶(hù)的請(qǐng)求。
在基于分層的標(biāo)準(zhǔn)軟件過(guò)程定義中,核心層、應(yīng)用層、定制層以及用戶(hù)系統(tǒng)均由相應(yīng)層次的構(gòu)件來(lái)構(gòu)成,由獨(dú)立的構(gòu)件通過(guò)層與層之間的繼承來(lái)實(shí)現(xiàn)所需要的功能。
3 繼承機(jī)制形式化定義
繼承是面向?qū)ο蠓椒▽W(xué)中的重要概念,面向?qū)ο笞钪饕母拍罹褪穷?lèi)、對(duì)象、封裝和繼承。軟件過(guò)程也可以被看成一個(gè)對(duì)象,對(duì)不同軟件過(guò)程對(duì)象中共性知識(shí)的抽象描述就可以得到軟件過(guò)程類(lèi),每一個(gè)具體的軟件過(guò)程都是過(guò)程類(lèi)的實(shí)例。過(guò)程把活動(dòng)、產(chǎn)品、資源和角色等封裝在一個(gè)過(guò)程內(nèi)部。對(duì)使用者而言,只需了解過(guò)程類(lèi)的功能,而無(wú)需知道內(nèi)部細(xì)節(jié),因此過(guò)程屏蔽了內(nèi)部細(xì)節(jié)。由于要定義大量具有相同或相似功能,不同抽象層次的標(biāo)準(zhǔn)過(guò)程,完全可以利用面向?qū)ο笾械睦^承機(jī)制,把相似過(guò)程中的公共部分抽象出來(lái),通過(guò)繼承簡(jiǎn)化過(guò)程的定義,圖2是分層標(biāo)準(zhǔn)過(guò)程的繼承關(guān)系圖。
按照子過(guò)程定義對(duì)父過(guò)程定義的修改程度,將繼承按照強(qiáng)弱程度分為以下3種類(lèi)型[2,4,5]。下面分別給出這三種繼承的形式化定義:
如果有一個(gè)過(guò)程定義集合(PC,PI,P,R),其中PC表示過(guò)程類(lèi),PI表示過(guò)程實(shí)例,P表示屬性,R表示關(guān)系。定義中的hasProperty表示擁有的屬性,subProcessOf表示構(gòu)成子過(guò)程,subClassOf表示子類(lèi),Ptype表示屬性類(lèi)型。
參數(shù)擴(kuò)展式繼承:設(shè)有類(lèi)C表示過(guò)程外的其它屬性類(lèi),比如輸入、輸出以及資源等。有pcl、pc2 ∈PC,c3、c4∈C,如有(pcl subProcessOf pc2)且(( p.( pc2 hasProperty p))∧(pcl.p Ptype c3)∧(pc2.p Ptype c4)),則稱(chēng)pcl參數(shù)擴(kuò)展式繼承pc2,其中p∈input Uoutput Uresource,c3 subClassOf c4。
功能繼承:有pcl、pc2∈PC,如有(pcl subProcessOf pc2)且( p.(pcl hasProperty p)∧ ┒(pc2 hasProperty p)),則稱(chēng)pcl增量式繼承pc2,其中p∈Activity Transition。
實(shí)現(xiàn)繼承:有pcl、pc2、pc3、pc4∈PC,如有(pcl subClassOf pc2)且 (( p.(pc2 hasProperty p))∧(pcl.p Ptype pc3)∧(pc2.p Ptype pc4)),則稱(chēng)pcl子過(guò)程擴(kuò)展式繼承pc2,其中P∈subprocess,pc3是對(duì)pc4的擴(kuò)展。
通過(guò)分析發(fā)現(xiàn),過(guò)程中存在的繼承機(jī)制無(wú)外乎上述三類(lèi)。在實(shí)際使用中,可能同時(shí)用到上述三種繼承方式,在不同抽象層次上子過(guò)程既對(duì)父過(guò)程進(jìn)行了功能擴(kuò)展,也對(duì)父過(guò)程進(jìn)行了細(xì)化。
4 基于分層的標(biāo)準(zhǔn)過(guò)程的分類(lèi)刻面描述
由上面分析得出的是不同抽象層次的標(biāo)準(zhǔn)過(guò)程,接下來(lái)的問(wèn)題就是要確定通過(guò)哪幾個(gè)方面可以準(zhǔn)確描述具有相同或相似功能不同抽象層次的標(biāo)準(zhǔn)過(guò)程。由于不同的使用者對(duì)過(guò)程復(fù)用的目的和所需要的內(nèi)容不同,這里參照復(fù)旦大學(xué)的過(guò)程構(gòu)件描述框架[6,7],把過(guò)程描述分為三個(gè)方面:概要信息描述(PGD)、規(guī)約描述(PSD)和數(shù)據(jù)描述(PDD)。
過(guò)程的概要信息描述文檔(PGD)面向過(guò)程的使用者,用來(lái)區(qū)分和檢索各個(gè)標(biāo)準(zhǔn)過(guò)程,主要用于對(duì)過(guò)程的分類(lèi)檢索。描述過(guò)程信息包括過(guò)程的功能、過(guò)程的應(yīng)用領(lǐng)域、過(guò)程類(lèi)別、過(guò)程的表現(xiàn)形式,以及過(guò)程的使用環(huán)境等。
過(guò)程的規(guī)約信息描述文檔(PSD)面向過(guò)程的創(chuàng)建者,描述了過(guò)程的具體組成結(jié)構(gòu)。
過(guò)程的數(shù)據(jù)信息描述文檔(PDD)主要面向過(guò)程的管理者,用于對(duì)過(guò)程的評(píng)價(jià)、管理、控制和改進(jìn),反映的是過(guò)程運(yùn)行時(shí)的度量數(shù)據(jù)和運(yùn)行能力。
上述三個(gè)層面所描述內(nèi)容的集合反映了一個(gè)完整的過(guò)程,下面分別對(duì)上一節(jié)中提出的通用基本過(guò)程、應(yīng)用專(zhuān)用過(guò)程和活動(dòng)級(jí)過(guò)程這三個(gè)層次的過(guò)程展開(kāi)討論并給出相應(yīng)的解決方案。
對(duì)于通用基本過(guò)程,這類(lèi)過(guò)程描述的是和具體應(yīng)用無(wú)關(guān)的標(biāo)準(zhǔn)軟件過(guò)程,是一類(lèi)具有某些共性的軟件過(guò)程的抽象描述,描述主要有過(guò)程的概要信息描述(PGD)和過(guò)程的規(guī)約描述(PSD)。
對(duì)于應(yīng)用專(zhuān)用過(guò)程,這類(lèi)軟件過(guò)程是和具體應(yīng)用相關(guān)的標(biāo)準(zhǔn)軟件過(guò)程,比通用基本過(guò)程更詳細(xì)和具體,包括標(biāo)準(zhǔn)過(guò)程適用的開(kāi)發(fā)環(huán)境和問(wèn)題域等。因此,對(duì)于應(yīng)用專(zhuān)用過(guò)程的描述包括了一個(gè)過(guò)程的三個(gè)方面:有概要信息描述(PGD),規(guī)約描述(PSD)和數(shù)據(jù)描述(PDD)。
對(duì)于活動(dòng)級(jí)過(guò)程,活動(dòng)級(jí)過(guò)程是把活動(dòng)作為復(fù)用的對(duì)象,只需要規(guī)約描述滿(mǎn)足了,描述方法同應(yīng)用專(zhuān)用過(guò)程的規(guī)約描述。
5 基于分層的標(biāo)準(zhǔn)軟件過(guò)程分類(lèi)描述的檢索算法
上面給出了不同層次標(biāo)準(zhǔn)過(guò)程的不同描述方案,而每一種層次構(gòu)件的刻面描述都可以展開(kāi)為一棵刻面描述樹(shù)。于是過(guò)程構(gòu)件的檢索可以轉(zhuǎn)化為這種樹(shù)形的結(jié)構(gòu)化描述之間的匹配,我們將其中的刻面、術(shù)語(yǔ)、子術(shù)語(yǔ)分別映射為樹(shù)中對(duì)應(yīng)的父節(jié)點(diǎn)、子結(jié)點(diǎn),對(duì)采用某個(gè)刻面描述方案描述的構(gòu)件,可以將其相應(yīng)的刻面描述術(shù)語(yǔ)映射為對(duì)應(yīng)的葉子結(jié)點(diǎn)。
對(duì)于過(guò)程構(gòu)件的檢索也可以相應(yīng)地表示為一棵查詢(xún)樹(shù)。即將查詢(xún)中出現(xiàn)的刻面名、子刻面名轉(zhuǎn)化為相應(yīng)層次的父節(jié)點(diǎn)和子結(jié)點(diǎn),將查詢(xún)的刻面的術(shù)語(yǔ)值轉(zhuǎn)化為葉節(jié)點(diǎn),并用一個(gè)虛擬的根節(jié)點(diǎn)將它們組合為一棵查詢(xún)樹(shù)。于是過(guò)程構(gòu)件的檢索就轉(zhuǎn)化為查詢(xún)樹(shù)與庫(kù)中構(gòu)件的刻面描述樹(shù)之間的匹配。
在樹(shù)匹配領(lǐng)域中樹(shù)包含問(wèn)題已被證明為NP問(wèn)題。為了描述查詢(xún)的枚舉算法先引入以下的兩個(gè)概念:匹配集M和合法匹配集LM[8,9]。
定義1 (匹配點(diǎn)集M)查詢(xún)樹(shù)中節(jié)點(diǎn)v的匹配點(diǎn)集M(v)是符合以下條件的一個(gè)集簇:
M(v}={{w}w∈C∧distance(label(v), label(w)) T}U{{ }}
定義2 (合法匹配集LM)查詢(xún)樹(shù)中節(jié)點(diǎn)集v的合法匹配集LM (v)是符合以下條件的一個(gè)集簇:
LM(V)={c' |c' ∈C,存在一個(gè)Q到C的匹配h,并且Domain(h)∈Q[V]∧Range(h)=c'}
上式中Q[V]表示以V中節(jié)點(diǎn)為根節(jié)點(diǎn)的查詢(xún)子樹(shù)集中的所有節(jié)點(diǎn)。
對(duì)算法的描述通過(guò)圖4的例子具體描述。數(shù)字相同而標(biāo)簽不同表示有相似性。
檢索算法分為以下3個(gè)步驟:
第1步。找到查詢(xún)樹(shù)中每個(gè)節(jié)點(diǎn)v的M(V)。例如:例中有
M(1)={{ },{3},{6}},M(2)={{ },{1},{4}},M(3)={{
},{7}},M(4)={{},{9}}。
第2步。按后序順序(這種順序可以保證在遍歷任一節(jié)點(diǎn)時(shí)該節(jié)點(diǎn)的兒子節(jié)點(diǎn)已被遍歷)遍歷查詢(xún)樹(shù)中的節(jié)點(diǎn)。在遍歷節(jié)點(diǎn)v的時(shí)候計(jì)算如下:
LM (v)=M (v) (LM ( Vi})。
遍歷節(jié)點(diǎn)1時(shí):M (1) = {{}, {3}, {6}}; LM(1)={{
},{3},{6}};葉子節(jié)點(diǎn)的LM等于M;這一步nc= 0;
遍歷節(jié)點(diǎn)2時(shí):M (2) = {{},{1},{4}};
LM(2}={{},{1}, {4}};這一步nc= 0;
遍歷節(jié)點(diǎn)3時(shí):M (3) = {{}, {7}};
LM(3)=M(3) LM(2)={{ },{7},{1},{4},{7,4}}。{7,1}被從M(3)×LM(2)中剔除,因?yàn)楣?jié)點(diǎn)7不是1的祖先節(jié)點(diǎn)。這一步nc= 2●3- (2+3)+1=2;
遍歷節(jié)點(diǎn)4時(shí):M (4)={{0,9}};先計(jì)算
LM(3)LM(1)=LM(3,1)={{},{3},{6},{7},{1},{4},{7,4},
{3 ,7},{3,4},{3,7,4},{6,1},{6,4}}。這一步nc= 3 5-(3+5)+1=8,再計(jì)算
LM(4)=LM(3,1) M(4)={{},{9},{3},{6},{7},{1},{4},{7,4},{3,7},{3,4},{3,7,4},{6,1},{6,4},{9,3},{9,6},{9,7},{9,1},{9,4},{9,7,4},{9,3,,7},{9,3,4},{9,3,7,,4},{9,6,1},{9,6,4}}。這一步nc=2×12-(2+12)+1=11。
第3步。依次計(jì)算查詢(xún)樹(shù)根節(jié)點(diǎn)的LM中每個(gè)單射的匹配代價(jià),其中最小的即為所求的查詢(xún)樹(shù)到該構(gòu)件刻面描述樹(shù)的匹配代價(jià)??偨Y(jié)上例中計(jì)算過(guò)程的總的nc=0+0+0+2+8+11=2l;nm=|LM(4)|=24。nc的值相對(duì)于其他一般的枚舉算法值[9]有所減少。
同時(shí),改進(jìn)后的算法的有效性從理論上可以分析如下:一般枚舉方法可以看成是計(jì)算各個(gè)節(jié)點(diǎn)的M的笛卡爾積的過(guò)程。而改進(jìn)后的方法可以看成是各個(gè)節(jié)點(diǎn)的M的
或者算子的連接過(guò)程。例如上例中就M(1)(M(2)
M(3))M(4),所以在改進(jìn)枚舉中需要驗(yàn)證的情況只是一般枚舉方法的子集,故改進(jìn)后的檢索方法在時(shí)間上更加有效。
6 總結(jié)
標(biāo)準(zhǔn)過(guò)程庫(kù)管理子系統(tǒng)是過(guò)程資產(chǎn)庫(kù)為基礎(chǔ)的軟件過(guò)程改進(jìn)的一個(gè)重要組成部分,它提供的標(biāo)準(zhǔn)過(guò)程是裁剪和定義項(xiàng)目軟件過(guò)程的基礎(chǔ)。為傳統(tǒng)標(biāo)準(zhǔn)過(guò)程只有單一抽象層次,造成了裁剪工作量大、軟件過(guò)程定義效率低下的問(wèn)題。本文基于構(gòu)件的分層體系結(jié)構(gòu)和繼承機(jī)制設(shè)計(jì)為后續(xù)階段的工作奠定了堅(jiān)實(shí)的基礎(chǔ),使人們更容易理解軟件的結(jié)構(gòu)和需求,易于對(duì)人員進(jìn)行分配,提高了工作的效率。而且,由于有越來(lái)越多的可用構(gòu)件投入使用,系統(tǒng)的開(kāi)發(fā)效率和可靠性、安全性方面都會(huì)有大的提高。同時(shí)基于刻面描述的檢索算法,在時(shí)間上和效率上也比一般的算法有很大的提高。
參考文獻(xiàn)
[1]楊一平.現(xiàn)代軟件工程技術(shù)與CMM的融合[M].北京:人民郵電出版社.2003.
[2]鄔惠峰.基于過(guò)程構(gòu)件復(fù)用的過(guò)程定義和改進(jìn)研究[D].浙江:浙江大學(xué),2006.
[3]許兆祥,王清心,王燕,等.基于構(gòu)件的分層體系結(jié)構(gòu)模型的研究與應(yīng)用[J].山西電子技術(shù)2008(4):62-64.
[4]張強(qiáng).過(guò)程繼承工作流的研究與實(shí)現(xiàn)[D].西安:西北大學(xué),2006.
[5]ISO/IEC CD15939.Software Engineering-Software Measurement Process Framework[J]. Feb 7, 2000.
[6]徐如志.基于復(fù)用的軟件過(guò)程改進(jìn)方法與優(yōu)化控制技術(shù)研究[D].上海:復(fù)旦大學(xué),2004.
[7]Xu Ru-zhi,QianLe-qiu.CMM-based Software Risk Control Optimization[C]. Proceedings of the 2003 IEEE International Conference on Information Reuseand Integration (IRI-2003), LasVegas,2003.499-503.
[8]Gibb, F., McCartan, C., O' Donnell, R., et al. The integration of information retrieval techniques withina software reuse environment. Journal of Information Science, 2000,26(4):520-539.
[9]孟聞天,張維石,史金余,等.一種基于刻面分類(lèi)描述的軟件構(gòu)件查詢(xún)方法[J].計(jì)算機(jī)工程與應(yīng)用,2005(12):61-64.