软件工程:维护
在軟件產(chǎn)品被開發(fā)出來(lái)并交付用戶使用之后,就進(jìn)入了軟件的運(yùn)行維護(hù)階段。這個(gè)階段是軟件生命周期的最后一個(gè)階段,其基本任務(wù)是保證軟件在一個(gè)相當(dāng)長(zhǎng)的時(shí)期能夠正常運(yùn)行。
軟件維護(hù)需要的工作量很大,平均說(shuō)來(lái),大型軟件的維護(hù)成本高達(dá)開發(fā)成本的4倍左右。
軟件工程的主要目的就是要提高軟件的可維護(hù)性,減少軟件維護(hù)所需要的工作量,降低軟件系統(tǒng)的總成本。
1,軟件維護(hù)的定義
所謂軟件維護(hù)就是在軟件已經(jīng)交付使用之后,為了改正錯(cuò)誤或滿足新的需要而修改軟件的過(guò)程。可以通過(guò)描述軟件交付使用后可能進(jìn)行的4項(xiàng)活動(dòng),具體地定義軟件維護(hù)。
| 改正性維護(hù) (第一項(xiàng)維護(hù)活動(dòng)) | 在任何大型程序的使用期間,用戶必然會(huì)發(fā)現(xiàn)程序錯(cuò)誤,并且把他們遇到的問(wèn)題報(bào)告給維護(hù)人員。把診斷和改正錯(cuò)誤的過(guò)程稱為改正性維護(hù)。 |
| 適應(yīng)性維護(hù) (第二項(xiàng)維護(hù)活動(dòng)) | 為了和變化了的環(huán)境適當(dāng)?shù)嘏浜?/strong>而進(jìn)行的修改軟件的活動(dòng),是既必要又經(jīng)常的維護(hù)活動(dòng)。 |
| 完善性維護(hù) (第三項(xiàng)維護(hù)活動(dòng)) | 使用軟件的過(guò)程中用戶往往提出增加新功能或修改已有功能的建議,還可能提出一般性的改進(jìn)意見。為了滿足這類要求,需要進(jìn)行完善性維護(hù)。這項(xiàng)維護(hù)活動(dòng)通常占軟件維護(hù)工作的大部分。 |
| 預(yù)防性維護(hù) (第四項(xiàng)維護(hù)活動(dòng)) | 為了改進(jìn)未來(lái)的可維護(hù)性或可靠性,或?yàn)榱私o未來(lái)的改進(jìn)奠定更好的基礎(chǔ)而修改軟件 |
從上述關(guān)于軟件維護(hù)的定義不難看出,軟件維護(hù)絕不僅限于糾正使用中發(fā)現(xiàn)的錯(cuò)誤,事實(shí)上在全部維護(hù)活動(dòng)中一半以上是完善性維護(hù)。應(yīng)該注意,上述4類維護(hù)活動(dòng)都必須應(yīng)用于整個(gè)軟件配置,維護(hù)軟件文檔和維護(hù)軟件的可執(zhí)行代碼是同樣重要的。
2,軟件維護(hù)的特點(diǎn)
2.1,結(jié)構(gòu)化維護(hù)和非結(jié)構(gòu)化維護(hù)的差別很大
1,非機(jī)構(gòu)化維護(hù)
如果軟件配置的唯一成分是程序代碼,那么維護(hù)活動(dòng)從艱苦地評(píng)價(jià)程序代碼開始,而且常常由于程序內(nèi)部文檔不足而使評(píng)價(jià)更困難,對(duì)于軟件結(jié)構(gòu)、全程數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)接口、性能和(或)設(shè)計(jì)約束等經(jīng)常會(huì)產(chǎn)生誤解,而且對(duì)程序代碼所做的改動(dòng)的后果也是難于估量的。
非結(jié)構(gòu)化維護(hù)需要付出很大代價(jià)(浪費(fèi)精力并且遭受挫折的打擊),這種維護(hù)方式是沒(méi)有使用良好定義的方法學(xué)開發(fā)出來(lái)的軟件的必然結(jié)果。
2,結(jié)構(gòu)化維護(hù)
如果有一個(gè)完整的軟件配置存在,那么維護(hù)工作從評(píng)價(jià)設(shè)計(jì)文檔開始,確定軟件重要的結(jié)構(gòu)、性能以及接口等特點(diǎn);估量要求的改動(dòng)將帶來(lái)的影響,并且計(jì)劃實(shí)施途徑。然后:
- 首先,修改設(shè)計(jì)并且對(duì)所做的修改進(jìn)行仔細(xì)復(fù)查。
- 然后,編寫相應(yīng)的源程序代碼;
- 接下來(lái),使用在測(cè)試說(shuō)明書中包含的信息進(jìn)行回歸測(cè)試;
- 最后,把修改后的軟件再次交付使用。
剛才描述的事件構(gòu)成結(jié)構(gòu)化維護(hù),它是在軟件開發(fā)的早期應(yīng)用軟件工程方法學(xué)的結(jié)果。雖然有了軟件的完整配置并不能保證維護(hù)中沒(méi)有問(wèn)題,但是確實(shí)能減少精力的浪費(fèi)并且能提高維護(hù)的總體質(zhì)量。
2.2,維護(hù)的代價(jià)高昂
因?yàn)榭捎玫馁Y源必須供維護(hù)任務(wù)使用,以致耽誤甚至喪失了開發(fā)的良機(jī),這是軟件維護(hù)的一個(gè)無(wú)形的代價(jià)。其他無(wú)形的代價(jià)還有以下幾個(gè)。
- 當(dāng)看來(lái)合理的有關(guān)改錯(cuò)或修改的要求不能及時(shí)滿足時(shí)將引起用戶不滿。
- 由于維護(hù)時(shí)的改動(dòng),在軟件中引入了潛伏的錯(cuò)誤,從而降低了軟件的質(zhì)量。
- 當(dāng)必須把軟件工程師調(diào)去從事維護(hù)工作時(shí),將在開發(fā)過(guò)程中造成混亂。
軟件維護(hù)的最后一個(gè)代價(jià)是生產(chǎn)率的大幅度下降,這種情況在維護(hù)舊程序時(shí)常常遇到。
2.3,維護(hù)的問(wèn)題很多
(1)理解別人寫的程序通常非常困難,而且困難程度隨著軟件配置成分的減少而迅速增加。如果僅有程序代碼沒(méi)有說(shuō)明文檔,則會(huì)出現(xiàn)嚴(yán)重的問(wèn)題。
(2)需要維護(hù)的軟件往往沒(méi)有合格的文檔,或者文檔資料顯著不足。認(rèn)識(shí)到軟件必須有文檔僅僅是第一步,容易理解的并且和程序代碼完全一致的文檔才真正有價(jià)值。
(3)當(dāng)要求對(duì)軟件進(jìn)行維護(hù)時(shí),不能指望由開發(fā)人員給人們仔細(xì)說(shuō)明軟件。由于維護(hù)階段持續(xù)的時(shí)間很長(zhǎng),因此,當(dāng)需要解釋軟件時(shí),往往原來(lái)寫程序的人已經(jīng)不在附近了。
(4)絕大多數(shù)軟件在設(shè)計(jì)時(shí)沒(méi)有考慮將來(lái)的修改。除非使用強(qiáng)調(diào)模塊獨(dú)立原理的設(shè)計(jì)方法學(xué),否則修改軟件既困難又容易發(fā)生差錯(cuò)。
(5)軟件維護(hù)不是一項(xiàng)吸引人的工作。形成這種觀念很大程度上是因?yàn)榫S護(hù)工作經(jīng)常遭受挫折。
上述種種問(wèn)題在現(xiàn)有的沒(méi)采用軟件工程思想開發(fā)出來(lái)的軟件中,都或多或少地存在著。不應(yīng)該把一種科學(xué)的方法學(xué)看做萬(wàn)應(yīng)靈藥,但是,軟件工程至少部分地解決了與維護(hù)有關(guān)的每一個(gè)問(wèn)題。
3,軟件維護(hù)過(guò)程
維護(hù)過(guò)程本質(zhì)上是修改和壓縮了的軟件定義和開發(fā)過(guò)程,而且事實(shí)上遠(yuǎn)在提出一項(xiàng)維護(hù)要求之前,與軟件維護(hù)有關(guān)的工作已經(jīng)開始了。
- 首先必須建立一個(gè)維護(hù)組織
- 隨后必須確定報(bào)告和評(píng)價(jià)的過(guò)程
- 而且必須為每個(gè)維護(hù)要求規(guī)定一個(gè)標(biāo)準(zhǔn)化的事件序列
此外,還應(yīng)該建立一個(gè)適用于維護(hù)活動(dòng)的記錄保管過(guò)程,并且規(guī)定復(fù)審標(biāo)準(zhǔn)。
3.1,維護(hù)組織
雖然通常并不需要建立正式的維護(hù)組織,但是,即使對(duì)于一個(gè)小的軟件開發(fā)團(tuán)體而言,非正式地委托責(zé)任也是絕對(duì)必要的。
每個(gè)維護(hù)要求都通過(guò)維護(hù)管理員轉(zhuǎn)交給熟悉該產(chǎn)品的系統(tǒng)管理員去評(píng)價(jià)。系統(tǒng)管理員是被指定去熟悉一小部分產(chǎn)品程序的技術(shù)人員。系統(tǒng)管理員對(duì)維護(hù)任務(wù)做出評(píng)價(jià)之后,由變化授權(quán)人決定應(yīng)該進(jìn)行的活動(dòng)。
在維護(hù)活動(dòng)開始之前就明確維護(hù)責(zé)任是十分必要的,這樣做可以大大減少維護(hù)過(guò)程中可能出現(xiàn)的混亂。
3.2,維護(hù)報(bào)告
應(yīng)該用標(biāo)準(zhǔn)化的格式表達(dá)所有軟件維護(hù)要求。
對(duì)于適應(yīng)性或完善性的維護(hù)要求,應(yīng)該提出一個(gè)簡(jiǎn)短的需求說(shuō)明書。如前所述,由維護(hù)管理員和系統(tǒng)管理員評(píng)價(jià)用戶提交的維護(hù)要求表。
維護(hù)要求表是一個(gè)外部產(chǎn)生的文件,它是計(jì)劃維護(hù)活動(dòng)的基礎(chǔ)。軟件組織內(nèi)部應(yīng)該制定出一個(gè)軟件修改報(bào)告,它給出下述信息。(1) 滿足維護(hù)要求表中提出的要求所需要的工作量。(2) 維護(hù)要求的性質(zhì)。(3) 這項(xiàng)要求的優(yōu)先次序。(4) 與修改有關(guān)的事后數(shù)據(jù)。
在擬定進(jìn)一步的維護(hù)計(jì)劃之前,把軟件修改報(bào)告提交給變化授權(quán)人審查批準(zhǔn)。
3.3,維護(hù)的事件流
首先應(yīng)該確定要求進(jìn)行的維護(hù)的類型。用戶常常把一項(xiàng)要求看作是為了改正軟件的錯(cuò)誤(改正性維護(hù)),而開發(fā)人員可能把同一項(xiàng)要求看作是適應(yīng)性或完善性維護(hù)。當(dāng)存在不同意見時(shí)必須協(xié)商解決。
不管維護(hù)類型如何,都需要進(jìn)行同樣的技術(shù)工作。包括:修改軟件設(shè)計(jì)、復(fù)查、必要的代碼修改、單元測(cè)試和集成測(cè)試(包括使用以前的測(cè)試方案的回歸測(cè)試)、驗(yàn)收測(cè)試和復(fù)審。
不同類型的維護(hù)強(qiáng)調(diào)的重點(diǎn)不同,但是基本途徑是相同的。維護(hù)事件流中最后一個(gè)事件是復(fù)審,它再次檢驗(yàn)軟件配置的所有成分的有效性,并且保證事實(shí)上滿足了維護(hù)要求表中的要求。
3.4,保護(hù)維護(hù)記錄
哪些數(shù)據(jù)是值得記錄的?
1程序標(biāo)識(shí);2源語(yǔ)句數(shù);3機(jī)器指令條數(shù);4使用的程序設(shè)計(jì)語(yǔ)言;5程序安裝的日期;6自從安裝以來(lái)程序運(yùn)行的次數(shù);7自從安裝以來(lái)程序失效的次數(shù);8程序變動(dòng)的層次和標(biāo)識(shí);9因程序變動(dòng)而增加的源語(yǔ)句數(shù);10因程序變動(dòng)而刪除的源語(yǔ)句數(shù);11每個(gè)改動(dòng)耗費(fèi)的人時(shí)數(shù);12程序改動(dòng)的日期;13軟件工程師的名字;14維護(hù)要求表的標(biāo)識(shí);15維護(hù)類型;16維護(hù)開始和完成的日期;17累計(jì)用于維護(hù)的人時(shí)數(shù);18與完成的維護(hù)相聯(lián)系的純效益。
應(yīng)該為每項(xiàng)維護(hù)工作都收集上述數(shù)據(jù)。可以利用這些數(shù)據(jù)構(gòu)成一個(gè)維護(hù)數(shù)據(jù)庫(kù)的基礎(chǔ)。
3.5,評(píng)價(jià)維護(hù)活動(dòng)
可以從下述7個(gè)方面度量維護(hù)工作。
- 每次程序運(yùn)行平均失效的次數(shù)。
- 用于每一類維護(hù)活動(dòng)的總?cè)藭r(shí)數(shù)。
- 平均每個(gè)程序、每種語(yǔ)言、每種維護(hù)類型所做的程序變動(dòng)數(shù)。
- 維護(hù)過(guò)程中增加或刪除一個(gè)源語(yǔ)句平均花費(fèi)的人時(shí)數(shù)。
- 維護(hù)每種語(yǔ)言平均花費(fèi)的人時(shí)數(shù)。
- 一張維護(hù)要求表的平均周轉(zhuǎn)時(shí)間。
- 不同維護(hù)類型所占的百分比。
4,軟件的可維護(hù)性
可維護(hù)性:維護(hù)人員理解、改正、改動(dòng)或改進(jìn)這個(gè)軟件的難易程度。
提高可維護(hù)性是支配軟件工程方法學(xué)所有步驟的關(guān)鍵目標(biāo)!
4.1,決定軟件可維護(hù)性的因素
維護(hù)就是在軟件交付使用后進(jìn)行的修改,修改之前必須理解待修改的對(duì)象,修改之后應(yīng)該進(jìn)行必要的測(cè)試,以保證所做的修改是正確的。如果是改正性維護(hù),還必須預(yù)先進(jìn)行調(diào)試以確定錯(cuò)誤的具體位置。因此,決定軟件可維護(hù)性的因素主要有下述5個(gè)。
| 可理解性 | 外來(lái)讀者理解軟件的結(jié)構(gòu)、功能、接口和內(nèi)部處理過(guò)程的難易程度。 |
| 模塊化(模塊結(jié)構(gòu)良好,高內(nèi)聚,松耦合)、詳細(xì)的設(shè)計(jì)文檔、結(jié)構(gòu)化設(shè)計(jì)、程序內(nèi)部的文檔和良好的高級(jí)程序設(shè)計(jì)語(yǔ)言等,都對(duì)提高軟件的可理解性有重要貢獻(xiàn)。 | |
| 可測(cè)試性 | 診斷和測(cè)試的容易程度取決于軟件容易理解的程度。 |
| 對(duì)于程序模塊來(lái)說(shuō),可以用程序復(fù)雜度來(lái)度量它的可測(cè)試性。模塊的環(huán)形復(fù)雜度越大,可執(zhí)行的路徑就越多,因此,全面測(cè)試它的難度就越高。 | |
| 可修改性 | 軟件容易修改的程度和設(shè)計(jì)原理和啟發(fā)規(guī)則直接有關(guān)。 |
| 耦合、內(nèi)聚、信息隱藏、局部化、控制域與作用域的關(guān)系等,都影響軟件的可修改性。 | |
| 可移植性 | 把程序從一種計(jì)算環(huán)境(硬件配置和操作系統(tǒng))轉(zhuǎn)移到另一種計(jì)算環(huán)境的難易程度。 |
| 把與硬件、操作系統(tǒng)以及其他外部設(shè)備有關(guān)的程序代碼集中放到特定的程序模塊中,可以把因環(huán)境變化而必須修改的程序局限在少數(shù)程序模塊中,從而降低修改的難度。 | |
| 可重用性 | 同一事物不做修改或稍加改動(dòng)就在不同環(huán)境中多次重復(fù)使用。大量使用可重用的軟件構(gòu)件來(lái)開發(fā)軟件,可以從下述兩個(gè)方面提高軟件的可維護(hù)性。 |
| (1) 通常,可重用的軟件構(gòu)件在開發(fā)時(shí)都經(jīng)過(guò)很嚴(yán)格的測(cè)試,可靠性比較高,且在每次重用過(guò)程中都會(huì)發(fā)現(xiàn)并清除一些錯(cuò)誤,隨著時(shí)間推移,這樣的構(gòu)件將變成實(shí)質(zhì)上無(wú)錯(cuò)誤的。因此,軟件中使用的可重用構(gòu)件越多,軟件的可靠性越高,改正性維護(hù)需求就越少。 | |
| (2) 很容易修改可重用的軟件構(gòu)件使之再次應(yīng)用在新環(huán)境中,因此,軟件中使用的可重用構(gòu)件越多,適應(yīng)性和完善性維護(hù)也就越容易。 |
4.2,文檔
文檔是影響軟件可維護(hù)性的決定因素。由于長(zhǎng)期使用的大型軟件系統(tǒng)在使用過(guò)程中必然會(huì)經(jīng)受多次修改,所以文檔比程序代碼更重要。
軟件文檔應(yīng)該滿足下述要求:
(1)必須描述如何使用這個(gè)系統(tǒng),沒(méi)有這種描述時(shí)即使是最 簡(jiǎn)單的系統(tǒng)也無(wú)法使用。
(2) 必須描述怎樣安裝和管理這個(gè)系統(tǒng)。
(3) 必須描述系統(tǒng)需求和設(shè)計(jì)。
(4) 必須描述系統(tǒng)的實(shí)現(xiàn)和測(cè)試,以便使系統(tǒng)成為可維護(hù)的。
1,用戶文檔
用戶文檔是用戶了解系統(tǒng)的第一步,它應(yīng)該能使用戶獲得對(duì)系統(tǒng)的準(zhǔn)確的初步印象。
?(1)功能描述
?(2) 安裝文檔
?(3) 使用手冊(cè)
?(4) 參考手冊(cè)(要完整)
?(5) 操作員指南(如果需要有系統(tǒng)操作員的話)
2,系統(tǒng)文檔
???????? 所謂系統(tǒng)文檔指從問(wèn)題定義、需求說(shuō)明到驗(yàn)收測(cè)試計(jì)劃這樣一系列和系統(tǒng)實(shí)現(xiàn)有關(guān)的文檔。描述系統(tǒng)設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試的文檔對(duì)于理解程序和維護(hù)程序來(lái)說(shuō)是極端重要的。
?????? 和用戶文檔類似,系統(tǒng)文檔的結(jié)構(gòu)也應(yīng)該能把讀者從對(duì)系統(tǒng)概貌的了解,引導(dǎo)到對(duì)系統(tǒng)每個(gè)方面每個(gè)特點(diǎn)的更形式化更具體的認(rèn)識(shí)。
4.3,可維護(hù)性復(fù)審
為什么要進(jìn)行可維護(hù)性復(fù)審?
- 在完成了每項(xiàng)維護(hù)工作之后,都應(yīng)該對(duì)軟件維護(hù)本身進(jìn)行仔細(xì)認(rèn)真的復(fù)審。
- 不能準(zhǔn)確反映軟件當(dāng)前狀態(tài)的設(shè)計(jì)文檔可能比完全沒(méi)有文檔更壞。
- 如果對(duì)軟件的可執(zhí)行部分的修改沒(méi)有及時(shí)反映在用戶文檔中,則必然會(huì)使用戶因?yàn)槭艽煺鄱a(chǎn)生不滿。
- 在軟件再次交付使用之前,對(duì)軟件配置進(jìn)行嚴(yán)格的復(fù)審,則可大大減少文檔的問(wèn)題。
- 在需求分析階段的復(fù)審過(guò)程中,應(yīng)該對(duì)將來(lái)要改進(jìn)的部分和可能會(huì)修改的部分加以注意并指明;應(yīng)該討論軟件的可移植性問(wèn)題,并且考慮可能影響軟件維護(hù)的系統(tǒng)界面。
- 在正式的和非正式的設(shè)計(jì)復(fù)審期間,應(yīng)該從容易修改、模塊化和功能獨(dú)立的目標(biāo)出發(fā),評(píng)價(jià)軟件的結(jié)構(gòu)和過(guò)程;設(shè)計(jì)中應(yīng)該對(duì)將來(lái)可能修改的部分預(yù)作準(zhǔn)備。
5,預(yù)防性維護(hù)
怎樣滿足用戶對(duì)老程序的維護(hù)要求?
(1)反復(fù)多次地做修改程序的嘗試,與不可見的設(shè)計(jì)及源代碼“頑強(qiáng)戰(zhàn)斗”,以實(shí)現(xiàn)所要求的修改。
(2) 通過(guò)仔細(xì)分析程序盡可能多地掌握程序的內(nèi)部工作細(xì)節(jié),以便更有效地修改它。
(3) 在深入理解原有設(shè)計(jì)的基礎(chǔ)上,用軟件工程方法重新設(shè)計(jì)、重新編碼和測(cè)試那些需要變更的軟件部分。
(4) 以軟件工程方法學(xué)為指導(dǎo),對(duì)程序全部重新設(shè)計(jì)、重新編碼和測(cè)試,為此可以使用CASE工具(逆向工程和再工程工具)來(lái)幫助理解原有的設(shè)計(jì)
預(yù)防性維護(hù):把今天的方法學(xué)應(yīng)用到昨天的系統(tǒng)上,以支持明天的需求。
在一個(gè)正在工作的程序版本已經(jīng)存在的情況下重新開發(fā)一個(gè)大型程序,似乎是一種浪費(fèi)。其實(shí)不然,下述事實(shí)很能說(shuō)明問(wèn)題。
? (1) 維護(hù)一行源代碼的代價(jià)可能是最初開發(fā)該行源代碼代價(jià)的14~40倍。
? (2) 重新設(shè)計(jì)軟件體系結(jié)構(gòu)(程序及數(shù)據(jù)結(jié)構(gòu))時(shí)使用了現(xiàn)代設(shè)計(jì)概念,它對(duì)將來(lái)的維護(hù)可能有很大的幫助。
? (3) 由于現(xiàn)有的程序版本可作為軟件原型使用,開發(fā)生產(chǎn)率可大大高于平均水平。
? (4) 用戶具有較多使用該軟件的經(jīng)驗(yàn),因此,能夠很容易地搞清晰的變更需求和變更的范圍。
? (5) 利用逆向工程和再工程的工具,可以使一部分工作自動(dòng)化。
? (6) 在完成預(yù)防性維護(hù)的過(guò)程中可以建立起完整的軟件配置。
雖然由于條件所限,目前預(yù)防性維護(hù)在全部維護(hù)活動(dòng)中僅占很小比例,但是,人們不應(yīng)該忽視這類維護(hù),在條件具備時(shí)應(yīng)該主動(dòng)地進(jìn)行預(yù)防性維護(hù)。
6,軟件再工程過(guò)程
典型的軟件再工程過(guò)程模型如下圖所示。在某些情況下這些活動(dòng)以線性順序發(fā)生,但也并非總是這樣。例如,為了理解某個(gè)程序的內(nèi)部工作原理,可能在文檔重構(gòu)開始之前必須先進(jìn)行逆向工程。
1,庫(kù)存目錄分析
?????? 每個(gè)軟件組織都應(yīng)該保存其擁有的所有應(yīng)用系統(tǒng)的庫(kù)存目錄。該目錄包含關(guān)于每個(gè)應(yīng)用系統(tǒng)的基本信息(例如應(yīng)用系統(tǒng)的名字,最初構(gòu)建它的日期,已做過(guò)的實(shí)質(zhì)性修改次數(shù),過(guò)去18個(gè)月報(bào)告的錯(cuò)誤,用戶數(shù)量,安裝它的機(jī)器數(shù)量,它的復(fù)雜程度,文檔質(zhì)量,整體可維護(hù)性等級(jí),預(yù)期壽命,在未來(lái)36個(gè)月內(nèi)的預(yù)期修改次數(shù),業(yè)務(wù)重要程度等)。
?????? 應(yīng)該仔細(xì)分析庫(kù)存目錄,按照業(yè)務(wù)重要程度、壽命、當(dāng)前可維護(hù)性、預(yù)期的修改次數(shù)等標(biāo)準(zhǔn),把庫(kù)中的應(yīng)用系統(tǒng)排序,從中選出再工程的候選者,然后明智地分配再工程所需要的資源。
2,文檔重構(gòu)
老程序固有的特點(diǎn)是缺乏文檔。具體情況不同,處理這個(gè)問(wèn)題的方法也不同。
(1)建立文檔非常耗費(fèi)時(shí)間,不可能為數(shù)百個(gè)程序都重新建立文檔。如果一個(gè)程序是相對(duì)穩(wěn)定的,正在走向其有用生命的終點(diǎn),而且可能不會(huì)再經(jīng)歷什么變化,那么,讓它保持現(xiàn)狀是一個(gè)明智的選擇。
(2) 為了便于今后的維護(hù),必須更新文檔,但是由于資源有限,應(yīng)采用“使用時(shí)建文檔”的方法。
(3) 如果某應(yīng)用系統(tǒng)是完成業(yè)務(wù)工作的關(guān)鍵,而且必須重構(gòu)全部文檔,則仍然應(yīng)該設(shè)法把文檔工作減少到必需的最小量。
3,逆向工程
軟件的逆向工程是分析程序以便在比源代碼更高的抽象層次上創(chuàng)建出程序的某種表示的過(guò)程,也就是說(shuō),逆向工程是一個(gè)恢復(fù)設(shè)計(jì)結(jié)果的過(guò)程,逆向工程工具從現(xiàn)存的程序代碼中抽取有關(guān)數(shù)據(jù)、體系結(jié)構(gòu)和處理過(guò)程的設(shè)計(jì)信息。
4,代碼重構(gòu)
代碼重構(gòu)是最常見的再工程活動(dòng)。某些老程序具有比較完整、合理的體系結(jié)構(gòu),但是,個(gè)體模塊的編碼方式卻是難于理解、測(cè)試和維護(hù)的。在這種情況下,可以重構(gòu)可疑模塊的代碼。
? ? ? ? 首先,用重構(gòu)工具分析源代碼,標(biāo)注出和結(jié)構(gòu)化程序設(shè)計(jì)概念相違背的部分
? ? ? ? 然后,重構(gòu)有問(wèn)題的代碼(此項(xiàng)工作可自動(dòng)進(jìn)行)
? ? ? ? 最后,復(fù)審和測(cè)試生成的重構(gòu)代碼(以保證沒(méi)有引入異常)并更新代碼文檔。
5,數(shù)據(jù)重構(gòu)
?????? 與代碼重構(gòu)不同,數(shù)據(jù)重構(gòu)發(fā)生在相當(dāng)?shù)偷某橄髮哟紊?#xff0c;它是一種全范圍的再工程活動(dòng)——對(duì)數(shù)據(jù)的修改必然會(huì)導(dǎo)致體系結(jié)構(gòu)或代碼層的改變。在大多數(shù)情況下,數(shù)據(jù)重構(gòu)始于逆向工程活動(dòng),分解當(dāng)前使用的數(shù)據(jù)體系結(jié)構(gòu),必要時(shí)定義數(shù)據(jù)模型,標(biāo)識(shí)數(shù)據(jù)對(duì)象和屬性,并從軟件質(zhì)量的角度復(fù)審現(xiàn)存的數(shù)據(jù)結(jié)構(gòu)。
?????? 當(dāng)數(shù)據(jù)結(jié)構(gòu)較差時(shí)(例如在關(guān)系型方法可大大簡(jiǎn)化處理的情況下卻使用平坦文件實(shí)現(xiàn)),應(yīng)該對(duì)數(shù)據(jù)進(jìn)行再工程。
6,正向工程
?????? 正向工程也稱為革新或改造,這項(xiàng)活動(dòng)不僅從現(xiàn)有程序中恢復(fù)設(shè)計(jì)信息,而且使用該信息去改變或重構(gòu)現(xiàn)有系統(tǒng),以提高其整體質(zhì)量。
總結(jié)
- 上一篇: java文件对比工具
- 下一篇: [js] 异步请求重试策略有哪些呢?