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