軟件工程課件:第9章 軟件維護_第1頁
軟件工程課件:第9章 軟件維護_第2頁
軟件工程課件:第9章 軟件維護_第3頁
軟件工程課件:第9章 軟件維護_第4頁
軟件工程課件:第9章 軟件維護_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第9章 軟件維護,軟件維護的概念 軟件維護活動 程序修改的步驟及副作用 軟件的維護性 提高軟件維護性的方法,9.1 軟件維護的概念,軟件維護的定義 軟件維護是指在軟件運行/維護階段對軟件產(chǎn)品所進行的修 改就是所謂的維護。根據(jù)維護工作的性質(zhì),軟件維護的活動 可以分為以下4種類型。 改正性維護 適應(yīng)性維護 完善性維護 預(yù)防性維護,9.1 軟件維護的概念,1改正性維護 改正性維護(corrective maintenance)為了識別和糾正 軟件錯誤、改正軟件性能上的缺陷、排除實施中的誤使 用,應(yīng)進行的診斷和改正錯誤的過程。例如,改正性維護 可以是改正原來程序中開關(guān)使用的錯誤;解決開發(fā)時未能 測試各

2、種可能情況帶來的問題等。,2適應(yīng)性維護 隨著信息技術(shù)的飛速發(fā)展,軟件運行的外部環(huán)境(新的 硬、軟件配置)或數(shù)據(jù)環(huán)境(數(shù)據(jù)庫、數(shù)據(jù)格式、數(shù)據(jù)輸入 /輸出方式、數(shù)據(jù)存儲介質(zhì))可能發(fā)生變化,為了使軟件適 應(yīng)這種變化,而修改軟件的過程叫做適應(yīng)性維護(adaptive maintenance)。例如,需要對已運行的軟件進行改造,以 適應(yīng)網(wǎng)絡(luò)環(huán)境或已升級改版的操作系統(tǒng)要求。,9.1 軟件維護的概念,9.1 軟件維護的概念,3完善性維護 為了滿足新的功能與性能要求,需要修改或再開發(fā)軟件, 以擴充軟件功能、增強軟件性能、改進加工效率、提高軟件的可維護性。這種情況下進行的維護活動叫做完善性維護 (perfect

3、ive maintenance)。例如,完善性維護可能是修 改一個計算工資的程序,使其增加新的扣除項目;縮短系統(tǒng) 的應(yīng)答時間,使其達到特定的要求等。,4預(yù)防性維護 預(yù)防性維護(preventive maintenance)是指把今天的 方法學(xué)用于昨天的系統(tǒng)以滿足明天的需要。也就是說,采 用先進的軟件工程方法對需要維護的軟件或軟件中的某一部 分(重新)進行設(shè)計、編碼和測試。,9.1 軟件維護的概念,各類維護占總維護工作量的比例,在整個軟件維護階段花費的全部工作量中,預(yù)防性維護只占很小的比例,而完善性維護占了幾乎一半的工作量。,9.1 軟件維護的概念,9.1 軟件維護的概念,維護工作量在軟件生存期

4、中所占比例 軟件維護活動花費的工作量占整個生存期工作量的70%以上(工作量的比例直接反映了成本的比例),在軟件維護中,影響維護工作量的因素主要有以下6種: (1)系統(tǒng)規(guī)模。 (2)程序設(shè)計語言。 (3)系統(tǒng)年齡大小。 (4)數(shù)據(jù)庫技術(shù)的應(yīng)用水平。 (5)所采用的軟件開發(fā)技術(shù)及軟件開發(fā)工程化的程度。 (6)其他:如應(yīng)用的類型、數(shù)學(xué)模型、任務(wù)的難度、IF嵌 套深度、索引或下標數(shù)等,對維護工作量都有影響。,影響維護工作量的因素,9.1 軟件維護的概念,根據(jù)影響軟件維護工作量的各種因素,針對3種典型維 護,James Martin等提出了一些策略,以控制維護成本。 1改正性維護 應(yīng)用一些諸如數(shù)據(jù)庫管理

5、系統(tǒng)、軟件開發(fā)環(huán)境、程序自 動生成系統(tǒng)和高級(第四代)語言等新技術(shù)可大大提高可 靠性,并減少進行改正性維護的需要。此外,還可考慮利 用應(yīng)用軟件包、防錯性程序設(shè)計、通過周期性維護審查等 策略。,軟件維護的策略,9.1 軟件維護的概念,2適應(yīng)性維護 這一類的維護不可避免,但可以采用以下策略加以控制。 (1)在配置管理時,把硬件、操作系統(tǒng)和其他相關(guān)環(huán)境因 素的可能變化考慮在內(nèi),可以減少某些適應(yīng)性維護的工作 量。 (2)把與硬件、操作系統(tǒng),以及其他外圍設(shè)備有關(guān)的程序 歸到特定的程序模塊中??砂岩颦h(huán)境變化而必須修改的程序 局部于某些程序模塊之中。,9.1 軟件維護的概念,9.1 軟件維護的概念,2適應(yīng)性

6、維護 (3)使用內(nèi)部程序列表、外部文件,以及處理的例行程序 包,可為維護時修改程序提供方便。 (4)使用面向?qū)ο蠹夹g(shù),增強軟件系統(tǒng)的穩(wěn)定性,易于修 改和移植。,3完善性維護 利用前兩類維護中列舉的方法,也可以減少這一類維 護。特別是數(shù)據(jù)庫管理系統(tǒng)、程序生成器、應(yīng)用軟件包, 可減少系統(tǒng)或程序員的維護工作量。 此外,建立軟件系統(tǒng)的原型,把它在實際系統(tǒng)開發(fā)之前 提供給用戶。用戶通過研究原型,進一步完善他們的功能 要求,可以減少以后完善性維護的需要。,9.1 軟件維護的概念,9.2 軟件維護活動,軟件維護申請報告,所有軟件維護申請應(yīng)按規(guī)定的方式提出。軟件維護組織通常提供維護申請報告(maintenan

7、ce request form,MRF),或稱軟件問題報告,由申請維護的用戶填寫。 如果遇到一個錯誤,用戶必須完整地說明產(chǎn)生錯誤的情況,包括輸入數(shù)據(jù)、錯誤清單以及其他有關(guān)材料。 如果申請的是適應(yīng)性維護或完善性維護,用戶必須提出一份修改說明書,列出所有希望的修改。維護申請報告將由維護管理員和系統(tǒng)監(jiān)督員來研究處理。,維護申請報告是由軟件組織外部提交的文檔,它是計劃維 護工作的基礎(chǔ)。軟件組織內(nèi)部應(yīng)相應(yīng)地做出軟件修改報告 (software change report,SCR),指明: 所需修改變動的性質(zhì); 申請修改的優(yōu)先級; 為滿足某個維護申請報告,所需的工作量; 預(yù)計修改后的狀況。 軟件修改報告應(yīng)

8、提交修改負責(zé)人,經(jīng)批準后才能開始進一 步安排維護工作。,9.2 軟件維護活動,軟件維護工作流程如下圖所示。,9.2 軟件維護活動,軟件維護工作流程,在每次軟件維護任務(wù)完成后,最好進行一次情況評審,對 以下問題做一總結(jié): 在目前情況下,設(shè)計、編碼、測試中的哪一方面可以改 進? 哪些維護資源應(yīng)該有,但沒有? 工作中主要的或次要的障礙是什么? 從維護申請的類型來看是否應(yīng)當有預(yù)防性維護? 情況評審對將來的維護工作如何進行會產(chǎn)生重要的影響,并可為軟件機構(gòu)的有效管理提供重要的反饋信息。,9.2 軟件維護活動,9.2 軟件維護活動,維護檔案記錄,內(nèi)容包括程序名稱、源程序語句條數(shù)、機器代碼指令條數(shù)、所用的程序

9、設(shè)計語言、程序安裝的日期、程序安裝后的運行次數(shù)、與程序安裝后運行次數(shù)有關(guān)的處理故障次數(shù)、程序改變的層次及名稱、修改程序所增加的源程序語句條數(shù)、修改程序所減少的源程序語句條數(shù)、每次修改所付出的“人時”數(shù)、修改程序的日期、軟件維護人員的姓名、維護申請報告的名稱、維護類型、維護開始時間和維護結(jié)束時間、花費在維護上的累計“人時”數(shù)、維護工作的凈收益等。對每項維護任務(wù)都應(yīng)該收集上述數(shù)據(jù)。,評價維護活動可參考的度量值有: 每次程序運行時的平均出錯次數(shù); 花費在每類維護上的總“人時”數(shù); 每個程序、每種語言、每種維護類型的程序平均修改次數(shù); 因為維護,增加或刪除每個源程序語句所花費的平均“人時”數(shù); 用于每

10、種語言的平均“人時”數(shù); 維護申請報告的平均處理時間; 各類維護申請的百分比。,9.2 軟件維護活動,維護評價,為了正確、有效地進行程序修改,需要經(jīng)歷3個步驟:分 析和理解程序、實施修改以及重新驗證程序。,9.3 程序修改的步驟及修改的副作用,分析和理解程序 經(jīng)過分析,全面、準確、迅速地理解程序是決定維護成 敗和質(zhì)量好壞的關(guān)鍵。在這方面,軟件的可理解性和文檔的 質(zhì)量非常重要。為此必須: (1)研究程序的使用環(huán)境及有關(guān)資料,盡可能得到更多的 背景信息; (2)理解程序的功能和目標;,(3)掌握程序的結(jié)構(gòu)信息,即從程序中細分出若干結(jié)構(gòu)成 分,如程序系統(tǒng)結(jié)構(gòu)、控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)和輸入/輸 出結(jié)構(gòu)等;

11、 (4)了解數(shù)據(jù)流信息,即所涉及的數(shù)據(jù)來自何處,在哪里 被使用; (5)了解控制流信息,即執(zhí)行每條路徑的結(jié)果; (6)如果設(shè)計存在,則可利用它們來幫助畫出結(jié)構(gòu)圖和高 層流程圖; (7)理解程序的操作(使用)要求。,9.3 程序修改的步驟及修改的副作用,為了容易地理解程序,要求自頂向下地理解現(xiàn)有源程序的 程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu),為此可采用如下幾種方法。 (1)分析程序結(jié)構(gòu)圖。 (2)數(shù)據(jù)跟蹤。 (3)控制跟蹤??刹捎梅枅?zhí)行或?qū)嶋H動態(tài)跟蹤的方法, 了解數(shù)據(jù)是如何從一個輸入源到達輸出點的。 (4)在分析的過程中,應(yīng)充分閱讀和使用源程序清單和文 檔,分析現(xiàn)有文檔的合理性。 (5)充分使用由編譯程序或匯編

12、程序提供的交叉引用表、 符號表,以及其他有用的信息。 (6)如有可能,爭取參加開發(fā)工作。,9.3 程序修改的步驟及修改的副作用,對程序的修改,必須事先做出計劃,有準備地、周密有效 地實施修改。 1設(shè)計程序的修改計劃 程序的修改計劃要考慮人員和資源的安排。修改計劃的內(nèi) 容主要包括以下幾項: (1)規(guī)格說明信息:數(shù)據(jù)修改、處理修改、作業(yè)控制語言 修改、系統(tǒng)之間接口的修改等。 (2)維護資源:新程序版本、測試數(shù)據(jù)、所需的軟件系 統(tǒng)、計算機時間等。,9.3 程序修改的步驟及修改的副作用,修改程序,(3)人員:程序員、用戶相關(guān)人員、技術(shù)支持人員、廠家 聯(lián)系人、數(shù)據(jù)錄入員等。 (4)提供:紙質(zhì)、計算機媒體

13、等。 針對以上每一項,要說明必要性、從何處著手、是否接 受、日期等。通常,可采用自頂向下的方法,在理解程序的 基礎(chǔ)上做如下工作: (1)研究程序的各個模塊、模塊的接口及數(shù)據(jù)庫,從全局 的觀點提出修改計劃。 (2)依次把要修改的、以及那些受修改影響的模塊和數(shù)據(jù) 結(jié)構(gòu)分離出來。,9.3 程序修改的步驟及修改的副作用,(3)詳細地分析要修改的,以及那些受變更影響的模塊和 數(shù)據(jù)結(jié)構(gòu)的內(nèi)部細節(jié),設(shè)計修改計劃,標明新邏輯及 要改動的現(xiàn)有邏輯。 (4)向用戶提供回避措施。用戶的某些業(yè)務(wù)因軟件中發(fā)生 問題而中斷,為不讓系統(tǒng)長時間停止運行,需把問題 局部化,在可能的范圍內(nèi)繼續(xù)開展業(yè)務(wù)。,9.3 程序修改的步驟及

14、修改的副作用,2修改代碼,以適應(yīng)變化 (1)正確、有效地編寫修改代碼; (2)要謹慎地修改程序,盡量保持程序的風(fēng)格及格式,要在程序清單上注明改動的指令; (3)不要匆忙刪除程序語句,除非完全肯定它是無用的; (4)不要試圖共用程序中已有的臨時變量或工作區(qū),為了 避免沖突或混淆用途,應(yīng)自行設(shè)置自己的變量; (5)插入錯誤檢測語句; (6)保持詳細的維護活動和維護結(jié)果記錄; (7)如果程序結(jié)構(gòu)混亂,修改受到干擾,可拋棄程序重新 編寫。,9.3 程序修改的步驟及修改的副作用,所謂程序修改的副作用是指因修改軟件而造成的錯誤 或其他不希望發(fā)生的情況,有以下3種副作用: 1修改代碼的副作用 在使用程序設(shè)計

15、語言修改源代碼時,都可能引入新的 錯誤。例如,刪除或修改一個子程序、刪除或修改一個標 號、刪除或修改一個標識符、改變程序代碼的時序關(guān)系、 改變占用存儲的大小、改變邏輯運算符、修改文件的打開 或關(guān)閉、改進程序的執(zhí)行效率,以及把設(shè)計上的改變翻譯 成代碼的改變、為邊界條件的邏輯測試做出改變時,都容 易引入錯誤。,9.3 程序修改的步驟及修改的副作用,修改程序的副作用及其控制,2修改數(shù)據(jù)的副作用 在修改數(shù)據(jù)結(jié)構(gòu)時,有可能造成軟件設(shè)計與數(shù)據(jù)結(jié)構(gòu)不匹 配,因而導(dǎo)致軟件出錯。修改數(shù)據(jù)的副作用是修改軟件信息 結(jié)構(gòu)導(dǎo)致的結(jié)果。例如,在重新定義局部的或全局的常量、 重新定義記錄或文件的格式、增大或減小一個數(shù)組或高

16、層數(shù) 據(jù)結(jié)構(gòu)的大小、修改全局或公共數(shù)據(jù)、重新初始化控制標志 或指針、重新排列輸入/輸出或子程序的參數(shù)時,容易導(dǎo)致 設(shè)計與數(shù)據(jù)不相容的錯誤。數(shù)據(jù)副作用可以通過詳細的設(shè)計 文檔加以控制。,9.3 程序修改的步驟及修改的副作用,3修改文檔的副作用 對數(shù)據(jù)流、軟件結(jié)構(gòu)、模塊邏輯或任何其他有關(guān)特性進 行修改時,必須對相關(guān)技術(shù)文檔進行相應(yīng)修改。如果對可 執(zhí)行軟件的修改不反映在文檔里,會產(chǎn)生文檔的副作用。 例如,對交互輸入的順序或格式進行修改,如果沒有正確 地記入文檔中,可能引起重大的問題。過時的文檔內(nèi)容、 索引和文本可能造成沖突,引起用戶業(yè)務(wù)的失敗和不滿。 因此,必須在軟件交付之前對整個軟件配置進行評審,

17、以 減少文檔的副作用。,9.3 程序修改的步驟及修改的副作用,為了控制因修改而引起的副作用,要做到: (1)按模塊把修改分組; (2)自頂向下地安排被修改模塊的順序; (3)每次修改一個模塊; (4)對于每個修改了的模塊,在安排修改下一個模塊之 前,要確定這個修改的副作用,可以使用交叉引用 表、存儲映象表、執(zhí)行流程跟蹤等。,9.3 程序修改的步驟及修改的副作用,1靜態(tài)確認 修改的軟件,通常伴隨著引起新的錯誤的危險。為了能夠 做出正確的判定,驗證修改后的程序至少需要兩個人參加。 要檢查: (1)修改是否涉及規(guī)格說明?修改結(jié)果是否符合規(guī)格說 明?有沒有歪曲規(guī)格說明? (2)程序的修改是否足以修正軟

18、件中的問題?源程序代碼 有無邏輯錯誤?修改時有無修補失誤? (3)修改部分對其他部分有無不良影響(副作用)? 對軟件進行修改,常常會引發(fā)別的問題,因此,有必要 檢查修改的影響范圍。,重新驗證程序,9.3 程序修改的步驟及修改的副作用,2確認測試 在充分進行了以上確認的基礎(chǔ)上,要用計算機對修改程 序進行確認測試。 (1)確認測試順序:先對修改部分進行測試,然后隔離修 改部分,測試程序的未修改部分,最后再把它們集成起 來進行測試。這種測試稱為回歸測試。 (2)準備標準的測試用例。 (3)充分利用軟件工具幫助重新驗證過程。 (4)在重新確認過程中,需邀請用戶參加。,9.3 程序修改的步驟及修改的副作

19、用,3維護后的驗收 在交付新軟件之前,維護主管部門要檢驗: (1)全部文檔是否完備,并已更新; (2)所有測試用例和測試結(jié)果已經(jīng)正確記載; (3)記錄軟件配置所有副本的工作已經(jīng)完成; (4)維護工序和責(zé)任是明確的。,9.3 程序修改的步驟及修改的副作用,軟件維護性是指當對軟件實施各種類型的維護而進行修改時,軟件產(chǎn)品可被修改的能力。 軟件維護的子特性:,9.4 軟件的維護性,軟件維護性的定義,9.4 軟件的維護性,軟件維護性度量的任務(wù)是對軟件產(chǎn)品的維護性給出量化的評價。 軟件維護的度量也分為內(nèi)部維護性度量和外部維護性度量,兩者的差別如下表。,1模塊化 模塊化技術(shù)的優(yōu)點是如果需要改變某個模塊的功能

20、,則 只要改變這個模塊,對其他模塊影響很??;如果需要增加 程序的某些功能,則僅需增加完成這些功能的新的模塊或 模塊層;程序的測試與重復(fù)測試比較容易;程序錯誤易于 定位和糾正;容易提高程序效率。 2結(jié)構(gòu)化程序設(shè)計 結(jié)構(gòu)化程序設(shè)計不僅使得模塊結(jié)構(gòu)標準化,而且將模塊 間的相互作用也標準化了,因而把模塊化又向前推進了一 步。采用結(jié)構(gòu)化程序設(shè)計可以獲得良好的程序結(jié)構(gòu)。,使用提高軟件質(zhì)量的技術(shù)和工具,9.5 提高軟件維護性的方法,3使用結(jié)構(gòu)化程序設(shè)計技術(shù),提高現(xiàn)有系統(tǒng)的可 維護性 (1)采用備用件的方法當要修改某一個模塊時,用一 個新的結(jié)構(gòu)良好的模塊替換掉整個模塊。 (2)采用自動重建結(jié)構(gòu)和重新格式化的工

21、具(結(jié)構(gòu)更新技 術(shù))。 (3)改進現(xiàn)有程序的不完善的文檔。 (4)使用結(jié)構(gòu)化程序設(shè)計方法實現(xiàn)新的子系統(tǒng)。 (5)采用結(jié)構(gòu)化小組。,9.5 提高軟件維護性的方法,質(zhì)量保證審查除了保證軟件得到適當?shù)馁|(zhì)量外,還可以用 來檢測在開發(fā)和維護階段內(nèi)發(fā)生的質(zhì)量變化。一旦檢測出問 題來,就可以采取措施糾正,以控制不斷增長的軟件維護成 本。 為了保證軟件的可維護性,有4種類型的軟件審查。 檢查點審查 驗收檢查 周期性的維護審查 對軟件包進行檢查,9.5 提高軟件維護性的方法,實施開發(fā)階段產(chǎn)品的維護性審查,9.5 提高軟件維護性的方法,1檢查點審查 保證軟件質(zhì)量的最佳方法是在軟件開發(fā)的最初階段就把質(zhì)量要求考慮進去

22、,并在開發(fā)過程每一個階段的終點,設(shè)置檢查點進行檢查。 檢查的目的是要證實,已開發(fā)的軟件是否符合標準,是否滿足規(guī)定的質(zhì)量需求。,9.5 提高軟件維護性的方法,1. 檢查點審查 在不同的檢查點,檢查的重點不完全相同,例如,在設(shè)計階段,檢查重點是可理解性、可修改性、可測試性。可理解性檢查的重點是程序的復(fù)雜性。如下圖所示。,2驗收檢查 驗收檢查是一個特殊的檢查點的檢查,是交付使用前的最 后一次檢查,是軟件投入運行之前保證可維護性的最后機 會。以下是驗收檢查必須遵循的最小驗收標準。 (1)需求和規(guī)范標準 需求應(yīng)當以可測試的術(shù)語進行書寫,按優(yōu)先次序排列和定義。 區(qū)分必須的、任選的、將來的需求。 包括對系統(tǒng)

23、運行時的計算機設(shè)備的需求;對維護、測試、操作,以及維護人員的需求;對測試工具等的需求。,9.5 提高軟件維護性的方法,(2)設(shè)計標準 程序應(yīng)設(shè)計成分層的模塊結(jié)構(gòu)。每個模塊應(yīng)完成唯一的 功能,并達到高內(nèi)聚、低耦合。 通過一些知道預(yù)期變化的實例,說明設(shè)計的可擴充性、 可縮減性和可適應(yīng)性。,9.5 提高軟件維護性的方法,(3)源代碼標準 盡可能使用程序設(shè)計語言的標準版本。 所有的代碼都必須具有良好的結(jié)構(gòu)。 所有的代碼都必須文檔化,在注釋中說明它的輸入、輸出,以及便于測試/再測試的一些特點與風(fēng)格。 (4)文檔標準 文檔中應(yīng)說明程序的輸入/輸出、使用的方法/算法、錯誤恢復(fù)方法、所有參數(shù)的范圍、默認條件等。,3周期性地維護審查

溫馨提示

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

最新文檔

評論

0/150

提交評論