黃世反,沈勇,2,王道紅,康洪煒,2,鄭見琳,賈書偉
(1.云南大學(xué) 軟件學(xué)院,云南 昆明 650091; 2.云南大學(xué) 云南省軟件工程重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650091;3.云南省農(nóng)村信用社 科技結(jié)算中心,云南 昆明 650000)
面向目標(biāo)導(dǎo)向的軟件演化過程行為的研究
黃世反1,沈勇1,2,王道紅3,康洪煒1,2,鄭見琳1,賈書偉1
(1.云南大學(xué) 軟件學(xué)院,云南 昆明 650091; 2.云南大學(xué) 云南省軟件工程重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650091;3.云南省農(nóng)村信用社 科技結(jié)算中心,云南 昆明 650000)
對軟件演化過程行為的分析有助于在演化前期階段發(fā)現(xiàn)一些不合理的設(shè)計(jì)情況,從而達(dá)到降低軟件演化的風(fēng)險.在面向目標(biāo)導(dǎo)向的軟件演化過程模型的基礎(chǔ)上,使用通信順序進(jìn)程的原理對軟件演化過程的行為進(jìn)行了研究,分別從過程的跡、確定性和不確定性等方面進(jìn)行了深入的分析,并給出了每一種行為的計(jì)算方法.
通信順序進(jìn)程;目標(biāo)導(dǎo)向;軟件演化過程;過程行為
軟件演化是指在軟件的整個生命周期之內(nèi)所進(jìn)行的對軟件進(jìn)行維護(hù)和更新的行為和過程,最早對軟件演化這一現(xiàn)象進(jìn)行研究的是 Lehman 等人,他們從對 IBM 軟件開發(fā)過程的研究中提出了軟件演化的概念,繼而總結(jié)出了軟件演化的八大定律[1];由軟件開發(fā)團(tuán)體、軟件工程學(xué)院(SEI)及Carnegie Mellon大學(xué)共同開發(fā)的CMM(capability maturity model)把軟件開發(fā)視為一個過程,并根據(jù)這一原則對軟件開發(fā)和維護(hù)進(jìn)行過程監(jiān)控和研究,以使其更加科學(xué)化、標(biāo)準(zhǔn)化、使企業(yè)能夠更好地實(shí)現(xiàn)商業(yè)目標(biāo)[2].Osterweil等[3]提出了一個著名的觀點(diǎn):“軟件過程也是軟件”,認(rèn)為軟件過程和軟件一樣具有相同的特性.ISO/IEC 15504是一個新興的軟件過程評估的國際標(biāo)準(zhǔn),它定義了大量的軟件工程過程和測量其能力的尺度,Eman等[4]對ISO/IEC15504中軟件需求分析(SRA)過程能力評估的預(yù)測效度進(jìn)行了實(shí)證研究,發(fā)現(xiàn)對于規(guī)模較小的企業(yè),預(yù)測有效性的證據(jù)是相當(dāng)弱的.Lehman等[5]把軟件演化過程模型看作是一個多層次多循環(huán)的反饋系統(tǒng),同時還提出了一種E類型的軟件演化動態(tài)建模的方法.文獻(xiàn)[6]從平臺、技術(shù)、模型等方面對軟件的動態(tài)演化進(jìn)行了全方位的探討與研究,但涉及到過程方面的研究卻很少;在軟件演化過程方面的研究以李彤[7]最為著名,在《An Approach to Modelling Software Evolution Processes》一書中做了詳細(xì)深入的研究,他提出了一個形式化的軟件演化元模型(EPMM),并把EPMM分為4個層次:任務(wù)層、活動層、過程層和全局層,同時還提出了演化過程的描述語言(EPDL),對軟件演化過程中效率的改進(jìn)等做了全面、細(xì)致的研究,在軟件演化過程的研究中獨(dú)樹一幟.
隨著日益增多的遺產(chǎn)系統(tǒng),軟件演化過程變得日益重要[7],為了加深對軟件演化過程的了解以及很好的管理演化過程中的每一個活動,必須對軟件演化過程進(jìn)行建模,軟件演化過程的模型是對軟件演化工作中所有活動的一個抽象描述,通過對軟件演化的過程建立模型,使得相關(guān)人員可以對軟件演化中的各項(xiàng)活動和任務(wù)有清晰的認(rèn)識和掌控.軟件演化過程行為是在所建立的模型基礎(chǔ)之上,對軟件演化中活動發(fā)生的一種抽象描述,對軟件演化過程行為進(jìn)行研究能夠提前對軟件在演化過程中所發(fā)生的情況做出準(zhǔn)確的判斷.
在軟件演化過程中,不同的角色、人員所關(guān)注的焦點(diǎn)并不相同,譬如項(xiàng)目經(jīng)理只關(guān)心某個過程是否按進(jìn)度進(jìn)行,至于過程里具體的活動和任務(wù)的進(jìn)度就不太關(guān)心;對于管理某個具體過程的負(fù)責(zé)人來說,其所關(guān)注的焦點(diǎn)主要集中在該過程的活動或任務(wù)之上,為滿足這項(xiàng)要求,本文在對過程行為進(jìn)行分析的同時,分別從過程層和活動層進(jìn)行詳細(xì)的闡述.本文主要研究工作包括:基于目標(biāo)和環(huán)境提出了一種基于目標(biāo)導(dǎo)向的軟件演化建模的模型GDSEPM(goal directed software evolution process model);基于GDSEPM,對軟件演化過程建模的方法、步驟和應(yīng)遵行的原則進(jìn)行了詳細(xì)討論,并給出了基于目標(biāo)導(dǎo)向的軟件演化過程建模的算法;使用通信順序進(jìn)程的原理對軟件演化過程的行為(過程的發(fā)散、絕境、渾沌)進(jìn)行了深入的分析并給出了相應(yīng)的求解過程.
定義1[8]目標(biāo)狀態(tài)是用于標(biāo)識一個目標(biāo)的行為狀態(tài).令目標(biāo)狀態(tài)的集合為GoalState,典型元素是τ,定義為τ::=INI|ACT|SUS|SUC|FAI.其中INI標(biāo)識目標(biāo)的初始狀態(tài),ACT標(biāo)識目標(biāo)處于活動狀態(tài),SUS標(biāo)識目標(biāo)處于等待狀態(tài),SUC標(biāo)識已經(jīng)執(zhí)行成功,F(xiàn)AI標(biāo)識目標(biāo)已經(jīng)失敗.
定義2 目標(biāo)是一個四元組:goal=(gid,GS,ST,τ),其中:gid是目標(biāo)的唯一標(biāo)識號;GS是一組目標(biāo)描述,GS= {gs1,gs2,…,gsn};ST是一組評定標(biāo)準(zhǔn)ST= {st1,st2, … ,stn},用于衡量所完成的過程是否達(dá)到預(yù)期效果;τ是目標(biāo)狀態(tài).
定義3[9]一個資源約束是一個三元組:Res= (hr,t,f),其中,hr描述了人力資源約束,以人月為單位;t描述了時間約束,以天為單位;f描述了資金約束,以元為單位.我們還定義針對資源約束的運(yùn)算:
Res1opRes2= (Res1.hropRes2.hr,Res1.topRes2.t,Res1.fopRes2.f),op為+、-,以及資源約束之間的關(guān)系Res1reRes2當(dāng)且僅當(dāng):Res1.hrreRes2.hr∧Res1.treRes1.t∧Res1.freRes1.f成立(其中re為<,>,=).
定義4 軟件演化環(huán)境SEE(software evolution environment)是一個三元組:SEE=(Des,Res,Req),其中,Des為軟件演化的環(huán)境描述,Res為資源約束,Req= {Req1,Req2, …,Reqn}是一組軟件演化的需求描述.
定義5 一個任務(wù)是一個四元組,task=(tid,IN,F,OUT),其中:tid是任務(wù)的唯一標(biāo)識,IN是任務(wù)的輸入消息,OUT是任務(wù)執(zhí)行完后的消息,F(xiàn)是任務(wù)具體操作,是把輸入轉(zhuǎn)化為輸出的操作,OUT=F(IN).如果把IN作為任務(wù)要解決的問題空間,OUT當(dāng)作任務(wù)的解空間,那么F就是IN和OUT之間的一個映射關(guān)系,F?IN×OUT.
本文中使用通訊順序進(jìn)程CSP(communicating sequential process)來對軟件演化過程進(jìn)行計(jì)算,且把任務(wù)當(dāng)作CSP中的事件來處理,那么就存在一個事件到任務(wù)之間的轉(zhuǎn)化關(guān)系,文中所采取的解決方法是:一次軟件演化過程中所有任務(wù)的tid構(gòu)成了本次演化過程這一客體的字母表.任務(wù)之間執(zhí)行的先后順序使用“→”來表示,a→b表示任務(wù)a執(zhí)行完成后接著執(zhí)行任務(wù)b.
定義7 一個活動之間的控制關(guān)系是一個四元組:R=(Activity1,Activity2,TR,c),其中:Activity1,Activity2是2個具體的活動;TR是一個二元關(guān)系,TR?Activity1.T×Activity2.T,表示活動與活動之間的連接接口;c是一個連接子,c∈(C={sq,sl,lp,cn}),其中,sq表示Activity1、Activity2是順序控制關(guān)系,sl表示Activity1、Activity2是選擇控制關(guān)系,lp表示Activity1、Activity2是循環(huán)控制關(guān)系,cn表示Activity1、Activity2是并行控制關(guān)系.
定義8 過程是一個六元組:P=(A,INPUT,OUTPUT,SEE,g,R).其中:A是過程對應(yīng)的行為,是一組活動的集合A= {Activity1,Activity2, …,Activityn};INPUT和OUTPUT分別是是過程的輸入信息通道集合和輸出信息通道集合;SEE是過程所處的環(huán)境信息;g是過程要實(shí)現(xiàn)的目標(biāo);R是活動之間的控制關(guān)系.
定義9 假設(shè)存在過程SEP= (A,INPUT,OUTPUT,SEE,g,R),SEP1= (A1,INPUT1,OUTPUT1,SEE1,g1,R1),當(dāng)且僅當(dāng)條件SEE1?SEE∧g1g∧R1?R成立,稱作過程p1是過程SEP的子過程,記作SEP1SEP.
2.1 基本結(jié)構(gòu)
過程的基本結(jié)構(gòu)描述了過程組合和分解關(guān)系,是進(jìn)行資源計(jì)算和過程行為分析前提條件,過程的基本結(jié)構(gòu)有4種,分別是順序結(jié)構(gòu)、選擇結(jié)構(gòu)、并行結(jié)構(gòu)和循環(huán)結(jié)構(gòu),下面分別給出它們的定義:
定義10 如果過程P1,P2是順序執(zhí)行的,它們之間的順序關(guān)系表示為:P1;P2,P1,P2的順序表示也是一個過程,這個過程先按P1執(zhí)行,在過程P1執(zhí)行成功后(P1;P2)就按照P2定義的動作執(zhí)行.
定義11 如果過程P1,P2只能執(zhí)行其中之一,稱之為程P1,P2為選擇關(guān)系,記為:P1[]P2,P1[]P2的組合也是一個過程,表示實(shí)施者在實(shí)施該進(jìn)程時根據(jù)環(huán)境信息做出選擇,要么選擇P1執(zhí)行,要么選擇P2執(zhí)行.
定義12 如果過程P1,P2的執(zhí)行都不受對方干擾,也不互為條件,則P1,P2可以并行執(zhí)行,他們之間的并行關(guān)系表示為:P1||P2.
定義13 如果過程P1,P2的順序執(zhí)行有n(n>2)次,則P1,P2構(gòu)成了一個n次循環(huán)結(jié)構(gòu),記作:LnP1;P2,(LnP1;P2)也是一個過程,它的入口是P1,出口是P2,這個過程先按P1執(zhí)行,然后按P2執(zhí)行,再按P1執(zhí)行,這樣重復(fù)n次.
2.2 跡
本文中的GDSEPM是基于“過程是活動的集合,活動是任務(wù)的集合”[10-11]這一觀點(diǎn)提出的,我們把任務(wù)映射為事件來處理,所有任務(wù)的id就構(gòu)成了軟件演化過程的字母表,對于活動來說,其字母表就是該活動所包含的所有任務(wù)的id,對過程來說,其字母表就是該過程所包含的所有活動的字母表的并集,軟件演化過程的行為是由其所包含的活動的行為組成的,所以在研究過程的行為時必須通過研究過程所包含的活動的行為來實(shí)現(xiàn).由于活動是任務(wù)的集合,任務(wù)被抽象為事件來處理,活動就可以當(dāng)作CSP中的進(jìn)程來處理.
定義14 活動的跡是活動在執(zhí)行過程中對其任務(wù)執(zhí)行的一個歷史記錄系列,活動跡的表示為用“<”和“>”以及“,”所分割的任務(wù)tid的符號系列.
定義15 過程的跡是過程執(zhí)行中對活動執(zhí)行的一個歷史記錄,過程跡的表示為用“<”和“>”以及“,”所分割的活動aid的符號系列.
例如 過程跡S=<分析,設(shè)計(jì),編碼>分別表示3項(xiàng)活動分析,設(shè)計(jì),編碼,分析完成之后進(jìn)入設(shè)計(jì),設(shè)計(jì)完成后執(zhí)行編碼.S分析=<可行性分析,需求獲取,分析與綜合,制訂規(guī)格說明,評審>是活動分析的跡.跡的表示沿用了進(jìn)程跡的表示方法,其簡單的運(yùn)算也和CSP中講述進(jìn)程跡是一樣的,在這里就不再重復(fù).
過程的跡也可以細(xì)化任務(wù)級別,但在細(xì)化過程中,就要考慮過程所包含的活動之間的控制關(guān)系,為了描述方便,我們使用函數(shù)TraceP(過程名)表示獲取過程的可能跡的集合,使用函數(shù)TraceA(活動名)表示獲取活動的可能跡的集合.下面分別給出幾種控制關(guān)系的活動的跡運(yùn)算.設(shè)過程P包含活動A1,A2,則:
TraceAsq(A1,A2) = {s^t|s∈TraceA(A1)∧t∈TraceA(A2)}(順序控制關(guān)系);
TraceAsl(A1,A2)=TraceA(A1) ∪TraceA(A2)(選擇控制關(guān)系);
TraceAcn(A1,A2) = {t|tαA1∈TraceA(A2)∧tαA2∈TraceA(A1)}(并行控制關(guān)系);
TraceAlp(A1,A2)={(s^t)n|∈TraceA(A1)∧t∈TraceA(A2)}(循環(huán)控制關(guān)系).
上述規(guī)則可以推廣大n(n∈N)個活動的情況,在n個活動中,先把有直接交互關(guān)系的活動使用控制關(guān)系變成一個活動,再使用該活動與其它活動使用相應(yīng)的控制關(guān)系組合在一起.雖然過程是由活動組成的,但是過程的跡并不是所包含的活動跡的并集,是要通過上面的控制關(guān)系求出的.
定理1可以通過活動跡的運(yùn)算關(guān)系證明出來,設(shè)過程P1,P2,由它們組成的基本結(jié)構(gòu)的跡的運(yùn)算規(guī)則如下所示:
TraceP(P1;P2) = {s^t|s∈TraceP(P1)∧t∈TraceP(P2)}(順序結(jié)構(gòu));
TraceP(P1[]P2)=TraceP(P1)∪TraceP(P2)}(選擇結(jié)構(gòu));
TraceP(LnP1;P2) = {(s^t)n|s∈TraceP(P1)∧t∈TraceP(P2)}(循環(huán)結(jié)構(gòu)).
從過程和活動的跡的運(yùn)算上可以看出它們之間很相似,方法都是一樣的,導(dǎo)致這種現(xiàn)象的原因是在本文中,我們把任務(wù)映射為CSP中的事件,由于活動是任務(wù)的集合,其實(shí)活動就構(gòu)成了CSP中的進(jìn)程,而過程的行為又是由一組活來體現(xiàn)的,也就是一組進(jìn)程的集合,所以在運(yùn)算上規(guī)則都是一樣的,只是粒度大小不一樣而已.
2.3 確定性和不確定性
確定性和不確定性是對過程行為的一種描述,過程的確定性和不確定性是建立在過程所包含的活動集合的行為之上的,接下來先討論活動的確定性和不確定性.
定義16 如果一個活動A,具有以下2個屬性:
2)TraceA(A)為活動A所執(zhí)行的所有可能的過程跡的集合.
如果這2個屬性滿足以下條件:
1) <> ∈TraceA(A)(非空性);
2)s^t∈TraceA(A)?s∈TraceA(A) (前綴封閉性);
3)TraceA(A)?(α(A))*.
則稱活動A是確定性的,也可以說活動A是確定性活動.
或控制關(guān)系連接子“or”和選擇控制關(guān)系連接子“sl”的效果是一樣的,都是在2個活動中選擇其中之一來執(zhí)行,不同之處在于前者對環(huán)境是藏匿的,它們之間的選擇是活動內(nèi)部之間自己完成的,是在環(huán)境不知道或不受環(huán)境的控制之下完成的,而后者從一開始執(zhí)行第一個任務(wù)時,環(huán)境就力圖對其做出選擇.
定義17 如果活動A里的一個任務(wù)子集X在放在某個特定的環(huán)境E中,一開始就可能死鎖,就稱任務(wù)集X為活動A的拒絕任務(wù)集,記作RefusalsA(A);構(gòu)成一個過程的所有活動的拒絕任務(wù)集的并集稱為該過程的拒絕任務(wù)集,記作RefusalsP(過程名).
拒絕任務(wù)集在活動層的運(yùn)算規(guī)則如下:
RefusalsAsq(A1,A2)={X| (X∈RefusalsA(A1)∧RefusalsA(A1) ≠?)∨(X∈RefusalsA(A2) ∧RefusalsA(A1)=?)}(順序控制關(guān)系);
RefusalsAsl(A1,A2) =RefusalsA(A1) ∩RefusalsA(A2)(選擇控制關(guān)系);
RefusalsAcn(A1,A2) ={X∪Y| (X∈RefusalsA(A1)∧X∈RefusalsA(A2)} (并行控制關(guān)系);
RefusalsAlp(A1,A2) ={X| (X∈RefusalsA(A1) ∧RefusalsA(A1) ≠?)∨(X∈RefusalsA(A2) ∧RefusalsA(A1) = ?)}(循環(huán)控制關(guān)系)
RefusalsAor(A1,A2) =RefusalsA(A1) ∪RefusalsA(A2)(或控制關(guān)系).
過程的拒絕集由該過程所包含的活動的拒絕集組成,同過程的跡的一樣,也并不是簡單的復(fù)合.
定理2的也是根據(jù)拒絕任務(wù)集在活動層的運(yùn)算規(guī)則可以得出,下面的一個例子揭示了過程拒絕集的運(yùn)算方法.
例1 假設(shè)存在在過程P1,P1.A={A1,A2,A3,A4},P1.R={(A1,A2, {},sq),(A1,A3, {},sq), (A2,A3, {},cn),(A3,A4, {},sq),(A2,A4, {},sq)},則P1.R表示的是以活動A1為開始活動并執(zhí)行,執(zhí)行完后并發(fā)的執(zhí)行活動A2,A3,A2,A3執(zhí)行完后再進(jìn)入A4的執(zhí)行,所以P1.R也可以表示為P1.R={(A2,A3, {},cn) ,(A1, (A2,A3, {},cn), {},sq), ((A2,A3, {},cn),A4, {},sq)}, 所以:
RefusalsAcn(A2,A3) ={X∪Y| (X∈RefusalsA(A2) ∧X∈RefusalsA(A3)};
RefusalsAsq(A1, (A2,A3, {},cn)) = {X| (X∈RefusalsA(A1) ∧RefusalsA(A1) ≠?)∨(X∈RefusalsAcn(A2,A3)∧RefusalsA(A1) = ?)};
RefusalsP(P1)=RefusalsAsq((A1, (A2,A3, {},cn), {},sq),A4)=
{X| (X∈RefusalsA((A1, (A2,A3, {},cn), {},sq)) ∧RefusalsA((A1, (A2,A3, {},cn), {},sq)) ≠?) ∨(X∈RefusalsA(A4) ∧RefusalsA((A1, (A2,A3, {},cn), {},sq)) = ?)}=
{X| (X∈RefusalsAsq(A1, (A2,A3, {},cn))) ∧RefusalsAsq(A1, (A2,A3, {},cn)) ≠?) ∨(X∈RefusalsA(A4) ∧RefusalsAsq(A1, (A2,A3, {},cn)) = ?)}.
由上面的計(jì)算可以看出,某一個具體過程的拒絕集是通過其內(nèi)部活動的拒絕集運(yùn)算而得到的,在過程層次幾種過程基本結(jié)構(gòu)的拒絕任務(wù)集也是由其參與運(yùn)算的象過程的拒絕集的并集,即:
RefusalsP(P1;P2) =(X| (X∈RefusalsP(P1) ∧RefusalsP(P1) ≠?) ∨(X∈RefusalsP(P2) ∧RefusalsP(P1) = ?)(順序結(jié)構(gòu));
RefusalsP(P1[]P2) =RefusalsP(P1) ∩RefusalsP(P2)(選擇結(jié)構(gòu));
RefusalsP(LnP1;P2)=(X|(X∈RefusalsP(P1) ∧RefusalsP(P1) ≠?) ∨(X∈RefusalsP(P2) ∧RefusalsP(P1) = ?) (循環(huán)結(jié)構(gòu));
仿照CSP對過程確定性的討論[12],對軟件演化過程中的活動和過程做相應(yīng)討論,對于確定性活動來說,它是不能拒絕它能執(zhí)行的任何任務(wù),換句話說,一個任務(wù)的集合為某個確定性活動的拒絕集,當(dāng)且僅當(dāng)該任務(wù)集合不包含該活動最初能執(zhí)行的即任務(wù),即:
(活動A是確定的)? (X∈RefusalsA(A)≡(X∩A0={}),其中A0=(x|
對于活動A執(zhí)行了任何任務(wù)系列以后,該條法則同樣適用,即:
(活動A是確定的)≡ (?s:TraceA(A).(X∈RefusalsA(A/s)≡(X∩((A/s))0={})).
同樣的道理,對于過程來說,也有:
(過程P是確定的) ? (Y∈RefusalsP(P)≡(Y∩P0={}),其中P0=(x|
(過程P是確定的)≡ (?s:TraceP(P).(Y∈RefusalsP(P/s)≡(Y∩((P/s))0={})).
從過程、活動的拒絕集運(yùn)算上可以看出,其基本結(jié)構(gòu)和基本控制關(guān)系的拒絕集的運(yùn)算規(guī)則表達(dá)方式是一樣的,導(dǎo)致這種現(xiàn)象產(chǎn)生的原因是由于過程是由活動構(gòu)成的,在研究軟件演化過程的行為之時,撇開過程的目標(biāo)和環(huán)境,過程其實(shí)也就是一個粒度更大的活動而已.
一般說來,在軟件的演化過程中,不同角色、組織所關(guān)心的軟件演化的粒度是不一樣的,譬如項(xiàng)目經(jīng)理并不關(guān)心模塊A的代碼如何編寫、什么時候?qū)懀克年P(guān)注點(diǎn)通常粒度較大,他并不關(guān)心每一個具體的任務(wù)細(xì)節(jié),所以我們引入了屏蔽算子“”,它的運(yùn)算結(jié)果是屏蔽掉活動或過程里的一些任務(wù),這是非常有用的,比如在過程的層面,我們關(guān)注的是各個過程之間的依賴關(guān)系,并不需要知道具體的實(shí)現(xiàn)細(xì)節(jié)和內(nèi)部結(jié)構(gòu)的,其里面的任務(wù)是不受外部環(huán)境的觀察和控制的.就可以使用算子“”對一些任務(wù)進(jìn)行屏蔽,“”算子的格式為:
活動{任務(wù)tid的集合},過程{任務(wù)tid的集合}
對于過程來說,還可以進(jìn)一步屏蔽掉某些活動,格式為:過程{活動aid的集合},設(shè)過程P,P.A= {Activity1,Activity2, … ,Activityn},
即屏蔽掉一個活動就等于把該活動里所有的任務(wù)屏蔽掉,同理如果屏蔽掉多個活動時,就等于把這幾個活動的任務(wù)并集給屏蔽掉,即:
設(shè)T是需要被屏蔽掉的任務(wù)的有限集合,則PT為一個似P的過程,AT是一個似A的活動,只是P和A內(nèi)部執(zhí)行的任務(wù)如果出現(xiàn)在T中都被屏蔽掉了.顯然有:
α(PT) =α(P)-T,α(AT) =α(A)-T.
(μX·(c→X[]e→c→P),在對任務(wù)c進(jìn)行屏蔽運(yùn)算后:
在引入屏蔽算子后,會導(dǎo)致原本衛(wèi)式表示的過程行為變?yōu)榉切l(wèi)式形式,使其解不唯一,比如存在一個遞歸的過程行為:P=a→P,對任務(wù)a實(shí)施屏蔽操作后變?yōu)镻{a} =P{a},相當(dāng)于定義了一個方程x=x,這是一個具有無窮多個解的方程,對于出現(xiàn)這種情況,文中規(guī)定其最不確定的那個解就是所要求解的解,這樣就可以甩掉衛(wèi)式的限制條件,而且可以給形式為μX·F(X)的每個表達(dá)式賦予含義.
定義18 如果在活動中,出現(xiàn)形如μX·X的活動行為,那么就會導(dǎo)致該活動的行為是最不確定的,是最難預(yù)測、最難控制的,我們把具有這種性質(zhì)的活動稱之為活動渾沌,把包含有活動渾沌的過程稱之為過程渾沌.顯然一個渾沌過程是無用的,記為CHAOSαName,Name為活動名或過程名.
其實(shí),在建模之初的初始過程就可以看作是一個渾沌過程,因?yàn)閷τ诔跏歼^程來說,里面的活動和任務(wù)都是雜亂無章的,人們根本不清楚如何去實(shí)施演化,從哪里入手.
定義19 如果某個活動A的行為在執(zhí)行完某一個跡s之后,剩余的任務(wù)就進(jìn)入了一個混沌狀態(tài),就稱s為活動A的一條發(fā)散跡,由多條這樣的s組成的集合稱為活動A的發(fā)散跡集,記作DivergencesA(A),過程里面所有活動的發(fā)散跡集所構(gòu)成集合稱為該過程的發(fā)散跡集,記作DivergencesP(P).
DivergencesA(A) = {s|s∈TracesA(A)∧ (A/s) =CHAOSαA}.
在活動層次幾種基本控制關(guān)系的發(fā)散跡集的運(yùn)算關(guān)系如下:
DivergencesAsq(A1,A2) =DivergencesA(A1) ∪ {s^t|s∈TraceA(A1)∧t∈DivergencesA(A2)}(順序控制關(guān)系);
DivergencesAsl(A1,A2) =DivergencesA(A1) ∪DivergencesA(A2)(選擇控制關(guān)系);
DivergencesAcn(A1,A2) ={s^t|t∈(αA1∪αA2)*∧ ((sαA1∈DivergencesA(A1) ∧sαA2∈TraceA(A2)) ∨(sαA1∈TraceA(A1) ∧sαA2∈DivergencesA(A2))}(并行控制關(guān)系);
DivergencesAlp(A1,A2) =DivergencesA(A1)∪{s^t| (s∈ (TraceA(A1) ∪(TraceA(A2))*∧t∈ (DivergencesA(A1) ∪DivergencesA(A2))}(循環(huán)控制關(guān)系);
DivergencesAor(A1,A2)=DivergencesA(A1) ∪DivergencesA(A2) (或控制關(guān)系).
同拒絕集一樣,過程的發(fā)散跡集同樣不是簡單的把過程中所包含的各個活動的發(fā)散跡集簡單的合并在一起,即:
定理3 在一個含有n(n>2)個活動{Activity1,Activity2, …,Activityn}組成的過程P中,當(dāng)且僅當(dāng)這些活動之間的關(guān)系僅存在或控制關(guān)系和選擇控制關(guān)系時:
定理3也可以根據(jù)發(fā)散跡集在活動層的運(yùn)算規(guī)則得出,以例1的過程P1為例來計(jì)算過程的發(fā)散跡集,計(jì)算過程如下.
DivergencesAcn(A2,A3) = {s^t|t∈(αA2∪αA3)*∧ ((sαA2∈DivergencesA(A2) ∧sαA2∈TraceA(A3)) ∨(sαA2∈TraceA(A2) ∧sαA3∈DivergencesA(A3))};
DivergencesAsq(A1, (A2,A3, {},cn)) =DivergencesA(A1) ∪ {s^t|s∈TraceA(A1) ∧t∈DivergencesAcn(A2,A3)};
DivergencesP(P1) =DivergencesAsq((A1, (A2,A3, {},cn), {},sq),A4)=
DivergencesAsq(A1, (A2,A3, {},cn)) ∪ {s^t|s∈TraceAsq(A1, (A2,A3, {},cn)) ∧t∈DivergencesA(A4)}=DivergencesA(A1) ∪ {s^t|s∈TraceA(A1) ∧t∈DivergencesAcn(A2,A3)} ∪ {s^t|s∈
TraceAsq(A1, (A2,A3, {},cn)) ∧t∈DivergencesA(A4)}.
同樣的,在過程層次中,過程的幾種基本結(jié)構(gòu)的發(fā)散跡集的運(yùn)算關(guān)系如下所示,其結(jié)構(gòu)和在活動層的幾種基本控制關(guān)系的運(yùn)算是一樣的,具體的原因在描述拒絕集的運(yùn)算關(guān)系時已經(jīng)說明,在此不再重復(fù).
DivergencesP(P1;P2) =DivergencesP(P1) ∪ {s^t|s∈TraceP(P1) ∧t∈DivergencesP(P2)}(順序結(jié)構(gòu));
DivergencesP(P1[]P2)=DivergencesP(P1)∪DivergencesP(P2) (選擇結(jié)構(gòu));
DivergencesP(P1||P2) ={s^t|t∈(αP1∪αP2)*∧ ((sαP1∈DivergencesP(P1) ∧sαP2∈TraceP(P2)) ∨ (sαP1∈TraceP(P1) ∧sαP2∈DivergencesP(P2))} (并行結(jié)構(gòu));
DivergencesP(LnP1;P2)=DivergencesP(P1) ∪{s^t| (s∈ (TraceP(P1)∪ (TraceP(P2))*∧t∈(DivergencesP(P1) ∪DivergencesP(P2))}(循環(huán)結(jié)構(gòu));
在給出以上定義的基礎(chǔ)之上,還有一個重要的定義要給出,那就是絕境集[13],絕境集描述的不僅是活動或過程一開始就拒絕執(zhí)行的任務(wù),還描述了繼跡s之后可能的拒絕集,所以絕境集是一個跡和一個任務(wù)集的二元關(guān)系的集合.
定義20 絕境是一個二元關(guān)系failure=,其中s是活動或過程的跡,X是活動或過程在執(zhí)行完s中的任務(wù)后的拒絕集,活動的絕境集表示為FailuresA(Activity),過程的絕境集表示為FailuresP(Process).
由上述定義可知,活動的絕境集和過程的絕境集分別為:
FailuresA(Activity) = {|s∈TraceA(Activity)∧X∈RefusalsA(Activity/s)};
FailuresP(Process) = {|s∈TraceP(Process) ∧X∈RefusalsP(Process/s)}.
接下來,我們同樣給出絕境集分別在活動層和過程層上的運(yùn)算關(guān)系,在活動層次幾種基本控制關(guān)系的絕境集的運(yùn)算關(guān)系如下:
FailuresAsq(A1,A2) =FailuresA(A1) ∪{ |s∈TraceA(A1) ∧
FailuresAsl(A1,A2)={|∈(FailuresA(A1)∩FailuresA(A2)) ∨(s≠ <>∧ ∈(FailuresA(A1) ∪FailuresA(A2)))}∪{|s∈DivergencesAsl(A1,A2)} (選擇控制關(guān)系);
FailuresAcn(A1,A2) ={|s∈(αA1∪αA2)*∧∈FailuresA(A1)∧∈FailuresA(A2)} ∪{|s∈DivergencesAcn(A1,A2)}(并行控制關(guān)系);
FailuresAlp(A1,A2) =FailuresA(A1) ∪ { |s∈ (TraceA(A1)∪TraceA(A2))*∧
FailuresAor(A1,A2) =FailuresAsl(A1,A2)(或控制關(guān)系).
FailuresAcn(A2,A3) ={|s∈(αA1∪αA2)*∧∈FailuresA(A2)∧ ∈FailuresA(A3)} ∪{|s∈DivergencesAcn(A2,A3)};
FailuresAsq(A1, (A2,A3, {},cn)) =FailuresA(A1) ∪ { |s∈TraceA(A1) ∧
FailuresP(P1) =FailuresAsq((A1, (A2,A3, {},cn), {},sq),A4) =
FailuresAsq(A1, (A2,A3, {},cn)) ∈{ |s∈TraceAsq(A1, (A2,A3, {},cn)) ∧ |s∈TraceA(A1)∧
{ |s∈TraceAsq(A1, (A2,A3, {},cn)) ∧
在活動層次幾種基本結(jié)構(gòu)絕境集的運(yùn)算關(guān)系如下:
FailuresP(P1;P2) =FailuresP(P1) ∪ { |s∈TraceP(P1) ∧
FailuresP(P1[]P2)={|∈(FailuresP(P1)∩FailuresP(P2))∨ (s≠ <> ∧∈(FailuresP(P1)∪FailuresP(P2)))}∪{|s∈DivergencesPsl(P1,P2)} (選擇結(jié)構(gòu));
FailuresP(P1||P2) ={|s∈(αP1∪αP2)*∧ ∈FailuresP(P1) ∧∈FailuresA(P2)} ∪{|s∈DivergencesPcn(P1,P2)}(并行結(jié)構(gòu));
FailuresP(LnP1;P2) =FailuresP(P1) ∪{|s∈ (TraceP(P1)∪TraceP(P2))*∧
至此,我們回過去看定義6中定義活動時的F和Div,在給出以上這些概念的基礎(chǔ)之上就可以清晰地對F和Div進(jìn)行描述,其實(shí)F和Div所表示的分別是絕境集合發(fā)散跡集.在此基礎(chǔ)之上就可以給出確定性過程和不確定性過程的定義.
定義21 如果過程的行為不包括任何不確定性的因素,則稱該過程是確定性過程,反之稱為不確定性過程.
本文對面向目標(biāo)導(dǎo)向的軟件演化過程的行為進(jìn)行了深入細(xì)致的分析,以軟件演化過程的跡為基礎(chǔ),引出了過程的發(fā)散、絕境等問題,并給出了相應(yīng)求解辦法,對演化過程的行為進(jìn)行分析,有助于在演化工作開始之前發(fā)現(xiàn)不合理的設(shè)計(jì),以便盡早修改從而降低軟件演化的風(fēng)險.在過程的行為分析中,對過程的確定性、不確定性、發(fā)散性和絕境4個方面,分別從活動層和過程層進(jìn)行討論.在接下來的工作中,將要建立對應(yīng)的模型驗(yàn)證規(guī)則來對模型進(jìn)行驗(yàn)證.
[1] LEHMAN M M. Laws of software evolution revisited[M]//Software Process Technology. Berlin Heidelberg:Springer, 1996: 108-124.
[2] 單銀根,王安,黎連業(yè). 軟件能力成熟度模型 (CMM) 與軟件開發(fā)技術(shù)[M]. 北京:北京航空航天大學(xué)出版社, 2003.
[3] OSTERWEIL L. Software processes are software too[C]//Proceedings of the 9th International Conference on Software Engineering. IEEE Computer Society Press, 1987: 2-13.
[4] EL EMAM K, BIRK A. Validating the ISO/IEC 15504 measure of software requirements analysis process capability[J]. Software Engineering, IEEE Transactions on, 2000, 26(6): 541-566.
[5] KAHEN G, LEHMAN M M, RAMIL J F, et al. Dynamic modelling in the investigation of policies for E-type software evolution[C]//Proceedings of the Software Process Simulation Modeling Workshop ,ProSim 2000.
[6] 李長云. 軟件動態(tài)演化技術(shù)[M].北京:北京大學(xué)出版社, 2007.
[7] LI T. An approach to modelling software evolution processes[M]. Berlin: Springer, 2008.
[8] 吳駿, 王崇駿, 駱斌, 等. Agent 主動目標(biāo)的形式化模型[J]. Journal of Software, 2008, 19(7): 1644-1653.
[9] 趙欣培, 李明樹, 王青, 等. 一種基于 Agent 的自適應(yīng)軟件過程模型[J]. 軟件學(xué)報(bào), 2004, 15(3): 348-359.
[10] IEEE standard for developing software life cycle processes[S]. IEEE Standard 1074—1991,1997.
[11] The international organization for standardization (ISO) and the international electro technical commission (IEC)[S]. (ISO/IEC 12207) Standard for Information Technology-Software Life Cycle Processes, 1998.
[12] HOARE C A R.通信順序進(jìn)程[M]. 周巢塵,譯.北京:北京大學(xué)出版社, 1990.
[13] IEEE recommended practice for software requirements specifications[S]. IEEE Std 830—1998,1998.
[14]李超,謝沖武. 軟件需求分析方法研究進(jìn)展[J].湖北民族學(xué)院學(xué)報(bào),2013,31(2):204-211.
(責(zé)任編輯 莊紅林)
Study of the goal-directed software evolution process
HUANG Shi-fan1,SHEN Yong1,2,WANG Dao-hong3,KANG Hong-wei1,2,ZHENG Jian-lin1,JIA Shu-wei1
(1.School of Software, Yunnan University, Kunming 650091, China;2.Key Laboratory for Software Engineering of Yunnan Province, Yunnan University, Kunming 650091, China;3.Center of Science and Technology for Settlement, Rural Credit Cooperatives of Yunnan Province, Kunming 650000, China)
Analyses of the evolution process of the software can help discover some unreasonable designs and improve them earlier, thus reducing the software evolution risk. On the base of the goal-directed software evolution process, this research follows the principle of the communicating sequential process to give an incisive analysis of the software process. This paper analyzes the process trace, the process certainty and uncertainty respectively,and gives the calculation method of every kind of process.
communicating sequential process;goal-directed;software evolution process;process behavior
2014-03-07.
云南省軟件工程重點(diǎn)實(shí)驗(yàn)室面上基金(2012SE306;2011SE12).
黃世反(1988-),男,碩士研究生. 主要研究方向:軟件工程.
沈 勇(1970-),男,碩士,副研究員.主要研究方向:信息系統(tǒng)分析與集成、軟件工程與工程環(huán)境.
TP31
A
1672-8513(2015)01-0066-09