第六章軟件維護(hù)技術(shù)_第1頁(yè)
第六章軟件維護(hù)技術(shù)_第2頁(yè)
第六章軟件維護(hù)技術(shù)_第3頁(yè)
第六章軟件維護(hù)技術(shù)_第4頁(yè)
第六章軟件維護(hù)技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、軟件工程軟件維護(hù)馬麗6.1 軟件維護(hù)的內(nèi)容及特點(diǎn)軟件維護(hù)的內(nèi)容及特點(diǎn)6.2 軟件的可維護(hù)性軟件的可維護(hù)性6.3 維護(hù)任務(wù)的實(shí)施維護(hù)任務(wù)的實(shí)施6.4 預(yù)防性維護(hù)預(yù)防性維護(hù)6.5 軟件再工程過程軟件再工程過程第六章第六章 軟件維護(hù)軟件維護(hù) 學(xué)習(xí)內(nèi)容:學(xué)習(xí)內(nèi)容: 在軟件的開發(fā)工作已完成并把軟件產(chǎn)品交付給用戶在軟件的開發(fā)工作已完成并把軟件產(chǎn)品交付給用戶使用之后,就進(jìn)入了軟件維護(hù)階段。這個(gè)階段的工作目使用之后,就進(jìn)入了軟件維護(hù)階段。這個(gè)階段的工作目標(biāo)是保證軟件在一個(gè)相當(dāng)長(zhǎng)的時(shí)期內(nèi)能夠正常運(yùn)行,標(biāo)是保證軟件在一個(gè)相當(dāng)長(zhǎng)的時(shí)期內(nèi)能夠正常運(yùn)行,因因此對(duì)軟件的維護(hù)就成為必不可少的了。此對(duì)軟件的維護(hù)就成為必不可少

2、的了。 軟件維護(hù)需要的工作量非常大。軟件維護(hù)需要的工作量非常大。平均說來,大型軟平均說來,大型軟件的維護(hù)成本高達(dá)開發(fā)成本的四倍左右件的維護(hù)成本高達(dá)開發(fā)成本的四倍左右。目前國(guó)外許多目前國(guó)外許多軟件開發(fā)組織把軟件開發(fā)組織把60%60%以上的人力用于維護(hù)已有的軟件以上的人力用于維護(hù)已有的軟件,而,而且隨著軟件數(shù)量增多和使用壽命延長(zhǎng),這個(gè)百分比還在且隨著軟件數(shù)量增多和使用壽命延長(zhǎng),這個(gè)百分比還在持續(xù)上升。將來維護(hù)工作甚至可能會(huì)束縛住軟件開發(fā)組持續(xù)上升。將來維護(hù)工作甚至可能會(huì)束縛住軟件開發(fā)組織的手腳,使他們沒有余力開發(fā)新的軟件??椀氖帜_,使他們沒有余力開發(fā)新的軟件。 6.1 軟件維護(hù)的內(nèi)容及特點(diǎn)軟件維護(hù)

3、的內(nèi)容及特點(diǎn)6.1.1 軟件維護(hù)的內(nèi)容軟件維護(hù)的內(nèi)容 所謂所謂軟件維護(hù)軟件維護(hù)就是在軟件已經(jīng)交付使用之后,為就是在軟件已經(jīng)交付使用之后,為了改正錯(cuò)誤或滿足新的需要而修改軟件的過程了改正錯(cuò)誤或滿足新的需要而修改軟件的過程。 我們可以通過描述我們可以通過描述軟件交付使用后可能進(jìn)行的下軟件交付使用后可能進(jìn)行的下述四項(xiàng)活動(dòng)述四項(xiàng)活動(dòng),具體地定義軟件維護(hù)具體地定義軟件維護(hù)。1. 改正性維護(hù)改正性維護(hù) 通常,在軟件開發(fā)過程中所進(jìn)行的測(cè)試都是不完通常,在軟件開發(fā)過程中所進(jìn)行的測(cè)試都是不完全、不徹底的,軟件中必然會(huì)有一些潛伏的錯(cuò)誤被帶到全、不徹底的,軟件中必然會(huì)有一些潛伏的錯(cuò)誤被帶到運(yùn)行階段來。用戶常常將把他

4、們遇到的問題報(bào)告給軟件運(yùn)行階段來。用戶常常將把他們遇到的問題報(bào)告給軟件維護(hù)人員,要求解決。維護(hù)人員,要求解決。 我們把診斷和改正軟件錯(cuò)誤的過程稱為我們把診斷和改正軟件錯(cuò)誤的過程稱為改正性維護(hù)改正性維護(hù)。例如,在軟件交付用戶使用之后,解決在開發(fā)時(shí)沒有例如,在軟件交付用戶使用之后,解決在開發(fā)時(shí)沒有測(cè)試所有可能的執(zhí)行通路而帶來的問題;解決程序中遺測(cè)試所有可能的執(zhí)行通路而帶來的問題;解決程序中遺漏對(duì)文件中最后一個(gè)記錄的處理的錯(cuò)誤等。漏對(duì)文件中最后一個(gè)記錄的處理的錯(cuò)誤等。2. 適應(yīng)性維護(hù)適應(yīng)性維護(hù) 計(jì)算機(jī)科學(xué)技術(shù)領(lǐng)域的各個(gè)方面都在迅速進(jìn)步,大約計(jì)算機(jī)科學(xué)技術(shù)領(lǐng)域的各個(gè)方面都在迅速進(jìn)步,大約每過每過363

5、6個(gè)月就有新一代的硬件宣告出現(xiàn);個(gè)月就有新一代的硬件宣告出現(xiàn);另一方面,應(yīng)用另一方面,應(yīng)用軟件的使用壽命卻很容易超過十年,遠(yuǎn)遠(yuǎn)長(zhǎng)于最初開發(fā)這軟件的使用壽命卻很容易超過十年,遠(yuǎn)遠(yuǎn)長(zhǎng)于最初開發(fā)這個(gè)軟件時(shí)的運(yùn)行環(huán)境的壽命。個(gè)軟件時(shí)的運(yùn)行環(huán)境的壽命。因此,因此,適應(yīng)性維護(hù)適應(yīng)性維護(hù)就是為了就是為了和變化了的環(huán)境適當(dāng)?shù)嘏浜隙M(jìn)行的修改軟件的活動(dòng),是和變化了的環(huán)境適當(dāng)?shù)嘏浜隙M(jìn)行的修改軟件的活動(dòng),是既必要又經(jīng)常的維護(hù)活動(dòng)。既必要又經(jīng)常的維護(hù)活動(dòng)。 例如,適應(yīng)性維護(hù)可以是修改原在例如,適應(yīng)性維護(hù)可以是修改原在DOSDOS操作系統(tǒng)中運(yùn)行操作系統(tǒng)中運(yùn)行的程序,使之能在的程序,使之能在WindowsWindows

6、操作系統(tǒng)中運(yùn)行;修改兩個(gè)程序操作系統(tǒng)中運(yùn)行;修改兩個(gè)程序,使它們能夠使用相同的記錄結(jié)構(gòu);修改程序,使它適用,使它們能夠使用相同的記錄結(jié)構(gòu);修改程序,使它適用于另外一種終端設(shè)備。于另外一種終端設(shè)備。3. 完善性維護(hù)完善性維護(hù) 在使用軟件的過程中,在使用軟件的過程中,用戶往往提出增加新功能或用戶往往提出增加新功能或改變某些已有功能的要求,還可能提出提高程序性能的要改變某些已有功能的要求,還可能提出提高程序性能的要求。為了滿足這類要求而修改軟件的活動(dòng)求。為了滿足這類要求而修改軟件的活動(dòng),稱為,稱為完善性維完善性維護(hù)護(hù)。 例如,在儲(chǔ)蓄系統(tǒng)交付銀行使用之后,增加扣除利息例如,在儲(chǔ)蓄系統(tǒng)交付銀行使用之后,

7、增加扣除利息稅的功能;縮短系統(tǒng)的響應(yīng)時(shí)間,使之達(dá)到新的要求;改稅的功能;縮短系統(tǒng)的響應(yīng)時(shí)間,使之達(dá)到新的要求;改變現(xiàn)有程序輸出數(shù)據(jù)的格式,以方便用戶;在正在運(yùn)行的變現(xiàn)有程序輸出數(shù)據(jù)的格式,以方便用戶;在正在運(yùn)行的軟件中增加聯(lián)機(jī)求助功能等,都是完善性維護(hù)。軟件中增加聯(lián)機(jī)求助功能等,都是完善性維護(hù)。4. 預(yù)防性維護(hù)預(yù)防性維護(hù) 當(dāng)為了提高未來的可維護(hù)性或可靠性,或?yàn)榱私o未來的當(dāng)為了提高未來的可維護(hù)性或可靠性,或?yàn)榱私o未來的改進(jìn)工作奠定更好的基礎(chǔ)而修改軟件時(shí),就出現(xiàn)了第四類維改進(jìn)工作奠定更好的基礎(chǔ)而修改軟件時(shí),就出現(xiàn)了第四類維護(hù)活動(dòng),這類維護(hù)活動(dòng)稱為預(yù)防性維護(hù)。通常,護(hù)活動(dòng),這類維護(hù)活動(dòng)稱為預(yù)防性維護(hù)

8、。通常,把預(yù)防性維把預(yù)防性維護(hù)定義為:護(hù)定義為:“把今天的方法學(xué)應(yīng)用于昨天的系統(tǒng)以滿足明天把今天的方法學(xué)應(yīng)用于昨天的系統(tǒng)以滿足明天的需要的需要”。也就是說,也就是說,預(yù)防性維護(hù)預(yù)防性維護(hù)就是采用先進(jìn)的軟件工程就是采用先進(jìn)的軟件工程方法對(duì)需要維護(hù)的軟件或軟件中的某一部分,主動(dòng)地進(jìn)行重方法對(duì)需要維護(hù)的軟件或軟件中的某一部分,主動(dòng)地進(jìn)行重新設(shè)計(jì)、編碼和測(cè)試。新設(shè)計(jì)、編碼和測(cè)試。 在維護(hù)階段的最初一二年,在維護(hù)階段的最初一二年,改正性維護(hù)改正性維護(hù)的工作量往往比的工作量往往比較大。隨著在軟件運(yùn)行過程中錯(cuò)誤發(fā)現(xiàn)率迅速降低并趨于穩(wěn)較大。隨著在軟件運(yùn)行過程中錯(cuò)誤發(fā)現(xiàn)率迅速降低并趨于穩(wěn)定,就進(jìn)入了正常使用期間

9、。但是,由于用戶經(jīng)常提出改造定,就進(jìn)入了正常使用期間。但是,由于用戶經(jīng)常提出改造軟件的要求,軟件的要求,適應(yīng)性維護(hù)和完善性維護(hù)適應(yīng)性維護(hù)和完善性維護(hù)的工作量逐漸增加,的工作量逐漸增加,而且在這種維護(hù)過程中往往又會(huì)引入新的錯(cuò)誤,從而進(jìn)一步而且在這種維護(hù)過程中往往又會(huì)引入新的錯(cuò)誤,從而進(jìn)一步加大了維護(hù)的工作量。加大了維護(hù)的工作量。 從上述關(guān)于軟件維護(hù)的定義不難看出,軟件維護(hù)絕不僅從上述關(guān)于軟件維護(hù)的定義不難看出,軟件維護(hù)絕不僅限于糾正使用中發(fā)現(xiàn)的錯(cuò)誤,事實(shí)上在全部維護(hù)活動(dòng)中一半限于糾正使用中發(fā)現(xiàn)的錯(cuò)誤,事實(shí)上在全部維護(hù)活動(dòng)中一半以上是完善性維護(hù)。以上是完善性維護(hù)。國(guó)外的統(tǒng)計(jì)數(shù)字表明:國(guó)外的統(tǒng)計(jì)數(shù)字

10、表明:完善性維護(hù)占全部維護(hù)活動(dòng)的完善性維護(hù)占全部維護(hù)活動(dòng)的50%66%改正性維護(hù)占改正性維護(hù)占17%21%,適應(yīng)性維護(hù)占適應(yīng)性維護(hù)占18%25%,其他維護(hù)活動(dòng)只占其他維護(hù)活動(dòng)只占4%左右。左右。軟件維護(hù)策略軟件維護(hù)策略 針對(duì)上一小節(jié)所述的三種典型的維護(hù)活動(dòng),JamesMartin等人提出了一些可以減少維護(hù)成本的策略。下面等人提出了一些可以減少維護(hù)成本的策略。下面學(xué)習(xí)主要的軟件維護(hù)策略。學(xué)習(xí)主要的軟件維護(hù)策略。1. 降低改正性維護(hù)成本的策略降低改正性維護(hù)成本的策略 顯然,軟件中包含的錯(cuò)誤越少,改正性維護(hù)的成本顯然,軟件中包含的錯(cuò)誤越少,改正性維護(hù)的成本也就越低,但是,要生成也就越低,但是,要生成

11、100%100%可靠的軟件通常成本太高可靠的軟件通常成本太高,并不一定合算。然而通過使用先進(jìn)技術(shù)仍然可以大大,并不一定合算。然而通過使用先進(jìn)技術(shù)仍然可以大大提高軟件的可靠性,從而減少改正性維護(hù)的需求。提高軟件的可靠性,從而減少改正性維護(hù)的需求。 2. 降低適應(yīng)性維護(hù)成本的策略降低適應(yīng)性維護(hù)成本的策略 這類維護(hù)是必然要進(jìn)行的,但是要采取適當(dāng)?shù)牟呗?。? 1)在進(jìn)行配置管理時(shí),把硬件、操作系統(tǒng)和其他相關(guān)的)在進(jìn)行配置管理時(shí),把硬件、操作系統(tǒng)和其他相關(guān)的環(huán)境因素的可能變化考慮在內(nèi),可以減少某些適應(yīng)性維護(hù)的環(huán)境因素的可能變化考慮在內(nèi),可以減少某些適應(yīng)性維護(hù)的工作量;工作量;(2 2)把與硬件、操作系統(tǒng)

12、及其他外圍設(shè)備有關(guān)的代碼放到)把與硬件、操作系統(tǒng)及其他外圍設(shè)備有關(guān)的代碼放到特定的程序模塊中,可以把因環(huán)境變化而必須修改的程序代特定的程序模塊中,可以把因環(huán)境變化而必須修改的程序代碼局限于某些特定的程序模塊內(nèi);碼局限于某些特定的程序模塊內(nèi);(3 3)使用內(nèi)部程序列表、外部文件及例行處理程序包,可)使用內(nèi)部程序列表、外部文件及例行處理程序包,可以為維護(hù)時(shí)修改程序提供方便。以為維護(hù)時(shí)修改程序提供方便。3. 降低完善性維護(hù)成本的策略降低完善性維護(hù)成本的策略 上述的減少前兩類維護(hù)成本的策略,通常也能降低上述的減少前兩類維護(hù)成本的策略,通常也能降低完善性維護(hù)的成本。特別是數(shù)據(jù)庫(kù)管理系統(tǒng)、程序自動(dòng)完善性維

13、護(hù)的成本。特別是數(shù)據(jù)庫(kù)管理系統(tǒng)、程序自動(dòng)生成系統(tǒng)、軟件開發(fā)環(huán)境、第四代語(yǔ)言和應(yīng)用軟件包,生成系統(tǒng)、軟件開發(fā)環(huán)境、第四代語(yǔ)言和應(yīng)用軟件包,可明顯減少維護(hù)工作量??擅黠@減少維護(hù)工作量。 此外,在需求分析過程中準(zhǔn)確地預(yù)測(cè)用戶將來可能此外,在需求分析過程中準(zhǔn)確地預(yù)測(cè)用戶將來可能提出的需求,并且在設(shè)計(jì)時(shí)為將來可能提出的需求預(yù)先提出的需求,并且在設(shè)計(jì)時(shí)為將來可能提出的需求預(yù)先做準(zhǔn)備,顯然是降低完善性維護(hù)成本的有力措施。做準(zhǔn)備,顯然是降低完善性維護(hù)成本的有力措施。 在實(shí)際開發(fā)軟件之前,建立軟件的原型并讓用戶試在實(shí)際開發(fā)軟件之前,建立軟件的原型并讓用戶試用,以進(jìn)一步完善他們對(duì)軟件的功能需求,也能顯著減用,以進(jìn)

14、一步完善他們對(duì)軟件的功能需求,也能顯著減少軟件交付使用之后的完善性維護(hù)需求。少軟件交付使用之后的完善性維護(hù)需求。6.1.2 軟件維護(hù)的軟件維護(hù)的的特點(diǎn)的特點(diǎn) 圖6.1描繪了面對(duì)一項(xiàng)維護(hù)要求時(shí),不同的軟件配置所導(dǎo)致的不同工作流程。圖6.1 結(jié)構(gòu)化維護(hù)與非結(jié)構(gòu)化維護(hù)的對(duì)比非結(jié)構(gòu)化維護(hù)結(jié)構(gòu)化維護(hù)6.1.2.1 結(jié)構(gòu)化維護(hù)與非結(jié)構(gòu)化維護(hù)差別懸殊結(jié)構(gòu)化維護(hù)與非結(jié)構(gòu)化維護(hù)差別懸殊 如果軟件配置的惟一成分是程序代碼,那么維護(hù)活動(dòng)如果軟件配置的惟一成分是程序代碼,那么維護(hù)活動(dòng)從艱苦地評(píng)價(jià)程序代碼開始,而且常常由于程序內(nèi)部文檔從艱苦地評(píng)價(jià)程序代碼開始,而且常常由于程序內(nèi)部文檔不足而使評(píng)價(jià)更困難(諸如軟件結(jié)構(gòu)、全

15、程數(shù)據(jù)結(jié)構(gòu)、系不足而使評(píng)價(jià)更困難(諸如軟件結(jié)構(gòu)、全程數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)接口、性能或設(shè)計(jì)約束等微妙的特點(diǎn)是難于搞清的,而統(tǒng)接口、性能或設(shè)計(jì)約束等微妙的特點(diǎn)是難于搞清的,而且常常誤解了這一類特點(diǎn))。最終對(duì)程序代碼所做的改動(dòng)且常常誤解了這一類特點(diǎn))。最終對(duì)程序代碼所做的改動(dòng)的后果是難于估量的。的后果是難于估量的。 因?yàn)闆]有測(cè)試方面的文檔,所以不可能進(jìn)行回歸測(cè)試。因?yàn)闆]有測(cè)試方面的文檔,所以不可能進(jìn)行回歸測(cè)試。這就是非結(jié)構(gòu)化維護(hù),這種維護(hù)方式是沒有使用良好定義這就是非結(jié)構(gòu)化維護(hù),這種維護(hù)方式是沒有使用良好定義的方法學(xué)開發(fā)出來的軟件的必然結(jié)果的方法學(xué)開發(fā)出來的軟件的必然結(jié)果-并正在為此而付出并正在為此而付出

16、代價(jià)(浪費(fèi)精力和受挫折)。代價(jià)(浪費(fèi)精力和受挫折)。非結(jié)構(gòu)化維護(hù)非結(jié)構(gòu)化維護(hù)(上圖右側(cè)) 如果有一個(gè)完整的軟件配置存在,那么維護(hù)工作從評(píng)如果有一個(gè)完整的軟件配置存在,那么維護(hù)工作從評(píng)價(jià)設(shè)計(jì)文檔開始,確定軟件重要的結(jié)構(gòu)特點(diǎn)、性能特點(diǎn)以價(jià)設(shè)計(jì)文檔開始,確定軟件重要的結(jié)構(gòu)特點(diǎn)、性能特點(diǎn)以及接口特點(diǎn);估量要求的改動(dòng)將帶來的影響,并且計(jì)劃實(shí)及接口特點(diǎn);估量要求的改動(dòng)將帶來的影響,并且計(jì)劃實(shí)施途徑。然后首先修改設(shè)計(jì)并且對(duì)所做的修改進(jìn)行仔細(xì)復(fù)施途徑。然后首先修改設(shè)計(jì)并且對(duì)所做的修改進(jìn)行仔細(xì)復(fù)查。接下來編寫相應(yīng)的源程序代碼;使用在測(cè)試說明書中查。接下來編寫相應(yīng)的源程序代碼;使用在測(cè)試說明書中包含的信息進(jìn)行回歸

17、測(cè)試;最后,把修改后的軟件再次交包含的信息進(jìn)行回歸測(cè)試;最后,把修改后的軟件再次交付使用。付使用。 上面描述的事件構(gòu)成上面描述的事件構(gòu)成結(jié)構(gòu)化維護(hù)結(jié)構(gòu)化維護(hù),它是在軟件開發(fā)的它是在軟件開發(fā)的早期應(yīng)用軟件工程方法學(xué)的結(jié)果早期應(yīng)用軟件工程方法學(xué)的結(jié)果。(它確實(shí)能減少精力的。(它確實(shí)能減少精力的浪費(fèi)并且能提高維護(hù)的總體質(zhì)量。)浪費(fèi)并且能提高維護(hù)的總體質(zhì)量。)6.1.2.2 維護(hù)的代價(jià)高昂維護(hù)的代價(jià)高昂 在過去的幾十年中,軟件維護(hù)的費(fèi)用穩(wěn)步上升。在過去的幾十年中,軟件維護(hù)的費(fèi)用穩(wěn)步上升。19701970年用于維護(hù)年用于維護(hù)已有軟件的費(fèi)用只占軟件總預(yù)算的已有軟件的費(fèi)用只占軟件總預(yù)算的35%35%40%4

18、0%,19801980年上升為年上升為40%40%60%60%,19901990年上升為年上升為70%70%80%80%。 維護(hù)費(fèi)用只不過是軟件維護(hù)的最明顯的代價(jià),其他一些現(xiàn)在還不維護(hù)費(fèi)用只不過是軟件維護(hù)的最明顯的代價(jià),其他一些現(xiàn)在還不明顯的代價(jià)將來可能更為人們所關(guān)注。明顯的代價(jià)將來可能更為人們所關(guān)注。因?yàn)榭捎玫馁Y源必須供維護(hù)任因?yàn)榭捎玫馁Y源必須供維護(hù)任務(wù)使用,以致耽誤甚至喪失了開發(fā)新軟件的良機(jī)務(wù)使用,以致耽誤甚至喪失了開發(fā)新軟件的良機(jī),這是軟件維護(hù)的一這是軟件維護(hù)的一個(gè)無(wú)形的代價(jià)個(gè)無(wú)形的代價(jià)。其他無(wú)形的代價(jià)還有:其他無(wú)形的代價(jià)還有: 當(dāng)看來合理的有關(guān)改錯(cuò)或修改的要求不能及時(shí)滿足時(shí)將引起用戶不

19、滿; 由于維護(hù)時(shí)的改動(dòng),在軟件中引入了潛伏的故障,從而降低了軟件的質(zhì)量; 當(dāng)必須把軟件工程師調(diào)去從事維護(hù)工作時(shí),將在開發(fā)過程中造成混亂。 軟件維護(hù)的最后一個(gè)代價(jià)是生產(chǎn)率的大幅度下降,這軟件維護(hù)的最后一個(gè)代價(jià)是生產(chǎn)率的大幅度下降,這種情況在維護(hù)舊程序時(shí)常常遇到。例如,據(jù)種情況在維護(hù)舊程序時(shí)常常遇到。例如,據(jù)GauslerGausler在在19761976年的報(bào)道,美國(guó)空軍的飛行控制軟件每條指令的開發(fā)成本年的報(bào)道,美國(guó)空軍的飛行控制軟件每條指令的開發(fā)成本是是7575美元,然而維護(hù)成本大約是每條指令美元,然而維護(hù)成本大約是每條指令40004000美元,也就美元,也就是說,生產(chǎn)率下降了是說,生產(chǎn)率下降

20、了5050倍以上。倍以上。 (例(例如,分析評(píng)價(jià),修改設(shè)計(jì)和編寫程序代碼等)如,分析評(píng)價(jià),修改設(shè)計(jì)和編寫程序代碼等)(例如,理解程序代碼的功能,解釋數(shù)據(jù)結(jié)構(gòu)、接口(例如,理解程序代碼的功能,解釋數(shù)據(jù)結(jié)構(gòu)、接口特點(diǎn)和性能限度等)。特點(diǎn)和性能限度等)。下述公式給出下述公式給出維護(hù)工作量維護(hù)工作量的一個(gè)模型的一個(gè)模型: 其中:其中: M是維護(hù)用的總工作量 P是生產(chǎn)性工作量 K是經(jīng)驗(yàn)常數(shù) c是復(fù)雜程度(非結(jié)構(gòu)化設(shè)計(jì)和缺少文檔都會(huì)增加軟件的復(fù)雜程度) d是維護(hù)人員對(duì)軟件的熟悉程度。 上面的模型表明,如果軟件的開發(fā)途徑不好(即,沒有使用軟件工程方法學(xué)),而且原來的開發(fā)人員不能參加維護(hù)工作,那么維護(hù)工作量(

21、和費(fèi)用)將指數(shù)地增加。MPKexp(cd)6.1.2.3 維護(hù)的困難性維護(hù)的困難性 與軟件維護(hù)有關(guān)的絕大多數(shù)困難,都可歸因于軟件定義和軟件開發(fā)的方法有缺點(diǎn)。在軟件生命周期的頭兩個(gè)時(shí)期沒有嚴(yán)格而又科學(xué)的管理和規(guī)劃,幾乎必然會(huì)導(dǎo)致在最后階段出現(xiàn)問題。下面列出和軟件維護(hù)有關(guān)的部分問題下面列出和軟件維護(hù)有關(guān)的部分問題: 讀懂別人寫的程序通常非常困難。而且困難程度隨著軟件配置成分的減少而迅速增加。如果僅有程序代碼沒有說明文檔,則會(huì)出現(xiàn)嚴(yán)重的問題。 需要維護(hù)的軟件往往沒有合格一致的文檔,或者文檔資料顯著不足。認(rèn)識(shí)到軟件必須有文檔僅僅是第一步,容易理解并且和程序代碼完全一致的文檔才真正有價(jià)值。 當(dāng)要求對(duì)軟件

22、進(jìn)行維護(hù)時(shí),不能指望由開發(fā)人員給我們仔細(xì)說明軟件。由于維護(hù)階段持續(xù)的時(shí)間很長(zhǎng),因此,當(dāng)需要解釋軟件時(shí),往往原來寫程序的人已不在現(xiàn)場(chǎng)了。 絕大多數(shù)軟件在設(shè)計(jì)時(shí)沒有考慮將來的修改。除非使用強(qiáng)調(diào)模塊獨(dú)立原理的設(shè)計(jì)方法學(xué),否則修改軟件既困難又容易發(fā)生差錯(cuò)。 軟件維護(hù)不是一項(xiàng)吸引人的工作。形成這種觀念很大程度上是因?yàn)榫S護(hù)工作經(jīng)常遭受挫折。 上述種種困難存在于現(xiàn)有的沒采用軟件工程思想開發(fā)上述種種困難存在于現(xiàn)有的沒采用軟件工程思想開發(fā)出來的軟件中。出來的軟件中。不應(yīng)該把一種科學(xué)的方法學(xué)看做萬(wàn)應(yīng)靈藥不應(yīng)該把一種科學(xué)的方法學(xué)看做萬(wàn)應(yīng)靈藥,但是,軟件工程至少部分地解決了與維護(hù)有關(guān)的每一個(gè),但是,軟件工程至少部分地

23、解決了與維護(hù)有關(guān)的每一個(gè)問題。問題。6.2 軟件的可維護(hù)性軟件的可維護(hù)性6.2.1 軟件的可維護(hù)性軟件的可維護(hù)性 -指軟件能夠被維護(hù)人員理解、改正、適應(yīng)和完指軟件能夠被維護(hù)人員理解、改正、適應(yīng)和完善以適應(yīng)新的環(huán)境的難易程度。善以適應(yīng)新的環(huán)境的難易程度。 決定軟件可維護(hù)性的因素決定軟件可維護(hù)性的因素 維護(hù)就是在軟件交付使用后進(jìn)行的修改,修改之前必維護(hù)就是在軟件交付使用后進(jìn)行的修改,修改之前必須理解修改的對(duì)象,修改之后應(yīng)該進(jìn)行必要的測(cè)試,以保須理解修改的對(duì)象,修改之后應(yīng)該進(jìn)行必要的測(cè)試,以保證所做的修改是正確的。如果是改正性維護(hù),還必須預(yù)先證所做的修改是正確的。如果是改正性維護(hù),還必須預(yù)先進(jìn)行調(diào)試

24、以確定錯(cuò)誤。因此,進(jìn)行調(diào)試以確定錯(cuò)誤。因此,影響軟件可維護(hù)性的因素主影響軟件可維護(hù)性的因素主要有下述七個(gè):要有下述七個(gè):1. 可理解性可理解性2. 可測(cè)試性可測(cè)試性3. 可修改性可修改性4. 可靠性可靠性5. 可移植性可移植性6. 可重用性可重用性7. 效率效率6.2.2 文檔文檔 文檔是影響軟件可維護(hù)性的決定因素。由于長(zhǎng)期文檔是影響軟件可維護(hù)性的決定因素。由于長(zhǎng)期使用的大型軟件系統(tǒng)在使用過程中必然會(huì)經(jīng)受多次修使用的大型軟件系統(tǒng)在使用過程中必然會(huì)經(jīng)受多次修改,改,所以文檔比程序代碼更重要所以文檔比程序代碼更重要。 軟件系統(tǒng)的軟件系統(tǒng)的文檔文檔可以分為用戶文檔和系統(tǒng)文檔可以分為用戶文檔和系統(tǒng)文檔

25、兩兩類。類。 用戶文檔用戶文檔主要描述系統(tǒng)功能和使用方法,并不關(guān)心主要描述系統(tǒng)功能和使用方法,并不關(guān)心這些功能是怎樣實(shí)現(xiàn)的;這些功能是怎樣實(shí)現(xiàn)的; 系統(tǒng)文檔系統(tǒng)文檔描述系統(tǒng)設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試等各方面的內(nèi)描述系統(tǒng)設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試等各方面的內(nèi)容。容??偟恼f來,總的說來,軟件文檔應(yīng)該滿足下述要求軟件文檔應(yīng)該滿足下述要求:(1 1)必須描述如何使用這個(gè)系統(tǒng),沒有這種描述即使是最)必須描述如何使用這個(gè)系統(tǒng),沒有這種描述即使是最簡(jiǎn)單的系統(tǒng)也無(wú)法使用;簡(jiǎn)單的系統(tǒng)也無(wú)法使用;(2 2)必須描述怎樣安裝和管理這個(gè)系統(tǒng);)必須描述怎樣安裝和管理這個(gè)系統(tǒng);(3 3)必須描述系統(tǒng)需求和設(shè)計(jì);)必須描述系統(tǒng)需求和設(shè)計(jì);(

26、4 4)必須描述系統(tǒng)的實(shí)現(xiàn)和測(cè)試,以便使系統(tǒng)成為可維護(hù))必須描述系統(tǒng)的實(shí)現(xiàn)和測(cè)試,以便使系統(tǒng)成為可維護(hù)的。的。6.2.3 提高軟件可維護(hù)性的方法提高軟件可維護(hù)性的方法 從以下五方面解決:從以下五方面解決:1建立明確的軟件質(zhì)量標(biāo)準(zhǔn)建立明確的軟件質(zhì)量標(biāo)準(zhǔn)2利用先進(jìn)的軟件技術(shù)和工具利用先進(jìn)的軟件技術(shù)和工具3建立明確的質(zhì)量保證制度建立明確的質(zhì)量保證制度4選擇可維護(hù)的程序設(shè)計(jì)語(yǔ)言選擇可維護(hù)的程序設(shè)計(jì)語(yǔ)言5改進(jìn)軟件的文檔改進(jìn)軟件的文檔。6.2.4 可維護(hù)性復(fù)審可維護(hù)性復(fù)審 可維護(hù)性是所有軟件都應(yīng)該具備的基本特點(diǎn)。在軟件工可維護(hù)性是所有軟件都應(yīng)該具備的基本特點(diǎn)。在軟件工程過程的每一個(gè)階段都應(yīng)該考慮并努力提高

27、軟件的可維護(hù)性程過程的每一個(gè)階段都應(yīng)該考慮并努力提高軟件的可維護(hù)性,在每個(gè)階段結(jié)束前的技術(shù)審查和管理復(fù)審中,應(yīng)該著重對(duì),在每個(gè)階段結(jié)束前的技術(shù)審查和管理復(fù)審中,應(yīng)該著重對(duì)可維護(hù)性進(jìn)行復(fù)審。可維護(hù)性進(jìn)行復(fù)審。6.3 軟件維護(hù)實(shí)施過程軟件維護(hù)實(shí)施過程 首先必須建立一個(gè)維護(hù)組織,隨后必須確定報(bào)告和評(píng)價(jià)的過程,而且必須為每個(gè)維護(hù)要求規(guī)定一個(gè)標(biāo)準(zhǔn)化的事件序列。此外,還應(yīng)該建立一個(gè)適用于維護(hù)活動(dòng)的記錄保管過程,并且規(guī)定復(fù)審標(biāo)準(zhǔn)。6.3.1 維護(hù)組織維護(hù)組織 雖然通常并不需要建立正式的維護(hù)組織,但是,即使對(duì)雖然通常并不需要建立正式的維護(hù)組織,但是,即使對(duì)于一個(gè)小的軟件開發(fā)團(tuán)體而言,非正式地委托責(zé)任也是絕于一

28、個(gè)小的軟件開發(fā)團(tuán)體而言,非正式地委托責(zé)任也是絕對(duì)必要的。對(duì)必要的。維護(hù)機(jī)構(gòu)成員一般包括:配置管理員、維護(hù)控維護(hù)機(jī)構(gòu)成員一般包括:配置管理員、維護(hù)控制員、系統(tǒng)管理員、一般維護(hù)工作人員。制員、系統(tǒng)管理員、一般維護(hù)工作人員。 每個(gè)維護(hù)要求都通過維護(hù)管理員轉(zhuǎn)交給相應(yīng)的系統(tǒng)管理每個(gè)維護(hù)要求都通過維護(hù)管理員轉(zhuǎn)交給相應(yīng)的系統(tǒng)管理員去評(píng)價(jià)員去評(píng)價(jià),見下頁(yè)圖示。,見下頁(yè)圖示。維護(hù)機(jī)構(gòu)維護(hù)機(jī)構(gòu)系統(tǒng)管理員維護(hù)要求維護(hù)管理員修改負(fù)責(zé)人軟件系統(tǒng) 提示提示:在維護(hù)在維護(hù)活動(dòng)開始之前就活動(dòng)開始之前就明確維護(hù)責(zé)任是明確維護(hù)責(zé)任是十分必要的,這十分必要的,這樣做可以大大減樣做可以大大減少維護(hù)過程中可少維護(hù)過程中可能出現(xiàn)的混亂能

29、出現(xiàn)的混亂。系統(tǒng)管理員系統(tǒng)管理員是被指定去熟悉一小部分產(chǎn)品程序的技術(shù)人員是被指定去熟悉一小部分產(chǎn)品程序的技術(shù)人員。系統(tǒng)管理員對(duì)維護(hù)任務(wù)做出評(píng)價(jià)之后,由變化授權(quán)人決定應(yīng)該進(jìn)行的活動(dòng)。圖6.2描繪了上述組織方式。 圖6.26.3.2 維護(hù)報(bào)告維護(hù)報(bào)告 應(yīng)該用標(biāo)準(zhǔn)化的格式表達(dá)所有軟件維護(hù)要求應(yīng)該用標(biāo)準(zhǔn)化的格式表達(dá)所有軟件維護(hù)要求。軟件。軟件維護(hù)人員通常給用戶提供空白的維護(hù)要求表維護(hù)人員通常給用戶提供空白的維護(hù)要求表有時(shí)稱有時(shí)稱為軟件問題報(bào)告表,這個(gè)表格由要求一項(xiàng)維護(hù)活動(dòng)的用為軟件問題報(bào)告表,這個(gè)表格由要求一項(xiàng)維護(hù)活動(dòng)的用戶填寫。戶填寫。 如果遇到了一個(gè)錯(cuò)誤,那么必須完整描述導(dǎo)致出現(xiàn)如果遇到了一個(gè)錯(cuò)誤

30、,那么必須完整描述導(dǎo)致出現(xiàn)錯(cuò)誤的環(huán)境(包括輸入數(shù)據(jù),全部輸出數(shù)據(jù),以及其他錯(cuò)誤的環(huán)境(包括輸入數(shù)據(jù),全部輸出數(shù)據(jù),以及其他有關(guān)信息)。對(duì)于適應(yīng)性或完善性有關(guān)信息)。對(duì)于適應(yīng)性或完善性的維護(hù)要求的維護(hù)要求,應(yīng)該提,應(yīng)該提出一個(gè)簡(jiǎn)短的需求說明書。如前所述,由維護(hù)管理員和出一個(gè)簡(jiǎn)短的需求說明書。如前所述,由維護(hù)管理員和系統(tǒng)管理員評(píng)價(jià)用戶提交的維護(hù)要求表。系統(tǒng)管理員評(píng)價(jià)用戶提交的維護(hù)要求表。 維護(hù)要求表維護(hù)要求表是一個(gè)外部產(chǎn)生的文件,它是計(jì)劃維護(hù)活是一個(gè)外部產(chǎn)生的文件,它是計(jì)劃維護(hù)活動(dòng)的基礎(chǔ)動(dòng)的基礎(chǔ)。軟件組織內(nèi)部應(yīng)該制定出一個(gè)軟件修改報(bào)告軟件修改報(bào)告,它給出下述信息:它給出下述信息:(1)滿足維護(hù)要求

31、表中提出的要求所需要的工作量;(2)維護(hù)要求的性質(zhì);(3)這項(xiàng)要求的優(yōu)先次序;(4)與修改有關(guān)的事后數(shù)據(jù)。 在擬定進(jìn)一步的維護(hù)計(jì)劃之前,把軟件修改報(bào)告提交在擬定進(jìn)一步的維護(hù)計(jì)劃之前,把軟件修改報(bào)告提交給變化授權(quán)人審查批準(zhǔn)。給變化授權(quán)人審查批準(zhǔn)。6.3.3 維護(hù)的事件流維護(hù)的事件流 圖圖6.36.3描繪了由一項(xiàng)維護(hù)要求而引出的一串事件。描繪了由一項(xiàng)維護(hù)要求而引出的一串事件。1 1、首先應(yīng)該確定要求進(jìn)首先應(yīng)該確定要求進(jìn)行的維護(hù)的類型行的維護(hù)的類型。用戶常常把一項(xiàng)要求看作是為了改正軟件的錯(cuò)誤(即改正性。用戶常常把一項(xiàng)要求看作是為了改正軟件的錯(cuò)誤(即改正性維護(hù)),而開發(fā)人員可能把同一項(xiàng)要求看作是適應(yīng)性

32、或完善性維護(hù)。維護(hù)),而開發(fā)人員可能把同一項(xiàng)要求看作是適應(yīng)性或完善性維護(hù)。當(dāng)存在不當(dāng)存在不同意見時(shí)必須協(xié)商解決。同意見時(shí)必須協(xié)商解決。評(píng)價(jià)錯(cuò)誤嚴(yán)重程度改正性確定類型維護(hù)要求評(píng)價(jià)優(yōu)先次序完善性或適應(yīng)性開始問題分析嚴(yán)重不嚴(yán)重安排改正性維護(hù)錯(cuò)誤改正目錄開始分析維護(hù)任務(wù)復(fù)審開發(fā)目錄低高人員安排修改后的軟件通過后交付使用的軟件人員安排 從圖從圖6.36.3描繪的事件流看到:描繪的事件流看到: 2 2、對(duì)改(校)正性維護(hù)要求的處理,從估量錯(cuò)誤的嚴(yán)對(duì)改(校)正性維護(hù)要求的處理,從估量錯(cuò)誤的嚴(yán)重程度開始重程度開始。如果是一個(gè)嚴(yán)重的錯(cuò)誤(例如,一個(gè)關(guān)鍵性的系統(tǒng)不能正常運(yùn)行),則在系統(tǒng)管理員的指導(dǎo)下分派人員,并且

33、立即開始問題分析過程。如果錯(cuò)誤并不嚴(yán)重,那么改正性的維護(hù)和其他要求軟件開發(fā)資源的任務(wù)一起統(tǒng)籌安排。 3 3、適應(yīng)性維護(hù)和完善性維護(hù)的要求沿著相同的事件流適應(yīng)性維護(hù)和完善性維護(hù)的要求沿著相同的事件流通路前進(jìn)。通路前進(jìn)。應(yīng)該確定每個(gè)維護(hù)要求的優(yōu)先次序,并且安排應(yīng)該確定每個(gè)維護(hù)要求的優(yōu)先次序,并且安排要求的工作時(shí)間,就好像它是另一個(gè)開發(fā)任務(wù)一樣,如果要求的工作時(shí)間,就好像它是另一個(gè)開發(fā)任務(wù)一樣,如果一項(xiàng)維護(hù)要求的優(yōu)先次序非常高,可能立即開始維護(hù)工作一項(xiàng)維護(hù)要求的優(yōu)先次序非常高,可能立即開始維護(hù)工作。 4 4、不管維護(hù)類型如何,都需要進(jìn)行同樣的技術(shù)工作、不管維護(hù)類型如何,都需要進(jìn)行同樣的技術(shù)工作。這。

34、這些工作包括修改軟件設(shè)計(jì)、復(fù)查、必要的代碼修改、單元測(cè)些工作包括修改軟件設(shè)計(jì)、復(fù)查、必要的代碼修改、單元測(cè)試和集成測(cè)試(包括使用以前的測(cè)試方案的回歸測(cè)試),驗(yàn)試和集成測(cè)試(包括使用以前的測(cè)試方案的回歸測(cè)試),驗(yàn)收測(cè)試和復(fù)審收測(cè)試和復(fù)審。不同類型的維護(hù)強(qiáng)調(diào)的重點(diǎn)不同,但是基本。不同類型的維護(hù)強(qiáng)調(diào)的重點(diǎn)不同,但是基本途徑是相同的。途徑是相同的。維護(hù)事件流中最后一個(gè)事件是復(fù)審,它再次維護(hù)事件流中最后一個(gè)事件是復(fù)審,它再次檢驗(yàn)軟件配置的所有成分的有效性,并且保證事實(shí)上滿足了檢驗(yàn)軟件配置的所有成分的有效性,并且保證事實(shí)上滿足了維護(hù)要求表中的要求。維護(hù)要求表中的要求。 5 5、當(dāng)然,也有并不完全符合上述事

35、件流的維護(hù)要求。、當(dāng)然,也有并不完全符合上述事件流的維護(hù)要求。當(dāng)當(dāng)發(fā)生惡性的軟件問題時(shí),就出現(xiàn)所謂的發(fā)生惡性的軟件問題時(shí),就出現(xiàn)所謂的“救火救火”維護(hù)要求維護(hù)要求,這種情況需要立即把資源用來解決問題。(這種情況需要立即把資源用來解決問題。(如果對(duì)一個(gè)組織如果對(duì)一個(gè)組織來說,來說,“救火救火”是常見的過程,那么就必須懷疑它的管理能是常見的過程,那么就必須懷疑它的管理能力和技術(shù)能力力和技術(shù)能力。)。) 在完成軟件維護(hù)任務(wù)之后,進(jìn)行處境復(fù)查常常是有好處進(jìn)行處境復(fù)查常常是有好處的的。一般說來,這種復(fù)查試圖回答下述問題: 在當(dāng)前處境下設(shè)計(jì)、編碼或測(cè)試的哪些方面能用不同方法進(jìn)行? 哪些維護(hù)資源是應(yīng)該有而事

36、實(shí)上卻沒有的? 對(duì)于這項(xiàng)維護(hù)工作什么是主要的、次要的障礙是什么? 要求的維護(hù)類型中有預(yù)防性維護(hù)嗎? 處境復(fù)查對(duì)將來維護(hù)工作的進(jìn)行有重要影響,而且所提供的反饋信息對(duì)有效地管理軟件組織十分重要。6.3.4 保存維護(hù)記錄保存維護(hù)記錄 對(duì)于軟件生命周期的所有階段而言,對(duì)于軟件生命周期的所有階段而言,以前記錄保存都是以前記錄保存都是不充分的,而軟件維護(hù)則根本沒有記錄保存下來不充分的,而軟件維護(hù)則根本沒有記錄保存下來。由于這。由于這個(gè)原因,我們往往不能估價(jià)維護(hù)技術(shù)的有效性,不能確定個(gè)原因,我們往往不能估價(jià)維護(hù)技術(shù)的有效性,不能確定一個(gè)產(chǎn)品程序的一個(gè)產(chǎn)品程序的“優(yōu)良優(yōu)良”程度,而且很難確定維護(hù)的實(shí)際程度,而

37、且很難確定維護(hù)的實(shí)際代價(jià)是什么。代價(jià)是什么。Swanson給出了下述的項(xiàng)目表:(1)程序名稱;(2)源程序語(yǔ)句條數(shù);(3)機(jī)器代碼指令條數(shù);(4)使用的程序設(shè)計(jì)語(yǔ)言;(5)程序的安裝日期;(6)程序安裝后的運(yùn)行次數(shù);(7)與程序安裝后運(yùn)行次數(shù)有關(guān)的處理故障的次數(shù);(8)程序修改的層次和名稱;Swanson給出了下述的項(xiàng)目表:(9)由于程序修改而增加的源程序語(yǔ)句條數(shù);(10)由于程序修改而刪除的源程序語(yǔ)句條數(shù);(11)每項(xiàng)修改所付出的“人時(shí)”數(shù);(12)程序修改的日期;(13)軟件維護(hù)人員的姓名;(14)維護(hù)申請(qǐng)報(bào)告的名稱;(15)維護(hù)類型;(16)維護(hù)開始時(shí)間和維護(hù)結(jié)束時(shí)間;(17)用于維護(hù)的

38、累計(jì)“人時(shí)”數(shù);(18)維護(hù)工作的凈收益。v6.3.5 6.3.5 評(píng)價(jià)維護(hù)活動(dòng)評(píng)價(jià)維護(hù)活動(dòng) 缺乏有效的數(shù)據(jù)就無(wú)法評(píng)價(jià)維護(hù)活動(dòng)。如果已經(jīng)開始缺乏有效的數(shù)據(jù)就無(wú)法評(píng)價(jià)維護(hù)活動(dòng)。如果已經(jīng)開始保存維護(hù)記錄了,則可以對(duì)維護(hù)工作做一些定量度量。至保存維護(hù)記錄了,則可以對(duì)維護(hù)工作做一些定量度量。至少可以從少可以從下述下述7 7個(gè)方面度量維護(hù)工作個(gè)方面度量維護(hù)工作:(1 1)每次程序運(yùn)行時(shí)的平均出錯(cuò)次數(shù);)每次程序運(yùn)行時(shí)的平均出錯(cuò)次數(shù);(2 2)用于每一類維護(hù)活動(dòng)的總)用于每一類維護(hù)活動(dòng)的總“人時(shí)人時(shí)”數(shù);數(shù);(3 3)每個(gè)程序、每種語(yǔ)言、每種維護(hù)類型所做的平均修改數(shù);)每個(gè)程序、每種語(yǔ)言、每種維護(hù)類型所做

39、的平均修改數(shù);(4 4)維護(hù)過程中,增加或刪除每條源程序語(yǔ)句花費(fèi)的平均)維護(hù)過程中,增加或刪除每條源程序語(yǔ)句花費(fèi)的平均“人時(shí)人時(shí)”數(shù);數(shù);(5 5)用于每種語(yǔ)言的平均)用于每種語(yǔ)言的平均“人時(shí)人時(shí)”數(shù);數(shù);(6 6)一張維護(hù)申請(qǐng)報(bào)告的平均處理時(shí)間;)一張維護(hù)申請(qǐng)報(bào)告的平均處理時(shí)間;(7 7)各類維護(hù)類型所占的百分比。)各類維護(hù)類型所占的百分比。軟件維護(hù)的副作用軟件維護(hù)的副作用v什么是軟件維護(hù)的副作用什么是軟件維護(hù)的副作用由于軟件被修改而導(dǎo)致的錯(cuò)誤或其他多余動(dòng)作的發(fā)生,由于軟件被修改而導(dǎo)致的錯(cuò)誤或其他多余動(dòng)作的發(fā)生,稱為是稱為是軟件維護(hù)的副作用軟件維護(hù)的副作用。v軟件副作用的類型軟件副作用的類型

40、修改代碼的副作用修改代碼的副作用修改數(shù)據(jù)的副作用修改數(shù)據(jù)的副作用修改文檔的副作用修改文檔的副作用修改編碼的副作用修改編碼的副作用(1 1)對(duì)子程序的刪除或修改;)對(duì)子程序的刪除或修改;(2 2)對(duì)語(yǔ)句標(biāo)號(hào)的刪除或修改;)對(duì)語(yǔ)句標(biāo)號(hào)的刪除或修改;(3 3)對(duì)標(biāo)識(shí)符的刪除或修改;)對(duì)標(biāo)識(shí)符的刪除或修改;(4 4)為改進(jìn)程序執(zhí)行性能所做的修改:)為改進(jìn)程序執(zhí)行性能所做的修改:(5 5)改變文件的打開或關(guān)閉;)改變文件的打開或關(guān)閉;(6 6)對(duì)邏輯運(yùn)算符的修改;)對(duì)邏輯運(yùn)算符的修改;(7 7)把設(shè)計(jì)的修改翻譯成程序代碼的修改;)把設(shè)計(jì)的修改翻譯成程序代碼的修改;(8 8)對(duì)判定的邊界條件所做的修改。)

41、對(duì)判定的邊界條件所做的修改。為確保編碼修改沒有引入新的錯(cuò)誤,應(yīng)進(jìn)行嚴(yán)格的回歸測(cè)試。一般為確保編碼修改沒有引入新的錯(cuò)誤,應(yīng)進(jìn)行嚴(yán)格的回歸測(cè)試。一般情況下,通過回歸測(cè)試,可以發(fā)現(xiàn)并糾正修改編碼所帶來的副情況下,通過回歸測(cè)試,可以發(fā)現(xiàn)并糾正修改編碼所帶來的副作用。作用。修改數(shù)據(jù)的副作用修改數(shù)據(jù)的副作用(1 1)重新定義局部常量或全程常量;)重新定義局部常量或全程常量;(2 2)重新定義記錄格式或文件格式;)重新定義記錄格式或文件格式;(3 3)改變一個(gè)數(shù)組或高階數(shù)據(jù)結(jié)構(gòu)的大??;)改變一個(gè)數(shù)組或高階數(shù)據(jù)結(jié)構(gòu)的大??;(4 4)修改全程變量;)修改全程變量;(5 5)重新初始化控制標(biāo)記或指針;)重新初始化

42、控制標(biāo)記或指針;(6 6)重新排列輸入輸出或子程序的自變量。)重新排列輸入輸出或子程序的自變量。 修改數(shù)據(jù)的副作用可以通過完善的設(shè)計(jì)文檔來加修改數(shù)據(jù)的副作用可以通過完善的設(shè)計(jì)文檔來加以限制。這種文檔描述了數(shù)據(jù)結(jié)構(gòu),并且提供了一種以限制。這種文檔描述了數(shù)據(jù)結(jié)構(gòu),并且提供了一種把數(shù)據(jù)元素、記錄、文件及其它結(jié)構(gòu)與軟件模塊聯(lián)系把數(shù)據(jù)元素、記錄、文件及其它結(jié)構(gòu)與軟件模塊聯(lián)系起來的交叉對(duì)照功能。起來的交叉對(duì)照功能。修改文檔的副作用修改文檔的副作用v維護(hù)應(yīng)該著眼于整個(gè)軟件配置,而不只是源程序代碼維護(hù)應(yīng)該著眼于整個(gè)軟件配置,而不只是源程序代碼的修改。如果源代碼的修改沒有反映在設(shè)計(jì)文檔或用的修改。如果源代碼的修

43、改沒有反映在設(shè)計(jì)文檔或用戶文檔中時(shí),就會(huì)發(fā)生文檔的副作用。戶文檔中時(shí),就會(huì)發(fā)生文檔的副作用。v每當(dāng)對(duì)數(shù)據(jù)流圖、軟件結(jié)構(gòu)、模塊算法過程和其它有每當(dāng)對(duì)數(shù)據(jù)流圖、軟件結(jié)構(gòu)、模塊算法過程和其它有關(guān)的特征進(jìn)行修改時(shí),必須同時(shí)對(duì)相應(yīng)的文檔資料進(jìn)關(guān)的特征進(jìn)行修改時(shí),必須同時(shí)對(duì)相應(yīng)的文檔資料進(jìn)行更新。行更新。v在軟件再次交付使用之前,對(duì)整個(gè)軟件配置進(jìn)行評(píng)審在軟件再次交付使用之前,對(duì)整個(gè)軟件配置進(jìn)行評(píng)審將大大減少文檔的副作用。實(shí)際上,某些維護(hù)申請(qǐng)的將大大減少文檔的副作用。實(shí)際上,某些維護(hù)申請(qǐng)的提出只是由于用戶文檔不夠清楚。這時(shí),只需對(duì)文檔提出只是由于用戶文檔不夠清楚。這時(shí),只需對(duì)文檔進(jìn)行維護(hù)即可,并不要求修改軟

44、件設(shè)計(jì)或源程序。進(jìn)行維護(hù)即可,并不要求修改軟件設(shè)計(jì)或源程序。6.4 預(yù)防性維護(hù)預(yù)防性維護(hù) 預(yù)防性維護(hù)也稱為軟件再工程預(yù)防性維護(hù)也稱為軟件再工程。目前,在全部軟件維。目前,在全部軟件維護(hù)活動(dòng)中,預(yù)防性維護(hù)只占很小的比例。多數(shù)軟件維護(hù)人護(hù)活動(dòng)中,預(yù)防性維護(hù)只占很小的比例。多數(shù)軟件維護(hù)人員對(duì)預(yù)防性維護(hù)還缺乏足夠的了解。這里介紹員對(duì)預(yù)防性維護(hù)還缺乏足夠的了解。這里介紹進(jìn)行預(yù)防性進(jìn)行預(yù)防性維護(hù)的必要性和可行性,后面介紹軟件再工程的典型過程。維護(hù)的必要性和可行性,后面介紹軟件再工程的典型過程。6.4.1 6.4.1 必要性必要性 預(yù)防性維護(hù)方法預(yù)防性維護(hù)方法是是MillerMiller在在“結(jié)構(gòu)化翻新結(jié)構(gòu)

45、化翻新”的標(biāo)題下的標(biāo)題下提出來的,他把這個(gè)概念提出來的,他把這個(gè)概念定義為定義為“把今天的方法學(xué)應(yīng)用到把今天的方法學(xué)應(yīng)用到昨天的系統(tǒng)以支持明天的需求昨天的系統(tǒng)以支持明天的需求”。6.5.2 可行性可行性 初看起來,在一個(gè)正在工作的程序版本已經(jīng)存在的情況下,重新開發(fā)這個(gè)大型程序似乎是一種浪費(fèi),但是,考慮到下述事實(shí)預(yù)防性維護(hù)預(yù)防性維護(hù)實(shí)際上是可行的: (1)維護(hù)一行源代碼的成本可能是該行代碼初始開發(fā)成本的)維護(hù)一行源代碼的成本可能是該行代碼初始開發(fā)成本的2040倍;倍; (2)使用現(xiàn)代設(shè)計(jì)概念重新設(shè)計(jì)軟件體系結(jié)構(gòu)(程序結(jié)構(gòu)和數(shù)據(jù)結(jié))使用現(xiàn)代設(shè)計(jì)概念重新設(shè)計(jì)軟件體系結(jié)構(gòu)(程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)),對(duì)未來

46、的維護(hù)工作將有很大幫助;構(gòu)),對(duì)未來的維護(hù)工作將有很大幫助; (3)由于軟件原型(即現(xiàn)在正在工作的程序)已經(jīng)存在,軟件開發(fā))由于軟件原型(即現(xiàn)在正在工作的程序)已經(jīng)存在,軟件開發(fā)生產(chǎn)率將遠(yuǎn)遠(yuǎn)高于平均水平;生產(chǎn)率將遠(yuǎn)遠(yuǎn)高于平均水平; (4)現(xiàn)在用戶已經(jīng)有較豐富的使用該軟件的經(jīng)驗(yàn),因此,很容易確)現(xiàn)在用戶已經(jīng)有較豐富的使用該軟件的經(jīng)驗(yàn),因此,很容易確定新的需求和變更方向;定新的需求和變更方向; (5)利用軟件再工程工具可以自動(dòng)完成部分工作;)利用軟件再工程工具可以自動(dòng)完成部分工作; (6)在完成預(yù)防性維護(hù)的過程中,可以建立起完整的軟件配置(文)在完成預(yù)防性維護(hù)的過程中,可以建立起完整的軟件配置(文

47、檔、程序和數(shù)據(jù))。檔、程序和數(shù)據(jù))。 當(dāng)軟件開發(fā)組織把軟件作為產(chǎn)品銷售時(shí),在程序的當(dāng)軟件開發(fā)組織把軟件作為產(chǎn)品銷售時(shí),在程序的“新版本新版本”中往往體現(xiàn)了中往往體現(xiàn)了預(yù)防性維護(hù)預(yù)防性維護(hù)的成果。一個(gè)大型的成果。一個(gè)大型的軟件開發(fā)機(jī)構(gòu)可能擁有的軟件開發(fā)機(jī)構(gòu)可能擁有50050020002000個(gè)產(chǎn)品程序,可以根個(gè)產(chǎn)品程序,可以根據(jù)重要性把這些程序排出優(yōu)先次序,然后把它們作為預(yù)據(jù)重要性把這些程序排出優(yōu)先次序,然后把它們作為預(yù)防性維護(hù)的候選者加以評(píng)估。防性維護(hù)的候選者加以評(píng)估。 6.5 軟件再工程過程軟件再工程過程圖6.4 軟件再工程過程模型 在圖在圖6.4中描繪的中描繪的軟軟件再工程范型是一個(gè)循環(huán)件

48、再工程范型是一個(gè)循環(huán)模型模型,這意味著作為該范,這意味著作為該范型組成部分的每個(gè)活動(dòng)都型組成部分的每個(gè)活動(dòng)都可能重復(fù)進(jìn)行,而且對(duì)于可能重復(fù)進(jìn)行,而且對(duì)于某個(gè)特定的循環(huán)來說,過某個(gè)特定的循環(huán)來說,過程可以在完成任意一個(gè)活程可以在完成任意一個(gè)活動(dòng)之后終止。動(dòng)之后終止。下面介紹下面介紹軟件再工程過程模型軟件再工程過程模型中的每個(gè)活動(dòng)中的每個(gè)活動(dòng)。1. 庫(kù)存目錄分析庫(kù)存目錄分析 每個(gè)軟件組織都應(yīng)該保存其負(fù)責(zé)維護(hù)的所有應(yīng)用系統(tǒng)的庫(kù)存目錄。該目錄可能僅僅是包含下列信息的一個(gè)電子表格模型: 應(yīng)用系統(tǒng)的名字;應(yīng)用系統(tǒng)的名字; 最初構(gòu)建它的年份;最初構(gòu)建它的年份; 已對(duì)它進(jìn)行過的實(shí)質(zhì)性修改的次數(shù);已對(duì)它進(jìn)行過的

49、實(shí)質(zhì)性修改的次數(shù); 完成這些修改所花費(fèi)的總工作量;完成這些修改所花費(fèi)的總工作量; 最后一次實(shí)質(zhì)性修改的日期;最后一次實(shí)質(zhì)性修改的日期; 最后一次實(shí)質(zhì)性修改所花費(fèi)的工作量;最后一次實(shí)質(zhì)性修改所花費(fèi)的工作量; 它駐留的系統(tǒng);它駐留的系統(tǒng); 和它有接口的應(yīng)用系統(tǒng);和它有接口的應(yīng)用系統(tǒng); 它訪問的數(shù)據(jù)庫(kù);它訪問的數(shù)據(jù)庫(kù); 過去過去1818個(gè)月所報(bào)告的錯(cuò)誤;個(gè)月所報(bào)告的錯(cuò)誤; 用戶數(shù)量;用戶數(shù)量; 安裝此應(yīng)用系統(tǒng)的機(jī)器數(shù)量;安裝此應(yīng)用系統(tǒng)的機(jī)器數(shù)量; 程序結(jié)構(gòu)復(fù)雜程度、代碼復(fù)雜程度和文檔程序結(jié)構(gòu)復(fù)雜程度、代碼復(fù)雜程度和文檔復(fù)雜程度;復(fù)雜程度; 文檔的質(zhì)量;文檔的質(zhì)量; 整體可維護(hù)性(用等級(jí)值表示);整體

50、可維護(hù)性(用等級(jí)值表示); 預(yù)期壽命(以年計(jì));預(yù)期壽命(以年計(jì)); 在未來在未來3636個(gè)月內(nèi)的預(yù)期修改次數(shù);個(gè)月內(nèi)的預(yù)期修改次數(shù); 年度維護(hù)成本;年度維護(hù)成本; 年度運(yùn)行成本;年度運(yùn)行成本; 年度業(yè)務(wù)值;年度業(yè)務(wù)值; 業(yè)務(wù)重要程度。業(yè)務(wù)重要程度。 應(yīng)該針對(duì)每一個(gè)現(xiàn)有的應(yīng)用系統(tǒng)收集上面列出的信息。應(yīng)該針對(duì)每一個(gè)現(xiàn)有的應(yīng)用系統(tǒng)收集上面列出的信息。通過按照業(yè)務(wù)重要程度、壽命、當(dāng)前可維護(hù)性以及其他重通過按照業(yè)務(wù)重要程度、壽命、當(dāng)前可維護(hù)性以及其他重要標(biāo)準(zhǔn)對(duì)這些信息排序的辦法,可以選出軟件再工程的候要標(biāo)準(zhǔn)對(duì)這些信息排序的辦法,可以選出軟件再工程的候選者,然后可以明智地為再工程分配資源。選者,然后可以

51、明智地為再工程分配資源。 必須注意,必須注意,應(yīng)該定期地修訂剛才描述的庫(kù)存目錄表應(yīng)該定期地修訂剛才描述的庫(kù)存目錄表,應(yīng)用系統(tǒng)的狀況(例如,業(yè)務(wù)重要程度)可能隨著時(shí)間,應(yīng)用系統(tǒng)的狀況(例如,業(yè)務(wù)重要程度)可能隨著時(shí)間而改變,因此,再工程的優(yōu)先級(jí)也將發(fā)生變化。而改變,因此,再工程的優(yōu)先級(jí)也將發(fā)生變化。2. 文檔重構(gòu)文檔重構(gòu) 缺乏文檔或文檔嚴(yán)重不合格,是很多老系統(tǒng)的通病。缺乏文檔或文檔嚴(yán)重不合格,是很多老系統(tǒng)的通病。面對(duì)這種狀況,有下述三種做法可供選擇面對(duì)這種狀況,有下述三種做法可供選擇:(1 1)選擇)選擇1 1 建立文檔是非常耗費(fèi)時(shí)間的,既然系統(tǒng)能正常工作,建立文檔是非常耗費(fèi)時(shí)間的,既然系統(tǒng)能正

52、常工作,我們就讓它保持現(xiàn)狀好了。在某些情況下,這是一個(gè)正確我們就讓它保持現(xiàn)狀好了。在某些情況下,這是一個(gè)正確的做法。事實(shí)上,不可能為數(shù)百個(gè)計(jì)算機(jī)程序都重新建立的做法。事實(shí)上,不可能為數(shù)百個(gè)計(jì)算機(jī)程序都重新建立文檔。文檔。(2 2)選擇)選擇2 2 文檔必須被更新,但是,我們只有有限的資源,因此文檔必須被更新,但是,我們只有有限的資源,因此我們將采用我們將采用“在使用時(shí)建文檔在使用時(shí)建文檔”的方法。的方法。(3 3)選擇)選擇3 3 該系統(tǒng)對(duì)于完成業(yè)務(wù)工作來說是至關(guān)重要的,必須完該系統(tǒng)對(duì)于完成業(yè)務(wù)工作來說是至關(guān)重要的,必須完全地重構(gòu)文檔。即使在這種情況下,明智的辦法也是盡量全地重構(gòu)文檔。即使在這

53、種情況下,明智的辦法也是盡量把文檔工作減少到必需的最小量。把文檔工作減少到必需的最小量。 上述每個(gè)選擇都是可行的,軟件組織必須選用最適合上述每個(gè)選擇都是可行的,軟件組織必須選用最適合于實(shí)際情況的方法。于實(shí)際情況的方法。3. 逆向工程逆向工程 軟件的逆向工程與硬件的逆向工程是相當(dāng)類似的。軟件的逆向工程與硬件的逆向工程是相當(dāng)類似的。軟件的逆向工程軟件的逆向工程就是分析程序以便在比源代碼更高的抽象就是分析程序以便在比源代碼更高的抽象層次上創(chuàng)建出該程序的某種表示的過程。層次上創(chuàng)建出該程序的某種表示的過程。逆向工程是一個(gè)逆向工程是一個(gè)恢復(fù)設(shè)計(jì)結(jié)果的過程,逆向工程工具從現(xiàn)存的程序中提取恢復(fù)設(shè)計(jì)結(jié)果的過程,逆向工程工具從現(xiàn)存的程序中提取數(shù)據(jù)、體系結(jié)構(gòu)和處理過程的設(shè)計(jì)信息。數(shù)據(jù)、體系結(jié)構(gòu)和處理過程的設(shè)計(jì)信息。4. 代碼重構(gòu)代碼重構(gòu) 是最常見的一種再工程。為了完成代碼重構(gòu)工作,首是最常見的一種再工程。為了完成代碼重構(gòu)工作,首先用重

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論