彭漢國(guó) 張淵博 雷波
摘 要:軟件維護(hù)是軟件生命周期的最后一個(gè)階段,并且軟件維護(hù)的成本大約占總開(kāi)發(fā)成本70%以上,軟件維護(hù)的巨大成本使得軟件工程研究人員不得不對(duì)它更加重視。本文以軟件工程原理為基礎(chǔ),分析了軟件維護(hù)的類(lèi)型和影響因素,提出了一些軟件維護(hù)策略和未來(lái)的努力目標(biāo)。
關(guān)鍵詞:軟件維護(hù);軟件工程;維護(hù)策略
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
1 引言(Introduction)
隨著時(shí)間的推移和計(jì)算機(jī)技術(shù)的飛速發(fā)展,現(xiàn)代社會(huì)產(chǎn)生了越來(lái)越多的軟件,這些軟件都面臨著維護(hù)和更新?lián)Q代,軟件維護(hù)水平的優(yōu)劣直接影響著軟件產(chǎn)品的生命周期[1]。軟件產(chǎn)品開(kāi)發(fā)結(jié)束后,該產(chǎn)品就進(jìn)入了運(yùn)行維護(hù)階段,在這個(gè)階段中常常由于各種原因需要對(duì)已完成的軟件產(chǎn)品根據(jù)用戶(hù)和實(shí)際中工作的新需求進(jìn)行修改和維護(hù),軟件維護(hù)過(guò)程的工作量非常大,據(jù)統(tǒng)計(jì),軟件維護(hù)成本已經(jīng)遠(yuǎn)遠(yuǎn)超過(guò)了系統(tǒng)的軟件開(kāi)發(fā)成本,占系統(tǒng)總投資的70%以上,為了使軟件的壽命更長(zhǎng),這方面的工作量會(huì)越來(lái)越高,維護(hù)成本也會(huì)逐步增加,因此軟件維護(hù)活動(dòng)的研究越來(lái)越受到人們的關(guān)注,本文根據(jù)軟件工程原理和實(shí)際應(yīng)用經(jīng)驗(yàn)總結(jié)出計(jì)算機(jī)軟件維護(hù)方法策略。
2 軟件維護(hù)分析(Analysis of software maintenance)
軟件維護(hù)活動(dòng)可以從管理和技術(shù)兩個(gè)方面進(jìn)行,其目的就是要確保軟件維護(hù)活動(dòng)能夠在嚴(yán)格的控制之下進(jìn)行,從而實(shí)現(xiàn)軟件的功能和性能及時(shí)、準(zhǔn)確的滿(mǎn)足用戶(hù)的要求[2]。
2.1 軟件維護(hù)的類(lèi)型
根據(jù)軟件維護(hù)的不同目的可以將軟件維護(hù)分為四類(lèi):適應(yīng)性維護(hù)、完善性維護(hù)、糾錯(cuò)性維護(hù)、預(yù)防性維護(hù)或再工程。
(1)適應(yīng)性維護(hù):軟件都有自己運(yùn)行的硬件環(huán)境和軟件環(huán)境,在使用過(guò)程中,硬件環(huán)境、軟件環(huán)境、數(shù)據(jù)環(huán)境(如數(shù)據(jù)庫(kù)、數(shù)據(jù)輸入/輸出方式、數(shù)據(jù)存儲(chǔ)介質(zhì))都是可能發(fā)生變化的。為使軟件適應(yīng)這種變化,而去修改軟件的過(guò)程就叫做適應(yīng)性維護(hù)。
(2)完善性維護(hù):在軟件的使用過(guò)程中,用戶(hù)往往會(huì)對(duì)軟件提出新的功能與性能要求,為了滿(mǎn)足這些要求,需要修改或再開(kāi)發(fā)軟件。這種以擴(kuò)充軟件功能、增強(qiáng)軟件性能、改進(jìn)加工效率而進(jìn)行的維護(hù)叫做完善性維護(hù)。完善性維護(hù)是維護(hù)工作中最多的類(lèi)型,占維護(hù)工作的50%左右。
(3)糾錯(cuò)性維護(hù):在開(kāi)發(fā)過(guò)程中要生成100%可靠無(wú)誤的軟件通常是不太現(xiàn)實(shí)的,在軟件交付使用后,必然會(huì)有一部分隱藏的錯(cuò)誤被帶到到運(yùn)行階段,這些隱藏下來(lái)的錯(cuò)誤在某些特定的使用環(huán)境下就會(huì)暴露出來(lái)。為了識(shí)別和糾正軟件錯(cuò)誤、改正軟件性能上的缺陷、排除實(shí)施中的錯(cuò)誤使用,應(yīng)當(dāng)進(jìn)行的診斷和改正錯(cuò)誤的過(guò)程就叫做改正性維護(hù)。
(4)預(yù)防性維護(hù)或再工程:即修改軟件,為將來(lái)的維護(hù)活動(dòng)預(yù)先做準(zhǔn)備。
在實(shí)際的維護(hù)工作中,軟件維護(hù)類(lèi)型并不是相會(huì)獨(dú)立單獨(dú)進(jìn)行的,而是各種維護(hù)類(lèi)型交織在一起進(jìn)行的。例如在引入新的功能模塊進(jìn)行適應(yīng)性維護(hù)的過(guò)程中,就有可能引入不明顯的程序錯(cuò)誤,這就需要跟蹤和處理這些程序錯(cuò)誤進(jìn)行糾錯(cuò)性維護(hù)。類(lèi)似的在進(jìn)行完善性維護(hù)的過(guò)程中,可能需要重新調(diào)整代碼結(jié)構(gòu)從而引入了預(yù)防性維護(hù)。不同類(lèi)型的軟件維護(hù)之間的關(guān)系,如圖1所示。
2.2 軟件維護(hù)的影響因素
為了控制軟件的維護(hù)活動(dòng),提高軟件的維護(hù)效率,需分析影響軟件維護(hù)的因素。
(1)工作繁瑣。軟件程序的任何一處改動(dòng),都可能影響到整個(gè)軟件系統(tǒng),并且這種影響只有在軟件運(yùn)行中遇到問(wèn)題的時(shí)候才能顯現(xiàn),若要避免這種情況的發(fā)生,就需要在改動(dòng)后進(jìn)行大量的檢測(cè)工作,這就無(wú)疑極大的增加了維護(hù)的工作量。
(2)系統(tǒng)規(guī)模。軟件規(guī)模大小直接影響維護(hù)工作量,系統(tǒng)規(guī)模越大,讀懂和理解就越困難,系統(tǒng)規(guī)模主要由程序模塊數(shù)、數(shù)據(jù)文件數(shù)、源代碼行數(shù)等因素衡量。
(3)系統(tǒng)使用年限。使用年限長(zhǎng)的系統(tǒng)因?yàn)橐呀?jīng)進(jìn)行了多次的維護(hù),參與維護(hù)的人員也不斷變化,因此系統(tǒng)的結(jié)構(gòu)更亂,如果沒(méi)有完備的系統(tǒng)說(shuō)明和設(shè)計(jì)文檔,系統(tǒng)維護(hù)就更加困難。
(4)時(shí)間緊迫。通常軟件錯(cuò)誤只有在運(yùn)行中才能被發(fā)現(xiàn),用戶(hù)往往是在時(shí)間緊迫的情況下請(qǐng)求維護(hù)的,這就要求維護(hù)人員必須在有限的時(shí)間內(nèi)發(fā)現(xiàn)問(wèn)題和解決問(wèn)題。
(5)人員變動(dòng)。軟件行業(yè)人員流動(dòng)性比較大,當(dāng)起初的開(kāi)發(fā)人員和維護(hù)人員離開(kāi)后,會(huì)導(dǎo)致維護(hù)團(tuán)隊(duì)對(duì)軟件熟悉程度的顯著降低,甚至造成軟件的徹底報(bào)廢。
(6)文檔同步。軟件開(kāi)發(fā)人員不斷修改需求和設(shè)計(jì)過(guò)程中,忽略了文檔的實(shí)時(shí)更新,造成交付的文檔與實(shí)際軟件不一致,使得今后對(duì)軟件進(jìn)行維護(hù)時(shí)出現(xiàn)誤解。
3 軟件維護(hù)策略(Software maintenance stratery)
通常情況下,軟件維護(hù)工作要比開(kāi)發(fā)工作困難得多,因?yàn)槭紫染S護(hù)人員必須用較多的時(shí)間理解別人編寫(xiě)的程序和文檔,并且對(duì)系統(tǒng)的修改不能影響程序的正確性,其次整個(gè)維護(hù)工作通常必須在規(guī)定得很短時(shí)間內(nèi)完成[3]。在實(shí)際的維護(hù)工作中我們將軟件工程原理運(yùn)用到實(shí)際的軟件維護(hù)活動(dòng)中,經(jīng)過(guò)長(zhǎng)期的實(shí)踐總結(jié)積累了一些實(shí)用的軟件維護(hù)策略,這些策略基于維護(hù)管理和維護(hù)技術(shù),能夠以較少的代價(jià)有效的完成維護(hù)工作。
3.1 為維護(hù)工作制定流程
軟件維護(hù)工作必須在一定的監(jiān)控下進(jìn)行,任何人不得私自進(jìn)行軟件維護(hù),維護(hù)工作必須按照規(guī)定的步驟開(kāi)展,否則一旦失控就有可能造成整個(gè)軟件系統(tǒng)的報(bào)廢。圖2給出了一個(gè)軟件維護(hù)工作流程圖。
確定維護(hù)目標(biāo)階段,軟件維護(hù)起始于一個(gè)對(duì)軟件的更改請(qǐng)求,該更改請(qǐng)求既可能是糾錯(cuò)性維護(hù)也可能是完善性維護(hù),需由維護(hù)機(jī)構(gòu)確定其是何種類(lèi)型,劃分到合適的維護(hù)類(lèi)別中(糾錯(cuò)性維護(hù)、適應(yīng)性維護(hù)、預(yù)防性維護(hù)、完善性維護(hù))。在分析階段,先進(jìn)行維護(hù)的可行性分析,在此基礎(chǔ)上再進(jìn)行詳細(xì)分析??尚行苑治鲋饕_定軟件更改的影響和可行性的解決方法等內(nèi)容。詳細(xì)分析則主要是提出完整的更改需求說(shuō)明、鑒別需要更改的要素(模塊)、提出測(cè)試方案和策略、制定實(shí)施計(jì)劃。在設(shè)計(jì)階段,匯總?cè)坑糜谲浖牡脑O(shè)計(jì)的信息,這些信息包括系統(tǒng)的文檔、分析階段產(chǎn)生的結(jié)果、源代碼等。在實(shí)現(xiàn)階段,制定程序更改計(jì)劃以便進(jìn)行軟件更改。實(shí)現(xiàn)階段主要包括編碼與單元測(cè)試、集成測(cè)試、風(fēng)險(xiǎn)分析、測(cè)試審查準(zhǔn)備等過(guò)程。在系統(tǒng)測(cè)試階段,主要測(cè)試程序之間的接口,以確保系統(tǒng)滿(mǎn)足原來(lái)的需求以及新增加的更改需求。在驗(yàn)收測(cè)試期間,測(cè)試人員應(yīng)該完成如下工作:報(bào)告測(cè)試結(jié)果、進(jìn)行功能配置審核、確定系統(tǒng)功能是否滿(mǎn)足功能需求、建立軟件新版本。在交付階段將新的系統(tǒng)交給用戶(hù)完成安裝與訓(xùn)練。此外,除了修改程序、數(shù)據(jù)、代碼等部分以外,還應(yīng)同時(shí)修改涉及的所有文檔,包括系統(tǒng)文檔和用戶(hù)文檔。endprint