8.3.1 重構(gòu)
重構(gòu)一般是指通過修改代碼或數(shù)據(jù)以使軟件符合新的要求。重構(gòu)通常并不推翻原有軟件的體系結(jié)構(gòu),主要是改造一些模塊和數(shù)據(jù)結(jié)構(gòu)。重構(gòu)的一些好處如下:
(1)使軟件的質(zhì)量更高,或使軟件順應(yīng)新的潮流(標(biāo)準(zhǔn))。
(2)使軟件的后續(xù)(升級(jí))版本的生產(chǎn)率更高。
(3)降低后期的維護(hù)代價(jià)。
要注意的是,在代碼重構(gòu)和數(shù)據(jù)重構(gòu)之后,一定要重構(gòu)相應(yīng)的文檔。
8.3.2 逆向工程
逆向工程來源于硬件世界。硬件廠商總想弄到競爭對(duì)手產(chǎn)品的設(shè)計(jì)和制造“奧秘”。但是又得不到現(xiàn)成的檔案,只好拆卸對(duì)手的產(chǎn)品并進(jìn)行分析,企圖從中獲取有價(jià)值的東西。我的很多同學(xué)從事集成電路設(shè)計(jì)工作,他們經(jīng)常解剖國外的集成電路,甚至不作分析就原封不動(dòng)地復(fù)制該電路的版圖,然后投入生產(chǎn),并美其名曰“反向設(shè)計(jì)”(Reverse Design)。
軟件的逆向工程在道理上與硬件的相似。但在很多時(shí)候,軟件的逆向工程并不是針對(duì)競爭對(duì)手的,而是針對(duì)自己公司多年前的產(chǎn)品。期望從老產(chǎn)品中提取系統(tǒng)設(shè)計(jì)、需求說明等有價(jià)值的信息。
8.3.3 前向工程
前向工程也稱預(yù)防性維護(hù),由Miller倡導(dǎo)。他把這個(gè)術(shù)語解釋成“為了明天的需要,把今天的方法應(yīng)用到昨天的系統(tǒng)上”。[Pressman 1999]
乍看起來,主動(dòng)去改造一個(gè)目前運(yùn)行得正常的軟件系統(tǒng)簡直就是“惹事生非”。但是軟件技術(shù)發(fā)展如此迅速,與其等待一個(gè)有價(jià)值的產(chǎn)品逐漸老死,還不如主動(dòng)去更新,以獲取更大的收益。其道理就同打預(yù)防性針一樣。所以,預(yù)防性維護(hù)是“吃小虧占大便宜”的事。
8.4 小 結(jié)
大學(xué)科研機(jī)構(gòu)里的軟件維護(hù)工作恐怕是做得最差的了。幾乎每一批新的研究生都會(huì)把畢業(yè)生留下的軟件臭罵一通,然后全部推到重做。到他畢業(yè)該走時(shí),就輪到別人罵他的工作了。如此輪回,最終沒有什么成果留下。
如果希望軟件系統(tǒng)能活下,必須要對(duì)它進(jìn)行維護(hù)。如果希望軟件系統(tǒng)有效益,則必須設(shè)法降低維護(hù)的代價(jià)。










