第13章軟件維護_第1頁
第13章軟件維護_第2頁
第13章軟件維護_第3頁
第13章軟件維護_第4頁
第13章軟件維護_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 第十三章第十三章 軟件維護軟件維護軟件工程軟件工程( (第三版第三版) ) 齊治昌齊治昌 譚慶平譚慶平 寧洪寧洪第十三章第十三章 軟件維護軟件維護13.1 13.1 軟件維護與進化的概念軟件維護與進化的概念13.2 13.2 軟件維護的過程模型軟件維護的過程模型13.3 13.3 可維護性可維護性13.4 13.4 維護活動及實施策略維護活動及實施策略13.5 13.5 維護的副作用維護的副作用13.6 13.6 逆向工程與軟件重構(gòu)逆向工程與軟件重構(gòu)2022-4-12國防科技大學計算機學院2軟件維護軟件維護我們討論了構(gòu)建一個軟件系統(tǒng)的全過程,但系我們討論了構(gòu)建一個軟件系統(tǒng)的全過程,但系統(tǒng)的交

2、付并不意味著其生存周期的結(jié)束。統(tǒng)的交付并不意味著其生存周期的結(jié)束。系統(tǒng)構(gòu)建之后通常還會不斷地變化,我們面臨系統(tǒng)構(gòu)建之后通常還會不斷地變化,我們面臨的挑戰(zhàn)是如何維護一個持續(xù)演化的系統(tǒng)。的挑戰(zhàn)是如何維護一個持續(xù)演化的系統(tǒng)。演化可能是由于需求和環(huán)境發(fā)生變化,也可能演化可能是由于需求和環(huán)境發(fā)生變化,也可能是軟件自身暴露出問題。統(tǒng)計和估測結(jié)果表明,是軟件自身暴露出問題。統(tǒng)計和估測結(jié)果表明,信息系統(tǒng)中硬件費用一般占信息系統(tǒng)中硬件費用一般占35%35%,軟件費用占,軟件費用占65%65%,而軟件后期維護費用有時竟高達軟件總,而軟件后期維護費用有時竟高達軟件總費用的費用的80%80%,所有前期開發(fā)費用僅占,所

3、有前期開發(fā)費用僅占20%20%。許多大型軟件公司為維護已有軟件耗費大量人許多大型軟件公司為維護已有軟件耗費大量人力、財力。力、財力。必須建立一套評估、控制和實施軟件維護的機必須建立一套評估、控制和實施軟件維護的機制制, ,這就是本章重點討論的內(nèi)容。這就是本章重點討論的內(nèi)容。2022-4-12國防科技大學計算機學院313.1 13.1 軟件維護與進化的概念軟件維護與進化的概念軟件維護是軟件交付后,保障軟件生產(chǎn)活動,發(fā)軟件維護是軟件交付后,保障軟件生產(chǎn)活動,發(fā)揮軟件社會和經(jīng)濟效益的關(guān)鍵。揮軟件社會和經(jīng)濟效益的關(guān)鍵。軟件交付并投入運行后,任何針對系統(tǒng)變更所做軟件交付并投入運行后,任何針對系統(tǒng)變更所做

4、的工作,都是維護的工作,都是維護(maintenance)(maintenance)。軟件維護究其原因可分為:糾錯性維護、適應(yīng)性軟件維護究其原因可分為:糾錯性維護、適應(yīng)性維護、完善性維護和預(yù)防性維護四類。維護、完善性維護和預(yù)防性維護四類。糾錯性維護是為診斷和改正軟件系統(tǒng)中潛藏的缺糾錯性維護是為診斷和改正軟件系統(tǒng)中潛藏的缺陷而進行的活動。陷而進行的活動。測試不可能排除大型軟件系統(tǒng)中所有的缺陷測試不可能排除大型軟件系統(tǒng)中所有的缺陷, ,軟件軟件交付后交付后, ,用戶在使用軟件的過程中會發(fā)現(xiàn)軟件潛伏用戶在使用軟件的過程中會發(fā)現(xiàn)軟件潛伏的缺陷的缺陷, ,他們會向開發(fā)人員報告并要求維護。他們會向開發(fā)人員

5、報告并要求維護。2022-4-12國防科技大學計算機學院4軟件維護與進化的概念軟件維護與進化的概念維護人員找出軟件失效的原因,進行改正,并根據(jù)維護人員找出軟件失效的原因,進行改正,并根據(jù)需要對需求、設(shè)計、代碼、測試序列以及文檔做出需要對需求、設(shè)計、代碼、測試序列以及文檔做出相應(yīng)變更。相應(yīng)變更。最初的修改可能是臨時性的,即為保持系統(tǒng)運行所最初的修改可能是臨時性的,即為保持系統(tǒng)運行所采取的一些應(yīng)急措施。采取的一些應(yīng)急措施。事后應(yīng)對維護方案仔細推敲,在軟件工具的支持下事后應(yīng)對維護方案仔細推敲,在軟件工具的支持下進行回歸測試,自動修改相應(yīng)的文檔。進行回歸測試,自動修改相應(yīng)的文檔。適應(yīng)性維護是為適應(yīng)軟件

6、運行環(huán)境變化,如操作系適應(yīng)性維護是為適應(yīng)軟件運行環(huán)境變化,如操作系統(tǒng)變更、硬件更新,而修改軟件的活動。統(tǒng)變更、硬件更新,而修改軟件的活動。應(yīng)用軟件的使用壽命很長,多數(shù)超過十年應(yīng)用軟件的使用壽命很長,多數(shù)超過十年, ,但運行但運行環(huán)境更新通常不會超過十年環(huán)境更新通常不會超過十年,CPU,CPU基本是一年半一代基本是一年半一代, ,操作系統(tǒng)不斷地推出新版本操作系統(tǒng)不斷地推出新版本, ,外部設(shè)備和其他系統(tǒng)外部設(shè)備和其他系統(tǒng)元素也頻繁升級和變化元素也頻繁升級和變化, ,因此適應(yīng)性維護是十分必因此適應(yīng)性維護是十分必要的。要的。2022-4-12國防科技大學計算機學院5軟件維護與進化的概念軟件維護與進化的

7、概念完善性維護是根據(jù)用戶在軟件使用過程中提出的一完善性維護是根據(jù)用戶在軟件使用過程中提出的一些新需求實施的維護活動。些新需求實施的維護活動。應(yīng)用軟件運行期間應(yīng)用軟件運行期間, ,用戶可能請求增加新功能、建用戶可能請求增加新功能、建議修改已有功能或提出某些改進意見。議修改已有功能或提出某些改進意見。完善性維護通常占所有軟件維護工作量的一半以上。完善性維護通常占所有軟件維護工作量的一半以上。預(yù)防性維護是優(yōu)化軟件系統(tǒng)結(jié)構(gòu)和可理解性,改善預(yù)防性維護是優(yōu)化軟件系統(tǒng)結(jié)構(gòu)和可理解性,改善可維護性和可靠性??删S護性和可靠性。軟件長期維護會使體系結(jié)構(gòu)變壞,難以理解,增加軟件長期維護會使體系結(jié)構(gòu)變壞,難以理解,增

8、加維護費用,降低運行效率。維護費用,降低運行效率。這類維護活動涉及逆向工程這類維護活動涉及逆向工程(reverse engineering)(reverse engineering)和軟件重構(gòu)。留待和軟件重構(gòu)。留待13.613.6節(jié)專門討論。節(jié)專門討論。2022-4-12國防科技大學計算機學院6軟件維護與進化的概念軟件維護與進化的概念調(diào)查表明:約有調(diào)查表明:約有65%65%的維護屬完善性維護;的維護屬完善性維護;18%18%的的維護屬適應(yīng)性維護;維護屬適應(yīng)性維護;17%17%的維護屬糾錯性維護。的維護屬糾錯性維護。修補系統(tǒng)缺陷并不是費用最高的維護活動,適應(yīng)修補系統(tǒng)缺陷并不是費用最高的維護活動,

9、適應(yīng)新環(huán)境的系統(tǒng)進化和實現(xiàn)新需求以及需求變更占新環(huán)境的系統(tǒng)進化和實現(xiàn)新需求以及需求變更占用了絕大部分的維護工作量。用了絕大部分的維護工作量。實踐中,幾類維護之間沒有明確界限。實踐中,幾類維護之間沒有明確界限。如,在使軟件適應(yīng)新環(huán)境的同時,還可能增加新如,在使軟件適應(yīng)新環(huán)境的同時,還可能增加新功能,充分利用該環(huán)境提供的服務(wù);功能,充分利用該環(huán)境提供的服務(wù);某個軟件失誤可能是因為系統(tǒng)用事先未預(yù)料到的某個軟件失誤可能是因為系統(tǒng)用事先未預(yù)料到的方式工作,修正這類失誤的另一種方法是改變系方式工作,修正這類失誤的另一種方法是改變系統(tǒng)的這種工作方式,等等。統(tǒng)的這種工作方式,等等。2022-4-12國防科技大

10、學計算機學院7軟件維護與進化的概念軟件維護與進化的概念在前幾章討論系統(tǒng)開發(fā)時,主要關(guān)注如何生產(chǎn)能在前幾章討論系統(tǒng)開發(fā)時,主要關(guān)注如何生產(chǎn)能夠?qū)崿F(xiàn)需求并能正確運行的代碼。夠?qū)崿F(xiàn)需求并能正確運行的代碼。維護不僅要理解軟件制品,而且要了解用戶對系維護不僅要理解軟件制品,而且要了解用戶對系統(tǒng)運行的意見,預(yù)測可能出現(xiàn)的問題,考慮業(yè)務(wù)統(tǒng)運行的意見,預(yù)測可能出現(xiàn)的問題,考慮業(yè)務(wù)需求變化帶來的軟件功能的新變更,以及硬件、需求變化帶來的軟件功能的新變更,以及硬件、軟件或接口變更帶來的系統(tǒng)變化。軟件或接口變更帶來的系統(tǒng)變化。維護涉及的范圍更廣,內(nèi)容更多維護涉及的范圍更廣,內(nèi)容更多。2022-4-12國防科技大學計

11、算機學院813.2 13.2 軟件維護的過程模型軟件維護的過程模型實踐證明,有重要應(yīng)用價值的軟件實踐證明,有重要應(yīng)用價值的軟件,生存周期一生存周期一般很長,軟件維護不可避免。般很長,軟件維護不可避免。從軟件開發(fā)的螺旋模型看從軟件開發(fā)的螺旋模型看, ,軟件維護是軟件開發(fā)的軟件維護是軟件開發(fā)的繼續(xù)繼續(xù), ,是軟件的進化。是軟件的進化。多數(shù)維護團隊已不再是該軟件的開發(fā)團隊,軟件多數(shù)維護團隊已不再是該軟件的開發(fā)團隊,軟件維護面臨許多困難。維護面臨許多困難。本節(jié)主要討論軟件維護的主要內(nèi)容、軟件工程的本節(jié)主要討論軟件維護的主要內(nèi)容、軟件工程的目標原則對這些活動的影響、軟件維護的成本、目標原則對這些活動的影

12、響、軟件維護的成本、軟件維護存在的問題等。軟件維護存在的問題等。2022-4-12國防科技大學計算機學院913.2.1 13.2.1 結(jié)構(gòu)化與非結(jié)構(gòu)化的維護結(jié)構(gòu)化與非結(jié)構(gòu)化的維護一個維護需求(申請)被接收后一個維護需求(申請)被接收后, ,可能發(fā)生的事件可能發(fā)生的事件如圖如圖13.113.1所示。如果軟件配置中唯一可用的是源代所示。如果軟件配置中唯一可用的是源代碼碼, ,那么維護只能從那么維護只能從“苦讀苦讀”代碼開始。代碼開始。由于缺乏內(nèi)部文檔由于缺乏內(nèi)部文檔, ,讀代碼是一項很枯燥、很困難讀代碼是一項很枯燥、很困難的工作。的工作。軟件系統(tǒng)的許多微妙之處軟件系統(tǒng)的許多微妙之處( (例如軟件總

13、體結(jié)構(gòu)、全例如軟件總體結(jié)構(gòu)、全局數(shù)據(jù)、系統(tǒng)接口、性能和設(shè)計方面的約束等局數(shù)據(jù)、系統(tǒng)接口、性能和設(shè)計方面的約束等) )不不是搞不清楚就是常常被誤解是搞不清楚就是常常被誤解, ,以致無法估量對源代以致無法估量對源代碼修改所產(chǎn)生的后果。特別是,由于沒有保存測試碼修改所產(chǎn)生的后果。特別是,由于沒有保存測試記錄記錄, ,使使“回歸測試回歸測試”無法進行。無法進行。對于沒有使用良好開發(fā)方法開發(fā)的軟件對于沒有使用良好開發(fā)方法開發(fā)的軟件, ,不得不采不得不采用非結(jié)構(gòu)化的方式進行維護并為此付出高昂的代價用非結(jié)構(gòu)化的方式進行維護并為此付出高昂的代價( (浪費大量人力浪費大量人力, ,讓維護人員有挫折感讓維護人員有

14、挫折感) )。2022-4-12國防科技大學計算機學院102022-4-12國防科技大學計算機學院11圖13.1 非結(jié)構(gòu)化與結(jié)構(gòu)化維護結(jié)構(gòu)化與非結(jié)構(gòu)化的維護結(jié)構(gòu)化與非結(jié)構(gòu)化的維護如果欲維護的軟件存在一個完整的軟件配置如果欲維護的軟件存在一個完整的軟件配置, ,維護活動將從閱讀設(shè)計文檔開始。首先確定軟維護活動將從閱讀設(shè)計文檔開始。首先確定軟件的重要結(jié)構(gòu)、性能及接口特征件的重要結(jié)構(gòu)、性能及接口特征, ,評估這次維評估這次維護可能帶來的影響并規(guī)劃出一個具體實施方案護可能帶來的影響并規(guī)劃出一個具體實施方案; ;然后從修改設(shè)計入手然后從修改設(shè)計入手( (采用以前討論過的設(shè)計采用以前討論過的設(shè)計技術(shù)技術(shù))

15、 ),設(shè)計復(fù)審?fù)ㄟ^之后再修改代碼,設(shè)計復(fù)審?fù)ㄟ^之后再修改代碼, ,并參照并參照測試規(guī)格說明書對軟件進行回歸測試測試規(guī)格說明書對軟件進行回歸測試, ,測試通測試通過后交付用戶使用。過后交付用戶使用。上述過程也稱為結(jié)構(gòu)化維護上述過程也稱為結(jié)構(gòu)化維護, ,它是采用軟件工它是采用軟件工程方法學開發(fā)軟件的自然結(jié)果。擁有完整的軟程方法學開發(fā)軟件的自然結(jié)果。擁有完整的軟件配置能減少維護工作量,提高維護質(zhì)量。件配置能減少維護工作量,提高維護質(zhì)量。2022-4-12國防科技大學計算機學院1213.2.2 13.2.2 維護的成本維護的成本過去的四十年過去的四十年, ,軟件維護的成本在不斷增長。軟件維護的成本在不

16、斷增長。2020世紀世紀7070年代年代, ,一個信息系統(tǒng)機構(gòu)用于軟件維一個信息系統(tǒng)機構(gòu)用于軟件維護的費用占其軟件總預(yù)算的護的費用占其軟件總預(yù)算的353540%40%8080年代接近年代接近60%60%若維護方式?jīng)]有大的改進若維護方式?jīng)]有大的改進, ,未來未來幾年,許多大型軟件公司可能要將其預(yù)算的幾年,許多大型軟件公司可能要將其預(yù)算的80%80%用于軟件系統(tǒng)的維護上。用于軟件系統(tǒng)的維護上。除軟件維護耗費的財力外除軟件維護耗費的財力外, ,其他因素也引起人其他因素也引起人們的注意。們的注意。如如, ,由于資源由于資源( (人力、設(shè)備人力、設(shè)備) )優(yōu)先用于維護任務(wù)優(yōu)先用于維護任務(wù), ,影響新軟件

17、系統(tǒng)的開發(fā),要付出無形的代價。影響新軟件系統(tǒng)的開發(fā),要付出無形的代價。2022-4-12國防科技大學計算機學院13維護的成本維護的成本某些貌似合理但實際不能滿足的維護請求將引某些貌似合理但實際不能滿足的維護請求將引起用戶不滿起用戶不滿; ;在軟件維護過程中引入的潛在缺陷降低了軟件在軟件維護過程中引入的潛在缺陷降低了軟件的質(zhì)量的質(zhì)量; ;從開發(fā)小組中臨時抽調(diào)工程師從事維護工作沖從開發(fā)小組中臨時抽調(diào)工程師從事維護工作沖擊正在進行的開發(fā)等等。擊正在進行的開發(fā)等等。維護舊程序使生產(chǎn)率維護舊程序使生產(chǎn)率( (按每人月代碼行或每人按每人月代碼行或每人月功能點計算月功能點計算) )大幅度下降。大幅度下降。據(jù)

18、報道據(jù)報道, ,生產(chǎn)率最多可能降低四十倍生產(chǎn)率最多可能降低四十倍, ,即每行用即每行用2525元開發(fā)的軟件,維護一行可能耗費元開發(fā)的軟件,維護一行可能耗費10001000元。元。在設(shè)計和實現(xiàn)時為提高可維護性投資是值得的。在設(shè)計和實現(xiàn)時為提高可維護性投資是值得的。2022-4-12國防科技大學計算機學院14維護的成本維護的成本維護成本與開發(fā)成本的比例在不同應(yīng)用領(lǐng)域中是維護成本與開發(fā)成本的比例在不同應(yīng)用領(lǐng)域中是不同的。不同的。對于業(yè)務(wù)應(yīng)用系統(tǒng),維護費用與系統(tǒng)開發(fā)成本大對于業(yè)務(wù)應(yīng)用系統(tǒng),維護費用與系統(tǒng)開發(fā)成本大體相等。體相等。對于嵌入式實時系統(tǒng),維護費用能達到開發(fā)成本對于嵌入式實時系統(tǒng),維護費用能達

19、到開發(fā)成本的四倍以上,這類系統(tǒng)的高可靠性和高性能需求的四倍以上,這類系統(tǒng)的高可靠性和高性能需求需要模塊間緊密連接,因此變更起來特別困難。需要模塊間緊密連接,因此變更起來特別困難。軟件維護工作量分為生產(chǎn)性軟件維護工作量分為生產(chǎn)性( (用于分析與評價,修用于分析與評價,修改設(shè)計和代碼等改設(shè)計和代碼等) )和助動性和助動性( (用于理解代碼功能,用于理解代碼功能,解釋數(shù)據(jù)結(jié)構(gòu)、接口特征與性能約束等解釋數(shù)據(jù)結(jié)構(gòu)、接口特征與性能約束等) )兩類。兩類。2022-4-12國防科技大學計算機學院15維護的成本維護的成本下面給出維護工作量的一種估算模型下面給出維護工作量的一種估算模型: : M=P+K M=P

20、+K* *e e(c-d)(c-d) (13-113-1)其中其中M M表示維護工作量,表示維護工作量,P P表示生產(chǎn)性工作量,表示生產(chǎn)性工作量,K K為經(jīng)為經(jīng)驗常數(shù)驗常數(shù)c c表示復(fù)雜度表示復(fù)雜度, ,標志設(shè)計的好壞及文檔完整程度標志設(shè)計的好壞及文檔完整程度d d表示對維護軟件的熟悉程度表示對維護軟件的熟悉程度模型表明模型表明, ,倘若未用好的軟件開發(fā)方法倘若未用好的軟件開發(fā)方法( (即未遵即未遵循軟件工程的思想循軟件工程的思想) )或軟件開發(fā)人員不能參與或軟件開發(fā)人員不能參與維護維護, ,則維護工作量則維護工作量( (和成本和成本) )將成指數(shù)增長。將成指數(shù)增長。2022-4-12國防科技

21、大學計算機學院1613.2.3 13.2.3 可能存在的問題可能存在的問題軟件維護中出現(xiàn)的大部分問題都可歸咎于軟件規(guī)劃軟件維護中出現(xiàn)的大部分問題都可歸咎于軟件規(guī)劃和開發(fā)方法的缺陷。和開發(fā)方法的缺陷。軟件開發(fā)若不嚴格遵循軟件開發(fā)標準軟件開發(fā)若不嚴格遵循軟件開發(fā)標準, ,軟件維護就軟件維護就會遇到許多困難。會遇到許多困難。影響影響維護的問題維護的問題: :(1)(1)很難甚至不可能追蹤軟件版本的進化過程很難甚至不可能追蹤軟件版本的進化過程, ,軟件的軟件的變化沒在相應(yīng)文檔中反映出來變化沒在相應(yīng)文檔中反映出來; ;(2)(2)很難甚至不可能追蹤軟件的整個創(chuàng)建過程;很難甚至不可能追蹤軟件的整個創(chuàng)建過程

22、;(3)(3)理解他人的程序非常困難理解他人的程序非常困難, ,當軟件配置不全當軟件配置不全, ,僅有僅有源代碼時問題尤為嚴重源代碼時問題尤為嚴重; ;(4)(4)軟件人員流動性很大軟件人員流動性很大, ,維護他人軟件時很難得到開維護他人軟件時很難得到開發(fā)者的幫助;發(fā)者的幫助;2022-4-12國防科技大學計算機學院17可能存在的問題可能存在的問題(5)(5)軟件沒有文檔、或文檔不全、或文檔不易理解、軟件沒有文檔、或文檔不全、或文檔不易理解、或與源代碼不一致;或與源代碼不一致;(6)(6)多數(shù)軟件設(shè)計未考慮修改的需要多數(shù)軟件設(shè)計未考慮修改的需要( (有些設(shè)計方法有些設(shè)計方法采用了功能獨立和對象

23、類型等一些便于修改的概采用了功能獨立和對象類型等一些便于修改的概念念),),軟件修改不僅困難而且容易出錯。軟件修改不僅困難而且容易出錯。(7)(7)軟件維護不是一項有吸引力的工作軟件維護不是一項有吸引力的工作, ,從事這項工從事這項工作令人缺乏成就感。作令人缺乏成就感。許多遺留系統(tǒng)未采用軟件工程的思想和方法開發(fā)許多遺留系統(tǒng)未采用軟件工程的思想和方法開發(fā)( (大都運行了十年以上大都運行了十年以上),),問題尤其嚴重。問題尤其嚴重。下面從技術(shù)和管理的角度討論解決這些問題的具下面從技術(shù)和管理的角度討論解決這些問題的具體措施。體措施。2022-4-12國防科技大學計算機學院1813.3 13.3 可維

24、護性可維護性軟件可維護性指軟件可維護性指, ,理解、改正、調(diào)整和改進軟件的理解、改正、調(diào)整和改進軟件的難易程度。難易程度??删S護性是軟件質(zhì)量的重要屬性,涉及軟件開發(fā)可維護性是軟件質(zhì)量的重要屬性,涉及軟件開發(fā)方法、工具、過程、軟件制品、文檔、軟件管理、方法、工具、過程、軟件制品、文檔、軟件管理、資金投入、維護計劃、維護團隊等。資金投入、維護計劃、維護團隊等??删S護性是指導(dǎo)軟件工程活動的一條基本原則,可維護性是指導(dǎo)軟件工程活動的一條基本原則,也是軟件工程追求的一個目標。也是軟件工程追求的一個目標。2022-4-12國防科技大學計算機學院1913.3.113.3.1影響可維護性的因素影響可維護性的因

25、素影響軟件可維護性影響軟件可維護性的的因素因素: 設(shè)計、編碼和測試不規(guī)范設(shè)計、編碼和測試不規(guī)范,軟件配置不全軟件配置不全開發(fā)環(huán)境的因素開發(fā)環(huán)境的因素: : 訓(xùn)練有素的軟件團隊;訓(xùn)練有素的軟件團隊; 維護團隊是否熟悉經(jīng)過多次維護的系統(tǒng);維護團隊是否熟悉經(jīng)過多次維護的系統(tǒng); 軟件的可理解性,包括:軟件結(jié)構(gòu)、描述軟件制品的語軟件的可理解性,包括:軟件結(jié)構(gòu)、描述軟件制品的語言(如言(如UML,UML,程序設(shè)計語言等)、文檔及標準化程度等;程序設(shè)計語言等)、文檔及標準化程度等; 操作系統(tǒng)的標準化程度;操作系統(tǒng)的標準化程度; 維護工具和環(huán)境;維護工具和環(huán)境; 生成測試用例的能力;生成測試用例的能力; 對于

26、嵌入式軟件系統(tǒng)維護應(yīng)有專門的調(diào)試工具對于嵌入式軟件系統(tǒng)維護應(yīng)有專門的調(diào)試工具2022-4-12國防科技大學計算機學院2013.3.2 13.3.2 若干量化的測度若干量化的測度軟件可維護性與軟件質(zhì)量和可靠性一樣是難以量軟件可維護性與軟件質(zhì)量和可靠性一樣是難以量化的概念化的概念, ,然而借助維護活動中可以定量估算的屬然而借助維護活動中可以定量估算的屬性性, ,能間接地度量可維護性。能間接地度量可維護性。面向時間的度量包括:面向時間的度量包括: 發(fā)現(xiàn)問題耗費的時間發(fā)現(xiàn)問題耗費的時間; ; 收集維護工具耗費的時間收集維護工具耗費的時間; ; 分析問題耗費的時間分析問題耗費的時間; ; 形成修改說明書

27、耗費的時間;形成修改說明書耗費的時間; 糾錯糾錯( (或修改或修改) ) 耗費的時間耗費的時間; ;2022-4-12國防科技大學計算機學院21若干量化的測度若干量化的測度 局部、整體測試耗費的時間局部、整體測試耗費的時間; ; 維護復(fù)審耗費的時間維護復(fù)審耗費的時間; ; 系統(tǒng)恢復(fù)耗費的時間。系統(tǒng)恢復(fù)耗費的時間。收集上述度量數(shù)據(jù)作為管理者評估人員、工具、收集上述度量數(shù)據(jù)作為管理者評估人員、工具、技術(shù)有效性的依據(jù)技術(shù)有效性的依據(jù), ,除了這些面向時間的度量外除了這些面向時間的度量外, ,有關(guān)設(shè)計結(jié)構(gòu)和軟件復(fù)雜性的度量亦可間接說明有關(guān)設(shè)計結(jié)構(gòu)和軟件復(fù)雜性的度量亦可間接說明軟件的可維護性。軟件的可維

28、護性。2022-4-12國防科技大學計算機學院2213.3.313.3.3保證可維護性的復(fù)審保證可維護性的復(fù)審可維護性是軟件質(zhì)量標準的基本要素。可維護性是軟件質(zhì)量標準的基本要素。軟件制品的復(fù)審活動經(jīng)常遇到可維護性的內(nèi)容。軟件制品的復(fù)審活動經(jīng)常遇到可維護性的內(nèi)容。在需求分析制品的復(fù)審中在需求分析制品的復(fù)審中, ,應(yīng)對將來可能修改應(yīng)對將來可能修改和可以改進的部分進行注釋和可以改進的部分進行注釋, ,注意為軟件移植注意為軟件移植提供方便,并考慮可能影響軟件維護的系統(tǒng)界提供方便,并考慮可能影響軟件維護的系統(tǒng)界面面; ;在設(shè)計階段的復(fù)審中在設(shè)計階段的復(fù)審中, ,應(yīng)從易于維護和提高設(shè)應(yīng)從易于維護和提高設(shè)計

29、總體質(zhì)量的角度全面評審數(shù)據(jù)設(shè)計、總體結(jié)計總體質(zhì)量的角度全面評審數(shù)據(jù)設(shè)計、總體結(jié)構(gòu)設(shè)計、過程設(shè)計和界面設(shè)計構(gòu)設(shè)計、過程設(shè)計和界面設(shè)計; ;代碼復(fù)審主要強調(diào)編程風格和內(nèi)部文檔,他們代碼復(fù)審主要強調(diào)編程風格和內(nèi)部文檔,他們是影響可維護性的重要因素是影響可維護性的重要因素; ;2022-4-12國防科技大學計算機學院23保證可維護性的復(fù)審保證可維護性的復(fù)審最后最后, ,在軟件正式交付之前在軟件正式交付之前, ,應(yīng)該進行一次預(yù)防性應(yīng)該進行一次預(yù)防性維護,使代碼具有良好的結(jié)構(gòu),并保持文檔和代維護,使代碼具有良好的結(jié)構(gòu),并保持文檔和代碼的一致性。碼的一致性。軟件維護活動完成時,要進行復(fù)審軟件維護活動完成時,

30、要進行復(fù)審, ,所用方法下一所用方法下一節(jié)討論。正式的可維護性復(fù)審放在測試完成之后節(jié)討論。正式的可維護性復(fù)審放在測試完成之后, ,稱為配置復(fù)審。稱為配置復(fù)審。目的是保證配置中所有成份的完整、協(xié)調(diào)、易于目的是保證配置中所有成份的完整、協(xié)調(diào)、易于理解且便于修改控制。軟件配置管理在十六章討理解且便于修改控制。軟件配置管理在十六章討論。論。2022-4-12國防科技大學計算機學院2413.4 13.4 維護活動及實施策略維護活動及實施策略軟件維護工作在維護申請?zhí)岢鲋熬烷_始了軟件維護工作在維護申請?zhí)岢鲋熬烷_始了,包包括括:建立維護組織建立維護組織, ,強制報告和評估的過程強制報告和評估的過程; ;為

31、每個維護申請確定標準化的事件序列為每個維護申請確定標準化的事件序列; ;制定保存維護活動記錄的制度和有關(guān)復(fù)審及評制定保存維護活動記錄的制度和有關(guān)復(fù)審及評估的標準。估的標準。2022-4-12國防科技大學計算機學院2513.4.113.4.1維護組織維護組織軟件維護階段相對來說是漫長且不定期的軟件維護階段相對來說是漫長且不定期的, ,長期以來很少建立正式的維護組織長期以來很少建立正式的維護組織, ,而多采而多采用用“抓著誰算誰抓著誰算誰”的辦法組織維護力量。的辦法組織維護力量。目前人們普遍認識到目前人們普遍認識到, ,即使對于一個小的軟即使對于一個小的軟件開發(fā)隊伍而言件開發(fā)隊伍而言, ,非正式地

32、定崗定責也絕對非正式地定崗定責也絕對必要。必要。圖圖13.213.2給出了一種組織模式。給出了一種組織模式。2022-4-12國防科技大學計算機學院26圖圖13.2 13.2 維護的一種組織模式維護的一種組織模式2022-4-12國防科技大學計算機學院27維護組織維護組織每個維護申請通過維護管理員轉(zhuǎn)告給系統(tǒng)管理每個維護申請通過維護管理員轉(zhuǎn)告給系統(tǒng)管理員員, ,系統(tǒng)管理員一般都是對程序系統(tǒng)管理員一般都是對程序( (某一部分某一部分) )特特別熟悉的技術(shù)人員別熟悉的技術(shù)人員, ,他們對維護申請及可能引他們對維護申請及可能引起的軟件修改進行評估起的軟件修改進行評估, ,并向修改控制決策機并向修改控制

33、決策機構(gòu)構(gòu)( (一個或一組管理者一個或一組管理者) )報告報告, ,由它最后確定是由它最后確定是否采取行動。否采取行動。依照這樣的組織方式開展維護活動能減少混亂依照這樣的組織方式開展維護活動能減少混亂和盲目性和盲目性, ,避免因小失大的情況發(fā)生。避免因小失大的情況發(fā)生。上述各個崗位都不需要專職人員上述各個崗位都不需要專職人員, ,但必須為勝但必須為勝任者任者, ,并且要早在維護活動開始之前就明確各并且要早在維護活動開始之前就明確各自責任自責任, ,避免互相推諉避免互相推諉, ,急功近利的現(xiàn)象。急功近利的現(xiàn)象。2022-4-12國防科技大學計算機學院2813.4.213.4.2維護的報告與評估維

34、護的報告與評估所有的軟件維護申請都應(yīng)該采用標準的格式所有的軟件維護申請都應(yīng)該采用標準的格式, ,軟件軟件開發(fā)人員統(tǒng)一發(fā)放的維護申請單開發(fā)人員統(tǒng)一發(fā)放的維護申請單(Maintenance (Maintenance Request Form)Request Form)或稱為軟件問題報告單或稱為軟件問題報告單(Software (Software Problem Report),Problem Report),由用戶根據(jù)需要填寫。由用戶根據(jù)需要填寫。如果用戶確實發(fā)現(xiàn)了缺陷如果用戶確實發(fā)現(xiàn)了缺陷, ,必須完整地記錄出錯現(xiàn)必須完整地記錄出錯現(xiàn)場信息場信息( (包括輸入數(shù)據(jù)、列表文件和其他有關(guān)信包括輸入數(shù)

35、據(jù)、列表文件和其他有關(guān)信息息) );如果用戶提出適應(yīng)性或完善性維護請求如果用戶提出適應(yīng)性或完善性維護請求, ,需同時提需同時提交一個簡短的修改規(guī)約交一個簡短的修改規(guī)約( (即簡單的需求規(guī)約即簡單的需求規(guī)約) )。2022-4-12國防科技大學計算機學院29維護的報告與評估維護的報告與評估維護管理員將維護管理員將MRFMRF提交給系統(tǒng)管理員評估。提交給系統(tǒng)管理員評估。一個維護申請被核準后一個維護申請被核準后,MRF,MRF文檔成為規(guī)劃本次維文檔成為規(guī)劃本次維護任務(wù)的依據(jù)護任務(wù)的依據(jù), ,軟件組織要另外制定一個軟件修改軟件組織要另外制定一個軟件修改報告單報告單(Software Change Re

36、port)(Software Change Report),說明實現(xiàn),說明實現(xiàn)MRFMRF所需工作量、維護活動的性質(zhì)、本次維護請求所需工作量、維護活動的性質(zhì)、本次維護請求優(yōu)先級、本次修改的背景數(shù)據(jù)。優(yōu)先級、本次修改的背景數(shù)據(jù)。將將SCRSCR提交給修改控制決策機構(gòu)提交給修改控制決策機構(gòu), ,供進一步規(guī)劃維供進一步規(guī)劃維護活動使用。護活動使用。2022-4-12國防科技大學計算機學院3013.4.3 13.4.3 維護工作流維護工作流當提出一個維護申請之后當提出一個維護申請之后, ,發(fā)生的工作流程如圖發(fā)生的工作流程如圖13.313.3所示。所示。首先確定用戶請求維護的類型首先確定用戶請求維護的類

37、型, ,有時用戶認為是改有時用戶認為是改錯的請求錯的請求, ,開發(fā)人員則可能認為是適應(yīng)性或完善性開發(fā)人員則可能認為是適應(yīng)性或完善性維護維護, ,如果出現(xiàn)這種分歧如果出現(xiàn)這種分歧, ,必須通過協(xié)商達到共識。必須通過協(xié)商達到共識。2022-4-12國防科技大學計算機學院312022-4-12國防科技大學計算機學院32圖圖13.3 維護工作流維護工作流維護工作流維護工作流對一項改錯性維護申請對一項改錯性維護申請( (圖中標為圖中標為“出錯出錯”通通路路),),首先要估計缺陷的嚴重程度首先要估計缺陷的嚴重程度, ,如果是一項如果是一項嚴重缺陷嚴重缺陷( (例如例如, ,某關(guān)鍵部分不能工作某關(guān)鍵部分不能

38、工作),),則應(yīng)由則應(yīng)由系統(tǒng)管理員系統(tǒng)管理員“調(diào)兵遣將調(diào)兵遣將”, ,立即開始分析問題立即開始分析問題; ;如果問題并不嚴重如果問題并不嚴重, ,這項維護申請應(yīng)與其他任這項維護申請應(yīng)與其他任務(wù)統(tǒng)籌考慮務(wù)統(tǒng)籌考慮, ,根據(jù)輕重緩急再行安排。根據(jù)輕重緩急再行安排。某些場合某些場合, ,維護活動不能按常規(guī)進行。維護活動不能按常規(guī)進行。如未對潛在的副作用進行估計或未修改文檔就如未對潛在的副作用進行估計或未修改文檔就急忙動手修改代碼。急忙動手修改代碼?!熬然鹁然稹笔骄S護僅限于少數(shù)危難時刻式維護僅限于少數(shù)危難時刻, ,并且保并且保證只是延遲而不是放棄對維護的控制和評估。證只是延遲而不是放棄對維護的控制和評

39、估。一旦危機過去一旦危機過去, ,應(yīng)立即補行所有的控制和評估應(yīng)立即補行所有的控制和評估過程過程, ,防止由此產(chǎn)生的更大危機。防止由此產(chǎn)生的更大危機。2022-4-12國防科技大學計算機學院33維護工作流維護工作流適應(yīng)性和完善性維護申請執(zhí)行另一條處理路徑適應(yīng)性和完善性維護申請執(zhí)行另一條處理路徑首先對所申請的維護進行評估并根據(jù)優(yōu)先級在維護首先對所申請的維護進行評估并根據(jù)優(yōu)先級在維護請求隊列中排隊請求隊列中排隊根據(jù)根據(jù)企業(yè)本身的策略、可用的、軟件當前及未來發(fā)企業(yè)本身的策略、可用的、軟件當前及未來發(fā)展趨勢等因素展趨勢等因素決定決定完善性維護完善性維護的的優(yōu)先級。優(yōu)先級。某項維護申請一旦核準并在隊列中排

40、列某項維護申請一旦核準并在隊列中排列, ,便開始規(guī)便開始規(guī)劃進度劃進度, ,如同接受一項新的開發(fā)任務(wù)一樣。如同接受一項新的開發(fā)任務(wù)一樣。維護維護的的技術(shù)工作:修改軟件設(shè)計,進行設(shè)計復(fù)審,技術(shù)工作:修改軟件設(shè)計,進行設(shè)計復(fù)審,必要時重新編碼;實施單元測試、綜合測試必要時重新編碼;實施單元測試、綜合測試( (包括包括回歸測試回歸測試) )、確認測試和復(fù)查。、確認測試和復(fù)查。復(fù)查旨在確認軟件配置中所有項目完整、協(xié)調(diào),并復(fù)查旨在確認軟件配置中所有項目完整、協(xié)調(diào),并保證滿足保證滿足MRFMRF。軟件維護可視為軟件工程的一個遞歸過程。軟件維護可視為軟件工程的一個遞歸過程。2022-4-12國防科技大學計算

41、機學院34維護工作流維護工作流當一項軟件維護任務(wù)完成后當一項軟件維護任務(wù)完成后, ,進行一次狀況復(fù)進行一次狀況復(fù)審大有益處。狀況復(fù)審主要考慮下列問題審大有益處。狀況復(fù)審主要考慮下列問題: : 依照當前狀態(tài)依照當前狀態(tài), ,在設(shè)計、編碼和測試的哪些方在設(shè)計、編碼和測試的哪些方面還能用其他方法進行面還能用其他方法進行? ? 哪些維護資源可用但未用;哪些維護資源可用但未用; 這次維護活動中主要這次維護活動中主要( (或次要或次要) )的障礙有哪些的障礙有哪些? ? 在維護請求中有預(yù)防性維護嗎在維護請求中有預(yù)防性維護嗎? ?狀況復(fù)審的目的在于促進未來的維護工作狀況復(fù)審的目的在于促進未來的維護工作, ,

42、同同時也為有效管理軟件組織提供重要的反饋信息。時也為有效管理軟件組織提供重要的反饋信息。2022-4-12國防科技大學計算機學院3513.4.4 13.4.4 保存維護記錄保存維護記錄長期以來長期以來, ,人們對于保存軟件工程各個階段的人們對于保存軟件工程各個階段的記錄未給予足夠的重視記錄未給予足夠的重視, ,因此軟件維護的歷史因此軟件維護的歷史記錄缺乏記錄缺乏, ,以致人們很難估計各種維護技術(shù)的以致人們很難估計各種維護技術(shù)的有效性有效性, ,不能確定一個商品化軟件的質(zhì)量不能確定一個商品化軟件的質(zhì)量, ,也不也不能估算維護的實際成本。能估算維護的實際成本。維護過程需要記錄的數(shù)據(jù)包括維護過程需要

43、記錄的數(shù)據(jù)包括: : 程序信息:程序標志、源程序行數(shù)、目標程程序信息:程序標志、源程序行數(shù)、目標程序指令條數(shù)、編程語言序指令條數(shù)、編程語言; ; 程序運行信息:安裝程序的日期、自安裝之程序運行信息:安裝程序的日期、自安裝之日起程序運行的次數(shù)、自安裝之日起程序失敗日起程序運行的次數(shù)、自安裝之日起程序失敗的次數(shù)的次數(shù); ;2022-4-12國防科技大學計算機學院36保存維護記錄保存維護記錄 程序維護信息:程序修改處的層數(shù)和標志、程序維護信息:程序修改處的層數(shù)和標志、程序變動增加的源程序行數(shù)、程序變動刪程序變動增加的源程序行數(shù)、程序變動刪除的源程序行數(shù)、每處改動耗費的人時數(shù)、除的源程序行數(shù)、每處改動

44、耗費的人時數(shù)、程序改動日期;程序改動日期; 軟件工程師標志軟件工程師標志; ; 其它維護信息:其它維護信息:MRFMRF標志、維護的類型、標志、維護的類型、維護開始和結(jié)束日期、此次維護人時數(shù)、維護開始和結(jié)束日期、此次維護人時數(shù)、本次維護的純利潤,等等。本次維護的純利潤,等等。每次維護完成后應(yīng)立即收集上述數(shù)據(jù)每次維護完成后應(yīng)立即收集上述數(shù)據(jù), ,并以并以此為基礎(chǔ)構(gòu)造維護數(shù)據(jù)庫此為基礎(chǔ)構(gòu)造維護數(shù)據(jù)庫, ,供維護評價用。供維護評價用。2022-4-12國防科技大學計算機學院3713.4.5 13.4.5 評價維護活動評價維護活動如果缺乏真實可信的數(shù)據(jù)如果缺乏真實可信的數(shù)據(jù), ,評估活動毫無意義。在保

45、存評估活動毫無意義。在保存維護記錄的前提下維護記錄的前提下, ,可對維護性能進行度量可對維護性能進行度量, ,統(tǒng)計下列數(shù)統(tǒng)計下列數(shù)據(jù)是必要的據(jù)是必要的: : 程序每次運行的平均失效次數(shù)程序每次運行的平均失效次數(shù); ; 各類維護耗費的總?cè)藭r數(shù)各類維護耗費的總?cè)藭r數(shù); ; 各種程序、各種語言及各類維護的程序平均變各種程序、各種語言及各類維護的程序平均變 維護活動增刪一個語句平均花費的人時數(shù)維護活動增刪一個語句平均花費的人時數(shù); ; 維護每種語言的程序平均花費的人時數(shù)維護每種語言的程序平均花費的人時數(shù); ; 一張一張MRFMRF的平均周轉(zhuǎn)時間的平均周轉(zhuǎn)時間; ; 各類維護請求的百分比。各類維護請求的

46、百分比。根據(jù)這些統(tǒng)計量可對開發(fā)技術(shù)、編程語言根據(jù)這些統(tǒng)計量可對開發(fā)技術(shù)、編程語言, ,以及對維護以及對維護工作量的預(yù)測與資源分配等諸多方面的決策進行評價。工作量的預(yù)測與資源分配等諸多方面的決策進行評價。2022-4-12國防科技大學計算機學院3813.5 13.5 維護的副作用維護的副作用軟件修改是一項很危險的工作軟件修改是一項很危險的工作, ,對一個復(fù)雜的邏輯過程對一個復(fù)雜的邏輯過程, ,那怕做一項微小的改動那怕做一項微小的改動, ,都可能引入潛在的缺陷都可能引入潛在的缺陷, ,雖然設(shè)雖然設(shè)計文檔化和細致的回歸測試有助于排除缺陷計文檔化和細致的回歸測試有助于排除缺陷, ,但是維護但是維護仍然

47、會產(chǎn)生副作用。軟件維護的副作用指,由于維護或仍然會產(chǎn)生副作用。軟件維護的副作用指,由于維護或在維護過程中其他一些不期望的行為引入的缺陷在維護過程中其他一些不期望的行為引入的缺陷, ,副作副作用大致可分為三類用大致可分為三類: :(1) (1) 代碼副作用。雖然每次代碼修改都可能引入潛在的代碼副作用。雖然每次代碼修改都可能引入潛在的缺陷缺陷, ,但下列修改最易出錯但下列修改最易出錯: : 修改或刪除子程序、語句標號、標識符修改或刪除子程序、語句標號、標識符; ; 為提高程序執(zhí)行效率而做的修改為提高程序執(zhí)行效率而做的修改; ; 修改文件的修改文件的openopen、closeclose操作操作;

48、; 修改邏輯操作符修改邏輯操作符; ; 由設(shè)計變更引起的代碼修改由設(shè)計變更引起的代碼修改; ; 修改對邊界條件的測試。修改對邊界條件的測試。2022-4-12國防科技大學計算機學院39維護的副作用維護的副作用代碼副作用有時通過回歸測試即可發(fā)現(xiàn)代碼副作用有時通過回歸測試即可發(fā)現(xiàn), ,此時此時應(yīng)立即采取補救措施;應(yīng)立即采取補救措施;不幸的是不幸的是, ,有時直到交付運行后才暴露出來有時直到交付運行后才暴露出來, ,故故對代碼進行上述修改應(yīng)特別慎重。對代碼進行上述修改應(yīng)特別慎重。(2)(2)數(shù)據(jù)副作用。數(shù)據(jù)副作用。 在此之前我們曾多次強調(diào)軟件設(shè)計中數(shù)據(jù)結(jié)構(gòu)在此之前我們曾多次強調(diào)軟件設(shè)計中數(shù)據(jù)結(jié)構(gòu)的重

49、要性。的重要性。在維護階段一旦修改了數(shù)據(jù)結(jié)構(gòu)在維護階段一旦修改了數(shù)據(jù)結(jié)構(gòu), ,軟件設(shè)計與軟件設(shè)計與數(shù)據(jù)可能就不再吻合數(shù)據(jù)可能就不再吻合, ,缺陷隨即出現(xiàn)。缺陷隨即出現(xiàn)。數(shù)據(jù)副作用指,因修改軟件的信息結(jié)構(gòu)而帶來數(shù)據(jù)副作用指,因修改軟件的信息結(jié)構(gòu)而帶來 的不良后果。的不良后果。2022-4-12國防科技大學計算機學院40維護的副作用維護的副作用容易引起數(shù)據(jù)副作用的修改包括容易引起數(shù)據(jù)副作用的修改包括: :局部和全局常量、記錄或文件格式的再定義局部和全局常量、記錄或文件格式的再定義增減數(shù)據(jù)或其他復(fù)雜數(shù)據(jù)結(jié)構(gòu)的體積增減數(shù)據(jù)或其他復(fù)雜數(shù)據(jù)結(jié)構(gòu)的體積; ;修改全局數(shù)據(jù)修改全局數(shù)據(jù); ;控制標志和指針的重新

50、初始化控制標志和指針的重新初始化; ;重新排列重新排列I/OI/O表或子程序參數(shù)表。表或子程序參數(shù)表。設(shè)計文檔化有助于限制數(shù)據(jù)副作用設(shè)計文檔化有助于限制數(shù)據(jù)副作用, ,因為設(shè)計因為設(shè)計文檔中詳細地描述了數(shù)據(jù)結(jié)構(gòu)并提供一個交叉文檔中詳細地描述了數(shù)據(jù)結(jié)構(gòu)并提供一個交叉訪問表訪問表, ,把數(shù)據(jù)及引用它們的模塊一一對應(yīng)起把數(shù)據(jù)及引用它們的模塊一一對應(yīng)起來。來。2022-4-12國防科技大學計算機學院41維護的副作用維護的副作用(3)(3)文檔的副作用。文檔的副作用。 維護應(yīng)統(tǒng)一考慮整個軟件配置維護應(yīng)統(tǒng)一考慮整個軟件配置, ,而不僅僅是源而不僅僅是源代碼。否則代碼。否則, ,由于在設(shè)計文檔和用戶手冊中未

51、由于在設(shè)計文檔和用戶手冊中未能準確反映修改情況而引起文檔副作用。能準確反映修改情況而引起文檔副作用。對軟件的任何修改都應(yīng)在相應(yīng)的技術(shù)文檔中反對軟件的任何修改都應(yīng)在相應(yīng)的技術(shù)文檔中反映出來映出來, ,如果設(shè)計文檔不能與軟件當前的狀況如果設(shè)計文檔不能與軟件當前的狀況對應(yīng)則比沒有文檔更糟。對應(yīng)則比沒有文檔更糟。對用戶來說對用戶來說, ,若使用說明中未能反映修改后的若使用說明中未能反映修改后的狀況狀況, ,那么用戶在這些問題上必定出錯。那么用戶在這些問題上必定出錯。一次維護完成之后一次維護完成之后, ,再次交付軟件之前應(yīng)仔細再次交付軟件之前應(yīng)仔細復(fù)審整個配置復(fù)審整個配置, ,有效地減少文檔副作用。某些

52、有效地減少文檔副作用。某些維護申請不必修改設(shè)計和代碼維護申請不必修改設(shè)計和代碼, ,只需整理用戶只需整理用戶文檔便可達到維護的目的。文檔便可達到維護的目的。2022-4-12國防科技大學計算機學院4213.6 13.6 逆向工程與軟件重構(gòu)逆向工程與軟件重構(gòu)軟件重構(gòu)是目前預(yù)防性維護采用的主要技術(shù),即軟件重構(gòu)是目前預(yù)防性維護采用的主要技術(shù),即通過設(shè)法提高現(xiàn)有系統(tǒng)的總體質(zhì)量來應(yīng)對維護挑通過設(shè)法提高現(xiàn)有系統(tǒng)的總體質(zhì)量來應(yīng)對維護挑戰(zhàn)。戰(zhàn)。它涉及文檔重構(gòu)、重組、逆向工程和再工程四個它涉及文檔重構(gòu)、重組、逆向工程和再工程四個層次的工作。層次的工作。文檔重構(gòu)是,通過對源代碼進行靜態(tài)分析幫助維文檔重構(gòu)是,通過對

53、源代碼進行靜態(tài)分析幫助維護人員理解和引用代碼。護人員理解和引用代碼。重組(重組(restructurerestructure)是,利用轉(zhuǎn)換規(guī)則簡化內(nèi)部)是,利用轉(zhuǎn)換規(guī)則簡化內(nèi)部表示,將結(jié)構(gòu)不好的代碼轉(zhuǎn)換為易于理解和變更表示,將結(jié)構(gòu)不好的代碼轉(zhuǎn)換為易于理解和變更的結(jié)構(gòu)化代碼。的結(jié)構(gòu)化代碼。2022-4-12國防科技大學計算機學院43逆向工程與軟件重構(gòu)逆向工程與軟件重構(gòu)逆向工程逆向工程(reverse engineer)(reverse engineer) 根據(jù)源代碼構(gòu)造軟件中間制品,包括重新創(chuàng)建設(shè)根據(jù)源代碼構(gòu)造軟件中間制品,包括重新創(chuàng)建設(shè)計和規(guī)約。計和規(guī)約。再工程再工程(reengineerin

54、g)(reengineering) 在逆向工程所獲信息的基礎(chǔ)上,重新進行在逆向工程所獲信息的基礎(chǔ)上,重新進行“正向正向工程工程”,重構(gòu)已有系統(tǒng)的一個新版本,使其更易,重構(gòu)已有系統(tǒng)的一個新版本,使其更易維護。維護。通常,再工程軟件的質(zhì)量提高了,但功能沒有改通常,再工程軟件的質(zhì)量提高了,但功能沒有改變。變。圖圖13.413.4給出四類軟件重構(gòu)的關(guān)系。給出四類軟件重構(gòu)的關(guān)系。2022-4-12國防科技大學計算機學院44圖圖13.4 13.4 軟件重構(gòu)分類軟件重構(gòu)分類2022-4-12國防科技大學計算機學院4513.6.1 13.6.1 文檔重構(gòu)文檔重構(gòu)文檔重構(gòu)是指對源代碼進行靜態(tài)分析以產(chǎn)生系文檔重構(gòu)

55、是指對源代碼進行靜態(tài)分析以產(chǎn)生系統(tǒng)文檔。檢查變量使用、構(gòu)件調(diào)用、控制路徑、統(tǒng)文檔。檢查變量使用、構(gòu)件調(diào)用、控制路徑、構(gòu)件規(guī)模、調(diào)用參數(shù)、測試路徑等幫助我們理構(gòu)件規(guī)模、調(diào)用參數(shù)、測試路徑等幫助我們理解代碼解代碼“做什么做什么”以及以及“如何做如何做”。靜態(tài)代碼分析產(chǎn)生的這些信息可以用圖形或文靜態(tài)代碼分析產(chǎn)生的這些信息可以用圖形或文本來表示。本來表示。 圖圖13.513.5闡明文檔重構(gòu)的過程。闡明文檔重構(gòu)的過程。存在文檔分析工具支持文檔重構(gòu),工具通過分存在文檔分析工具支持文檔重構(gòu),工具通過分析代碼,導(dǎo)出構(gòu)件調(diào)用關(guān)系、類層次、數(shù)據(jù)接析代碼,導(dǎo)出構(gòu)件調(diào)用關(guān)系、類層次、數(shù)據(jù)接口表、數(shù)據(jù)字典、數(shù)據(jù)流表或數(shù)

56、據(jù)流圖、控制口表、數(shù)據(jù)字典、數(shù)據(jù)流表或數(shù)據(jù)流圖、控制流表或控制流圖、偽代碼、測試路徑、構(gòu)件和流表或控制流圖、偽代碼、測試路徑、構(gòu)件和變量的交叉引用表,等等。變量的交叉引用表,等等。2022-4-12國防科技大學計算機學院46圖圖13.513.5文檔重構(gòu)過程文檔重構(gòu)過程2022-4-12國防科技大學計算機學院4713.6.213.6.2重組重組重組的目的是為了使代碼更易于理解和變更。重組的目的是為了使代碼更易于理解和變更。一般利用工具解釋源代碼并產(chǎn)生內(nèi)部表示(如一般利用工具解釋源代碼并產(chǎn)生內(nèi)部表示(如語義網(wǎng)或有向圖),然后利用轉(zhuǎn)換規(guī)則簡化內(nèi)語義網(wǎng)或有向圖),然后利用轉(zhuǎn)換規(guī)則簡化內(nèi)部表示,最后解釋

57、簡化表示并改寫為結(jié)構(gòu)化的部表示,最后解釋簡化表示并改寫為結(jié)構(gòu)化的代碼。代碼。圖圖13.6 13.6 展示了三個主要重組活動。展示了三個主要重組活動。盡管一些重組工具僅能產(chǎn)生源代碼,但另外一盡管一些重組工具僅能產(chǎn)生源代碼,但另外一些工具能支持生成結(jié)構(gòu),給出容量、復(fù)雜性及些工具能支持生成結(jié)構(gòu),給出容量、復(fù)雜性及其他信息。這些測度可用于確定代碼的可維護其他信息。這些測度可用于確定代碼的可維護性,評估重組的效果。例如,我們總是希望重性,評估重組的效果。例如,我們總是希望重組后的代碼復(fù)雜性能夠降低。組后的代碼復(fù)雜性能夠降低。2022-4-12國防科技大學計算機學院48圖圖13.6 13.6 重組重組20

58、22-4-12國防科技大學計算機學院4913.6.3 13.6.3 逆向工程逆向工程逆向工程術(shù)語源于硬件制造業(yè)逆向工程術(shù)語源于硬件制造業(yè), ,相互競爭的公相互競爭的公司為了了解對方設(shè)計和制造工藝的機密司為了了解對方設(shè)計和制造工藝的機密, ,在得在得不到設(shè)計和制造說明書的情況下不到設(shè)計和制造說明書的情況下, ,通過拆卸實通過拆卸實物獲取信息物獲取信息, ,軟件的逆向工程也基本類似軟件的逆向工程也基本類似, ,不過不過通常通?!敖馄式馄省钡牟粌H是競爭對手的程序,而且的不僅是競爭對手的程序,而且還包括本公司多年前的制品還包括本公司多年前的制品, ,此時得不到設(shè)計此時得不到設(shè)計“機密機密”的主要障礙是

59、缺乏文檔。因此的主要障礙是缺乏文檔。因此, ,所謂所謂軟件的逆向工程就是分析已有的程序軟件的逆向工程就是分析已有的程序, ,尋求比尋求比源代碼更高級的抽象表現(xiàn)形式。一般認為,凡源代碼更高級的抽象表現(xiàn)形式。一般認為,凡是在軟件生存周期內(nèi),將軟件某種形式的描述是在軟件生存周期內(nèi),將軟件某種形式的描述轉(zhuǎn)換成更為抽象形式的活動都可稱為逆向工程。轉(zhuǎn)換成更為抽象形式的活動都可稱為逆向工程。2022-4-12國防科技大學計算機學院50逆向工程逆向工程逆向工程可恢復(fù)的信息可分為四個抽象層次:逆向工程可恢復(fù)的信息可分為四個抽象層次:(1) (1) 實現(xiàn)級,包括程序模塊和變量表、交叉引用實現(xiàn)級,包括程序模塊和變量

60、表、交叉引用等信息;等信息;(2) (2) 結(jié)構(gòu)級,包括反映程序分量之間相互依賴關(guān)結(jié)構(gòu)級,包括反映程序分量之間相互依賴關(guān)系的信息,例如數(shù)據(jù)和控制流圖、結(jié)構(gòu)圖等;系的信息,例如數(shù)據(jù)和控制流圖、結(jié)構(gòu)圖等;(3) (3) 功能級,包括反映程序段功能及程序段之間功能級,包括反映程序段功能及程序段之間關(guān)系的信息,例如處理規(guī)約、構(gòu)件調(diào)用層次等;關(guān)系的信息,例如處理規(guī)約、構(gòu)件調(diào)用層次等;(4) (4) 領(lǐng)域級,包括反映程序分量或程序諸實體與領(lǐng)域級,包括反映程序分量或程序諸實體與應(yīng)用領(lǐng)域概念之間對應(yīng)關(guān)系的信息。應(yīng)用領(lǐng)域概念之間對應(yīng)關(guān)系的信息。2022-4-12國防科技大學計算機學院51逆向工程逆向工程對于一項

溫馨提示

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

最新文檔

評論

0/150

提交評論