第二十八章

Download Report

Transcript 第二十八章

軟體再生工程

改寫和修改現在軟體系統讓
其更具維護性
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 1
本章目的



瞭解為何再生工程有時候是軟體系統演化合乎
成本效益的選擇
瞭解包含在軟體再生工程程序中反向工程和程
式重建結構的活動
瞭解軟體再生和資料再生工程的差別,並了解
為何資料再生工程既費時又昂貴
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 2
本章內容





原始程式碼轉換
反向工程
程式結構改善
程式模組化
資料再生
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 3
系統再生工程



再生工程包含系統文件重整、系統重組與結構
重建
軟體再生的方式來延長系統的使用時間
再生工程可以讓維護變簡單
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 4
什麼時候做再生工程



當系統變更而限制系統功能,此時就要再生工
程
當硬體或軟體已快被淘汰時
工具可支援變更結構
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 5
再生工程優勢

減少風險
• 重新發展軟體具有高風險性,可能會發生系統上的錯誤以
及系統開發的問題

減少成本
• 系統再生的成本明顯比開發新軟體少
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 6
商業流程的再生工程



擔心商業流程的再生工程會造成更多的困擾
利用新的電腦系統來支援已修正的流程
許多針對既有舊系統的軟體再生工程,被設計
可支援現有的流程
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 7
正向工程與再生工程
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 8
再生工程流程
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 9
再生工程成本因素




再生工程的軟體品質
再生工程的工具支援性
轉換資料的程度
專業員工的再生工程
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 10
再生工程方式
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 11
原始碼轉換


轉換現有系統的語言 (或語言版本) 如
FORTRAN 到 C
或許不需要轉換:
• 硬體更新
• 員工技術
• 組織政策改變

現實上是不可能自動化轉換
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 12
程式轉換流程
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 13
反向工程




分析軟體並將軟體的設計和規格還原
軟體工程的流程可以用系統現有系統的設計和
規格流程
建立程式資料庫並從中獲得資訊
使用自動工具分析系統並找出結構
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 14
反向工程流程
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 15
反向工程

軟體再生過程中通常會使用反向工程來還原程
式設計。不過,反向工程也不需永遠跟著系統
再生工程後面
• 現有系統的設計和規格經過反向工程之後可以將它們做為
程式替換的需求規格輸入資料
• 現有系統的設計和規格經過反向工程之後對程式的維護有
所幫助
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 16
程式結構改善



經常性的維護而降低程式品質, 程式會變的
越來越難理解
程式也許會自動地去調整無條件的分支
精簡的程式可以增加程式的可讀性
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 17
邏輯混亂不清的控制程式
Start:
Get (Time-on, Time-off, Time, Setting, Temp, Switch)
if Switch = off goto of f
if Switch = on goto on
goto Cntrld
off: if Heating-status = on goto Sw -off
goto loop
on: if Heating-status = off goto Sw -on
goto loop
Cntrld: if Time = Time-on goto on
if Time = Time-off goto off
if Time < Time-on goto Start
if Time > Time-off goto Start
if Temp > Setting then goto of f
if Temp < Setting then goto on
Sw-off: Heating-status := off
goto Sw itch
Sw-on: Heating-status := on
Switch: Switch-heating
loop:
goto Start
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 18
結構化控制程式
loop
-- The Get statement finds values for t he given variables from the system’s
-- environment.
Get (Time-on, Time-off, Time, Setting, Temp, Switch) ;
case Switch of
when On => if Heating-status = off then
Switch-heating ; Heating-status := on ;
end if ;
when Off => if Heating-status = on then
Switch-heating ; Heating-status := of f ;
end if;
when Controlled =>
if Time >= Time-on and Time < = Time-off then
if Temp > S etting and Heating-status = on then
Switch-heating; Heating-status = off;
elsif Temp < S etting and Heating-status = off then
Switch-heating; Heating-status := on ;
end if;
end if ;
end case ;
end loop ;
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 19
簡化方式
-- 複雜的情況
if not (A > B and (C < D or not ( E > F) ) )...
-- 簡單的情況
if (A <= B and (C>= D or E > F)...
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 20
自動化程式重組
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 21
重建結構的問題

重建結構的問題有:
• 遺失註解
• 遺失文件
• 相當多的計算需求


重建結構並不能幫把不必要的程式碼移除
理解依資料處理的程式並不會改善重建結構
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 22
程式模組化


相關的程式集合在一起,並且將它們視為一個
單獨的程式單元
利用手動的程序來完成程式的檢查和改進
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 23
模組型態

資料抽象化
• 由處理元件的相關資料所建立的一些抽象資料型別

硬體模組
• 這和資料抽象化有密切關係,它可以將用來控制特定硬體
裝置的功能收集在一起

功能模組
• 這些模組可以將執行相似或相關任務的功能收集在一起

流程支援模組
• 將需要支援特定商業流程的所有功能和特定資料項目收集
在一起的模組
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 24
復原資料抽象化



許多既有舊系統依賴共用資料表和共同資料區
域。在這些區域內的資訊是全域共享的
改變系統的廣度可能會引起一些問題
全域的共用資料區域轉換成物件或抽象資料型
別的過程
• 分析共同資料區域找出邏輯性的抽象化資料
• 為這些抽象化建立一個抽象資料型別或物件
• 使用程式瀏覽器系統或交叉參考產生器找出資料的所有參
考
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 25
資料抽象復原




分析一般資料出來,並且定義出邏輯性
建立模擬抽象資料型別,以提供更新與存取所
有欄位資料的功能
抽象資料要提供功能來存取更新每個欄位
使用程式瀏覽器系統或交叉參考產生器找出資
料的所有參考。以適當的函式呼叫來代替
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 26
資料再生



資料結構和實際資料進行分析與重組的過程,
稱為資料再生
將以檔案基礎的系統轉移
目的就是要創造可以管理資料的環境
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 27
資料再生工程方法
方法
說明
資料清除(Data cleanup)
分析資料數值與記錄以改善其品質,移除重複資料、
刪除多餘資訊以及對所有記錄套用一致的格式。這通
常不需要相關的程式變更。
資料延伸(Data extension)
此例中,資料與相關的程式必須經過再生以便移除資
料處理的限制。這可能需要改變程式以增加欄位、修
改表格的上限等。資料本身可能必需重寫以清除,以
便反應程式的變更。
資料移轉(Data migration)
此例中,資料欲移至現代資料庫管理系統的控制中,
原來的資料可能儲存在不同的檔案中或使用舊的資料
庫管理系統來管理。這情況如圖28.11所示。
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 28
資料問題



使用者想從桌上電腦取得資料而不是從檔案系
統。這就必須要能夠從DBMS取得資料
系統要能比原始的設計處理更多資料
多餘的資料可以用不同的型式儲存於系統的不
同地方
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 29
資料移轉
資料問題

資料命名問題
• 系統中不同程式的相同邏輯實體可能使用同義字的不同名
稱

欄位長度問題
• 同一個項目可能在不同程式裡被指定不同的長度,或是欄
位長度可能太短而無法呈現資料

記錄組織問題
• 代表相同實體的記錄可能在不同程式中以不同的方式組織


固定的字面值
沒有資料字典
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 31
資料數值不一致
資料不一致
說明
不一致的預設值
不同程式指派不同預設值給相同的邏輯資料項目,這會讓其他程式造成問題,而非
建立資料的程式。若預設值沒有指派值(這是合法的),會讓問題更複雜,沒有資
料就無法被發現。
不一致的單位
同一個資訊在不同程式以不同單位來表示。例如,在美國或英國,在比較舊的程式
中重量單位可能是以磅來表示,在比較新的系統中則會以公斤來表示。這類問題對
最近在歐洲使用單一歐元貨幣的情況造成了非常大的問題,既有舊系統都是以各國
的貨幣單位來處理,現在都必須轉換成歐元。
不一致的確認規則
不同程式應用不同資料確認規則,由某一個程式寫入的資料可能會被其他資料拒絕
。這對封存檔案的資料尤其是個問題,因為若資料驗證規則改變,資料可能就無法
更新到封存檔。
不一致的表示語意
程式會以資料項目的表示方式來假設其意義。例如,有些程式可能會假設大寫文字
表示地址。不同的程式可能會使用不同的慣例,因此有時候會拒絕語意合法的資料。
不一致的負值處理
有些程式會拒絕接受負值,因為有些實體必須為正數。其他程式則可能會接受負值,或
是無法認得該資料數值為負值,而將其值轉為正值
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 32
資料轉換


資料再生可能牽扯組織資料結構的資料數值
資料轉換是特別昂貴的。特別是為了那些特殊
目的程式
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 33
資料再生工程流程
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 34
重點整理



系統再生目的是為了改善系統的結構,使其易
懂;並使系統維護工作減少
系統再生包括原始程式碼轉換、反向工程、程
式結構的改善、程式模組化、資料再生
程式碼轉換可將程式語言裡的程式碼自動轉換
成其他語言的程式碼。若原始程式語言遭到淘
汰,程式碼轉換是必要的
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 35
重點整理




反向工程是將軟體設計和規格還原的流程。有
些工具,如瀏覽器,可能被用來支援此流程
程式結構改善能自動替換掉沒有結構性的控制
結構,如gotos和while-loops以及條件述句
流程模組化可將原始程式碼重組成一群相關功
能所組合的模組,使其易懂且易於更改
由於既有舊系統程式資料管理的不一致,導致
資料再生的必要性。資料再生目的是將所有程
式再生,以便使用通用的資料庫
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 28
Slide 36