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