趙春城
軟件維護(hù)之重要性及方法
趙春城
Point
軟件維護(hù)階段是軟件生存周期中的最后一個(gè)階段,是一個(gè)重要的階段,有很大的挑戰(zhàn)性,迎接這些挑戰(zhàn)需要技巧和方法。文章分析了軟件維護(hù)的幾種類(lèi)型,不同類(lèi)型的維護(hù)工作針對(duì)不同的工作內(nèi)容,所占工作比重也不同,并分析總結(jié)出維護(hù)工作的特征,為管理軟件維護(hù)工作打下基礎(chǔ);分析論證了軟件維護(hù)的重要性,維護(hù)人員實(shí)際做的是幕后英雄的工作,也有很大的挑戰(zhàn)性和成就感;最后,結(jié)合作者在軟件維護(hù)管理和工作中的實(shí)踐,總結(jié)出做好軟件維護(hù)的幾點(diǎn)實(shí)用的實(shí)踐經(jīng)驗(yàn),改變對(duì)維護(hù)工作的認(rèn)識(shí)是做好維護(hù)工作的前提。
軟件維護(hù)是軟件生存期中的最后一個(gè)階段,它既是時(shí)間最長(zhǎng)的一個(gè)階段,也是消耗人力最多的一個(gè)時(shí)期,在整個(gè)軟件生存期內(nèi),這個(gè)階段具有極其重要的意義。軟件維護(hù)主要是指根據(jù)需求變化或硬件環(huán)境的變化對(duì)應(yīng)用程序進(jìn)行部分或全部的修改,使軟件系統(tǒng)在新環(huán)境下適應(yīng)新的業(yè)務(wù)需求,修改時(shí)應(yīng)充分利用源程序和設(shè)計(jì)文檔。
國(guó)內(nèi)軟件項(xiàng)目由于前期需求考慮不周全,業(yè)務(wù)需求變化快,在開(kāi)發(fā)完成進(jìn)入維護(hù)階段后容易產(chǎn)生較多變更。但由于項(xiàng)目規(guī)模不大基于成本和管理等因素考慮,不能完全把運(yùn)營(yíng)、維護(hù)、測(cè)試等團(tuán)隊(duì)和軟硬件嚴(yán)格分開(kāi),外包公司“包打天下”的情況比較普遍。在高度依賴(lài)軟件系統(tǒng)的行業(yè),系統(tǒng)的安全可靠運(yùn)行變得越來(lái)越重要,需要采取有效的措施加強(qiáng)軟件維護(hù)項(xiàng)目的管理。
本文闡述了軟件維護(hù)及其在項(xiàng)目管理中的重要性,結(jié)合軟件工程方法學(xué),并根據(jù)作者在軟件管理和軟件維護(hù)實(shí)踐中積累的經(jīng)驗(yàn),總結(jié)出行之有效的軟件維護(hù)方法。
軟件維護(hù)活動(dòng)類(lèi)型總起來(lái)大概有四種:糾錯(cuò)性維護(hù)、適應(yīng)性維護(hù)、完善性維護(hù)、預(yù)防性維護(hù)。除此四類(lèi)維護(hù)活動(dòng)外,還有一些其它類(lèi)型的維護(hù)活動(dòng),如:支援性維護(hù)(如用戶(hù)的培訓(xùn)等)。
針對(duì)以上幾種類(lèi)型的維護(hù)結(jié)合作者實(shí)際工作,在下面做簡(jiǎn)要闡述。
1.糾錯(cuò)性維護(hù)
糾錯(cuò)性維護(hù)是指在系統(tǒng)開(kāi)發(fā)階段已發(fā)生而系統(tǒng)測(cè)試階段尚未發(fā)現(xiàn)的錯(cuò)誤。這方面的維護(hù)工作量要占整個(gè)維護(hù)工作量的17%~21%。所發(fā)現(xiàn)的錯(cuò)誤有的不太重要,不影響系統(tǒng)的正常運(yùn)行,其維護(hù)工作可隨時(shí)進(jìn)行;而有的錯(cuò)誤非常重要,甚至影響整個(gè)系統(tǒng)的正常運(yùn)行,其維護(hù)工作必須制定計(jì)劃,進(jìn)行修改,并且要進(jìn)行復(fù)查和控制。
這部分的維護(hù)工作實(shí)際上就是在軟件系統(tǒng)運(yùn)行過(guò)程中修改前期沒(méi)有發(fā)現(xiàn)的bug,在修改舊bug過(guò)程中也可能會(huì)引入新的bug,這部分工作以會(huì)成為新的糾錯(cuò)性維護(hù)工作。在軟件開(kāi)發(fā)過(guò)程中加強(qiáng)評(píng)審和測(cè)試,可以有效減少這部分的維護(hù)工作。
2.適應(yīng)性維護(hù)
適應(yīng)性維護(hù)是指使用軟件適應(yīng)信息技術(shù)變化和管理需求變化而進(jìn)行的修改。這方面的維護(hù)工作量占整個(gè)維護(hù)工作量的18%~25%。由于目前計(jì)算機(jī)硬件價(jià)格的不斷下降.各類(lèi)系統(tǒng)軟件層出不窮,人們常常為改善系統(tǒng)硬件環(huán)境和運(yùn)行環(huán)境而產(chǎn)生系統(tǒng)更新?lián)Q代的需求;企業(yè)的外部市場(chǎng)環(huán)境和管理需求的不斷變化也使得各級(jí)管理人員不斷提出新的信息需求。這些因素都將導(dǎo)致適應(yīng)性維護(hù)工作的產(chǎn)生。
3.完善性維護(hù)
完善性維護(hù)是為擴(kuò)充功能和改善性能而進(jìn)行的修改,主要是指對(duì)已有的軟件系統(tǒng)增加一些在系統(tǒng)分析和設(shè)計(jì)階段中沒(méi)有規(guī)定的功能與性能特征。這些功能對(duì)完善系統(tǒng)功能是非常必要的。另外,還包括對(duì)處理效率和編寫(xiě)程序的改進(jìn),這方面的維護(hù)占整個(gè)維護(hù)工作的50%~60%,比重較大,也是關(guān)系到系統(tǒng)開(kāi)發(fā)質(zhì)量的重要方面。完善性維護(hù)是軟件維護(hù)工作中的主要部分,觸發(fā)這類(lèi)維護(hù)工作的常常是用戶(hù)業(yè)務(wù)交易增加了,或是業(yè)務(wù)流程改變了,需要修改軟件;也可能是軟件系統(tǒng)不能再滿(mǎn)足業(yè)務(wù)量要求,需要在性能上有所提高。
4.預(yù)防性維護(hù)
預(yù)防性維護(hù)為了改進(jìn)應(yīng)用軟件的可靠性和可維護(hù)性,為了適應(yīng)未來(lái)的軟硬件環(huán)境的變化,主動(dòng)增加預(yù)防性的新的功能,以使應(yīng)用系統(tǒng)適應(yīng)各類(lèi)變化而不被淘汰。這方面的維護(hù)工作量占整個(gè)維護(hù)工作量的4%左右,是維護(hù)工作中占比最少的一部分工作。
很多人都不愿意做維護(hù)工作,都想做開(kāi)發(fā)者,做首席架構(gòu)師,認(rèn)為那才是軟件“創(chuàng)造者”,而維護(hù)人員不過(guò)是對(duì)軟件的修修補(bǔ)補(bǔ),是一個(gè)無(wú)名的軟件“修理工”。實(shí)際上不管是開(kāi)發(fā)者,還是維護(hù)者,都是軟件工程中的必不可少的組成人員,只不過(guò)后者更傾向是一個(gè)幕后英雄。可以做一個(gè)不太適當(dāng)?shù)谋扔?,維護(hù)工作做不好,軟件系統(tǒng)可能會(huì)英年早逝,維護(hù)工作做好了,軟件系統(tǒng)就會(huì)長(zhǎng)命百歲。
軟件維護(hù)階段作為軟件生存周期中的最后一個(gè)階段,是歷時(shí)時(shí)間最長(zhǎng)的一個(gè)周期,是最消耗人力物力的一個(gè)時(shí)期,維護(hù)階段管理的好壞,工作效率的高低,直接影響著軟件的使用和體驗(yàn),也直接影響維護(hù)成本。有的軟件系統(tǒng)前期開(kāi)發(fā)得很好,文檔也齊全,但由于維護(hù)階段管理不善,經(jīng)過(guò)一段時(shí)間的修改后,文檔與代碼對(duì)不上了,維護(hù)越來(lái)越難,最后甚至變成不可維護(hù)了。有的軟件系統(tǒng)在開(kāi)發(fā)階段可能不是太完美,但如果維護(hù)階段管理得好,軟件系統(tǒng)的維護(hù)性會(huì)越來(lái)越好。
1.改變觀(guān)念,愛(ài)上軟件維護(hù)工作
首先要正常認(rèn)識(shí)軟件維護(hù)在軟件生命周期中的重要性,做維護(hù)工作雖然不能成為臺(tái)前英雄,但卻是一個(gè)實(shí)實(shí)在在的的幕后英雄。實(shí)際上很多所謂的開(kāi)發(fā)人員所做的開(kāi)發(fā)工作就為軟件增加新功能,修改業(yè)務(wù)流程,這其實(shí)就是在做完善性維護(hù)工作。軟件維護(hù)工作同樣存在大量的挑戰(zhàn),同樣需要?jiǎng)?chuàng)造性、靈活性、耐心、訓(xùn)練和良好的溝通。愛(ài)好是學(xué)習(xí)最好的老師,只要喜歡上軟件維護(hù)工作,你就會(huì)在這一領(lǐng)域中發(fā)揮你的聰明才智,收獲屬于你的一片藍(lán)天。
2.建設(shè)高效,穩(wěn)定的維護(hù)團(tuán)隊(duì)是首要任務(wù)
在維護(hù)團(tuán)隊(duì)建設(shè)初期,大家有一個(gè)普遍的認(rèn)識(shí):維護(hù)工作沒(méi)有成就感。不僅枯燥,乏味,而且沒(méi)有技術(shù)含量。程序員最頭疼的就是修改別人寫(xiě)的代碼,而且這些代碼往往沒(méi)有健全的文檔和注釋。這種認(rèn)為“軟件維護(hù)是不入流的技術(shù)人員所做的工作”的思想,使得維護(hù)工作舉步維艱。
為了改變這一現(xiàn)狀,在維護(hù)初期,多次組織和開(kāi)展了項(xiàng)目組的交流會(huì)議和培訓(xùn)工作。必須首先讓大家擺正心態(tài),正視維護(hù)工作。在培訓(xùn)過(guò)程中,重點(diǎn)關(guān)注項(xiàng)目組成員的個(gè)人發(fā)展,以此為起點(diǎn),引導(dǎo)大家從思想上有所轉(zhuǎn)變,把項(xiàng)目組的利益和個(gè)人利益相結(jié)合,達(dá)到共同提高的目的。
3.熟悉軟件系統(tǒng)
熟悉所維護(hù)軟件的功能是非常重要的,也是進(jìn)行軟件維護(hù)工作的第一步。首先閱讀現(xiàn)有的文檔,最好能對(duì)文檔中提到的內(nèi)容親自進(jìn)行測(cè)試。可以從QA部門(mén)找出他們的測(cè)試計(jì)劃文檔,并且照著文檔再把測(cè)試做一遍。掌握現(xiàn)實(shí)中軟件的使用方法,確保你要知道最常用的使用情形。有時(shí)候用戶(hù)會(huì)要求提供一些已經(jīng)存在的功能特性,只是因?yàn)樗麄儾恢儡浖幸呀?jīng)具有了這些功能。
最后只能研究代碼了,試著去理解函數(shù)、模塊和組件在軟件中所扮演的角色。使用調(diào)試器單步執(zhí)行程序中不同的分支,查看當(dāng)代碼的不同部分執(zhí)行時(shí)將會(huì)發(fā)生什么。要把熟悉軟件的體系結(jié)構(gòu)當(dāng)作一個(gè)持續(xù)進(jìn)行的過(guò)程,而不是一次就能完成的事情。當(dāng)你修正bug或添加新的特性時(shí),可能會(huì)對(duì)系統(tǒng)有更好的理解。以上過(guò)程一定要記錄結(jié)果,這樣會(huì)對(duì)維護(hù)工作有巨大幫助。
4.與用戶(hù)溝通
與用戶(hù)溝通是非常重要的。許多軟件開(kāi)發(fā)者都很內(nèi)向,他們寧愿與技術(shù)打交道,也不愿意去與用戶(hù)溝通。然而,軟件就是為了人們使用才開(kāi)發(fā)的。而且在軟件的維護(hù)階段,已經(jīng)有用戶(hù)在使用我們的軟件了。試著建立一種簡(jiǎn)單而有效的機(jī)制用于用戶(hù)提交bug報(bào)告和增加需求,當(dāng)他們提出一個(gè)問(wèn)題時(shí),要及時(shí)給他們反饋,即使你不能馬上解決這個(gè)問(wèn)題,至少讓他們知道你正在處理這個(gè)問(wèn)題,而沒(méi)有怠慢他們。最后,要誠(chéng)實(shí)的告訴他們問(wèn)題的最新解決情況,如果由于某些原因不能滿(mǎn)足他們的需求,也要及時(shí)告訴他們。
5.保留修改記錄
有很多種保留修改記錄的方法。最常見(jiàn)的方式是在每次提交代碼前要進(jìn)行注釋說(shuō)明,還有些人喜歡把修改的記錄列表寫(xiě)到文件的頂部,在電子表格中保留一份修改列表也是很方便的。無(wú)論你采用哪種方式,一定要重視它。一份精確的修改記錄對(duì)成功地維護(hù)工作來(lái)說(shuō)是無(wú)價(jià)的。
6.盡量保持程序原貌,避免重構(gòu)
在軟件維護(hù)的很多時(shí)候,你會(huì)被某些模塊中的代碼弄得很沮喪。真想把這些代碼刪除然后從頭重寫(xiě)。事實(shí)上,無(wú)論何時(shí)我們對(duì)代碼進(jìn)行修改,不管是多么微小的修改,都存在引入新的bug的風(fēng)險(xiǎn)。避免重構(gòu),盡管在開(kāi)發(fā)階段重構(gòu)是一項(xiàng)很有用的技術(shù),但在軟件的維護(hù)階段,它可能只會(huì)給你帶來(lái)麻煩。即使你使用重構(gòu)沒(méi)有破壞任何東西,至少也增加了維護(hù)記錄的復(fù)雜度,使源代碼管理系統(tǒng)中不同版本間的差別變大。
7.重視測(cè)試
測(cè)試永遠(yuǎn)是軟件質(zhì)量保證中重要的一環(huán),當(dāng)你接手軟件的維護(hù)工作時(shí),也許你需要做的第一件編碼任務(wù)是為該軟件寫(xiě)一份回歸測(cè)試集——除非你已經(jīng)有了一份。即使只是對(duì)代碼做了一點(diǎn)修改,但是運(yùn)行整個(gè)回歸測(cè)試卻會(huì)花費(fèi)很長(zhǎng)的時(shí)間。這種情況下,我們可以取出回歸測(cè)試集的一個(gè)子集進(jìn)行一次“冒煙測(cè)試”——只覆蓋了回歸測(cè)試集中的一部分測(cè)試用例的測(cè)試。每次修改后你都可以進(jìn)行“冒煙測(cè)試”,而在周末或晚上進(jìn)行回歸測(cè)試。自動(dòng)測(cè)試在這方面是一個(gè)很好的測(cè)試工具。
軟件的安全運(yùn)行,離不開(kāi)維護(hù)工作的效率和管理質(zhì)量的提高。軟件維護(hù)工作有它獨(dú)特的挑戰(zhàn)性,迎接這些挑戰(zhàn)需要技巧和方法,與開(kāi)發(fā)工作是一樣的。作者全面分析了軟件維護(hù)的類(lèi)型,不同類(lèi)型維護(hù)工作的工作內(nèi)容和工作比重,總結(jié)了做好軟件維護(hù)工作的幾點(diǎn)實(shí)踐經(jīng)驗(yàn)。
(作者單位:中鋁財(cái)務(wù)有限責(zé)任公司)