第七章 軟件維護與軟件再工程§ 軟件維護的概念 四類維護活動:? 改正性維護? 適應性維護? 擴充與完善性維護? 預防性維護三類維護所占比例:其它維護 5 %適應性維 護 25%改正性維 護 20%擴充與完善性維護 50%改正性維護占全部維護量的比率已從80年代初的20%大幅度下降, 90年代初一些公司的產品差錯率已接近于零各類維護活動的根本目的是延長軟件生存期其它維護 4 %軟件生存周期軟件誕生計劃分析設計編碼測試運行和維護(簡稱維護)改善期 穩定期 陳舊期1年-10年2個月-2年重構軟件工程周期§ 軟件維護的特點M P+K e= (c-d )M : 維護工作總工作量P : 生產性工作量K : 經驗常數c : 復雜度d : 對該軟件熟悉程度的度量 維護的成本維護中的典型問題(1)難以跟蹤軟件版本的進化過程,軟件的變化未在文檔中反映出來.(2)難以跟蹤軟件的創建過程.(3)難以讀懂他人程序.(4)無文檔或不全.(5)軟件人員流動性大.(6)設計時未考慮修改需要,修改困難.(7)維護工作無吸引力,缺乏成就感.§ 軟件的維護任務 維護組織維護報告維護要求表軟件維護人員提供給用戶的空白的維護要求表,也稱為軟件問題報告表,這個表格由要求一項維護活動的用戶填寫。
軟件維修報告滿足維護要求表中的要求所需要的工作量;維護要求的性質;這項要求的優先次序;與修改有關的事后數據。維護階段的事件流不管維護類型如何,都需要進行同樣的技術工作。這些工作包括修改軟件設計、復查、必要的代碼修改、單元測試和集成測試(包括使用以前的測試方案的回歸測試)、驗收測試和復審。不同類型的維護強調的重點不同,但是基本路徑是相同的。維護事件流中最后一個事件是復審,它再次檢驗軟件配置的所有成分的有效性,并且保證事實上滿足了維護要求表中的要求。軟件過程的輸出信息可以分為3類: ①計算機程序(源代碼和可執行程序); ②描述計算機程序的文檔(供技術人員或用戶使用); ③數據(程序內包含的或在程序外的)。 上述這些項組成了在軟件過程中產生的全部信息,我們把它們統稱為軟件配置,而這些項就是軟件配置項。保存維護記錄維護過程中作應記錄的數據F程序標識F源程序語句數目F機器代碼指令條數F.......F.......以收集的數據為基礎構造維護數據庫,供維護評價使用.評價維護活動從七個方面度量(評價)維護工作:(1)每次程序運行平均失效的次數;(2)用于每一類維護活動的總人時數;(3)平均每個程序、每種語言、每種維護類型所做的程序變動數;(4)維護過程中增加或者刪除一個源語句平均花費的人時數;(5)維護每種語言花費的平均人時數;(6)一張維護要求表的平均周轉時間;(7)不同維護類型所占的百分比。
軟件可維護性 軟件可維護性的定義 軟件可維護性是指糾正軟件系統出現的錯誤和缺陷,以及為滿足新的要求進行修改、擴充或壓縮的難易程度。或者: 維護人員理解、改正、改動或者改進這個軟件的難易程度。可維護性的度量度量程序可維護性的7個特性在各類維護中的側重點改正性維護 適應性維護 完善性維護可理解性 ?可測試性 ?可修改性 ??可靠性?可移植性?可重用性??效率?§ 提高可維護性的方法F 建立明確的軟件質量目標和優先級F 使用提高軟件質量的技術和工具F 進行明確的質量保證審查F 選擇可維護的程序設計語言F 改進程序的文檔F 維護老化代碼§ 預防性維護維護老程序的方法:(1)反復多次的做修改程序的嘗試;(2)仔細分析程序盡可能多得掌握程序的內部工作細節,以便更加有效的修改它;(3)在深入理解原有設計的基礎上,用軟件工程方法重新設計、重新編碼和測試那些需要變更的軟件部分;(4)以軟件工程方法學為指導,對程序全部重新設計、編碼和測試,為此可以使用逆向工程和再工程工具來幫助理解原有的設計。預防性維護:把今天的方法學應用到昨天的系統上,以支持明天的需求。§ 軟件再工程 軟件再工程在軟件復用中,有問題是與現有系統密切相關的例如:—現有軟件系統如何適應當前技術的發展及需求的變化,采用更易于理解的、適應變化的、可復用的系統軟件構架并提煉出可復用的軟件構件?—現存大量的遺產軟件系統( )由于技術的發展,正逐漸退出使用,如何對這些系統進行挖掘、整理,得到有用的軟件構件?—已有的軟件構件隨著時間的流逝會逐漸變得不可使用,如何對它們進行維護,以延長其生命期,充分利用這些可復用構件?軟件再工程( )正是解決上述問題的主要技術手段。
軟件再工程是一類軟件工程活動可復用的對象模型 pdf,是一個工程過程,它將逆向工程、重構和正向工程組合起來,將現存系統重新構造為新的形式。再工程的基礎是系統理解,包括對運行系統、源代碼、設計、分析、文檔等的全面理解。但在很多情況下,由于各類文檔的丟失,只能對源代碼進行理解,即程序理解。 它能夠使我們:F 增進對軟件的理解;F 提高軟件自身的可維護性、復用性或演化性.軟件再工程過程模型代碼重構數據重構正向工程庫存目錄分析文檔重構逆向工程軟件再工程相關術語間關系信息庫1類視圖:非過程性描述、元描述例:規格說明再工程3類視圖:過程性描述例:源程序再工程2類視圖:偽過程性描述、結構性描述例:DFD、PDL A2類視圖:分析再工程逆向工程設計恢復再工程逆向工程設計恢復再工程 A1類視圖:分析 A3類視圖:分析分解綜合生成視圖軟件視圖 view有關軟件的一種表達形式或報告;視圖分類:F1類視圖:F2類視圖:F3類視圖:FA類視圖:伴隨上述各類的分析視圖;A1類視圖是對1類視圖的分析信息;A2類視圖是有關2類視圖的分析信息;A3類視圖是由3類視圖得到。軟件視圖示例信息庫視圖編輯器DFD視圖編輯器Petri網視圖編輯器ERA圖視圖編輯器跟蹤矩陣 視圖編輯器程序結構圖視圖編輯器流程圖視圖編輯器規格說明再工程信息庫及其產品軟件文檔 分析結果信息庫設計成果 規格說明各種圖度量值分析、分解器源程序或其模板(進入點)源程序自動進行再工程的過程軟件軟件的新視圖語法分析器語義分析器視圖合成器信息庫其他產品經過再工程過程可獲得的信息?格式?圖形?文檔?度量值?邏輯?報告庫存目錄分析仔細分析庫存目錄,按照業務重要程度、壽命、當前可維護性、預期的修改次數等標準,把庫中的應用系統排序,從中選出再工程的候選者,然后明智地分配再工程所需要的資源。
開發和維護者不應等待用戶的維護申請, 可先選擇以下類型程序作為預防性維護對象:(1)預計若干年內將繼續使用的程序(2)當今正成功使用的程序(3)最近的將來要進行大修改和完善的程序文檔重構(1)保持現狀(2)針對系統中當前正在修改的那些部分建立完整文檔(3)如果某應用系統是完成業務工作的關鍵,而且必須重構全部文檔,則仍然應該設法把文檔工作減少到必需的最小量。逆向工程逆向工程(反推工程 )從現有軟件恢復設計信息(有用的維護信息)非結構化、無文檔的源代碼或目標代碼 設計的恢復過程軟件的全部文檔逆向工程恢復信息的級別:(1)實現級:程序的抽象語法樹、符號表等信息(2)結構級:反映程序分量之間相互依賴關系的信息,如調用圖、結構圖等.(3)功能級:反映程序段功能和段間關系的信息(4)領域級:反映程序分量與應用領域概念間對應關系的信息抽象級別低高信息的抽象級別越高, 它與代碼距離越遠, 通過逆向工程恢復的難度越大, 自動工具支持的可能性變小逆向工程源程序目標代碼反匯編、反編譯程序分析技術:程序結構分析工具程序功能分析工具源程序概要設計詳細設計概要設計需求分析正向工程正向工程也稱為革新或者改造,這項活動不僅從現有程序中恢復設計信息,而且使用該信息去改變或者重構現有系統,以提高整體質量。
正向工程應用軟件工程原理、概念、技術和方法來重新開發某個現有的應用系統。在大多數情況下,被再工程的軟件不僅能構重新實現現有系統的功能,而且加入了新功能和提高了整體性能。代碼重構重構可疑模塊的代碼首先,用重構工具分析源代碼,標注出需要重構的代碼然后,自動重構有問題的代碼;最后,復審和測試生成的重構代碼。數據重構發生在較低抽象層次上,是一種全范圍內的再工程活動。在大多數情況下,數據重構始于逆向工程活動,分解當前使用的數據體系結構,必要時定義數據模型,標識數據對象和屬性,并且從軟件質量的角度復審現存的數據結構。為什么要實施軟件再工程?再工程可幫助降低軟件演化風險?再工程可幫助補償軟件投資?再工程可使得軟件易于進一步變更?再工程有廣闊市場?再工程擴大了CASE工具集?再工程是推動自動軟件維護的動力第八章 軟件項目管理n 估算軟件規模n 工作量估算n 進度計劃n 人員組織n 質量保證n 軟件配置管理n 能力成熟度模型估算軟件規模1、代碼行技術L=6a + 4m +b由多名有經驗的軟件工程師分別作出估計。每個人都估計程序的最小規模a,最大規模b和最可能的規模m。、功能點技術(1)信息域特性輸入項數:用戶向軟件輸入的項數,這些輸入給軟件提供面向應用的數據;輸出項數:軟件向用戶輸出的項數,它們向用戶提供面向應用的信息;查詢數:查詢就是一次聯機輸入,它導致軟件以聯機輸出方式產生某種即時響應;主文件數:邏輯主文件的數目;外部接口數:機器可讀的全部接口的數量,用這些接口把信息傳送給另一個系統。
(2)估算功能點的步驟A、 計算未調整的功能點數UFPB 、計算技術復雜性因子 = +×DI其中,DI是14種技術因素對軟件規模的綜合影響程度。C、 計算功能點數FPFP = UFP×TCF工作量估算n 靜態單變量模型n 動態多變量模型n 模型進度計劃n 估算開發時間n Gantt圖n 工程網絡n 估算工程進度n 關鍵路徑n 機動時間人員組織n 民主制程序員組n 主程序員組n 現代程序員組圖 _ 曲線高低計劃需求分析初步設計詳細設計編碼單元測試整體測試功能測試管理人員 高級技術人員初級技術人員質量保證n 軟件質量 軟件與明確地和隱含地定義的需求相一致的程序。定義強調了三個要點:(1)軟件需求是度量軟件質量的基礎,與需求不一致就是質量不高(2)指定的開發標準定義了一組指導軟件開發的準則,如果沒有遵守這些準則,幾乎肯定會導致軟件質量不高(3)通常,有一組沒有顯式描述的需求可復用的對象模型 pdf,如果軟件滿足明確描述的需求,卻不滿足隱含的需求,那么軟件的質量仍然是值得懷疑的。產品運行產品轉移產品修改可理解性可維修性靈活性可測試性可移植性可再用性互運行性正確性 完整性健壯性 可用性效率風險軟件質量因素與產品活動的關系n 軟件質量保證措施SQA的措施主要有: 基于非執行的測試(復審或者評審) 基于執行的測試 程序正確性證明軟件配置管理 軟件配置管理是在軟件的整個生命期內管理變化的一組活動。
具體地說,這組活動用來:標識變化控制變化確保適當地實現了變化向需要知道這類信息的人報告變化n 軟件配置軟件配置項:計算機程序、描述計算機程序的文檔、數據。基線:通過了正式復審的軟件配置項。n 軟件配置管理過程 軟件配置管理可以看作是應用于整個軟件過程的軟件質量保證活動,是專門用來管理變化的軟件質量保證活動。軟件配置管理的五項任務: 標識、版本控制、變化控制、 配置審計、報告。能力成熟度模型n 能力成熟度模型的主要思想 因為問題是管理軟件過程的方法不恰當造成的,所以采用新技術并不會自動提高軟件生產率和軟件質量,應該下大力氣改進對軟件過程的管理。n 能力成熟度模型的五個成熟度等級 初始級、可重復級、已定義級、 已管理級、優化級據美國卡內基.梅隆大學SEI統計,至2001年6月底,CMM的認證情況如下表所示。CMM級別世界軟件企業通過CMM的數量世界軟件企業通過CMM的份額5級41家3%4級54家4%3級232家17%2級438家32%1級600家44%級別 特點1 初始級 軟件開發過程是一個偶然的甚至無序的過程,很少有明確的定義,成功完全依賴于個體的能力.2 重復級實施基本的項目管理:跟蹤軟件成本、進度和功能。
依照以往項目成功的經驗來建立基本的過程規則,使得其他相似項目能重復以往的成功。3 定義級 軟件過程的管理和實行方法都已文檔化、標準化,使開發商有一個開發過程的標準。即所有項目都可以依照標準來開發和維護軟件。4 管理級 定義了評估軟件過程和產品質量的度量。利用此度量對軟件過程和產品做出推斷和控制。5 優化級 系統地引導新理念及技術的反饋,從而不斷改進軟件過程。5個成熟度等級在軟件過程中的特點五級成熟度的特性 等級1 —初始級CMM1 杰出的主管和優秀的隊伍 項目成功?CMM1 一般的主管和隊伍 項目成功難以預測?等級2 —重復級項目經驗定義準則和跟蹤新的類似項目再成功五級成熟度的特性等級3 —定義級CMM重復 定義軟件過程 可視和可控等級4—管理級軟件過程能力 量化 改進與預測等級5—優化級已有的技術等級2—4中的改進已有的技術等級5中的優化新的技術