四、軟件維護(hù)
軟件維護(hù)階段覆蓋了從軟件交付使用到軟件被淘汰為止的整個(gè)時(shí)期,它是在軟件交付使用后,為了改正軟件中隱藏的錯(cuò)誤,或者為了使軟件適應(yīng)新的環(huán)境,或者為了擴(kuò)充和完善軟件的功能或性能而修改軟件的過(guò)程。一個(gè)軟件的開(kāi)發(fā)時(shí)間可能需要一兩年,但它的使用時(shí)間可能要幾年或幾十年,而整個(gè)使用期都可能需要進(jìn)行軟件維護(hù),所以軟件維護(hù)的代價(jià)是很大的,而且維護(hù)的代價(jià)還在逐年上升,據(jù)1994年Software Engineering Encyclopedia記載,在整個(gè)軟件生存周期所花費(fèi)的代價(jià)中,20世紀(jì)80年代末用于軟件維護(hù)的代價(jià)約為75%到90年代初為90%。因此,如何提高軟件維護(hù)的效率、降低維護(hù)的代價(jià)成為十分重要的問(wèn)題。
(一) 軟件維護(hù)的分類(lèi)
根據(jù)引用軟件維護(hù)的原因,軟件維護(hù)通??煞殖筛恼跃S護(hù)、適應(yīng)性維護(hù)、完善性維護(hù)、預(yù)防性維護(hù)。
1.改正性維護(hù)
由于程序正確性證明尚未得到圓滿(mǎn)的解決,軟件測(cè)試又不可能找出程序中的所有錯(cuò)誤,因此,在交付使用的軟件中都可能隱藏著某些尚未被發(fā)現(xiàn)的錯(cuò)誤,而這些錯(cuò)誤在某種使用環(huán)境下會(huì)暴露出來(lái)。改正性維護(hù)就是在使用過(guò)程中發(fā)現(xiàn)了隱藏的錯(cuò)誤后,為了診斷和改正這些隱藏錯(cuò)誤而修改軟件的活動(dòng)。
2.適應(yīng)性維護(hù)
由于計(jì)算機(jī)的發(fā)展非常迅速,新的機(jī)型、新的操作系統(tǒng)、新的軟件系統(tǒng)不斷地涌現(xiàn),為了適應(yīng)計(jì)算機(jī)的飛速發(fā)展,可能要更正在運(yùn)行的軟件的運(yùn)行環(huán)境,如新的機(jī)型、數(shù)據(jù)庫(kù)管理系統(tǒng)等。適應(yīng)性維護(hù)就是為了適應(yīng)變化了的環(huán)境而修改軟件的活動(dòng)。
3.完善性維護(hù)
用戶(hù)在使用軟件的過(guò)程中,隨著業(yè)務(wù)的發(fā)展,常常希望擴(kuò)充原有軟件的功能,或者希望改進(jìn)原有的功能或性能,以滿(mǎn)足用戶(hù)的新要求,完善性維護(hù)就是為了擴(kuò)充或完善原有軟件的功能或性能而修改軟件的活動(dòng)。
4.預(yù)防性維護(hù)
軟件維護(hù)活動(dòng)主要是上述三類(lèi)維護(hù),另有一類(lèi)維護(hù)稱(chēng)為預(yù)防性維護(hù),它是為了提高軟件的可維護(hù)性和可靠性,為未來(lái)的進(jìn)一步改進(jìn)打下基礎(chǔ)而修改軟件的活動(dòng)。據(jù)有關(guān)資料統(tǒng)計(jì),在整個(gè)軟件維護(hù)活動(dòng)中,改正性維護(hù)約占20%,適應(yīng)性維護(hù)約占25%,完善性維護(hù)約占50%以上,其他維護(hù)約占4%。
(二) 與軟件維護(hù)有關(guān)的問(wèn)題
軟件維護(hù)人員通常不是該軟件的開(kāi)發(fā)人員,這給軟件維護(hù)帶來(lái)很大的困難,特別是有些軟件在開(kāi)發(fā)時(shí)沒(méi)有遵循軟件開(kāi)發(fā)的準(zhǔn)則,沒(méi)有開(kāi)發(fā)方法的支持,維護(hù)這樣的軟件就更困難。下面列舉一些與軟件維護(hù)有關(guān)的問(wèn)題。
(1)要維護(hù)一個(gè)軟件,首先要理解它。而理解別人的程序通常是非常困難的,尤其是對(duì)軟件配置(指各種文檔)不齊的軟件,理解起來(lái)更為困難。
(2)需要維護(hù)的軟件往往缺少合格的文檔,或者文檔資料不齊,甚至沒(méi)有文檔。在軟件維護(hù)中,合格的文檔十分重要,它有助于理解被維護(hù)的軟件。合格的文檔不僅要完整正確地反映開(kāi)發(fā)過(guò)程各階段的工作結(jié)果,而且應(yīng)該容易理解并應(yīng)程序源代碼一致。而錯(cuò)誤的文檔會(huì)把對(duì)程序的理解引入歧途。
(3)在軟件維護(hù)時(shí),不要指望得到原來(lái)開(kāi)發(fā)該軟件的人員的幫助。開(kāi)發(fā)人員開(kāi)發(fā)完一個(gè)軟件后,往往去從事另一軟件的開(kāi)發(fā),甚至已調(diào)離開(kāi)發(fā)單位。即使原先的開(kāi)發(fā)人員還在,也可能因?yàn)橄喔魰r(shí)間太久而遺忘了實(shí)現(xiàn)的細(xì)節(jié)。
(4)多數(shù)軟件在設(shè)計(jì)時(shí)沒(méi)有考慮今后的修改,給軟件的修改帶來(lái)困難,而且在修改軟件時(shí)容易帶來(lái)新的差錯(cuò)。對(duì)那些缺乏模塊獨(dú)立性和非結(jié)構(gòu)化的程序來(lái)說(shuō),更是如此。
(5)軟件維護(hù)通常不是一件吸引人的工作。從事維護(hù)工作常使維護(hù)人員感到缺乏成就感。這也嚴(yán)重影響維護(hù)工作。從而導(dǎo)致維護(hù)質(zhì)量的不高。可以看出,上述的有些問(wèn)題都與被維護(hù)的質(zhì)量密切相關(guān),所以在開(kāi)發(fā)軟件時(shí),要認(rèn)真寫(xiě)好各類(lèi)文檔,并且應(yīng)注意提高軟件的可維護(hù)性,這樣可在很大程序上緩解軟件維護(hù)的困難。
(三) 可維護(hù)性軟件可維護(hù)性是指理解、改正、改動(dòng)、改進(jìn)軟件的難易程度。通常影響軟件可維護(hù)性的因素有可理解性、可測(cè)試性和可修改性。
1.可理解性
2.可測(cè)試性
可測(cè)試性是指測(cè)試和診斷軟件(主要指程序)中錯(cuò)誤的難易程度。測(cè)試主要是發(fā)現(xiàn)軟件中的錯(cuò)誤,而診斷錯(cuò)誤的性質(zhì)和出錯(cuò)的位置通常是調(diào)試的任務(wù)。提高軟件可測(cè)試性的措施有:書(shū)寫(xiě)詳細(xì)正確的文檔,采用良好的程序結(jié)構(gòu),使用測(cè)試工具和調(diào)試工具,保存以前的測(cè)試過(guò)程和測(cè)試用例等等。
3.可修改性
可修改性是指修改軟件(主要指程序)的難易程度。在修改程序時(shí)經(jīng)常會(huì)發(fā)生這樣的情況:修改程序中某個(gè)錯(cuò)誤的同時(shí)又產(chǎn)生新的錯(cuò)誤(由程序的修改引起的),或者在程序中增加了某個(gè)功能的同時(shí),原先的某些功能不能正常執(zhí)行。這主要是因?yàn)槌绦蛑懈鞒煞种g存在著許多聯(lián)系,當(dāng)程序中某處修改時(shí),這個(gè)修改可能會(huì)影響到程序的其他部分。如果修改程序時(shí)稍有考慮不周,就會(huì)出現(xiàn)上述顧此失彼的情況。因此,如果一處修改所涉及到的范圍越少,發(fā)生上述情況的概率也越小,其可修改性也越好。在軟件設(shè)計(jì)中我們介紹的那些設(shè)計(jì)準(zhǔn)則都是影響可修改性的因素,如信息隱蔽原則、模塊獨(dú)立、模塊間聯(lián)系的低耦合高內(nèi)聚等等。
(四) 軟件維護(hù)活動(dòng)流程
凡是需要軟件維護(hù),都應(yīng)有一個(gè)軟件維護(hù)的申請(qǐng)報(bào)告。改正性維護(hù)的申請(qǐng)報(bào)告應(yīng)完整地描述導(dǎo)致錯(cuò)誤的環(huán)境,包括輸入數(shù)據(jù)、錯(cuò)誤清單以及有關(guān)的材料。適應(yīng)性維護(hù)或完善性維護(hù)的申請(qǐng)報(bào)告應(yīng)提供一份簡(jiǎn)短的需求說(shuō)明書(shū)。維護(hù)申請(qǐng)書(shū)由維護(hù)管理員和系統(tǒng)管理員審批。并指明所需修改的性質(zhì),申請(qǐng)修改的優(yōu)先級(jí),所需的工作量等。維護(hù)活動(dòng)的第一步是確定維護(hù)的類(lèi)型,若是改正性維護(hù),則要估計(jì)錯(cuò)誤的嚴(yán)重程度,對(duì)嚴(yán)重的錯(cuò)誤,則馬上分派人員執(zhí)行維護(hù)任務(wù);對(duì)不嚴(yán)重的錯(cuò)誤,則可將其暫時(shí)保存,在以后適當(dāng)時(shí)候再進(jìn)行改正。若是適應(yīng)性維護(hù)或完善性維護(hù),則要根據(jù)其優(yōu)先級(jí)來(lái)決定維護(hù)的先后次序,優(yōu)先級(jí)高的維護(hù)則馬上開(kāi)始;優(yōu)先級(jí)低的可暫時(shí)保存,以便統(tǒng)籌安排。適應(yīng)性維護(hù)或完善性維護(hù)的過(guò)程相當(dāng)于一個(gè)小的開(kāi)發(fā)過(guò)程,它同樣要經(jīng)歷需求分析、設(shè)計(jì)、編碼、測(cè)試等階段。不管是哪種維護(hù),有些工作是每種維護(hù)活動(dòng)都必須做的,如在修改程序代碼的同時(shí)還要修改(如有必要)相應(yīng)的需求說(shuō)明文檔、設(shè)計(jì)文檔等,還要進(jìn)行回歸測(cè)試和軟件配置復(fù)審等。