摘 要:對(duì)軟件演化及過(guò)程的特征進(jìn)行了描述,提出軟件演化過(guò)程的具體活動(dòng);分析了軟件演化過(guò)程中的反饋機(jī)制,提出了基于擴(kuò)展雙變遷Petri網(wǎng)和反饋循環(huán)的軟件演化過(guò)程模型。
關(guān)鍵詞:軟件演化;軟件過(guò)程;反饋;Petri網(wǎng)
中圖分類號(hào):TP311.5文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1001-3695(2007)06-0015-03
隨著計(jì)算機(jī)應(yīng)用的深入和軟件工程的發(fā)展,軟件系統(tǒng)已成為現(xiàn)代社會(huì)最重要的資產(chǎn)之一。越來(lái)越多的公司和社會(huì)機(jī)構(gòu)依賴于其內(nèi)部的軟件系統(tǒng)來(lái)提高競(jìng)爭(zhēng)力和減少成本。現(xiàn)在,軟件系統(tǒng)的規(guī)模變得越來(lái)越大,結(jié)構(gòu)也越來(lái)越復(fù)雜。其多年的運(yùn)行使軟件系統(tǒng)包含了企業(yè)的眾多知識(shí)。但軟件系統(tǒng)與其他系統(tǒng)一樣,隨著技術(shù)的進(jìn)步和環(huán)境的不斷變化,其自身也會(huì)逐漸老化,不再適應(yīng)用戶和環(huán)境的需要而變成遺產(chǎn)系統(tǒng)。為了充分有效地利用這些有用資源,對(duì)遺產(chǎn)系統(tǒng)進(jìn)行持續(xù)改造使之能滿足客戶的需要變得十分重要。
起初,人們對(duì)軟件進(jìn)行維護(hù)使之便于適應(yīng)環(huán)境的變化,后來(lái)人們又提出了軟件重用的思想和相應(yīng)的方法。但這些方法均是以一種被動(dòng)、消極的方式來(lái)改變軟件系統(tǒng),使之適應(yīng)已更改的環(huán)境。由于越來(lái)越快的社會(huì)環(huán)境變化和技術(shù)的提高,決定了原有的方式不能解決軟件日益老化的問(wèn)題。從系統(tǒng)工程的角度對(duì)軟件系統(tǒng)進(jìn)行演化成為一種值得探索的方法。
1 軟件演化及過(guò)程
1.1 軟件演化
按系統(tǒng)論的觀點(diǎn),演化是事物從一種多樣性統(tǒng)一形式轉(zhuǎn)變成另一種多樣性統(tǒng)一形式的具體過(guò)程。演化主要包括兩方面內(nèi)容:①新增層次的產(chǎn)生,即結(jié)構(gòu)演化;②跨越層次的相互關(guān)系或新層次結(jié)構(gòu)關(guān)系的形成,即功能演化。首先,明確了事物的演化是事物處在原有的多樣性統(tǒng)一的基礎(chǔ)上的演化;其次,演化不是原有多樣性成分的重組,而是新的多樣性的統(tǒng)一。它是事物內(nèi)部結(jié)構(gòu)和外部環(huán)境共同作用,不斷運(yùn)動(dòng)更新的結(jié)果。
現(xiàn)代社會(huì),人們?cè)絹?lái)越多地依靠軟件系統(tǒng)。隨著環(huán)境和技術(shù)的變化,軟件系統(tǒng)必須不斷地被修改、調(diào)整和擴(kuò)展,即必須不斷地演化,才能滿足用戶的需求。由于用戶變得更加復(fù)雜并更多地依靠軟件系統(tǒng),對(duì)軟件系統(tǒng)的快速、可靠、低成本、高效率的演化十分重要。許多因素促使軟件系統(tǒng)通過(guò)改變、升級(jí)或者替換來(lái)進(jìn)行不斷的演化。軟件演化已獲得普遍的共識(shí)。
由于外部環(huán)境和用戶需求的不斷變化及軟件開發(fā)技術(shù)的不斷發(fā)展,注定了軟件系統(tǒng)只有不斷的演化才能適應(yīng)用戶的新需求。
Lehman等人[1]把軟件演化定義為軟件程序系統(tǒng)在其生命周期中不斷維護(hù)、不斷完善的系統(tǒng)動(dòng)力學(xué)行為。如果系統(tǒng)的一個(gè)或多個(gè)部件隨時(shí)間經(jīng)歷不斷改進(jìn),則稱之為演化。演化的目的是為了適應(yīng)變化環(huán)境的需要而保持或提高用戶的滿意度。系統(tǒng)的功能和行為必須與變化的環(huán)境保持同步,缺陷被修正、參數(shù)被調(diào)整、功能被改善和擴(kuò)展、操作被改進(jìn)。它是軟件系統(tǒng)不斷逆向工程和正向工程的統(tǒng)一,即不斷的再工程[2]。
1.2 軟件演化過(guò)程特征
軟件演化過(guò)程是軟件演化和軟件過(guò)程的統(tǒng)一。按ISO/IEC12207標(biāo)準(zhǔn),軟件過(guò)程是指軟件生命期中若干活動(dòng)的集合?;顒?dòng)又稱為工作流程,又可細(xì)分為子活動(dòng)或任務(wù)。Lehman等人[3]認(rèn)為軟件演化過(guò)程是一個(gè)多層次、多循環(huán)、多用戶的反饋系統(tǒng)。
軟件演化過(guò)程包括以下特征[2]:
(1)迭代性。在軟件演化過(guò)程中,由于軟件系統(tǒng)必須不斷地進(jìn)行變革,許多活動(dòng)要以比傳統(tǒng)開發(fā)過(guò)程更高頻率進(jìn)行重復(fù)執(zhí)行。
(2)并行性。為了提高軟件演化過(guò)程的效率,必須對(duì)軟件演化過(guò)程進(jìn)行并行性處理。
(3)反饋性。用戶的需求和軟件系統(tǒng)所處的環(huán)境是在不斷變化的。當(dāng)環(huán)境變化后就必須作出反饋,以便軟件演化過(guò)程的執(zhí)行。
(4)多層次性。軟件演化過(guò)程是一項(xiàng)多層次的工作。它是多方面共同作用的結(jié)果。
(5)交錯(cuò)性。軟件演化過(guò)程是連續(xù)性與間斷性的統(tǒng)一;它們是交錯(cuò)著進(jìn)行的。
1.3 軟件演化過(guò)程的活動(dòng)
軟件演化過(guò)程是對(duì)遺產(chǎn)軟件系統(tǒng)進(jìn)行演化的若干活動(dòng)的集合,可由一系列的步驟組成。它是對(duì)軟件系統(tǒng)進(jìn)行不斷逆向工程和正向工程的統(tǒng)一,是一個(gè)不斷循環(huán)的過(guò)程。因此一次循環(huán)可以包括以下活動(dòng):
(1)演化計(jì)劃。對(duì)遺產(chǎn)軟件進(jìn)行可行性研究,掌握工作范圍及所花代價(jià),進(jìn)行成本預(yù)算和軟件演化計(jì)劃。
(2)軟件理解。對(duì)遺產(chǎn)軟件的內(nèi)部結(jié)構(gòu)進(jìn)行分析;用來(lái)識(shí)別系統(tǒng)組件及其相互關(guān)系,產(chǎn)生系統(tǒng)的另一種表示形式或更高層的抽象。
(3)需求變更分析。遺產(chǎn)系統(tǒng)的產(chǎn)生往往是由于用戶需求改變所致。必須對(duì)用戶的前后需求進(jìn)行對(duì)比分析,找出其中的差異。
(4)程序重構(gòu)。對(duì)原系統(tǒng)的程序進(jìn)行重構(gòu)以使之能適應(yīng)用戶的當(dāng)前需要。
(5)系統(tǒng)測(cè)試。對(duì)改造后的部件和整個(gè)系統(tǒng)進(jìn)行測(cè)試,以便檢查出其中的錯(cuò)誤和不足之處。
軟件演化過(guò)程一次循環(huán)模型如圖1所示。
經(jīng)過(guò)一次循環(huán),軟件系統(tǒng)從遺傳系統(tǒng)變成可以運(yùn)用的現(xiàn)行系統(tǒng),從而保證了用戶的滿意度。但是隨著環(huán)境的變化,軟件系統(tǒng)會(huì)部分或整體出現(xiàn)老化現(xiàn)象,因此必須對(duì)系統(tǒng)進(jìn)行不斷地循環(huán)改進(jìn)。
2 軟件演化過(guò)程中的反饋機(jī)制
2.1 系統(tǒng)工程中的反饋原理
反饋一詞最初來(lái)自生理學(xué),后來(lái)由維納在《控制論》中作了充分的科學(xué)研究和技術(shù)處理。簡(jiǎn)單地說(shuō),反饋是指系統(tǒng)的輸出和行為對(duì)自身狀態(tài)重新產(chǎn)生影響的概念。系統(tǒng)內(nèi)同一單元或同一子塊的輸出與輸入間的關(guān)系稱為反饋。對(duì)整個(gè)系統(tǒng)而言,反饋則是系統(tǒng)輸出與來(lái)自外部環(huán)境的輸入的關(guān)系。反饋可以從單元、子塊或系統(tǒng)的輸出直接連至其相應(yīng)的輸入,也可以經(jīng)由媒介——其他單元、子塊,甚至其他系統(tǒng)實(shí)現(xiàn)[4]。
換言之,反饋就是信息的傳輸與回授。它可以概括為如圖2所示。其中的輸出是系統(tǒng)外部行為的總和;輸入是系統(tǒng)所受影響的總和。
圖1 軟件演化過(guò)程模型圖2 反饋?zhàn)饔?/p>
反饋按照過(guò)程的特點(diǎn),可以分為正反饋和負(fù)反饋兩種[5]。正反饋的特點(diǎn)是,能產(chǎn)生自身運(yùn)動(dòng)的加強(qiáng)過(guò)程;在此過(guò)程中運(yùn)動(dòng)或動(dòng)作所引起的后果將回授,使原來(lái)的趨勢(shì)得到加強(qiáng)。負(fù)反饋的特點(diǎn)是,能自動(dòng)尋求給定的目標(biāo);未達(dá)到或未趨進(jìn)目標(biāo)時(shí)將不斷作出響應(yīng)。
正反饋往往破壞系統(tǒng)的穩(wěn)定;負(fù)反饋則是系統(tǒng)趨于穩(wěn)定和實(shí)現(xiàn)穩(wěn)定的一種基本作用。具有正反饋特性的回路稱為正反饋回路;具有負(fù)反饋特性的回路稱為負(fù)反饋回路。
2.2 軟件演化過(guò)程中的反饋機(jī)制
軟件演化是軟件系統(tǒng)在其生命周期中不斷維護(hù)、不斷完善的系統(tǒng)動(dòng)力學(xué)行為[1]。隨著環(huán)境和用戶需求的不斷變化,軟件系統(tǒng)必須進(jìn)行持續(xù)改善和擴(kuò)展,即不斷地再工程才能滿足用戶的需要,提高其滿意度。但軟件演化過(guò)程并非順序進(jìn)行的,是根據(jù)一定的環(huán)境迭代地、多層次地進(jìn)行。它同時(shí)也是一個(gè)不斷進(jìn)行反饋的過(guò)程[6]。
從整個(gè)系統(tǒng)的角度看,開發(fā)軟件系統(tǒng)的目的是為了滿足用戶的需要,提高其生產(chǎn)力,所以軟件系統(tǒng)會(huì)對(duì)用戶和環(huán)境產(chǎn)生影響,促使環(huán)境的改善和用戶要求的提高。環(huán)境和用戶需求的變化必然會(huì)反饋到軟件系統(tǒng)中,需要軟件系統(tǒng)作相應(yīng)的變化,從而導(dǎo)致系統(tǒng)的演化。反饋改變了系統(tǒng)及過(guò)程的信息熵。信息熵表示系統(tǒng)的混亂狀況,即系統(tǒng)的不確定性程度。當(dāng)信息熵達(dá)到一定的程度,系統(tǒng)必須進(jìn)行相應(yīng)的演化活動(dòng)。軟件演化中的反饋機(jī)制如圖3所示。
演化過(guò)程中的各個(gè)階段也需要進(jìn)行反饋。軟件演化過(guò)程包括演化計(jì)劃、軟件理解、需求變更分析、程序重構(gòu)、系統(tǒng)測(cè)試等各種階段。在每個(gè)階段進(jìn)行后,對(duì)軟件系統(tǒng)均可能進(jìn)行反饋,從而在軟件演化過(guò)程中產(chǎn)生一些反饋循環(huán)。
3 基于擴(kuò)展雙變遷Petri網(wǎng)的軟件演化過(guò)程模型
3.1 擴(kuò)展雙變遷Petri網(wǎng)
擴(kuò)展雙變遷Petri網(wǎng)以原雙變遷Petri網(wǎng)[7]為基礎(chǔ),包括三種類型的節(jié)點(diǎn),即位置、T變遷和Q變遷。以下給出擴(kuò)展雙變遷Petri網(wǎng)的形式化定義。
定義1 擴(kuò)展雙變遷Petri網(wǎng)結(jié)構(gòu)可定義為六元組:
定義2 擴(kuò)展雙變遷Petri網(wǎng)可定義為七元組:
3.2 基于雙變遷Petri網(wǎng)的軟件演化過(guò)程模型
根據(jù)軟件演化過(guò)程的特征可以知道,軟件演化過(guò)程不僅是對(duì)遺產(chǎn)軟件系統(tǒng)進(jìn)行演化的若干活動(dòng)的集合,同時(shí)它的各活動(dòng)中還包含著相應(yīng)的反饋循環(huán)。因?yàn)閭鹘y(tǒng)Petri網(wǎng)無(wú)法區(qū)分活動(dòng)步驟和反饋機(jī)制,所以就在基于反饋循環(huán)的軟件演化過(guò)程中引入擴(kuò)展雙變遷Petri網(wǎng)以便對(duì)其進(jìn)行建模。在擴(kuò)展雙變遷Petri網(wǎng)中用T變遷表示活動(dòng),而用Q變遷表示反饋,則可以建立相應(yīng)的軟件演化過(guò)程模型,如圖4所示。
圖3 軟件演化中的反饋機(jī)制
圖4 基于雙變遷Petri網(wǎng)的軟件演化過(guò)程模型
其中,T1表示演化計(jì)劃,T2表示軟件理解,T3表示需求變更分析,T4表示程序重構(gòu),T5表示系統(tǒng)測(cè)試活動(dòng);實(shí)心框表示反饋?zhàn)冞w。
在基于反饋的軟件演化過(guò)程模型中,每一次演化循環(huán)總體是按演化計(jì)劃、軟件理解、需求變更分析、程序重構(gòu)、系統(tǒng)測(cè)試順序進(jìn)行的。但由于反饋機(jī)制的原因,完成一個(gè)活動(dòng)時(shí)會(huì)有相應(yīng)的信息通過(guò)反饋機(jī)制反饋到系統(tǒng)中,使得系統(tǒng)的信息熵發(fā)生變化,從而產(chǎn)生循環(huán)迭代。根據(jù)反饋原理,反饋?zhàn)冞w的前集往往是相應(yīng)活動(dòng)的后集。反饋?zhàn)冞w導(dǎo)致了軟件演化過(guò)程中的循環(huán)與迭代。軟件演化過(guò)程就是對(duì)軟件系統(tǒng)進(jìn)行不斷循環(huán)改進(jìn)的過(guò)程。
在圖4的模型中,首先對(duì)系統(tǒng)進(jìn)行演化可行性,擬訂演化計(jì)劃;然后對(duì)遺傳軟件系統(tǒng)進(jìn)行理解和需求變更分析。它們是軟件逆向工程最重要的部分,同時(shí)也是軟件演化能否成功的關(guān)鍵,所以必須不斷地反饋和迭代。之后的程序重構(gòu)和系統(tǒng)測(cè)試是一項(xiàng)正向工程。它是對(duì)軟件系統(tǒng)需要演化的部件進(jìn)行改進(jìn)和增強(qiáng),使得系統(tǒng)能適應(yīng)用戶工作的需要。
此外,根據(jù)擴(kuò)展雙變遷Petri網(wǎng),過(guò)程模型中每一活動(dòng)的執(zhí)行依賴于其前集中的托肯數(shù)和信息量。托肯數(shù)代表是否有足夠的資源可供使用;信息熵代表系統(tǒng)是否應(yīng)進(jìn)行相應(yīng)的演化活動(dòng)。
4 結(jié)束語(yǔ)
隨著軟件系統(tǒng)的老化和用戶環(huán)境的變化,遺產(chǎn)系統(tǒng)問(wèn)題變得日益嚴(yán)峻。軟件的演化過(guò)程成為現(xiàn)代軟件工程研究的新熱點(diǎn)。本文對(duì)軟件演化過(guò)程及其特征進(jìn)行描述,提出了軟件演化過(guò)程的具體活動(dòng)及模型;認(rèn)為軟件演化過(guò)程是根據(jù)用戶和環(huán)境的需要對(duì)軟件系統(tǒng)不斷地改進(jìn)完善的系統(tǒng)動(dòng)力學(xué)行為,是一個(gè)多循環(huán)、多迭代的反饋系統(tǒng)。同時(shí),分析了軟件演化過(guò)程中的反饋機(jī)制,提出了基于擴(kuò)展雙變遷Petri網(wǎng)和反饋循環(huán)的軟件演化過(guò)程模型。
本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。