軟件工程基礎之07軟件維護



單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,Footer Text,*,/23,第七章 軟件維護,軟件維護概述,1,軟件維護技術,5,軟件維護過程模型,3,應注意的問題,2,小結,6,軟件維護概述,軟件維護的基本概念,軟件維護的基本類型,維護的困難性,軟件維護的定義,IEEE/EIA 12207ISO/IEC2008,中對軟件維護的定義是:軟件維護是指,由于軟件產品出現(xiàn)問題或需要改進而對代碼及相關文檔的修改,,其目的是對現(xiàn)有軟件產品進行修改的同時保持其完整性軟件維護的必要性,軟件維護能夠改正錯誤軟件維護能夠改善設計軟件維護能夠實現(xiàn)軟件的改進軟件維護能夠實現(xiàn)與其他系統(tǒng)的交互軟件維護能夠為使用不同的硬件、軟件、系統(tǒng)的新性能以及通訊設備等而對軟件進行改進軟件維護能夠完成遺留系統(tǒng)的移植軟件退出使用遺留系統(tǒng):仍能夠使用的舊系統(tǒng),有時對于業(yè)務運行來說至關重要原因:過時的語言或技術實現(xiàn)、昂貴的系統(tǒng)支持導致維護昂貴、結構性差軟件維護的成本,軟件維護階段一般要消耗軟件生命周期中經費開支的,大部分,軟件維護的費用占軟件總預算的比例:,70,年代的,35%40%,80,年代上升為,40%60%,90,年代已經占,70%,80%,軟件維護的基本類型,維護的類型有,四,種:,糾錯,性維護,適應性維護,完善性維護,預防性維護,國外的統(tǒng)計數(shù)字表明,完善性維護占全部維護活動的,50%,66%,,糾錯性維護占,17%,21%,,適應性維護占,18%,25%,,其他維護活動只占,4%,左右,糾錯性維護,在軟件交付使用后,因開發(fā)時測試的不徹底、不完全,必然會有部分,隱藏的錯誤,遺留到運行階段。
設計錯誤、編碼錯誤、數(shù)據錯誤、文檔錯誤,這些隱藏下來的錯誤在某些特定的使用環(huán)境下就會暴露出來為了,識別和糾正軟件錯誤、改正軟件性能上的缺陷、排除實施中的誤用,應當進行的診斷和改正錯誤的過程,就叫做糾錯性維護適應性維護,在使用過程中,,外部環(huán)境(新的硬、軟件配置),數(shù)據環(huán)境(數(shù)據庫、數(shù)據格式、數(shù)據輸入,/,輸出方式、數(shù)據存儲介質),網絡環(huán)境等其他可能發(fā)生的變化為使軟件,適應外部、數(shù)據、網絡的變化,,而去修改軟件的過程就叫做適應性維護完善性維護,在軟件的使用過程中,用戶往往會對軟件提出,新的功能與性能要求,為了滿足,新的功能與性能要求,,需要修改或再開發(fā)軟件,,以擴充軟件功能、增強軟件性能、改進加工效率、提高軟件的可維護性這種情況下進行的維護活動叫做完善性維護實踐表明,在幾種維護活動中,,完善性維護所占的比重最大,即大部分維護工作是改變和加強軟件,而不是糾錯完善性維護不一定是救火式的緊急維修,而可以是有計劃、有預謀的一種再開發(fā)活動預防性維護,預防性維護是防止問題發(fā)生而事先維護,目的是為了提高軟件的可維護性、可靠性等,為以后進一步改進軟件打下良好基礎體系結構不良、數(shù)據結構不理想、文檔不全、缺少變更記錄等。
預防性維護定義為:,采用適當?shù)姆椒▽π枰S護的軟件或軟件中的,某一部分(重新)進行設計、編碼和測試,逆向工程、軟件再工程等軟件維護中應注意的問題(一),技術方面,程序的理解:有限理解,測試:完整測試消耗大,往往選擇回歸測試、局部測試軟件運行中,協(xié)調測試困難影響分析,可維護性,影響分析,影響分析是對修改的影響進行完整分析,衡量消耗的可接受程度目標:,決定,改變的范圍,這對合理計劃和完成工作有重要意義,對完成工作,所需的資源,進行精確的估計分析改變的,費用,/,效益比,由于對軟件進行變更往往是牽一發(fā)而動全身的,因此如果給出了一個變更,必須考慮到關聯(lián)性的,復雜情況,可維護性,可維護性是指通過一定的手段,使軟件可以被維護、改進、改動或修正,以滿足特定的需求的方便程度決定要素:,可理解性,可測試性,可修改性,可移植性,可重用性,環(huán)境要素:,維護文檔,運行環(huán)境,維護組織,維護質量,軟件維護中應注意的問題(二),管理方面,契合組織的目標,:,延長軟件生命、軟件升級、改進的需要,但投資回報不明確權衡消耗與收益人力資源:吸引和維持軟件維護隊伍二等公民”誤區(qū),過程:需要開發(fā)過程沒有的活動,如逆向工程,管理挑戰(zhàn),如何組織維護活動:責任到人,外包:有效控制是重點,確定服務的范圍以及合約細節(jié)是挑戰(zhàn)。
軟件維護中應注意的問題(三),維護費用估算,參數(shù)模型,M=P+K e,(cd),M,是維護用的總工作量,,P,是生產性工作量,,K,是經驗常數(shù),,c,是復雜程度,,d,是維護人員對軟件的熟悉程度生產性成本包括分析評價、修改設計和編碼等非生產性成本包括程序理解、數(shù)據結構解釋、接口特點和性能限度等基于經驗,專家判斷、類推、工作分解結構,軟件維護過程模型,IEEE,維護模型圖,分類與鑒別階段,分析階段,設計階段,實現(xiàn)階段,系統(tǒng)測試階段,驗收測試階段,交付階段,修改輸入,軟件維護技術,程序的理解,軟件再工程,軟件逆向工程,程序的理解,為了有效維護,需要閱讀和理解程序,方法:,1,、文檔理解、代碼理解、注釋理解,2,、代碼瀏覽工具(,Source Insight,等),程序理解的任務:以軟件維護、升級和再工程為目的,在不同的抽象級別上建立基本軟件的概念模型,包括從代碼本身的模型到基本應用領域的模型,即,建立從問題,/,應用域到程序設計,/,實現(xiàn)域的映射集,程序理解的具體任務,通過檢查單個的程序設計結構,程序被表示成,抽象語法樹、符號表或普通源文本包括手工代碼閱讀、人工提取、程序分析、靜態(tài)分析和動態(tài)分析等。
盡量做到程序,隱含信息,的顯性表示及程序,內部關系,的可視化如控制流、數(shù)據流分析、程序視圖構造等從源代碼中,提取信息,,并存放在通用的數(shù)據庫中,然后通過查詢語言對數(shù)據庫進行查詢檢查程序構造過程中的,結構關系,,明確表示程序組成部分之間的依賴關系識別程序的,高層概念,,如標準算法、數(shù)據結構、語法及語義匹配等軟件再工程,定義,軟件再工程(,Re-engineering,)指對現(xiàn)有軟件進行仔細審查和改造,對其進行,重新構造,,使之成為一個新的形式,同時包括隨之產生的,對新形式的實現(xiàn),軟件再工程模型,數(shù)據重構,正向工程,庫存目錄分析,代碼重構,逆向工程,文檔重構,應用系統(tǒng)的庫存目錄:系統(tǒng)規(guī)模、使用年限、業(yè)務重要程度等信息根據相關信息選擇再工程業(yè)務,后分配資源系統(tǒng)可以正常運作,并可預見能夠支撐至終點,文檔不變文檔必須更新,但資源有限,部分重構系統(tǒng)關鍵業(yè)務,必須完全重構,則完全重構某些老程序的體系結構比較合理,但是,一些模塊的編碼方式卻是難于理解、測試和維護的代碼重構:不改變系統(tǒng)行為,只是對程序結構進行改變和優(yōu)化,使其易于理解、測試和維護方法:分析源代碼,標記與程序設計概念相違背的部分,重構新代碼評審和測試。
全范圍在工程活動,對當前數(shù)據體系結構進行分解,定義必要的數(shù)據模型,表示數(shù)據對象和屬性,進行質量評審如數(shù)據結構較差,進行再工程數(shù)據結構改變影響體系結構和代碼,,慎重,也稱為,革,新或,改,造整個 系統(tǒng)代碼、數(shù)據重構正向工程過程應用現(xiàn)代軟件工程的概念、原理、技術和方法,重新開發(fā)現(xiàn)有的某些應用系統(tǒng)在大多數(shù)情況下,經過正向工程過程后,得,出的軟件,不僅重新實現(xiàn)了現(xiàn)有系統(tǒng)的功能,而且增加了新功能,提高了整體性能軟件逆向工程,軟件逆向工程(,Software Reverse Engineering,)是分析目標系統(tǒng),識別系統(tǒng)的構件及其交互關系,并且,通過高層抽象或其他形式來展現(xiàn)目標系統(tǒng),的過程方法:分析系統(tǒng),抽象系統(tǒng)和展現(xiàn)系統(tǒng),從而實現(xiàn)協(xié)助用戶理解系統(tǒng)的目的設計恢復的過程逆向工程過程,逆向工程主要內容,一、數(shù)據的逆向工程,二、處理的逆向工程,三、用戶界面的逆向工程,四、逆向工程的工具,數(shù)據的逆向過程,一、數(shù)據結構提取,1,、模式分析:通過分析現(xiàn)有的結構化模式推出隱含的構造與約束,以提供一個原始的物理模式2,、程序分析:分析應用程序以及其他一些過程(如:觸發(fā)器)的代碼,以得到隱含的數(shù)據結構和完整性約束。
3,、數(shù)據分析:分析數(shù)據,以得到暗含的數(shù)據結構以及特性的數(shù)據模式,同時,對一些假設進行驗證4,、模式集成:合并上述過程所得到的不同模式,最終得到完整的邏輯模式,其中包含隱式和顯式的結構和約束二、數(shù)據結構的概念化,分為以下幾個步驟:去除過時的和技術性的結構以及重命名;提取相關的語義信息;對被優(yōu)化的構造進行識別和變形,(逆優(yōu)化);檢索每一個實現(xiàn)構造中的源概念結構;以及規(guī)范化處理的逆向過程,為了理解過程抽象,需要在,不同的抽象級別,(系統(tǒng)級、程序級、構件級、模式級和語句級)分析代碼,對大型系統(tǒng),通常用半自動方法完成逆向工程使用自動化工具幫助軟件工程師理解現(xiàn)有代碼的語義,然后將該過程的結果傳遞給重構和正向工程工具以完成再工程過程用戶界面的逆向工程,弄清幾個問題:,界面必須處理的,基本動作,是什么?,系統(tǒng)對這些,動作的行為反應,的簡要描述是什么?,有哪些,界面的等價概念,是相關的?,逆向過程的工具,靜態(tài)模型逆向工具,Rational Rose,Rigi,JBPAS,動態(tài)模型逆向工具,SCED,ISVis,Borland Together,理論和技術還不夠完善,工具支持很重要,但是無法完全依賴本章小結,軟件維護可以分為,糾錯性維護、適應性維護、完善性維護、預防性維護,。
軟件維護實踐中經常會遇到各種困難,需要在技術、管理方面進行考慮,并對維護費用進行估算軟件維護按IEEE 維護過程模型可以分為,七個階段,程序的理解,對軟件維護具有重要意義,程序理解的任務就是要揭示程序的功能與實現(xiàn)機制軟件的再工程,是對現(xiàn)有軟件進行仔細審查和改造,進行重新構造,最終成為一個新的形式,六種活動構成了再工程的循環(huán)模型軟件逆向工程,包括數(shù)據逆向工程、處理逆向工程和用戶界面逆向工程作業(yè),為什么需要軟件維護?簡述軟件維護的主要種類簡述軟件可維護性中軟件自身的因素和軟件維護環(huán)境兩方面的內容簡述,IEEE,軟件維護過程模型試從不同抽象級別闡述應該如何理解程序,應得到什么輸出什么是軟件的逆向工程?簡述其意義選擇你認為是最困難的一種逆向工程活動進行闡述,具體分析其難點所在什么是軟件的再工程?簡述其主要步驟。