饒建農(nóng) 湯杰
摘要:隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,軟件系統(tǒng)的更新就成了用戶必須要面對(duì)的問題。該課題探討運(yùn)用軟件流程再造方法如何在原有系統(tǒng)的基礎(chǔ)上開發(fā)新的系統(tǒng)。實(shí)驗(yàn)結(jié)果表明,如果編程語言間在結(jié)構(gòu)和內(nèi)置函數(shù)上存在很大差異,那么從原有的系統(tǒng)中可以獲得其所描述的程序功能。
關(guān)鍵詞:遺贈(zèng)系統(tǒng);軟件流程再造;逆向工程;計(jì)算機(jī)輔助軟件工程(CASE);統(tǒng)一建模語言(UML)
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)20-4875-04
Software Process Reengineering Based on Different Languages
RAO Jian-nong, TANG Jie
(Department of Computer Science, Shaozhou Normal Branch School, Shaoguan University, Shaoguan 512026, China)
Abstract: With the rapid development of computer technology, the software system updates became users have to face problems.This top ic discussed using the software process reengineering method in the original system how developed on the base of the new system.The ex perimental results show that, if the programming language in the structure and internal function differ greatly from the original, so the sys tem can obtain the described procedure function.
Key words: legacy systems; software re-engineering; reverse engineering; computer-aided software engineering(CASE); unified modeling language(UML)
1介紹
許多公司,存在著舊的軟件系統(tǒng)仍然提供必要的商業(yè)服務(wù)的現(xiàn)象。這種系統(tǒng)被稱為遺贈(zèng)系統(tǒng)。這種遺贈(zèng)系統(tǒng)的維護(hù)帶來了三個(gè)顯著的問題:系統(tǒng)通常由不同的程序員調(diào)整過;系統(tǒng)的調(diào)整通常是每過一段時(shí)間之后進(jìn)行的,可能是10到20年;多數(shù)情況下都缺少系統(tǒng)文件。
因此,對(duì)于個(gè)人或者公司來說完整理解整個(gè)系統(tǒng)是不可能的。當(dāng)這些問題在未來達(dá)到某種程度,當(dāng)維護(hù)成本昂貴或者太復(fù)雜的時(shí)候,系統(tǒng)就需要更新。
當(dāng)更新遺贈(zèng)系統(tǒng)時(shí),有三種方法可供選擇:
第一種叫作“cold turkey”,也就是拋棄舊的系統(tǒng),開發(fā)新的系統(tǒng)。
第二種就是在不改變舊系統(tǒng)功能的基礎(chǔ)上,重新組織和構(gòu)建系統(tǒng)。這項(xiàng)工作被稱為軟件流程再造。
第三種觀點(diǎn)就是在舊系統(tǒng)仍然使用的過程中,按照逐漸增加的功能慢慢地重建系統(tǒng)。這種觀點(diǎn)被稱為“chicken little”。
第二種方法是優(yōu)先考慮的,因?yàn)樗啾乳_發(fā)一項(xiàng)全新的系統(tǒng)有兩個(gè)主要的優(yōu)勢(shì):減少了風(fēng)險(xiǎn)和成本。
2軟件流程再造的概念
2.1軟件流程再造的介紹
改變軟件系統(tǒng),不改變其功能,稱為軟件再造。軟件再造和通常的軟件開發(fā)比較,不同的是早期開發(fā)的系統(tǒng)被用作系統(tǒng)再造過程中的一種輸入,如圖1所示。
圖1軟件流程再造過程
軟件改造主要是使系統(tǒng)具有更強(qiáng)的可維護(hù)性和穩(wěn)定性,以此來延長(zhǎng)軟件的使用壽命,減少維護(hù)成本。有時(shí)軟件改造由于新的要求是必須要進(jìn)行的,而這一要求就不包括在原系統(tǒng)內(nèi)。新的要求比如說有:改變?cè)邢到y(tǒng)運(yùn)行環(huán)境或者需要執(zhí)行新的功能。
現(xiàn)有的系統(tǒng)可以用于產(chǎn)生軟件規(guī)格,以此來理解新系統(tǒng)。同時(shí)現(xiàn)有的系統(tǒng)也可用于轉(zhuǎn)換系統(tǒng)的的運(yùn)行語言(比如說從C++到Java)。由于系統(tǒng)可維護(hù)性和可檢驗(yàn)性需求的日益增長(zhǎng),軟件流程再造領(lǐng)域變得越來越重要。
2.2軟件流程再造的過程
軟件再造的目的是建立一個(gè)過程,在此過程中,幾個(gè)階段是可以定義的。軟件再造將這一過程分解成五個(gè)關(guān)鍵的階段:初步清單分析、封裝、應(yīng)用分析、產(chǎn)品標(biāo)準(zhǔn)化和設(shè)計(jì)恢復(fù)。
2.2.1初步清單分析
在軟件改造進(jìn)行之前,對(duì)于現(xiàn)有系統(tǒng)的目錄分析必須進(jìn)行。這樣做是為了確定整個(gè)系統(tǒng)再造結(jié)果的范圍。在這個(gè)階段中,開發(fā)系統(tǒng)組件的詳細(xì)目錄是不必要的。主要目的是測(cè)定在這一過程中軟件應(yīng)當(dāng)達(dá)到的程度。所需系統(tǒng)的需求規(guī)格說明也將在這一階段產(chǎn)生。
2.2.2封包
封包對(duì)流程改造是必要的,因?yàn)樗_定所有的系統(tǒng)是被識(shí)別的。這一階段將指導(dǎo)系統(tǒng)識(shí)別所有可能出現(xiàn)的組件,同時(shí)也會(huì)發(fā)現(xiàn)不是系統(tǒng)組成部分的組件,可能使用到軟件工具,可能產(chǎn)生自動(dòng)分析。使用手工和自動(dòng)分析相結(jié)合的分析方式將會(huì)在最短的時(shí)間內(nèi)提供最精確的詳細(xì)目錄數(shù)量。
2.2.3應(yīng)用分析
當(dāng)應(yīng)用分析執(zhí)行的時(shí)候,有兩個(gè)屬性需要考慮:支持系統(tǒng)功能需求的能力;系統(tǒng)的設(shè)計(jì)和使用技術(shù)。這個(gè)階段為流程再造過程中什么需要重點(diǎn)改進(jìn)提供了洞察力,主要目的是更好地了解功能實(shí)現(xiàn)和如何提高系統(tǒng)的技術(shù)質(zhì)量。
2.2.4產(chǎn)品標(biāo)準(zhǔn)化
產(chǎn)品標(biāo)準(zhǔn)化把一個(gè)現(xiàn)有的系統(tǒng)轉(zhuǎn)變成一個(gè)執(zhí)行起來更簡(jiǎn)單的系統(tǒng),在功能和技術(shù)方面更接近于現(xiàn)有系統(tǒng)。通過這一階段,軟件在維護(hù)和運(yùn)行方面變得更有效,系統(tǒng)對(duì)于來自于內(nèi)外部的壓力也會(huì)變得更敏感。舉例來講,當(dāng)系統(tǒng)的功能和技術(shù)方面得到完善的時(shí)候,合并系統(tǒng)中新的組件也變得更容易。
產(chǎn)品標(biāo)準(zhǔn)化的主要目的是通過不同的程序員使用不同的運(yùn)行方式和技術(shù),經(jīng)過幾年的系統(tǒng)更新之后完善現(xiàn)有系統(tǒng)。
2.2.5設(shè)計(jì)恢復(fù)
改造過程的最后階段就是設(shè)計(jì)恢復(fù)。設(shè)計(jì)恢復(fù)通過利用合并元素轉(zhuǎn)變成CASE工具的可能性,抓取現(xiàn)有系統(tǒng)設(shè)計(jì)中的元素。這一階段提供了正確地驗(yàn)證系統(tǒng)功能和技術(shù)方面的能力。產(chǎn)生于這一階段的文件描述了系統(tǒng)的幾個(gè)功能:系統(tǒng)的主要組成部分、提供系統(tǒng)功能的技術(shù)、使用該系統(tǒng)的應(yīng)用程序、與其他系統(tǒng)的接口和系統(tǒng)的體系結(jié)構(gòu)。
2.3軟件再造過程中的活動(dòng)
在軟件流程再造的每一個(gè)階段,合并活動(dòng)是可能的。有五個(gè)可以解釋和研究的活動(dòng):源代碼轉(zhuǎn)化、運(yùn)行結(jié)構(gòu)升級(jí)、運(yùn)行模塊、數(shù)據(jù)再造和逆向工程。
2.3.1源代碼轉(zhuǎn)化
源代碼轉(zhuǎn)化是軟件再造中最簡(jiǎn)單的形式。源代碼轉(zhuǎn)化的原因可能是缺乏維護(hù)和支持系統(tǒng)的專業(yè)化人員,或者是缺乏對(duì)硬件平臺(tái)的更新。源代碼轉(zhuǎn)化可以分成兩個(gè)不同的種類,源代碼翻譯和源代碼轉(zhuǎn)換。
2.3.2運(yùn)行結(jié)構(gòu)升級(jí)
由于計(jì)算機(jī)硬件的限制,內(nèi)存的最優(yōu)化成為許多計(jì)算機(jī)程序有復(fù)雜結(jié)構(gòu)的原因之一。程序結(jié)構(gòu)不足的另一個(gè)原因是程序員在軟件開發(fā)中有限的知識(shí)和技術(shù)。因此,程序結(jié)構(gòu)的完善,可以使程序更容易被理解和維護(hù)。
程序結(jié)構(gòu)的完善可以自動(dòng)完成。通過自動(dòng)分析可以生成一張圖表,顯示程序運(yùn)行的流程。簡(jiǎn)化和轉(zhuǎn)換技術(shù)可以應(yīng)用到生成的圖表而不改變其語義。通過這種技術(shù),不能使用的代碼被識(shí)別出來并被刪除。一旦簡(jiǎn)化完成,新的系統(tǒng)應(yīng)運(yùn)而生。
2.3.3程序模塊化
程序模塊化是重組程序的過程,因此相關(guān)的程序部分被聚集在模塊或者對(duì)象中。程序模塊化通過檢測(cè)代碼手工完成。不同的工具能夠幫助實(shí)現(xiàn)瀏覽和可視化,但是自動(dòng)化的過程實(shí)際上是不可能的。
程序模塊化的實(shí)現(xiàn)是為了簡(jiǎn)化維護(hù)工作,提高程序的理解,加強(qiáng)程序各部分之間的耦合。在程序模塊化的過程中可能產(chǎn)生幾種不同類型的模塊,包括:數(shù)據(jù)抽象化、硬件模塊、功能模塊和程序支持模塊。
2.3.4數(shù)據(jù)流程再造
數(shù)據(jù)流程再造是在系統(tǒng)中分析和重新組織數(shù)據(jù)結(jié)構(gòu)的過程(有時(shí)是數(shù)據(jù)評(píng)價(jià)),使得系統(tǒng)更容易理解。這種再造可能是從一個(gè)文件為基礎(chǔ)的系統(tǒng)轉(zhuǎn)換到一個(gè)數(shù)據(jù)管理為基礎(chǔ)的系統(tǒng)或從一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)轉(zhuǎn)換到另外一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)。軟件的改變可能影響到數(shù)據(jù)存儲(chǔ),數(shù)據(jù)格式和數(shù)據(jù)值。數(shù)據(jù)再造的目的是建立易于管理的數(shù)據(jù)環(huán)境。
2.3.5逆向工程
逆向工程是正向工程的相反表達(dá)。正向工程通常被認(rèn)為是從高級(jí)理論說明向低級(jí)詳細(xì)執(zhí)行轉(zhuǎn)換的過程。逆向工程的主要目的是提高軟件系統(tǒng)的可維護(hù)性和可理解性。當(dāng)從一個(gè)系統(tǒng)的源代碼中提煉出一個(gè)系統(tǒng)的設(shè)計(jì)和規(guī)格時(shí),可以使用逆向工程。
通過自動(dòng)化分析搜集來的注釋和信息儲(chǔ)存在系統(tǒng)信息儲(chǔ)備庫(kù)中。信息儲(chǔ)備庫(kù)用來生成不同種類的文件,比如程序和數(shù)據(jù)結(jié)構(gòu)圖表。當(dāng)系統(tǒng)設(shè)計(jì)文件生成之后,仍然可以向信息儲(chǔ)備庫(kù)中增加新的信息。這樣做是為了重新生成系統(tǒng)規(guī)格。
逆向工程和正向工程可以有相同的步驟,但步驟的順序是相反的,如圖2所示。
圖2逆向工程與正向工程
2.4技術(shù)支持
軟件設(shè)計(jì)中最常用的輔助技術(shù)是計(jì)算機(jī)輔助軟件工程(CASE)。逆向工程學(xué)正快速的成為未來CASE工具使用中重要的組成部分。CASE工具為設(shè)計(jì)和文件編制傳統(tǒng)結(jié)構(gòu)編程技術(shù),提供了自動(dòng)的方法。CASE工具可被用于從源代碼中生成UML圖表,同時(shí)從UML圖表中產(chǎn)生新的源代碼。
CASE工具在軟件再造過程中的作用是很重要的,結(jié)合手工分析源代碼,能提高生產(chǎn)力,保證系統(tǒng)的高質(zhì)量。
3實(shí)例分析與實(shí)施
該文以某公司開發(fā)的電子鎖系統(tǒng)作為研究用例。該系統(tǒng)用磁卡和智能卡作為電子鑰匙,是用基于MS-DOS系統(tǒng)的C語言開發(fā)的。由于計(jì)算機(jī)技術(shù)的發(fā)展,現(xiàn)有系統(tǒng)已經(jīng)不能滿足市場(chǎng)的需要,因此要再造系統(tǒng)。新系統(tǒng)用Visual Basic語言開發(fā),運(yùn)行在Win dows平臺(tái)之上,新設(shè)計(jì)模型用UML開發(fā)。
3.1目的
案例研究的主要目的是獲得對(duì)現(xiàn)有系統(tǒng)的更多認(rèn)識(shí),同時(shí)發(fā)現(xiàn)代碼和新系統(tǒng)重新執(zhí)行的重要算法。檢查和評(píng)估現(xiàn)有系統(tǒng)的功能導(dǎo)向結(jié)構(gòu)是為了在面向?qū)ο蟮姆绞较略O(shè)計(jì)新的結(jié)構(gòu)。這樣能夠發(fā)現(xiàn)和檢查重要文件的信息,同時(shí)刪除不相關(guān)的文件。
3.2實(shí)施
為了實(shí)現(xiàn)案例研究的目的,采用了2.2節(jié)中所提到的軟件流程再造的方法。
實(shí)施包括對(duì)帶有文件描述和組件圖表的現(xiàn)有系統(tǒng)的概述。對(duì)現(xiàn)有系統(tǒng)的進(jìn)一步分析也包括刪除舊文件,調(diào)查剩余文件。最后,解決新設(shè)計(jì)的開發(fā)和完成對(duì)UML圖表的解釋。
3.2.1文件描述
經(jīng)過初步目錄分析,獲得現(xiàn)有系統(tǒng)的基本情況:文件數(shù)量和文件種類,同時(shí)產(chǎn)生需求規(guī)格。
3.2.2組件圖表
為了獲得對(duì)相關(guān)文件如何連接的理解,可以使用組件圖表。組件是程序中的獨(dú)立部分,它的任務(wù)就是處理邏輯上連接起來的數(shù)據(jù)。
在本案例中,為了更好的理解如何設(shè)計(jì)程序,采用了UML圖表,如圖3所示。
在UML模塊中,管理員和用戶的身份是可識(shí)別的。管理員有權(quán)增加,刪除和更新與系統(tǒng)連接的數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)儲(chǔ)存所有來自于系統(tǒng)的相關(guān)數(shù)據(jù)。用戶得到所有卡片或者卡片組和編碼卡片的信息,但是用戶無權(quán)增加,刪除和更新數(shù)據(jù)庫(kù)。
3.2.3數(shù)據(jù)庫(kù)的應(yīng)用
為了了解所有文檔數(shù)據(jù),對(duì)程序結(jié)構(gòu)進(jìn)行了改進(jìn),同時(shí)使用數(shù)據(jù)流程改造工程。
數(shù)據(jù)庫(kù)用于儲(chǔ)存文檔數(shù)據(jù)信息。這些信息來源于源代碼和數(shù)據(jù)文件。采用數(shù)據(jù)庫(kù)后,獲得和保存信息變得更容易、更有效,而且信息更具結(jié)構(gòu)化,也更容易了解系統(tǒng)的總體內(nèi)容。此外,通用函數(shù)連接到數(shù)據(jù)庫(kù)也更容易。這就減少了系統(tǒng)增加文件時(shí),改變?cè)创a的需要。
3.3過程分析
根據(jù)節(jié)2所述,軟件流程再造的方法分成不同的階段和行為。這些階段和行為在再造的過程有些被使用,有些沒被使用,如表1所示。
表1研究案例中的階段和行為
4結(jié)論
實(shí)驗(yàn)表明:軟件流程再造是一個(gè)非常有潛力的領(lǐng)域。流程再造不僅僅是翻譯源代碼,更主要的是更新程序的功能。理論上講,從功能導(dǎo)向的程序語言轉(zhuǎn)換到主體導(dǎo)向的程序語言是非常復(fù)雜的,甚至是不可能的,除了語法上的不同,還有完全不同的程序結(jié)構(gòu)。
通過案例的實(shí)施,達(dá)到了兩個(gè)目的:第一個(gè)就是軟件更新到什么程度要重寫新的代碼;第二個(gè)目的,語言轉(zhuǎn)換時(shí)產(chǎn)生問題的原因——大量的源代碼被刪除。
另外,暴露出來的其他問題:如何鑒別系統(tǒng)中重要的部分、如何獲得非結(jié)構(gòu)系統(tǒng)的整體圖表、如何決定系統(tǒng)文件是否可靠。
參考文獻(xiàn):
[1] Ian Sommerville.Software Engineering[M].6th ed.Addison-Wesley,2001.
[2] Howard Wilbert Miller.Legacy Software Systems[M].Digital Press,1998
[3] Linda Wills,Philip Newcomb.Reverse Engineering[M].Kluwer academic publishers,1996.
[4] John W Satzinger,Robert B Jackson,Stehpen D Burd.Systems Analysis and Design in a Changing World[M].北京:機(jī)械工業(yè)出版社,2004.
[5]鄭人杰,殷人昆,陶永雷.實(shí)用軟件工程[M].北京:清華大學(xué)出版社,1997.