清華軟件工程:第13章 軟件維護(hù)與再工程_第1頁
清華軟件工程:第13章 軟件維護(hù)與再工程_第2頁
清華軟件工程:第13章 軟件維護(hù)與再工程_第3頁
清華軟件工程:第13章 軟件維護(hù)與再工程_第4頁
清華軟件工程:第13章 軟件維護(hù)與再工程_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1 軟件演化是指軟件在交付以后,對軟件進(jìn)軟件演化是指軟件在交付以后,對軟件進(jìn)行的一系列活動的總稱。行的一系列活動的總稱。 軟件演化:軟件演化:軟件的維護(hù)軟件的維護(hù)、軟件再工程軟件再工程。 軟件維護(hù)軟件維護(hù)階段覆蓋了從軟件交付使用到軟階段覆蓋了從軟件交付使用到軟件被淘汰為止的整個時期。軟件的開發(fā)時件被淘汰為止的整個時期。軟件的開發(fā)時間可能需要一、二年,甚至更短,但它的間可能需要一、二年,甚至更短,但它的使用時間可能要經(jīng)歷幾年或幾十年。使用時間可能要經(jīng)歷幾年或幾十年。 再工程再工程的主要目的是為遺留系統(tǒng)轉(zhuǎn)化為可的主要目的是為遺留系統(tǒng)轉(zhuǎn)化為可演化系統(tǒng)提供一條現(xiàn)實可行的途徑,是在演化系統(tǒng)提供一條現(xiàn)實可

2、行的途徑,是在軟件生命周期終止后開始的一個新的階段。軟件生命周期終止后開始的一個新的階段。 2軟件維護(hù)軟件維護(hù)再工程技術(shù)再工程技術(shù)3再工程技術(shù)再工程技術(shù)4 什么是軟件維護(hù)什么是軟件維護(hù) 是指軟件系統(tǒng)交付使用以后,為了改正錯誤或滿足新的需要而修改軟件的過程 國標(biāo)國標(biāo)GB/T 11457-95給出如下定義給出如下定義 在一軟件產(chǎn)品交付使用后對其進(jìn)行修改,以糾正故障; 在一軟件產(chǎn)品交付使用后對其進(jìn)行修改,以糾正故障、改進(jìn)其性能和其它屬性,或使產(chǎn)品適應(yīng)改變了的環(huán)境5 兩種兩種錯誤認(rèn)識錯誤認(rèn)識 軟件維護(hù)是一次新的開發(fā)活動 軟件維護(hù)就是改錯 新開發(fā)活動新開發(fā)活動強(qiáng)調(diào)要在一定的約束條件下從強(qiáng)調(diào)要在一定的約束

3、條件下從頭開始實施頭開始實施 軟件維護(hù)軟件維護(hù)強(qiáng)調(diào)必須在現(xiàn)有系統(tǒng)的限定和約強(qiáng)調(diào)必須在現(xiàn)有系統(tǒng)的限定和約束條件下實施束條件下實施 ;根據(jù)起因不同,軟件維;根據(jù)起因不同,軟件維護(hù)可以分為護(hù)可以分為糾錯性維護(hù)糾錯性維護(hù)、適應(yīng)性維護(hù)適應(yīng)性維護(hù)、改改善性維護(hù)善性維護(hù)和和預(yù)防性維護(hù)預(yù)防性維護(hù)四類四類 6 糾錯性維護(hù)糾錯性維護(hù):為了改正軟件系統(tǒng)中的錯誤,使:為了改正軟件系統(tǒng)中的錯誤,使軟件能夠滿足預(yù)期的正常運行狀態(tài)的要求而進(jìn)軟件能夠滿足預(yù)期的正常運行狀態(tài)的要求而進(jìn)行的維護(hù)行的維護(hù) 適應(yīng)性維護(hù)適應(yīng)性維護(hù):為了使軟件適應(yīng)內(nèi)部或外部環(huán)境:為了使軟件適應(yīng)內(nèi)部或外部環(huán)境變化,而去修改軟件的過程變化,而去修改軟件的過程

4、 改善性維護(hù)改善性維護(hù):滿足使用過程中用戶提出增加新:滿足使用過程中用戶提出增加新功能或修改已有功能的建議維護(hù)功能或修改已有功能的建議維護(hù) 預(yù)防性維護(hù)預(yù)防性維護(hù):為了提高軟件的可維護(hù)性、可靠:為了提高軟件的可維護(hù)性、可靠性等,為以后進(jìn)一步改進(jìn)軟件打下良好基礎(chǔ)而性等,為以后進(jìn)一步改進(jìn)軟件打下良好基礎(chǔ)而修改軟件的活動修改軟件的活動7 在實踐中,軟件維護(hù)各種活動常常交織在在實踐中,軟件維護(hù)各種活動常常交織在一起,盡管這些維護(hù)在性質(zhì)上有些重疊,一起,盡管這些維護(hù)在性質(zhì)上有些重疊,但是還是有充分的理由區(qū)分這些維護(hù)活動但是還是有充分的理由區(qū)分這些維護(hù)活動 只有正確區(qū)分維護(hù)活動的類型才能夠更有只有正確區(qū)分維

5、護(hù)活動的類型才能夠更有效地確定維護(hù)需求的優(yōu)先級效地確定維護(hù)需求的優(yōu)先級 8 結(jié)構(gòu)化維護(hù)結(jié)構(gòu)化維護(hù):采用軟件工程的方法進(jìn)行軟件開發(fā),保證:采用軟件工程的方法進(jìn)行軟件開發(fā),保證每個階段都有完整且詳細(xì)的文檔每個階段都有完整且詳細(xì)的文檔 非結(jié)構(gòu)化維護(hù)非結(jié)構(gòu)化維護(hù):如果不采用軟件工程方法開發(fā)軟件,軟:如果不采用軟件工程方法開發(fā)軟件,軟件只有程序而欠缺文檔,則維護(hù)工作將變得十分困難件只有程序而欠缺文檔,則維護(hù)工作將變得十分困難 維護(hù)時,開發(fā)人員從分析需求規(guī)格說明開始,明白軟件維護(hù)時,開發(fā)人員從分析需求規(guī)格說明開始,明白軟件功能和性能上的改變,對設(shè)計說明文檔進(jìn)行修改和復(fù)查,功能和性能上的改變,對設(shè)計說明文檔

6、進(jìn)行修改和復(fù)查,再根據(jù)設(shè)計修改進(jìn)行程序變動,并用測試文檔中的測試再根據(jù)設(shè)計修改進(jìn)行程序變動,并用測試文檔中的測試用例進(jìn)行回歸測試,最后將修改后的軟件再次交付使用。用例進(jìn)行回歸測試,最后將修改后的軟件再次交付使用。9和軟件維護(hù)有關(guān)的部分問題和軟件維護(hù)有關(guān)的部分問題 :理解別人的代碼通常是非常困難的,而且難度隨著軟件配置成分的缺失而迅速增加需要維護(hù)的軟件往往沒有文檔、或文檔資料嚴(yán)重不足、或軟件的變化未在相應(yīng)的文檔中反映出來10當(dāng)軟件要求維護(hù)時,不能指望由原來的開發(fā)人員來完成或提供軟件的解釋。由于維護(hù)持續(xù)時間很長,因此當(dāng)需要解釋軟件時候,往往開發(fā)人員已經(jīng)不在附近了絕大多數(shù)軟件在設(shè)計時沒有考慮到將來的

7、修改問題軟件維護(hù)這項工作毫無吸引力。一方面是因為軟件維護(hù),看不到什么“成果”,但工作量很大,更重要的是維護(hù)工作難度大,軟件維護(hù)人員經(jīng)常遭受挫折。 11 軟件維護(hù)除費用外的無形代價包括軟件維護(hù)除費用外的無形代價包括 維護(hù)活動占用了其他軟件開發(fā)可用的資源,使資源的利用率降低 一些修復(fù)或修改請求得不到及時安排,使得客戶滿意率下降 維護(hù)的結(jié)果把一些新的潛在的錯誤引入軟件,降低了軟件質(zhì)量 將軟件人員抽調(diào)到維護(hù)工作中,使得其它軟件開發(fā)過程受到干擾 12 維護(hù)的工作可劃分成:維護(hù)的工作可劃分成: 生產(chǎn)性活動 如,分析評價、修改設(shè)計、編寫程序代碼等 非生產(chǎn)性活動 如,程序代碼功能理解、數(shù)據(jù)結(jié)構(gòu)解釋、接口特點和

8、性能界限分析等 維護(hù)工作量的模型維護(hù)工作量的模型 M:維護(hù)的總工作量 ;P:生產(chǎn)性工作量;K:經(jīng)驗常數(shù);c:復(fù)雜程度;d:維護(hù)人員對軟件的熟悉程度 dcKepM13 影響維護(hù)工作量的因素主要有以下六種影響維護(hù)工作量的因素主要有以下六種 系統(tǒng)的規(guī)模:系統(tǒng)規(guī)模越大,其功能就越復(fù)雜,軟件維護(hù)的工作量也隨之增大 程序設(shè)計語言:使用強(qiáng)功能的程序設(shè)計語言可以控制程序的規(guī)模。語言的功能越強(qiáng),生成程序的模塊化和結(jié)構(gòu)化程度越高,所需的指令數(shù)就越少,程序的可讀性也越好14 系統(tǒng)年齡:老系統(tǒng)比新系統(tǒng)需要更多的維護(hù)工作量。 數(shù)據(jù)庫技術(shù)的應(yīng)用:使用數(shù)據(jù)庫,可以簡單而有效地管理和存儲用戶程序中的數(shù)據(jù),還可以減少生成用戶報

9、表應(yīng)用軟件的維護(hù)工作量 先進(jìn)的軟件開發(fā)技術(shù):在軟件開發(fā)過程中,如果采用先進(jìn)的分析設(shè)計技術(shù)和程序設(shè)計技術(shù),如面向?qū)ο蠹夹g(shù)、復(fù)用技術(shù)等,可減少大量的維護(hù)工作量15 其它一些因素其它一些因素:如應(yīng)用的類型、數(shù)學(xué)模型、:如應(yīng)用的類型、數(shù)學(xué)模型、任務(wù)的難度、任務(wù)的難度、IF嵌套深度、索引或下標(biāo)嵌套深度、索引或下標(biāo)數(shù)等,對維護(hù)工作量也有影響數(shù)等,對維護(hù)工作量也有影響 16 維護(hù)組織結(jié)構(gòu)圖維護(hù)組織結(jié)構(gòu)圖 17 系統(tǒng)監(jiān)督員一般都是對程序系統(tǒng)監(jiān)督員一般都是對程序(某一部分某一部分)特特別熟悉的技術(shù)人員。別熟悉的技術(shù)人員。 在維護(hù)人員對程序進(jìn)行修改的過程中,由在維護(hù)人員對程序進(jìn)行修改的過程中,由配置管理員嚴(yán)格把關(guān)

10、,控制修改的范圍,配置管理員嚴(yán)格把關(guān),控制修改的范圍,對軟件配置進(jìn)行審計對軟件配置進(jìn)行審計 。 維護(hù)管理員、系統(tǒng)監(jiān)督員、修改控制決策維護(hù)管理員、系統(tǒng)監(jiān)督員、修改控制決策機(jī)構(gòu)等,均代表維護(hù)工作的某個職責(zé)范機(jī)構(gòu)等,均代表維護(hù)工作的某個職責(zé)范圍圍 。 18 修改控制決策機(jī)構(gòu)、維護(hù)管理員可以是指修改控制決策機(jī)構(gòu)、維護(hù)管理員可以是指定的某個人,也可以是一個包括管理人員、定的某個人,也可以是一個包括管理人員、高級技術(shù)人員在內(nèi)的小組。高級技術(shù)人員在內(nèi)的小組。 系統(tǒng)監(jiān)督員可以有其他職責(zé),但應(yīng)具體分系統(tǒng)監(jiān)督員可以有其他職責(zé),但應(yīng)具體分管某一個軟件包。管某一個軟件包。 19 維護(hù)團(tuán)隊根據(jù)時間的不同維護(hù)團(tuán)隊根據(jù)時間

11、的不同,可以分為可以分為短期短期團(tuán)隊團(tuán)隊和和長期團(tuán)隊長期團(tuán)隊 短期團(tuán)隊一般是當(dāng)需要執(zhí)行相關(guān)具體任務(wù)短期團(tuán)隊一般是當(dāng)需要執(zhí)行相關(guān)具體任務(wù)時,臨時組織起來解決手頭的問題時,臨時組織起來解決手頭的問題 長期團(tuán)隊則更正式,能夠?qū)I(yè)化創(chuàng)建溝通長期團(tuán)隊則更正式,能夠?qū)I(yè)化創(chuàng)建溝通渠道,可以管理軟件系統(tǒng)整個生存期的成渠道,可以管理軟件系統(tǒng)整個生存期的成功演化功演化 無論是短期團(tuán)隊還是長期團(tuán)隊,都要把有無論是短期團(tuán)隊還是長期團(tuán)隊,都要把有經(jīng)驗的員工和新員工混合起來。經(jīng)驗的員工和新員工混合起來。20 對于非對于非糾錯性維護(hù)糾錯性維護(hù),則首先判斷維護(hù)類型,對,則首先判斷維護(hù)類型,對適應(yīng)性維護(hù),按照評估后得到的優(yōu)先

12、級放入隊適應(yīng)性維護(hù),按照評估后得到的優(yōu)先級放入隊列列 對于對于改善性維護(hù)改善性維護(hù),則還要考慮是否采取行動,則還要考慮是否采取行動,如果接受申請,則同樣按照評估后得到的優(yōu)先如果接受申請,則同樣按照評估后得到的優(yōu)先級放入隊列,如果拒絕申請,則通知請求者,級放入隊列,如果拒絕申請,則通知請求者,并說明原因并說明原因 對于工作安排隊列中的任務(wù),由修改負(fù)責(zé)人依對于工作安排隊列中的任務(wù),由修改負(fù)責(zé)人依次從隊列中取出任務(wù),按照軟件工程方法學(xué)規(guī)次從隊列中取出任務(wù),按照軟件工程方法學(xué)規(guī)劃、組織、實施工程。劃、組織、實施工程。21維護(hù)請求維護(hù)請求類型類型類型類型嚴(yán)重性嚴(yán)重性評估后按優(yōu)先評估后按優(yōu)先級在隊列排隊級

13、在隊列排隊救火行動,當(dāng)救火行動,當(dāng)排在隊列之首排在隊列之首評估后分類評估后分類評估后按優(yōu)先評估后按優(yōu)先級在隊列排隊級在隊列排隊采取的行動采取的行動通知請求者通知請求者并說明原因并說明原因按優(yōu)先級在按優(yōu)先級在隊列中排隊隊列中排隊從維護(hù)請求隊列之首取出一任務(wù)從維護(hù)請求隊列之首取出一任務(wù)按按SESE方法學(xué)規(guī)劃、組織、實施工程方法學(xué)規(guī)劃、組織、實施工程隊列中還有維護(hù)請求嗎?隊列中還有維護(hù)請求嗎?資源用于開發(fā)新的軟件。資源用于開發(fā)新的軟件。y yn n糾錯性維護(hù)糾錯性維護(hù)其他其他改善性維護(hù)改善性維護(hù)適應(yīng)性維護(hù)適應(yīng)性維護(hù)拒絕拒絕接受接受并不嚴(yán)重并不嚴(yán)重非常嚴(yán)重非常嚴(yán)重維護(hù)過程圖維護(hù)過程圖22每種維護(hù)請求都

14、要進(jìn)行同樣的一系列技每種維護(hù)請求都要進(jìn)行同樣的一系列技術(shù)工作:術(shù)工作:修改軟件需求說明修改軟件需求說明、修改軟件修改軟件設(shè)計設(shè)計、設(shè)計評審設(shè)計評審、必要時重新編碼必要時重新編碼、單單元測試元測試、集成測試集成測試( 包括回歸測試包括回歸測試)、確確認(rèn)測試等認(rèn)測試等 維護(hù)工作最后一步是復(fù)審維護(hù)工作最后一步是復(fù)審 依照當(dāng)前狀態(tài),在設(shè)計、編碼和測試的哪些方面還能用其他方法進(jìn)行?哪些維護(hù)資源可用但未用?23 這次維護(hù)活動中主要(或次要)的障礙有哪些? 在維護(hù)請求中有預(yù)防性維護(hù)嗎?24 維護(hù)人員對程序進(jìn)行修改前要著重做好兩個記維護(hù)人員對程序進(jìn)行修改前要著重做好兩個記錄錄 維護(hù)申請報告 軟件修改報告 維護(hù)

15、請求表(報告)即軟件問題報告,該報告維護(hù)請求表(報告)即軟件問題報告,該報告(表)由要求一項維護(hù)活動的用戶填寫。對改(表)由要求一項維護(hù)活動的用戶填寫。對改正性維護(hù),用戶需要將錯誤出現(xiàn)的現(xiàn)場信息詳正性維護(hù),用戶需要將錯誤出現(xiàn)的現(xiàn)場信息詳細(xì)描述出來,包括輸入數(shù)據(jù)、錯誤清單以及其細(xì)描述出來,包括輸入數(shù)據(jù)、錯誤清單以及其它有關(guān)材料。對適應(yīng)性維護(hù)或改善性維護(hù),應(yīng)它有關(guān)材料。對適應(yīng)性維護(hù)或改善性維護(hù),應(yīng)該給出一個簡短的需求規(guī)格說明書。維護(hù)申請該給出一個簡短的需求規(guī)格說明書。維護(hù)申請被批準(zhǔn)后,維護(hù)申請報告就成為外部文檔,作被批準(zhǔn)后,維護(hù)申請報告就成為外部文檔,作為本次維護(hù)的依據(jù)為本次維護(hù)的依據(jù) 25 軟件

16、修改報告指明:為滿足維護(hù)申請報告軟件修改報告指明:為滿足維護(hù)申請報告提出的需求所需的工作量、本次維護(hù)活動提出的需求所需的工作量、本次維護(hù)活動的類別、本次維護(hù)請求的優(yōu)先級、本次修的類別、本次維護(hù)請求的優(yōu)先級、本次修改的背景數(shù)據(jù)。在擬定進(jìn)一步維護(hù)計劃前,改的背景數(shù)據(jù)。在擬定進(jìn)一步維護(hù)計劃前,軟件修改報告要提交給修改決策機(jī)構(gòu),供軟件修改報告要提交給修改決策機(jī)構(gòu),供進(jìn)一步規(guī)劃維護(hù)活動使用進(jìn)一步規(guī)劃維護(hù)活動使用 保存維護(hù)記錄的第一個問題就是哪些數(shù)據(jù)保存維護(hù)記錄的第一個問題就是哪些數(shù)據(jù)值得保存?值得保存?26如果已經(jīng)開始保存維護(hù)記錄,可以對維護(hù)工如果已經(jīng)開始保存維護(hù)記錄,可以對維護(hù)工作做一些定量度量,至少

17、可以從如下作做一些定量度量,至少可以從如下7方面進(jìn)方面進(jìn)行評價:行評價:每次程序運行平均失敗的次數(shù);用于每一類維護(hù)活動的總?cè)藭r數(shù);平均每個程序、每種語言、每種維護(hù)類型所必需的程序變動數(shù);維護(hù)過程中增加或刪除源語句平均花費的人時數(shù);維護(hù)每種語言平均花費的人時數(shù);一張維護(hù)請求表的平均周轉(zhuǎn)時間;不同維護(hù)類型所占的比例;27 可維護(hù)性(可維護(hù)性(maintainability) 指理解、改正、調(diào)整和改進(jìn)軟件的難易程度。對軟件可維護(hù)性影響的主要因素有:可理解性(understandability)、可測試性(testability)、可修改性、modifiability)和可移植性(portabilit

18、y) 28 可理解性可理解性:指理解軟件的結(jié)構(gòu)、接口、功:指理解軟件的結(jié)構(gòu)、接口、功能和內(nèi)部過程的難易程度。能和內(nèi)部過程的難易程度。 提高軟件可理解性的措施有:采用模塊化提高軟件可理解性的措施有:采用模塊化的程序結(jié)構(gòu);書寫詳細(xì)正確的文檔;采用的程序結(jié)構(gòu);書寫詳細(xì)正確的文檔;采用結(jié)構(gòu)化程序設(shè)計;書寫源程序的內(nèi)部文檔;結(jié)構(gòu)化程序設(shè)計;書寫源程序的內(nèi)部文檔;使用良好的編程語言;具有良好的程序設(shè)使用良好的編程語言;具有良好的程序設(shè)計風(fēng)格等計風(fēng)格等 29 可測試性可測試性:指測試和診斷軟件(主要指程:指測試和診斷軟件(主要指程序)中錯誤的難易程度。序)中錯誤的難易程度。 提高軟件可測試性的措施有:采用良

19、好的提高軟件可測試性的措施有:采用良好的程序結(jié)構(gòu);書寫詳細(xì)正確的文檔;使用測程序結(jié)構(gòu);書寫詳細(xì)正確的文檔;使用測試工具和調(diào)試工具;保存以前的測試過程試工具和調(diào)試工具;保存以前的測試過程和測試用例等和測試用例等 30 可修改性可修改性:指修改軟件(主要指程序)的:指修改軟件(主要指程序)的難易程度。難易程度。 在修改軟件時經(jīng)常會發(fā)生這樣的情況:修在修改軟件時經(jīng)常會發(fā)生這樣的情況:修改了程序中某個錯誤的同時又產(chǎn)生新的錯改了程序中某個錯誤的同時又產(chǎn)生新的錯誤(由程序的修改引起的);或者在程序誤(由程序的修改引起的);或者在程序中增加了某個功能后,導(dǎo)致原先的某些功中增加了某個功能后,導(dǎo)致原先的某些功能

20、不能正常執(zhí)行。能不能正常執(zhí)行。 31 可移植性可移植性:指程序轉(zhuǎn)移到一個新的計算環(huán)境的:指程序轉(zhuǎn)移到一個新的計算環(huán)境的難易程度。難易程度。 影響軟件可移植性的因素有:信息隱蔽原則;影響軟件可移植性的因素有:信息隱蔽原則;模塊獨立;模塊化;高內(nèi)聚低耦合;良好的程模塊獨立;模塊化;高內(nèi)聚低耦合;良好的程序結(jié)構(gòu);不用標(biāo)準(zhǔn)文本以外的語句等序結(jié)構(gòu);不用標(biāo)準(zhǔn)文本以外的語句等 一個可移植的程序應(yīng)具有結(jié)構(gòu)良好、靈活、不一個可移植的程序應(yīng)具有結(jié)構(gòu)良好、靈活、不依賴于某一具體計算機(jī)或操作系統(tǒng)的性能依賴于某一具體計算機(jī)或操作系統(tǒng)的性能 32通常對于軟件可移植性的度量考慮如下因素通常對于軟件可移植性的度量考慮如下因素

21、 是否是用高級的獨立于機(jī)器的語言來編寫程序?是否采用廣泛使用的標(biāo)準(zhǔn)化的程序設(shè)計語言來編寫程序? 是否僅使用了這種語言的標(biāo)準(zhǔn)版本和特性?程序中是否使用了標(biāo)準(zhǔn)的普遍使用的庫功能和子程序?程序中是否極少使用或根本不使用操作系統(tǒng)的功能?33 程序在執(zhí)行之前是否初始化內(nèi)存? 程序在執(zhí)行之前是否測定當(dāng)前的輸入輸出設(shè)備? 程序是否把與機(jī)器相關(guān)的語句分離了出來,集中放在了一些單獨的程序模塊中,并有說明文件? 程序是否結(jié)構(gòu)化? 并允許在小一些的計算機(jī)上分段(覆蓋)運行? 程序中是否避免了依賴于字母數(shù)字或特殊字符的內(nèi)部位表示?34 在進(jìn)行設(shè)計評審時,要從易于維護(hù)和提高在進(jìn)行設(shè)計評審時,要從易于維護(hù)和提高設(shè)計總體質(zhì)

22、量的角度全面評審數(shù)據(jù)設(shè)計、設(shè)計總體質(zhì)量的角度全面評審數(shù)據(jù)設(shè)計、總體結(jié)構(gòu)設(shè)計、過程設(shè)計和界面設(shè)計。在總體結(jié)構(gòu)設(shè)計、過程設(shè)計和界面設(shè)計。在進(jìn)行代碼評審時,要強(qiáng)調(diào)編程風(fēng)格和內(nèi)部進(jìn)行代碼評審時,要強(qiáng)調(diào)編程風(fēng)格和內(nèi)部文檔。在進(jìn)行測試時應(yīng)指出軟件正式交付文檔。在進(jìn)行測試時應(yīng)指出軟件正式交付前應(yīng)進(jìn)行的預(yù)防性維護(hù)。在維護(hù)活動完成前應(yīng)進(jìn)行的預(yù)防性維護(hù)。在維護(hù)活動完成后也要進(jìn)行評審。后也要進(jìn)行評審。 35 通常采用的方法有通常采用的方法有 確定質(zhì)量管理目標(biāo)和優(yōu)先級 規(guī)范化程序設(shè)計風(fēng)格 選擇可維護(hù)性高的程序設(shè)計語言 改進(jìn)程序文檔 保證軟件質(zhì)量審查方法 36 確定質(zhì)量管理目標(biāo)和優(yōu)先級確定質(zhì)量管理目標(biāo)和優(yōu)先級 一個可維

23、護(hù)的程序應(yīng)該是可理解的,可修改的和可測試的。但是要實現(xiàn)所有這些目標(biāo),需要付出很大的代價。因為有些維護(hù)屬性之間是相互促進(jìn)的,例如,可理解性和可測試性,可理解性和可修改性,另外一些屬性之間則是相互抵觸的。 在程序的開發(fā)階段就應(yīng)保證軟件具有可理解性??尚薷男院涂蓽y試性。在軟件開發(fā)的每一個階段都應(yīng)盡力考慮軟件的可維護(hù)性。 37使用提高軟件質(zhì)量的技術(shù)與工具使用提高軟件質(zhì)量的技術(shù)與工具在進(jìn)行軟件設(shè)計時,采用如本書前面所述的模塊化程序設(shè)計、結(jié)構(gòu)化程序設(shè)計等程序設(shè)計方法,在軟件開發(fā)過程中,采用結(jié)構(gòu)化小組,建立主程序小組,實現(xiàn)嚴(yán)格的組織化管理,職能分工,規(guī)范標(biāo)準(zhǔn),在對程序的質(zhì)量進(jìn)行檢測時,也可以采用分工合作的方

24、法,這些方法會有效地提高軟件質(zhì)量和檢測效率,進(jìn)而提高軟件的可維護(hù)性。 38 選擇可維護(hù)性高的程序設(shè)計語言選擇可維護(hù)性高的程序設(shè)計語言 選擇較好的程序設(shè)計語言對軟件維護(hù)有很大的影響。低級語言(如:機(jī)器代碼或匯編語言)程序是一般人很難掌握和理解的,因而很難維護(hù)。高級語言比低級語言容易理解,具有更好的可維護(hù)性。在高級語言中,一些語言可能比另外一些語言更容易理解。例如,cobol語言比fortran語言更容易理解,因為cobol的變量接近英語;pl/1比cobol更容易理解,因為pl/1有更豐富、更強(qiáng)的語言集等 39 改進(jìn)程序文檔改進(jìn)程序文檔 程序文檔對提高程序的可理解性有著重要的作用。即使是一個相對

25、簡單的程序,要想有效地,迅速對它進(jìn)行維護(hù),也需要編制文檔對它的目的和任務(wù)進(jìn)行解釋。而對于程序的維護(hù)人員來說,要想對程序編制人員的意圖進(jìn)行重新修改,并對今后可能出現(xiàn)的變化估計,缺少文檔的幫助也將很難實現(xiàn)。另一方面,對于程序文檔一定要能及時反映程序的變化,否則將對后續(xù)維護(hù)人員產(chǎn)生誤導(dǎo)。40 進(jìn)行質(zhì)量保證審查進(jìn)行質(zhì)量保證審查 除了保證軟件得到適當(dāng)?shù)馁|(zhì)量外,審查還可以用來檢測在開發(fā)和維護(hù)階段內(nèi)發(fā)生的質(zhì)量變化。一旦檢測出問題來,就可以采取措施來糾正,以控制不斷增長的軟件維護(hù)成本,延長軟件系統(tǒng)的有效生命期。為了保證軟件的可維護(hù)性,有四種類型的軟件審查:在檢查點進(jìn)行復(fù)審、驗收檢查、周期性地維護(hù)審查、對軟件包

26、進(jìn)行檢查。 41軟件維護(hù)軟件維護(hù)42 逆向工程(逆向工程(reverse engineering):指:指在軟件生存周期中,將軟件的某種形式描在軟件生存周期中,將軟件的某種形式描述轉(zhuǎn)換成更抽象形式的活動述轉(zhuǎn)換成更抽象形式的活動 重構(gòu)(重構(gòu)(restructuring):指在同一抽象:指在同一抽象級別上轉(zhuǎn)換系統(tǒng)的描述形式。如把級別上轉(zhuǎn)換系統(tǒng)的描述形式。如把C+ 程序轉(zhuǎn)換成程序轉(zhuǎn)換成Java程序程序 設(shè)計恢復(fù)(設(shè)計恢復(fù)(design recovery):指借助:指借助工具從已有程序中抽象出有關(guān)數(shù)據(jù)結(jié)構(gòu)設(shè)工具從已有程序中抽象出有關(guān)數(shù)據(jù)結(jié)構(gòu)設(shè)計、總體結(jié)構(gòu)設(shè)計和過程設(shè)計的信息。計、總體結(jié)構(gòu)設(shè)計和過程設(shè)計

27、的信息。 43 再工程(再工程(reengineering):指在逆向工程所獲:指在逆向工程所獲信息的基礎(chǔ)上修改或重構(gòu)已有的系統(tǒng),產(chǎn)生系信息的基礎(chǔ)上修改或重構(gòu)已有的系統(tǒng),產(chǎn)生系統(tǒng)的一個新版本統(tǒng)的一個新版本 再工程的再工程的主要目的主要目的:為遺留系統(tǒng)轉(zhuǎn)化為可演化:為遺留系統(tǒng)轉(zhuǎn)化為可演化系統(tǒng)提供一條現(xiàn)實可行的途徑系統(tǒng)提供一條現(xiàn)實可行的途徑 再工程是一個工程過程,它將逆向工程、重構(gòu)再工程是一個工程過程,它將逆向工程、重構(gòu)和正向工程組合起來,將現(xiàn)存系統(tǒng)重新構(gòu)造為和正向工程組合起來,將現(xiàn)存系統(tǒng)重新構(gòu)造為新的形式。當(dāng)實施軟件的再工程時,軟件理解新的形式。當(dāng)實施軟件的再工程時,軟件理解是再工程的基礎(chǔ)和前提

28、。是再工程的基礎(chǔ)和前提。 44 為什么要進(jìn)行再工程為什么要進(jìn)行再工程 維護(hù)一行源代碼的代價可能是最初開發(fā)該行源代碼代價的14-20倍;同時重新設(shè)計軟件體系結(jié)構(gòu)時使用了現(xiàn)代設(shè)計概念,它對將來的維護(hù)會有很大的幫助;現(xiàn)有的程序版本可以作為軟件原型使用,開發(fā)生產(chǎn)率可以大大高于平均水平;用戶具有較多使用該軟件的經(jīng)驗,因此,能夠很容易地搞清新的變更需求和變更的范圍;另外,利用逆向工程和再工程的工具,可以使一部分工作自動化;在完成預(yù)防性維護(hù)的過程中還可以建立起完整的軟件配置。 45 通常再工程包含:通常再工程包含:業(yè)務(wù)過程再工程業(yè)務(wù)過程再工程、軟件軟件再工程再工程 業(yè)務(wù)過程再工程(BPRBusiness P

29、rocess Re-engineering,也稱業(yè)務(wù)過程重組)定義業(yè)務(wù)目標(biāo)、標(biāo)示并評估現(xiàn)有的業(yè)務(wù)過程以及修訂業(yè)務(wù)過程以更好滿足業(yè)務(wù)目標(biāo),這一部分通常由咨詢公司的業(yè)務(wù)專家完成 軟件再工程包含庫存目錄分析、文檔重構(gòu)、逆向工程、程序和數(shù)據(jù)重構(gòu)以及正向工程。這一部分通常由軟件工程師完成 46 Michael Hammer的的是業(yè)務(wù)過程和計算管是業(yè)務(wù)過程和計算管理革命的奠基性文章,理革命的奠基性文章,Hammer在文章中在文章中大力呼吁使用業(yè)務(wù)過程再工程技術(shù)。不過,大力呼吁使用業(yè)務(wù)過程再工程技術(shù)。不過,到到21世紀(jì)初,對于業(yè)務(wù)過程再工程的宣世紀(jì)初,對于業(yè)務(wù)過程再工程的宣傳已經(jīng)不太常見,但是這種過程已經(jīng)在

30、很傳已經(jīng)不太常見,但是這種過程已經(jīng)在很多公司中得到使用。多公司中得到使用。 業(yè)務(wù)過程是一組業(yè)務(wù)過程是一組“邏輯相關(guān)的任務(wù),它們邏輯相關(guān)的任務(wù),它們被執(zhí)行以達(dá)到符合預(yù)定義的業(yè)務(wù)結(jié)果被執(zhí)行以達(dá)到符合預(yù)定義的業(yè)務(wù)結(jié)果”。 47 每個系統(tǒng)都是由不同的子系統(tǒng)構(gòu)成,而子每個系統(tǒng)都是由不同的子系統(tǒng)構(gòu)成,而子系統(tǒng)還可以再細(xì)分為更細(xì)的子系統(tǒng),從而系統(tǒng)還可以再細(xì)分為更細(xì)的子系統(tǒng),從而整個業(yè)務(wù)呈現(xiàn)一種層次結(jié)構(gòu)整個業(yè)務(wù)呈現(xiàn)一種層次結(jié)構(gòu) 業(yè)務(wù)業(yè)務(wù) 業(yè)務(wù)系統(tǒng)業(yè)務(wù)系統(tǒng) 業(yè)務(wù)過程業(yè)務(wù)過程 業(yè)務(wù)子過程業(yè)務(wù)子過程業(yè)務(wù)層次業(yè)務(wù)層次 48在理想情況下,在理想情況下,BPR應(yīng)該自頂向下地進(jìn)應(yīng)該自頂向下地進(jìn)行,從標(biāo)示主要的業(yè)務(wù)目標(biāo)或子目

31、標(biāo)開行,從標(biāo)示主要的業(yè)務(wù)目標(biāo)或子目標(biāo)開始,而以生成業(yè)務(wù)(子)過程中每個任始,而以生成業(yè)務(wù)(子)過程中每個任務(wù)的詳細(xì)的規(guī)約結(jié)束務(wù)的詳細(xì)的規(guī)約結(jié)束 對一個業(yè)務(wù)過程進(jìn)行再工程需要服從一對一個業(yè)務(wù)過程進(jìn)行再工程需要服從一定的原則。定的原則。Hammer在在1990年提出一組年提出一組原則,用于指導(dǎo)原則,用于指導(dǎo)BPR活動活動 圍繞結(jié)果而不是任務(wù)進(jìn)行組織;49讓那些使用過程結(jié)果的人來執(zhí)行流程;將信息處理工作合并到生產(chǎn)原始信息的現(xiàn)實工作中;將地理分散的資源視為好像它們是集中的;連接并行的活動以代替集成它們的結(jié)果;在工作完成的地方設(shè)置決策點,并將控制加入過程中;在其源頭一次性獲取數(shù)據(jù)。50 業(yè)務(wù)過程再工程是

32、迭代的。因此業(yè)務(wù)過程業(yè)務(wù)過程再工程是迭代的。因此業(yè)務(wù)過程再工程沒有開始和結(jié)束,只有不斷的演化。再工程沒有開始和結(jié)束,只有不斷的演化。整個業(yè)務(wù)過程再工程模型可用下圖表示整個業(yè)務(wù)過程再工程模型可用下圖表示業(yè)務(wù)定義過程標(biāo)識過程評估過程規(guī)約和設(shè)計原型實現(xiàn)求精和實例化51 軟件規(guī)模的擴(kuò)大導(dǎo)致出現(xiàn)軟件的管理、質(zhì)軟件規(guī)模的擴(kuò)大導(dǎo)致出現(xiàn)軟件的管理、質(zhì)量等一些嚴(yán)重的問題,人們開始尋找軟件量等一些嚴(yán)重的問題,人們開始尋找軟件業(yè)中的銀彈。業(yè)中的銀彈。BPR的出現(xiàn),使人們誤以為的出現(xiàn),使人們誤以為BPR就是傳說中的銀彈。然而經(jīng)過幾年的就是傳說中的銀彈。然而經(jīng)過幾年的夸大宣傳后,夸大宣傳后,BRP陷于嚴(yán)重的批評中,又陷

33、于嚴(yán)重的批評中,又被人們認(rèn)為一文不值。因此有必要樹立一被人們認(rèn)為一文不值。因此有必要樹立一種對種對BRP認(rèn)識的正確觀點。認(rèn)識的正確觀點。BRP不是銀彈,不是銀彈,當(dāng)然當(dāng)然BRP確實可以提高軟件的質(zhì)量。確實可以提高軟件的質(zhì)量。52 在業(yè)務(wù)過程被分析清楚后,可以對軟件實在業(yè)務(wù)過程被分析清楚后,可以對軟件實施再工程,整個軟件再工程過程模型如下施再工程,整個軟件再工程過程模型如下圖圖 53庫存目錄分析庫存目錄分析包含關(guān)于每個應(yīng)用系統(tǒng)的基本信息(例如,應(yīng)用系統(tǒng)的名字,最初構(gòu)建它的日期,已做過的實質(zhì)性修改次數(shù),過去18個月報告的錯誤,用戶數(shù)量,安裝它的機(jī)器數(shù)量,它的復(fù)雜程度,文檔質(zhì)量,整體可維護(hù)性等級,預(yù)

34、期壽命,在未來36個月內(nèi)的預(yù)期修改次數(shù),業(yè)務(wù)重要程度等)。下述3類程序有可能成為預(yù)防性維護(hù)的對象:預(yù)定將使用多年的程序、當(dāng)前正在成功地使用著的程序和在最近的將來可能要做重大修改或增強(qiáng)的程序。 54文檔重構(gòu)文檔重構(gòu)建立文檔非常耗費時間,不可能為數(shù)百個程序都重新建立文檔。如果一個程序是相對穩(wěn)定的,而且可能不會再經(jīng)歷什么變化,那么,讓它保持現(xiàn)狀。為了便于今后的維護(hù),必須更新文檔,但只針對系統(tǒng)中當(dāng)前正在修改的那些部分建立完整文檔。如果某應(yīng)用系統(tǒng)是完成業(yè)務(wù)工作的關(guān)鍵,而且必須重構(gòu)全部文檔,則仍然應(yīng)該設(shè)法把文檔工作減少到必需的最小量。 55 逆向工程逆向工程 軟件的逆向工程是分析程序以便在比源代碼更高的抽

35、象層次上創(chuàng)建出程序的某種表示的過程,逆向工程工具從現(xiàn)存的程序代碼中抽取有關(guān)數(shù)據(jù)、體系結(jié)構(gòu)和處理過程的設(shè)計信息。 56代碼重構(gòu)代碼重構(gòu)某些老程序具有比較完整、合理的體系結(jié)構(gòu),但是,個體模塊的編碼方式卻是難于理解、測試和維護(hù)的。在這種情況下,可以重構(gòu)可疑模塊的代碼。 為了完成代碼重構(gòu)活動,首先用重構(gòu)工具分析源代碼,標(biāo)注出和結(jié)構(gòu)化程序設(shè)計概念相違背的部分。然后重構(gòu)有問題的代碼(此項工作可自動進(jìn)行)。最后,復(fù)審和測試生成的重構(gòu)代碼(以保證沒有引入異常)并更新代碼文檔。57數(shù)據(jù)重構(gòu)數(shù)據(jù)重構(gòu)數(shù)據(jù)重構(gòu)發(fā)生在相當(dāng)?shù)偷某橄髮哟紊?,它是一種全范圍的再工程活動。在大多數(shù)情況下,數(shù)據(jù)重構(gòu)始于逆向工程活動,分解當(dāng)前使用

36、的數(shù)據(jù)體系結(jié)構(gòu),必要時定義數(shù)據(jù)模型,標(biāo)識數(shù)據(jù)對象和屬性,并從軟件質(zhì)量的角度復(fù)審現(xiàn)存的數(shù)據(jù)結(jié)構(gòu)。 58正向工程正向工程正向工程過程應(yīng)用軟件工程的原理、概念、技術(shù)和方法來重新開發(fā)某個現(xiàn)有的應(yīng)用系統(tǒng)。在大多數(shù)情況下,被再工程的軟件不僅重新實現(xiàn)現(xiàn)有系統(tǒng)的功能,而且加入了新功能和提高了整體性能。59 逆向工程是把軟件源程序還原為軟件文檔或軟逆向工程是把軟件源程序還原為軟件文檔或軟件設(shè)計的過程。通過逆向工程,可以從更高的件設(shè)計的過程。通過逆向工程,可以從更高的抽象度來觀察軟件。抽象度的多少可由抽象的抽象度來觀察軟件。抽象度的多少可由抽象的層次,文檔的完整性,工具等因素決定。層次,文檔的完整性,工具等因素決

37、定。 逆向工程來源于硬件世界。硬件廠商總想弄到逆向工程來源于硬件世界。硬件廠商總想弄到競爭對手產(chǎn)品的設(shè)計和制造競爭對手產(chǎn)品的設(shè)計和制造“奧秘奧秘”。但是又。但是又得不到現(xiàn)成的檔案,只好拆卸對手的產(chǎn)品并進(jìn)得不到現(xiàn)成的檔案,只好拆卸對手的產(chǎn)品并進(jìn)行分析,企圖從中獲取有價值的東西。行分析,企圖從中獲取有價值的東西。 軟件的逆向工程在道理上與硬件相似。但在很軟件的逆向工程在道理上與硬件相似。但在很多時候,軟件的逆向工程并不是針對競爭對手多時候,軟件的逆向工程并不是針對競爭對手的,而是針對自己公司多年前的產(chǎn)品。期望從的,而是針對自己公司多年前的產(chǎn)品。期望從老產(chǎn)品中提取系統(tǒng)設(shè)計、需求說明等有價值的老產(chǎn)品中

38、提取系統(tǒng)設(shè)計、需求說明等有價值的信息。信息。 60 逆向工程導(dǎo)出的信息可分為四個抽象層次逆向工程導(dǎo)出的信息可分為四個抽象層次 實現(xiàn)級:包括程序的抽象語法樹、符號表等信息; 結(jié)構(gòu)級:包括反映程序分量之間相互依賴關(guān)系的信息,如調(diào)用圖、結(jié)構(gòu)圖等; 功能級:包括反映程序段功能及程序段之間關(guān)系的信息; 領(lǐng)域級:包括反映程序分量或程序諸實體與應(yīng)用領(lǐng)域概念之間對應(yīng)關(guān)系的信息。對于一項具體的維護(hù)任務(wù),一般不必導(dǎo)出所有抽象級別上的信息。如代碼重構(gòu)任務(wù),只需獲得實現(xiàn)級信息即可。61 根據(jù)源程序的類別不同,逆向工程還可以根據(jù)源程序的類別不同,逆向工程還可以分為:分為:對用戶界面的逆向工程對用戶界面的逆向工程、對數(shù)據(jù)

39、的對數(shù)據(jù)的逆向工程和對理解的逆向工程逆向工程和對理解的逆向工程。 現(xiàn)代的軟件一般都擁有華麗的界面,當(dāng)準(zhǔn)現(xiàn)代的軟件一般都擁有華麗的界面,當(dāng)準(zhǔn)備對舊的軟件進(jìn)行用戶界面的逆向工程時,備對舊的軟件進(jìn)行用戶界面的逆向工程時,必須先理解舊軟件的用戶界面,并且刻畫必須先理解舊軟件的用戶界面,并且刻畫出界面的結(jié)構(gòu)和行為。出界面的結(jié)構(gòu)和行為。62 對數(shù)據(jù)的逆向工程:由于程序中存在許多不同對數(shù)據(jù)的逆向工程:由于程序中存在許多不同種類的數(shù)據(jù),例如內(nèi)部的數(shù)據(jù)結(jié)構(gòu),以及底層種類的數(shù)據(jù),例如內(nèi)部的數(shù)據(jù)結(jié)構(gòu),以及底層的數(shù)據(jù)庫和外部的文件。其中對內(nèi)部的數(shù)據(jù)結(jié)的數(shù)據(jù)庫和外部的文件。其中對內(nèi)部的數(shù)據(jù)結(jié)構(gòu)的逆向工程可以通過檢查程序

40、代碼以及變量構(gòu)的逆向工程可以通過檢查程序代碼以及變量來完成;而對數(shù)據(jù)庫結(jié)構(gòu)的重構(gòu)可通過建立一來完成;而對數(shù)據(jù)庫結(jié)構(gòu)的重構(gòu)可通過建立一個初始的對象模型,確定侯選鍵,精化實驗性個初始的對象模型,確定侯選鍵,精化實驗性的類,定義一般化,以及發(fā)現(xiàn)關(guān)聯(lián)來完成。的類,定義一般化,以及發(fā)現(xiàn)關(guān)聯(lián)來完成。 對理解的逆向工程,為了去理解過程的抽象,對理解的逆向工程,為了去理解過程的抽象,代碼的分析必須在不同的層次進(jìn)行:系統(tǒng),程代碼的分析必須在不同的層次進(jìn)行:系統(tǒng),程序,部件,模式和語句。對于大型系統(tǒng),逆向序,部件,模式和語句。對于大型系統(tǒng),逆向工程通常用半自動化的方法來完成。工程通常用半自動化的方法來完成。63逆向工程中用于恢復(fù)信息的方法主要有逆向工程中用于恢復(fù)信息的方法主要有四類四類用戶指導(dǎo)下的搜索與變換:這類方法用于導(dǎo)出實現(xiàn)級和結(jié)構(gòu)

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論