實(shí)用軟件工程教程 教學(xué)課件 作者 陳雄峰第10章 軟件維護(hù)_第1頁(yè)
實(shí)用軟件工程教程 教學(xué)課件 作者 陳雄峰第10章 軟件維護(hù)_第2頁(yè)
實(shí)用軟件工程教程 教學(xué)課件 作者 陳雄峰第10章 軟件維護(hù)_第3頁(yè)
實(shí)用軟件工程教程 教學(xué)課件 作者 陳雄峰第10章 軟件維護(hù)_第4頁(yè)
實(shí)用軟件工程教程 教學(xué)課件 作者 陳雄峰第10章 軟件維護(hù)_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

第10章軟件維護(hù)教學(xué)要點(diǎn):本章重點(diǎn)介紹軟件維護(hù)的分類(lèi)、組織、過(guò)程和提高可維護(hù)性的方法。要求理解軟件維護(hù)是持續(xù)時(shí)間很長(zhǎng)的一個(gè)階段,需要建立規(guī)范的組織和過(guò)程,才能保證提高維護(hù)工作的效率;必須在整個(gè)軟件開(kāi)發(fā)過(guò)程中嚴(yán)格遵循軟件工程的方法,才能提高軟件的可維護(hù)性;另外,對(duì)原來(lái)不是按規(guī)范開(kāi)發(fā)的但可能還會(huì)使用較長(zhǎng)時(shí)間的軟件,可使用軟件再工程的方法重新建立文檔、數(shù)據(jù)和程序,以便提高軟件的可維護(hù)性、復(fù)用性和演化性。有時(shí)在進(jìn)行軟件再工程之前,可能需要進(jìn)行業(yè)務(wù)過(guò)程再工程。重點(diǎn)掌握:軟件維護(hù)分類(lèi)、組織和過(guò)程;提高軟件可維護(hù)性的方法;業(yè)務(wù)過(guò)程再工程和軟件再工程的過(guò)程。10.1軟件維護(hù)過(guò)程10.1.1軟件維護(hù)的定義什么是軟件維護(hù)是指軟件系統(tǒng)交付使用以后,為了改正錯(cuò)誤或滿(mǎn)足新的需要而修改軟件的過(guò)程國(guó)標(biāo)GB/T11457-95給出如下定義

在一軟件產(chǎn)品交付使用后對(duì)其進(jìn)行修改,以糾正故障、改進(jìn)其性能和其它屬性,或使產(chǎn)品適應(yīng)改變了的環(huán)境四類(lèi)維護(hù)活動(dòng):

改正性維護(hù)適應(yīng)性維護(hù)完善性維護(hù)預(yù)防性維護(hù)四類(lèi)維護(hù)的定義改正性維護(hù):為了改正軟件系統(tǒng)中的錯(cuò)誤,使軟件能夠滿(mǎn)足預(yù)期的正常運(yùn)行狀態(tài)的要求而進(jìn)行的維護(hù)適應(yīng)性維護(hù):為了使軟件適應(yīng)內(nèi)部或外部環(huán)境變化,而去修改軟件的過(guò)程改善性維護(hù):滿(mǎn)足使用過(guò)程中用戶(hù)提出增加新功能或修改已有功能的建議維護(hù)預(yù)防性維護(hù):為了提高軟件的可維護(hù)性、可靠性等,為以后進(jìn)一步改進(jìn)軟件打下良好基礎(chǔ)而修改軟件的活動(dòng)開(kāi)發(fā)和維護(hù)者不應(yīng)等待用戶(hù)的維護(hù)申請(qǐng),可先選擇以下類(lèi)型程序作為預(yù)防性維護(hù)對(duì)象:(1)預(yù)計(jì)若干年內(nèi)將繼續(xù)使用的程序(2)當(dāng)今正成功使用的程序(3)最近的將來(lái)要進(jìn)行大修改和完善的程序四類(lèi)維護(hù)所占比例:其它維護(hù)

5%適應(yīng)性維護(hù)

25%改正性維護(hù)

20%擴(kuò)充與完善性維護(hù)

50%改正性維護(hù)占全部維護(hù)量的比率已從80年代初的20%大幅度下降,90年代初一些公司的產(chǎn)品差錯(cuò)率已接近于零各類(lèi)維護(hù)活動(dòng)的根本目的是延長(zhǎng)軟件生存期其它維護(hù)

4%軟件生存周期軟件誕生計(jì)劃分析設(shè)計(jì)編碼測(cè)試運(yùn)行和維護(hù)(簡(jiǎn)稱(chēng)維護(hù))改善期穩(wěn)定期陳舊期1年-10年2個(gè)月-2年重構(gòu)軟件工程周期10.1.2軟件維護(hù)的特點(diǎn)MP+Ke=(c-d)M

:維護(hù)工作總工作量P:生產(chǎn)性工作量K

:經(jīng)驗(yàn)常數(shù)c:復(fù)雜度d:對(duì)該軟件熟悉程度的度量維護(hù)的工作可劃分成:生產(chǎn)性活動(dòng)如,分析評(píng)價(jià)、修改設(shè)計(jì)、編寫(xiě)程序代碼等;非生產(chǎn)性活動(dòng)如,程序代碼功能理解、數(shù)據(jù)結(jié)構(gòu)解釋、接口特點(diǎn)和性能界限分析等。1.維護(hù)的成本2.維護(hù)中的典型問(wèn)題(1)難以跟蹤軟件版本的進(jìn)化過(guò)程,

軟件的變化未在文檔中反映出來(lái).(2)難以跟蹤軟件的創(chuàng)建過(guò)程.(3)難以讀懂他人程序.(4)無(wú)文檔或不全.(5)軟件人員流動(dòng)性大.(6)設(shè)計(jì)時(shí)未考慮修改需要,修改困難.(7)維護(hù)工作無(wú)吸引力,缺乏成就感.10.1.3軟件維護(hù)的過(guò)程修改決策控制機(jī)構(gòu)維護(hù)申請(qǐng)系統(tǒng)監(jiān)督員配置管理員1.建立維護(hù)組織維護(hù)人員維護(hù)管理員系統(tǒng)監(jiān)督員、修改控制決策機(jī)構(gòu)、維護(hù)管理員、維護(hù)人員和配置管理員等均代表維護(hù)工作的某個(gè)職責(zé)范圍。系統(tǒng)監(jiān)督員一般都是對(duì)程序的某一部分特別熟悉的技術(shù)人員,系統(tǒng)監(jiān)督員可以有其他職責(zé),但應(yīng)具體分管某一個(gè)軟件包。在維護(hù)人員對(duì)程序進(jìn)行修改的過(guò)程中,由配置管理員應(yīng)嚴(yán)格把關(guān),控制修改的范圍,對(duì)軟件配置進(jìn)行審計(jì)。修改控制決策機(jī)構(gòu)、維護(hù)管理員可以是指定的某個(gè)人,也可以是一個(gè)包括管理人員、高級(jí)技術(shù)人員在內(nèi)的小組。

所有人員既然可以是專(zhuān)職的也可以兼職的。2.維護(hù)過(guò)程維護(hù)請(qǐng)求類(lèi)型類(lèi)型嚴(yán)重性評(píng)估后按優(yōu)先級(jí)在隊(duì)列排隊(duì)救火行動(dòng),當(dāng)排在隊(duì)列之首評(píng)估后分類(lèi)評(píng)估后按優(yōu)先級(jí)在隊(duì)列排隊(duì)采取的行動(dòng)通知請(qǐng)求者并說(shuō)明原因按優(yōu)先級(jí)在隊(duì)列中排隊(duì)從維護(hù)請(qǐng)求隊(duì)列之首取出一任務(wù)按SE方法學(xué)規(guī)劃、組織、實(shí)施工程隊(duì)列中還有維護(hù)請(qǐng)求嗎?資源用于開(kāi)發(fā)新的軟件。yn糾錯(cuò)性維護(hù)其他改善性維護(hù)適應(yīng)性維護(hù)拒絕接受并不嚴(yán)重非常嚴(yán)重維護(hù)過(guò)程圖(1)維護(hù)報(bào)告

維護(hù)申請(qǐng)報(bào)告和軟件修改報(bào)告

維護(hù)申請(qǐng)報(bào)告(表)即軟件問(wèn)題報(bào)告,該報(bào)告(表)由要求一項(xiàng)維護(hù)活動(dòng)的用戶(hù)填寫(xiě)。對(duì)改正性維護(hù),用戶(hù)需要將錯(cuò)誤出現(xiàn)的現(xiàn)場(chǎng)信息詳細(xì)描述出來(lái),包括輸入數(shù)據(jù)、錯(cuò)誤清單以及其它有關(guān)材料。對(duì)適應(yīng)性維護(hù)或改善性維護(hù),應(yīng)該給出一個(gè)簡(jiǎn)短的需求規(guī)格說(shuō)明書(shū)。維護(hù)申請(qǐng)被批準(zhǔn)后,維護(hù)申請(qǐng)報(bào)告就成為外部文檔,作為本次維護(hù)的依據(jù)。

軟件修改報(bào)告指明為滿(mǎn)足維護(hù)申請(qǐng)報(bào)告提出的需求所需的工作量、本次維護(hù)活動(dòng)的類(lèi)別、本次維護(hù)請(qǐng)求的優(yōu)先級(jí)、本次修改的背景數(shù)據(jù)。在擬定進(jìn)一步維護(hù)計(jì)劃前,軟件修改報(bào)告要提交給修改決策機(jī)構(gòu),供進(jìn)一步規(guī)劃維護(hù)活動(dòng)使用。

(2)保存維護(hù)記錄維護(hù)過(guò)程中作應(yīng)記錄的數(shù)據(jù)程序標(biāo)識(shí)源程序語(yǔ)句數(shù)目機(jī)器代碼指令條數(shù)..............以收集的數(shù)據(jù)為基礎(chǔ)構(gòu)造維護(hù)數(shù)據(jù)庫(kù),供維護(hù)評(píng)價(jià)使用.(3)評(píng)價(jià)維護(hù)活動(dòng)如果已經(jīng)開(kāi)始保存維護(hù)記錄,可以對(duì)維護(hù)工作做一些定量度量,至少可以從如下7方面進(jìn)行評(píng)價(jià):每次程序運(yùn)行平均失敗的次數(shù);用于每一類(lèi)維護(hù)活動(dòng)的總?cè)藭r(shí)數(shù);平均每個(gè)程序、每種語(yǔ)言、每種維護(hù)類(lèi)型所必需的程序變動(dòng)數(shù);維護(hù)過(guò)程中增加或刪除源語(yǔ)句平均花費(fèi)的人時(shí)數(shù);維護(hù)每種語(yǔ)言平均花費(fèi)的人時(shí)數(shù);一張維護(hù)請(qǐng)求表的平均周轉(zhuǎn)時(shí)間;不同維護(hù)類(lèi)型所占的比例。10.2可維護(hù)性

10.2.1決定可維護(hù)性的因素

軟件可維護(hù)性是指糾正軟件系統(tǒng)出現(xiàn)的錯(cuò)誤和缺陷,以及為滿(mǎn)足新的要求進(jìn)行修改、擴(kuò)充或壓縮的容易程度。決定可維護(hù)性的幾個(gè)因素:可理解性可測(cè)試性可修改性可移植性可重用性文檔可理解性指理解軟件的結(jié)構(gòu)、接口、功能和內(nèi)部過(guò)程的難易程度。提高軟件可理解性的措施包括:采用模塊化的程序結(jié)構(gòu);書(shū)寫(xiě)詳細(xì)正確的文檔;采用結(jié)構(gòu)化程序設(shè)計(jì);書(shū)寫(xiě)源程序的內(nèi)部文檔;使用良好的編程語(yǔ)言;保證具有良好的程序設(shè)計(jì)風(fēng)格等??蓽y(cè)試性指指測(cè)試和診斷軟件(主要指程序)中錯(cuò)誤的難易程度。提高軟件可測(cè)試性的措施包括:采用良好的程序結(jié)構(gòu);書(shū)寫(xiě)詳細(xì)正確的文檔;使用測(cè)試工具和調(diào)試工具;保存以前的測(cè)試過(guò)程和測(cè)試用例等。可修改性指修改軟件(主要指程序)的難易程度。要注意到在修改軟件時(shí)經(jīng)常會(huì)發(fā)生這樣的情況,即修改了程序中某個(gè)錯(cuò)誤的同時(shí)又產(chǎn)生新的錯(cuò)誤(由程序的修改引起的),或者在程序中增加了某個(gè)功能后,導(dǎo)致原先的某些功能不能正常執(zhí)行??梢浦残灾傅氖浅绦蜣D(zhuǎn)移到一個(gè)新的計(jì)算環(huán)境的難易程度。影響軟件可移植性的因素有信息隱蔽原則、模塊獨(dú)立、模塊化、高內(nèi)聚低耦合、良好的程序結(jié)構(gòu)和不用標(biāo)準(zhǔn)文本以外的語(yǔ)句等。一個(gè)可移植的程序應(yīng)具有結(jié)構(gòu)良好、靈活、不依賴(lài)于某一具體計(jì)算機(jī)或操作系統(tǒng)的性能??删S護(hù)性的度量

度量程序可維護(hù)性的7個(gè)特性在各類(lèi)維護(hù)中的側(cè)重點(diǎn)改正性維護(hù)適應(yīng)性維護(hù)完善性維護(hù)可理解性可測(cè)試性可修改性可靠性可移植性可使用性效率10.2.2提高可維護(hù)性的方法

建立明確的軟件質(zhì)量目標(biāo)和優(yōu)先級(jí)使用提高軟件質(zhì)量的技術(shù)和工具進(jìn)行明確的質(zhì)量保證審查選擇可維護(hù)的程序設(shè)計(jì)語(yǔ)言改進(jìn)程序的文檔開(kāi)發(fā)軟件時(shí)考慮到維護(hù)確定質(zhì)量管理目標(biāo)和優(yōu)先級(jí)要求一個(gè)可維護(hù)的程序應(yīng)該是可理解的,可修改的和可測(cè)試的。但是要實(shí)現(xiàn)所有這些目標(biāo),需要付出很大的代價(jià),因?yàn)橛行┚S護(hù)屬性之間是相互促進(jìn)的,例如,可理解性和可測(cè)試性、可理解性和可修改性,另外一些屬性之間則是相互抵觸的,如可重用性和可測(cè)試性。在程序的開(kāi)發(fā)階段就應(yīng)保證軟件具有可理解性、可修改性和可測(cè)試性。在軟件開(kāi)發(fā)的每一個(gè)階段都應(yīng)盡力考慮軟件的可維護(hù)性。使用提高軟件質(zhì)量的技術(shù)與工具要求在進(jìn)行軟件設(shè)計(jì)時(shí),采用如本書(shū)前面所述的模塊化程序設(shè)計(jì)、結(jié)構(gòu)化程序設(shè)計(jì)等程序設(shè)計(jì)方法。在軟件開(kāi)發(fā)過(guò)程中,采用結(jié)構(gòu)化小組,建立主程序小組,實(shí)現(xiàn)嚴(yán)格的組織化管理,職能分工,規(guī)范標(biāo)準(zhǔn)。在對(duì)程序的質(zhì)量進(jìn)行檢測(cè)時(shí),也可以采用分工合作的方法,這些方法會(huì)有效地提高軟件質(zhì)量和檢測(cè)效率,進(jìn)而提高軟件的可維護(hù)性。選擇較好的程序設(shè)計(jì)語(yǔ)言對(duì)軟件維護(hù)有很大的影響。低級(jí)語(yǔ)言(如機(jī)器代碼或匯編語(yǔ)言)程序是一般人很難掌握和理解的,因而很難維護(hù)。高級(jí)語(yǔ)言比低級(jí)語(yǔ)言容易理解,具有更好的可維護(hù)性。在高級(jí)語(yǔ)言中,一些語(yǔ)言可能比另外一些語(yǔ)言更容易理解。例如,COBOL語(yǔ)言比FORTRAN語(yǔ)言更容易理解,因?yàn)镃OBOL的變量接近英語(yǔ);PL/1比COBOL更容易理解,因?yàn)镻L/1有更豐富、更強(qiáng)的語(yǔ)言集等。程序文檔對(duì)提高程序的可理解性有著重要的作用。即使是一個(gè)相對(duì)簡(jiǎn)單的程序,要想有效地,迅速對(duì)它進(jìn)行維護(hù),也需要編制文檔對(duì)它的目的和任務(wù)進(jìn)行解釋。而對(duì)于程序的維護(hù)人員來(lái)說(shuō),要想對(duì)程序編制人員的意圖進(jìn)行重新修改,并對(duì)今后可能出現(xiàn)的變化估計(jì),缺少文檔的幫助也將很難實(shí)現(xiàn)。另一方面,對(duì)于程序文檔一定要能及時(shí)反映程序的變化,否則將對(duì)后續(xù)維護(hù)人員產(chǎn)生誤導(dǎo)。進(jìn)行質(zhì)量保證審查要求除了保證軟件得到適當(dāng)?shù)馁|(zhì)量外,審查還可以用來(lái)檢測(cè)在開(kāi)發(fā)和維護(hù)階段內(nèi)發(fā)生的質(zhì)量變化。一旦檢測(cè)出問(wèn)題來(lái),就可以采取措施來(lái)糾正,以控制不斷增長(zhǎng)的軟件維護(hù)成本,延長(zhǎng)軟件系統(tǒng)的有效生命期。為了保證軟件的可維護(hù)性,有四種類(lèi)型的軟件審查:在檢查點(diǎn)進(jìn)行復(fù)審、驗(yàn)收檢查、周期性地維護(hù)審查、對(duì)軟件包進(jìn)行檢查。在進(jìn)行設(shè)計(jì)評(píng)審時(shí),要從易于維護(hù)和提高設(shè)計(jì)總體質(zhì)量的角度全面評(píng)審數(shù)據(jù)設(shè)計(jì)、總體結(jié)構(gòu)設(shè)計(jì)、過(guò)程設(shè)計(jì)和界面設(shè)計(jì);在進(jìn)行代碼評(píng)審時(shí),要強(qiáng)調(diào)編程風(fēng)格和內(nèi)部文檔;在進(jìn)行測(cè)試時(shí)應(yīng)指出軟件正式交付前應(yīng)進(jìn)行的預(yù)防性維護(hù);在維護(hù)活動(dòng)完成后也要進(jìn)行評(píng)審。10.3再工程什么是再工程?

再工程(SoftwareReengineering)指在逆向工程所獲信息的基礎(chǔ)上修改或重構(gòu)已有的系統(tǒng),產(chǎn)生系統(tǒng)的一個(gè)新版本。再工程是一類(lèi)軟件工程活動(dòng),是一個(gè)工程過(guò)程,它將逆向工程、重構(gòu)和正向工程組合起來(lái),將現(xiàn)存系統(tǒng)重新構(gòu)造為新的形式。

再工程的基礎(chǔ)是系統(tǒng)理解,包括對(duì)運(yùn)行系統(tǒng)、源代碼、設(shè)計(jì)、分析、文檔等的全面理解。但在很多情況下,由于各類(lèi)文檔的丟失,只能對(duì)源代碼進(jìn)行理解,即程序理解。它能夠使我們:增進(jìn)對(duì)軟件的理解;提高軟件自身的可維護(hù)性、復(fù)用性或演化性.為什么要實(shí)施軟件再工程?再工程可幫助降低軟件演化風(fēng)險(xiǎn)再工程可幫助補(bǔ)償軟件投資再工程可使得軟件易于進(jìn)一步變更再工程有廣闊市場(chǎng)再工程擴(kuò)大了CASE工具集再工程是推動(dòng)自動(dòng)軟件維護(hù)的動(dòng)力在軟件復(fù)用中,有問(wèn)題是與現(xiàn)有系統(tǒng)密切相關(guān)的例如:—現(xiàn)有軟件系統(tǒng)如何適應(yīng)當(dāng)前技術(shù)的發(fā)展及需求的變化,采用更易于理解的、適應(yīng)變化的、可復(fù)用的系統(tǒng)軟件構(gòu)架并提煉出可復(fù)用的軟件構(gòu)件?—現(xiàn)存大量的遺產(chǎn)軟件系統(tǒng)(LegacySoftware)由于技術(shù)的發(fā)展,正逐漸退出使用,如何對(duì)這些系統(tǒng)進(jìn)行挖掘、整理,得到有用的軟件構(gòu)件?—已有的軟件構(gòu)件隨著時(shí)間的流逝會(huì)逐漸變得不可使用,如何對(duì)它們進(jìn)行維護(hù),以延長(zhǎng)其生命期,充分利用這些可復(fù)用構(gòu)件?軟件再工程正是解決上述問(wèn)題的主要技術(shù)手段。再工程的概念通常再工程包含:業(yè)務(wù)過(guò)程再工程、軟件再工程業(yè)務(wù)過(guò)程再工程(BPR——BusinessProcessRe-engineering,也稱(chēng)業(yè)務(wù)過(guò)程重組)定義業(yè)務(wù)目標(biāo)、標(biāo)示并評(píng)估現(xiàn)有的業(yè)務(wù)過(guò)程以及修訂業(yè)務(wù)過(guò)程以更好滿(mǎn)足業(yè)務(wù)目標(biāo),這一部分通常由咨詢(xún)公司的業(yè)務(wù)專(zhuān)家完成軟件再工程包含庫(kù)存目錄分析、文檔重構(gòu)、逆向工程、程序和數(shù)據(jù)重構(gòu)以及正向工程。這一部分通常由軟件工程師完成1.業(yè)務(wù)過(guò)程再工程

MichaelHammer的<<HarvardBusinessReview>>是業(yè)務(wù)過(guò)程和計(jì)算管理革命的奠基性文章,Hammer在文章中大力呼吁使用業(yè)務(wù)過(guò)程再工程技術(shù)。不過(guò),到21世紀(jì)初,對(duì)于業(yè)務(wù)過(guò)程再工程的宣傳已經(jīng)不太常見(jiàn),但是這種過(guò)程已經(jīng)在很多公司中得到使用。業(yè)務(wù)過(guò)程是一組“邏輯相關(guān)的任務(wù),它們被執(zhí)行以達(dá)到符合預(yù)定義的業(yè)務(wù)結(jié)果”。業(yè)務(wù)過(guò)程再工程(續(xù))每個(gè)系統(tǒng)都是由不同的子系統(tǒng)構(gòu)成,而子系統(tǒng)還可以再細(xì)分為更細(xì)的子系統(tǒng),從而整個(gè)業(yè)務(wù)呈現(xiàn)一種層次結(jié)構(gòu)業(yè)務(wù)

業(yè)務(wù)系統(tǒng)

業(yè)務(wù)過(guò)程

業(yè)務(wù)子過(guò)程業(yè)務(wù)層次

業(yè)務(wù)過(guò)程再工程(續(xù))在理想情況下,BPR應(yīng)該自頂向下地進(jìn)行,從標(biāo)示主要的業(yè)務(wù)目標(biāo)或子目標(biāo)開(kāi)始,而以生成業(yè)務(wù)(子)過(guò)程中每個(gè)任務(wù)的詳細(xì)的規(guī)約結(jié)束對(duì)一個(gè)業(yè)務(wù)過(guò)程進(jìn)行再工程需要服從一定的原則。Hammer在1990年提出一組原則,用于指導(dǎo)BPR活動(dòng)

圍繞結(jié)果而不是任務(wù)進(jìn)行組織;業(yè)務(wù)過(guò)程再工程(續(xù))讓那些使用過(guò)程結(jié)果的人來(lái)執(zhí)行流程;將信息處理工作合并到生產(chǎn)原始信息的現(xiàn)實(shí)工作中;將地理分散的資源視為好像它們是集中的;連接并行的活動(dòng)以代替集成它們的結(jié)果;在工作完成的地方設(shè)置決策點(diǎn),并將控制加入過(guò)程中;在其源頭一次性獲取數(shù)據(jù)。業(yè)務(wù)過(guò)程再工程(續(xù))業(yè)務(wù)過(guò)程再工程是迭代的。因此業(yè)務(wù)過(guò)程再工程沒(méi)有開(kāi)始和結(jié)束,只有不斷的演化。整個(gè)業(yè)務(wù)過(guò)程再工程模型可用下圖表示業(yè)務(wù)定義過(guò)程標(biāo)識(shí)過(guò)程評(píng)估過(guò)程規(guī)約和設(shè)計(jì)原型實(shí)現(xiàn)求精和實(shí)例化業(yè)務(wù)過(guò)程再工程(續(xù))軟件規(guī)模的擴(kuò)大導(dǎo)致出現(xiàn)軟件的管理、質(zhì)量等一些嚴(yán)重的問(wèn)題,人們開(kāi)始尋找軟件業(yè)中的銀彈。BPR的出現(xiàn),使人們誤以為BPR就是傳說(shuō)中的銀彈。然而經(jīng)過(guò)幾年的夸大宣傳后,BRP陷于嚴(yán)重的批評(píng)中,又被人們認(rèn)為一文不值。因此有必要樹(shù)立一種對(duì)BRP認(rèn)識(shí)的正確觀點(diǎn)。BRP不是銀彈,當(dāng)然BRP確實(shí)可以提高軟件的質(zhì)量。2.軟件再工程在業(yè)務(wù)過(guò)程被分析清楚后,可以對(duì)軟件實(shí)施再工程,整個(gè)軟件再工程過(guò)程模型如下圖

軟件再工程過(guò)程模型代碼重構(gòu)數(shù)據(jù)重構(gòu)正向工程庫(kù)存目錄分析文檔重構(gòu)逆向工程軟件再工程過(guò)程(續(xù))(1)庫(kù)存目錄分析包含關(guān)于每個(gè)應(yīng)用系統(tǒng)的基本信息(例如,應(yīng)用系統(tǒng)的名字,最初構(gòu)建它的日期,已做過(guò)的實(shí)質(zhì)性修改次數(shù),過(guò)去18個(gè)月報(bào)告的錯(cuò)誤,用戶(hù)數(shù)量,安裝它的機(jī)器數(shù)量,它的復(fù)雜程度,文檔質(zhì)量,整體可維護(hù)性等級(jí),預(yù)期壽命,在未來(lái)36個(gè)月內(nèi)的預(yù)期修改次數(shù),業(yè)務(wù)重要程度等)。下述3類(lèi)程序有可能成為預(yù)防性維護(hù)的對(duì)象:預(yù)定將使用多年的程序、當(dāng)前正在成功地使用著的程序和在最近的將來(lái)可能要做重大修改或增強(qiáng)的程序。軟件再工程過(guò)程(續(xù))(2)文檔重構(gòu)建立文檔非常耗費(fèi)時(shí)間,不可能為數(shù)百個(gè)程序都重新建立文檔。如果一個(gè)程序是相對(duì)穩(wěn)定的,而且可能不會(huì)再經(jīng)歷什么變化,那么,讓它保持現(xiàn)狀。為了便于今后的維護(hù),必須更新文檔,但只針對(duì)系統(tǒng)中當(dāng)前正在修改的那些部分建立完整文檔。如果某應(yīng)用系統(tǒng)是完成業(yè)務(wù)工作的關(guān)鍵,而且必須重構(gòu)全部文檔,則仍然應(yīng)該設(shè)法把文檔工作減少到必需的最小量。軟件再工程過(guò)程(續(xù))(3)逆向工程軟件的逆向工程是分析程序以便在比源代碼更高的抽象層次上創(chuàng)建出程序的某種表示的過(guò)程,逆向工程工具從現(xiàn)存的程序代碼中抽取有關(guān)數(shù)據(jù)、體系結(jié)構(gòu)和處理過(guò)程的設(shè)計(jì)信息。軟件再工程過(guò)程(續(xù))逆向工程是把軟件源程序還原為軟件文檔或軟件設(shè)計(jì)的過(guò)程。通過(guò)逆向工程,可以從更高的抽象度來(lái)觀察軟件。抽象度的多少可由抽象的層次,文檔的完整性,工具等因素決定。逆向工程來(lái)源于硬件世界。硬件廠商總想弄到競(jìng)爭(zhēng)對(duì)手產(chǎn)品的設(shè)計(jì)和制造“奧秘”。但是又得不到現(xiàn)成的檔案,只好拆卸對(duì)手的產(chǎn)品并進(jìn)行分析,企圖從中獲取有價(jià)值的東西。軟件的逆向工程在道理上與硬件相似。但在很多時(shí)候,軟件的逆向工程并不是針對(duì)競(jìng)爭(zhēng)對(duì)手的,而是針對(duì)自己公司多年前的產(chǎn)品。期望從老產(chǎn)品中提取系統(tǒng)設(shè)計(jì)、需求說(shuō)明等有價(jià)值的信息。軟件再工程過(guò)程(續(xù))逆向工程(反推工程reverseengineering)從現(xiàn)有軟件恢復(fù)設(shè)計(jì)信息(有用的維護(hù)信息)設(shè)計(jì)的恢復(fù)過(guò)程非結(jié)構(gòu)化、無(wú)文檔的源代碼或目標(biāo)代碼軟件的全部文檔逆向工程源程序目標(biāo)代碼反匯編、反編譯程序分析技術(shù):程序結(jié)構(gòu)分析工具程序功能分析工具

源程序概要設(shè)計(jì)詳細(xì)設(shè)計(jì)概要設(shè)計(jì)需求分析軟件再工程過(guò)程(續(xù))逆向工程導(dǎo)出的信息可分為四個(gè)抽象層次實(shí)現(xiàn)級(jí):包括程序的抽象語(yǔ)法樹(shù)、符號(hào)表等信息;結(jié)構(gòu)級(jí):包括反映程序分量之間相互依賴(lài)關(guān)系的信息,如調(diào)用圖、結(jié)構(gòu)圖等;功能級(jí):包括反映程序段功能及程序段之間關(guān)系的信息;領(lǐng)域級(jí):包括反映程序分量或程序諸實(shí)體與應(yīng)用領(lǐng)域概念之間對(duì)應(yīng)關(guān)系的信息。對(duì)于一項(xiàng)具體的維護(hù)任務(wù),一般不必導(dǎo)出所有抽象級(jí)別上的信息。如代碼重構(gòu)任務(wù),只需獲得實(shí)現(xiàn)級(jí)信息即可。逆向工程恢復(fù)信息的級(jí)別:(1)實(shí)現(xiàn)級(jí):程序的抽象語(yǔ)法樹(shù)、符號(hào)表等信息(2)結(jié)構(gòu)級(jí):反映程序分量之間

相互依賴(lài)關(guān)系的信息,如調(diào)用圖、結(jié)構(gòu)圖等.(3)功能級(jí):反映程序段功能和段間關(guān)系的信息(4)領(lǐng)域級(jí):反映程序分量與應(yīng)用領(lǐng)域概念間對(duì)應(yīng)關(guān)系的信息抽象級(jí)別低高信息的抽象級(jí)別越高,它與代碼距離越遠(yuǎn),通過(guò)逆向工程恢復(fù)的難度越大,自動(dòng)工具支持的可能性變小軟件再工程過(guò)程(續(xù))逆向工程中用于恢復(fù)信息的方法主要有四類(lèi)用戶(hù)指導(dǎo)下的搜索與變換:這類(lèi)方法用于導(dǎo)出實(shí)現(xiàn)級(jí)和結(jié)構(gòu)級(jí)信息。這類(lèi)方法一般可產(chǎn)生模塊的略圖(outline)、流程圖和交叉訪問(wèn)表。變換方法:這類(lèi)方法可用于恢復(fù)實(shí)現(xiàn)級(jí)、結(jié)構(gòu)級(jí)和功能級(jí)的信息。這類(lèi)方法可用工具實(shí)現(xiàn),如靜態(tài)分析,調(diào)用圖、控制流圖生成等。軟件再工程過(guò)程(續(xù))基于領(lǐng)域知識(shí)的方法:這類(lèi)方法用于恢復(fù)功能級(jí)和領(lǐng)域級(jí)信息。領(lǐng)域知識(shí)用規(guī)則庫(kù)表示,用已確定或假定的領(lǐng)域概念與代碼之間的對(duì)應(yīng)關(guān)系,推導(dǎo)進(jìn)一步的假設(shè),最后導(dǎo)出程序的功能。這類(lèi)方法的不確定性很大,目前尚無(wú)成熟的工具。鉛板恢復(fù):這類(lèi)方法僅適用于推導(dǎo)實(shí)現(xiàn)級(jí)和結(jié)構(gòu)級(jí)信息。這類(lèi)方法用于識(shí)別程序設(shè)計(jì)“鉛板”或公共結(jié)構(gòu),鉛板既可是一個(gè)簡(jiǎn)單算法(如二變量互換),也可是相對(duì)復(fù)雜的成分(如冒泡排序)。軟件再工程過(guò)程(續(xù))根據(jù)源程序的類(lèi)別不同,逆向工程還可以分為:對(duì)用戶(hù)界面的逆向工程、對(duì)數(shù)據(jù)的逆向工程和對(duì)理解的逆向工程?,F(xiàn)代的軟件一般都擁有華麗的界面,當(dāng)準(zhǔn)備對(duì)舊的軟件進(jìn)行用戶(hù)界面的逆向工程時(shí),必須先理解舊軟件的用戶(hù)界面,并且刻畫(huà)出界面的結(jié)構(gòu)和行為。軟件再工程過(guò)程(續(xù))對(duì)數(shù)據(jù)的逆向工程:由于程序中存在許多不同種類(lèi)的數(shù)據(jù),例如內(nèi)部的數(shù)據(jù)結(jié)構(gòu),以及底層的數(shù)據(jù)庫(kù)和外部的文件。其中對(duì)內(nèi)部的數(shù)據(jù)結(jié)構(gòu)的逆向工程可以通過(guò)檢查程序代碼以及變量來(lái)完成;而對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)的重構(gòu)可通過(guò)建立一個(gè)初始的對(duì)象模型,確定侯選鍵,精化實(shí)驗(yàn)性的類(lèi),定義一般化,以及發(fā)現(xiàn)關(guān)聯(lián)來(lái)完成。對(duì)理解的逆向工程,為了去理解過(guò)程的抽象,代碼的分析必須在不同的層次進(jìn)行:系統(tǒng),程序,部件,模式和語(yǔ)句。對(duì)于大型系統(tǒng),逆向工程通常用半自動(dòng)化的方法來(lái)完成。軟件再工程過(guò)程(續(xù))(4)代碼重構(gòu)某些老程序具有比較完整、合理的體系結(jié)構(gòu),但是,個(gè)體模塊的編碼方式卻是難于理解、測(cè)試和維護(hù)的。在這種情況下,可以重構(gòu)可疑模塊的代碼。為了完成代碼重構(gòu)活動(dòng),首先用重構(gòu)工具分析源代碼,標(biāo)注出和結(jié)構(gòu)化程序設(shè)計(jì)概念相違背的部分。然后重構(gòu)有問(wèn)題的代碼(此項(xiàng)工作可自動(dòng)進(jìn)行

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論