軟件工程課件:軟件維護(hù)_第1頁
軟件工程課件:軟件維護(hù)_第2頁
軟件工程課件:軟件維護(hù)_第3頁
軟件工程課件:軟件維護(hù)_第4頁
軟件工程課件:軟件維護(hù)_第5頁
已閱讀5頁,還剩114頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

軟件維護(hù)6.1軟件維護(hù)的基本概念6.2軟件維護(hù)的任務(wù)和分類6.3軟件維護(hù)過程6.4維護(hù)的管理6.5預(yù)防性維護(hù)6.6軟件維護(hù)的副作用6.7軟件文檔與編寫要求及方法6.8軟件逆向工程和再工程6.9小結(jié)習(xí)題6

知識(shí)點(diǎn)

軟件維護(hù)的基本概念,維護(hù)管理,維護(hù)過程,預(yù)防性維護(hù),維護(hù)的副作用,軟件文檔,軟件逆向工程和再工程。

難點(diǎn)

軟件維護(hù)過程和管理,預(yù)防性維護(hù),軟件文檔編寫。

基于工作過程的教學(xué)任務(wù)

通過本章的學(xué)習(xí),了解軟件維護(hù)的基本概念及分類,軟件維護(hù)的副作用,軟件可維護(hù)性對(duì)軟件開發(fā)的重要性;掌握預(yù)防性維護(hù)、軟件文檔編寫要求和方法、軟件維護(hù)過程、軟件維護(hù)類型、以及提供軟件可維護(hù)性的方法;了解軟件逆向工程與再工程的基本過程。

6.1軟件維護(hù)的基本概念

軟件工程的目的就是提高軟件的可維護(hù)性,減少軟件維護(hù)所需要的工作量,降低軟件系統(tǒng)的總成本。所謂軟件維護(hù)就是在軟件已經(jīng)交付使用之后,為了改正錯(cuò)誤或滿足新的需要而修改軟件的過程??梢酝ㄟ^描述軟件交付使用后可能進(jìn)行的4項(xiàng)維護(hù)活動(dòng),具體地定義軟件維護(hù)。這4種維護(hù)活動(dòng)為改正性維護(hù)、適應(yīng)性維護(hù)、完善性維護(hù)、預(yù)防性維護(hù)。

軟件維護(hù)絕不僅限于糾正使用中發(fā)現(xiàn)的錯(cuò)誤,事實(shí)上在全部維護(hù)活動(dòng)中一半以上是擴(kuò)充與完善性維護(hù)。統(tǒng)計(jì)數(shù)字表明,完善性維護(hù)占全部維護(hù)活動(dòng)的50%~66%,改正性維護(hù)占17%~21%,適應(yīng)性維護(hù)占18%~25%,預(yù)防性維護(hù)活動(dòng)只占4%左右。如圖6-1所示。

圖6-1各種維護(hù)的比例

需要注意的是,上述4種維護(hù)活動(dòng)都必須應(yīng)用于整個(gè)軟件配置,維護(hù)軟件文檔和維護(hù)軟件的可執(zhí)行代碼是同樣重要的。

(1)為什么要進(jìn)行軟件維護(hù)?

舉例:大學(xué)科研機(jī)構(gòu)里的軟件維護(hù)工作恐怕是做得最差的了。幾乎每一批新的研究生都會(huì)把畢業(yè)生留下的軟件臭罵一通,然后全部推倒重做。到他畢業(yè)該走時(shí),就輪到別人評(píng)論他的工作了。如此輪回,最終沒有什么成果留下。

通過上述案例可以看出,如果希望軟件系統(tǒng)能延長壽命,必須要對(duì)它進(jìn)行維護(hù)。如果希望軟件系統(tǒng)有效益,則必須設(shè)法降低維護(hù)的代價(jià)。

(2)影響維護(hù)工作量的因素。

①系統(tǒng)大?。合到y(tǒng)越大,理解掌握起來越困難。系統(tǒng)越大,所執(zhí)行功能越復(fù)雜。

②程序設(shè)計(jì)語言:使用強(qiáng)功能的程序設(shè)計(jì)語言可以控制程序的規(guī)模。語言的功能越強(qiáng),生成程序的模塊化和結(jié)構(gòu)化程度越高,所需的指令數(shù)就越少,程序的可讀性越好。

③數(shù)據(jù)庫技術(shù)的應(yīng)用:使用數(shù)據(jù)庫,可以簡單而有效地管理和存儲(chǔ)用戶程序中的數(shù)據(jù),還可以減少生成用戶報(bào)表應(yīng)用軟件的維護(hù)工作量。

④先進(jìn)的軟件開發(fā)技術(shù):在軟件開發(fā)時(shí),若使用能使軟件結(jié)構(gòu)比較穩(wěn)定的分析與設(shè)計(jì)技術(shù)及程序設(shè)計(jì)技術(shù),如面向?qū)ο蠹夹g(shù)、復(fù)用技術(shù)等,可減少大量的工作量。

(3)軟件維護(hù)的成本。

有形的維護(hù)成本是花費(fèi)了多少錢;無形的維護(hù)成本是帶來的負(fù)面影響。

6.2軟件維護(hù)的任務(wù)和分類

軟件維護(hù)的主要任務(wù)就是在軟件使用或軟件維護(hù)階段,為了改正錯(cuò)誤或滿足新的需要而修改軟件,使軟件能持久地滿足用戶的需求。按軟件維護(hù)的不同性質(zhì),可以把軟件維護(hù)分為改正性維護(hù)、適用性維護(hù)、完善性維護(hù)、預(yù)防性維護(hù)四種類型。

1.改正性維護(hù)

因?yàn)檐浖y(cè)試不可能暴露出一個(gè)大型軟件系統(tǒng)中所有潛藏的錯(cuò)誤,所以必然會(huì)有第一項(xiàng)維護(hù)活動(dòng):在任何大型程序的使用期間,用戶必然會(huì)發(fā)現(xiàn)程序錯(cuò)誤,并且把他們遇到的問題報(bào)告給維護(hù)人員。因此,把診斷和改正錯(cuò)誤的過程稱為改正性維護(hù)。

2.適用性維護(hù)

適用性維護(hù)是為了使系統(tǒng)適應(yīng)環(huán)境的變化而進(jìn)行的維護(hù)工作。一方面,信息系統(tǒng)要能夠適應(yīng)新的軟硬件環(huán)境,以提高系統(tǒng)的性能和運(yùn)行效率;另一方面,應(yīng)用對(duì)象在不斷發(fā)生變化,機(jī)構(gòu)的調(diào)整,管理體制的改變、數(shù)據(jù)與信息需求的變更等都將導(dǎo)致系統(tǒng)不能適應(yīng)新的應(yīng)用環(huán)境。如代碼改變、數(shù)據(jù)結(jié)構(gòu)變化、數(shù)據(jù)格式以及輸入/輸出方式的變化、數(shù)據(jù)存儲(chǔ)介質(zhì)的變化等,都將直接影響系統(tǒng)的正常工作。因此,有必要對(duì)系統(tǒng)進(jìn)行調(diào)整,使之適應(yīng)應(yīng)用對(duì)象的變化,滿足用戶的需求。

3.完善性維護(hù)

在系統(tǒng)的使用過程中,用戶往往要求擴(kuò)充原有系統(tǒng)的功能,增加一些在軟件需求規(guī)范書中沒有規(guī)定的功能與性能特征,以及對(duì)處理效率和編寫程序的改進(jìn)。例如,有時(shí)可將幾個(gè)小程序合并成一個(gè)單一的運(yùn)行良好的程序,從而提高處理效率;增加數(shù)據(jù)輸出的圖形方式;增加聯(lián)機(jī)在線幫助功能;調(diào)整用戶界面等。盡管這些要求在原有系統(tǒng)開發(fā)的需求規(guī)格說明書中并沒有,但用戶要求在原有系統(tǒng)基礎(chǔ)上進(jìn)一步改善和提高,并且隨著用戶對(duì)系統(tǒng)的使用和熟悉,這種要求可能會(huì)不斷提出,為了滿足這些要求就要進(jìn)行完善性維護(hù)工作。

4.預(yù)防性維護(hù)

為了改進(jìn)未來的可維護(hù)性或可靠性,或?yàn)榱私o未來的改進(jìn)奠定更好的基礎(chǔ)而修改軟件時(shí),就出現(xiàn)了第4項(xiàng)維護(hù)活動(dòng)。這項(xiàng)維護(hù)活動(dòng)通常稱為預(yù)防性維護(hù),目前這項(xiàng)維護(hù)活動(dòng)相對(duì)比較少。

軟件維護(hù)工作不應(yīng)總是被動(dòng)地等待用戶提出要求后才進(jìn)行,應(yīng)進(jìn)行主動(dòng)的預(yù)防性維護(hù),即選擇那些還有較長使用壽命,目前尚能正常運(yùn)行,但可能將要發(fā)生變化或調(diào)整的系統(tǒng)進(jìn)行維護(hù),目的是通過預(yù)防性維護(hù)為未來的修改與調(diào)整奠定更好的基礎(chǔ)。例如,將目前能應(yīng)用的報(bào)表功能改成通用報(bào)表生成功能,以應(yīng)對(duì)今后報(bào)表內(nèi)容和格式可能的變化。

6.3軟件維護(hù)過程

維護(hù)過程本質(zhì)上是修改和壓縮了的軟件定義和開發(fā)過程,而且事實(shí)上遠(yuǎn)在提出一項(xiàng)維護(hù)要求之前,與軟件維護(hù)有關(guān)的工作已經(jīng)開始了。軟件維護(hù)主要包括5個(gè)過程:建立維護(hù)組織、撰寫維護(hù)報(bào)告、確定維護(hù)事件流、保存維護(hù)記錄、評(píng)價(jià)維護(hù)活動(dòng)。

1.建立維護(hù)組織

雖然通常并不需要建立正式的維護(hù)組織,但是,即使對(duì)于一個(gè)小的軟件開發(fā)團(tuán)體而言,非正式地委托責(zé)任也是絕對(duì)必要的。每個(gè)維護(hù)要求都通過維護(hù)管理員轉(zhuǎn)交給相應(yīng)的系統(tǒng)管理員去評(píng)價(jià)。系統(tǒng)管理員是被指定去熟悉部分產(chǎn)品程序的技術(shù)人員,系統(tǒng)管理員一旦對(duì)維護(hù)任務(wù)做出評(píng)價(jià)之后,由變化授權(quán)人決定應(yīng)該進(jìn)行的活動(dòng)。如圖6-2所示。

在維護(hù)活動(dòng)開始之前就明確維護(hù)責(zé)任是十分必要的,這樣做可以大大減少維護(hù)過程中可能出現(xiàn)的混亂。

圖6-2維護(hù)組織

2.撰寫維護(hù)報(bào)告

應(yīng)該用標(biāo)準(zhǔn)化的格式表達(dá)所有軟件維護(hù)要求。軟件維護(hù)人員通常給用戶提供空白的維護(hù)要求表,有時(shí)也稱為軟件問題報(bào)告表,這個(gè)表格由要求一項(xiàng)維護(hù)活動(dòng)的用戶填寫。如果遇到了一個(gè)錯(cuò)誤,那么必須完整描述導(dǎo)致出現(xiàn)錯(cuò)誤的環(huán)境(包括輸入數(shù)據(jù)、全部輸出數(shù)據(jù)以及其他有關(guān)信息)。對(duì)于適應(yīng)性或完善性的維護(hù)要求,用戶必須提出一份修改說明書,列出所有希望的修改。如前所述,由維護(hù)管理員和系統(tǒng)管理員評(píng)價(jià)用戶提交的維護(hù)要求表,并相應(yīng)做出軟件修改報(bào)告,并給出下述信息:

維護(hù)要求的性質(zhì);

這項(xiàng)要求的優(yōu)先次序;

與修改有關(guān)的事后數(shù)據(jù);

滿足維護(hù)要求表中提出的要求所需要的工作量。

在擬定進(jìn)一步的維護(hù)計(jì)劃之前,把軟件修改報(bào)告提交給變化授權(quán)人審查批準(zhǔn)。

3.確定維護(hù)事件流

當(dāng)一個(gè)維護(hù)申請(qǐng)?zhí)岢霾⑼ㄟ^評(píng)審確定需要維護(hù)時(shí),則按圖6-3所描繪的過程實(shí)施維護(hù)。首先應(yīng)該確定要求進(jìn)行的維護(hù)的類型。用戶常常把一項(xiàng)要求看作是為了改正軟件的錯(cuò)誤(改正性維護(hù)),而開發(fā)人員可能把同一項(xiàng)要求看作是適應(yīng)性或完善性維護(hù)。當(dāng)存在不同意見時(shí),必須協(xié)商解決。

圖6-3維護(hù)階段的事件流

從圖6-3描繪的事件流可看到,對(duì)一項(xiàng)改正性維護(hù)要求(圖中“錯(cuò)誤”通路)的處理,從估量錯(cuò)誤的嚴(yán)重程度開始。如果是一個(gè)嚴(yán)重的錯(cuò)誤(例如,一個(gè)關(guān)鍵性的系統(tǒng)不能正常運(yùn)行),則在系統(tǒng)管理員的指導(dǎo)下分派人員,并且立即開始問題分析過程。如果錯(cuò)誤并不嚴(yán)重,那么改正性的維護(hù)和其他要求軟件開發(fā)資源的任務(wù)一起統(tǒng)籌安排。

適應(yīng)性維護(hù)和完善性維護(hù)的要求沿著相同的事件流通路前進(jìn),對(duì)每個(gè)維護(hù)要求進(jìn)行優(yōu)先度評(píng)價(jià),并且安排要求的工作時(shí)間,好似它是另一個(gè)開發(fā)任務(wù)一樣。如果一項(xiàng)維護(hù)要求的優(yōu)先次序非常高,就要立即開始維護(hù)工作。

不管維護(hù)類型如何,都需要進(jìn)行同樣的技術(shù)工作。這些工作包括修改軟件設(shè)計(jì)、復(fù)查、必要的代碼修改、單元測(cè)試和集成測(cè)試(包括使用以前的測(cè)試方案的回歸測(cè)試)、驗(yàn)收測(cè)試和復(fù)審。不同類型的維護(hù)強(qiáng)調(diào)的重點(diǎn)不同,但是基本途徑是相同的。維護(hù)事件流中最后一個(gè)事件是復(fù)審,它再次檢驗(yàn)軟件配置的所有成分的有效性,并且保證事實(shí)上滿足了維護(hù)要求表中的要求。

4.保存維護(hù)記錄

對(duì)于軟件生命周期的所有階段而言,以前記錄保存都是不充分的,而軟件維護(hù)則根本沒有記錄保存下來。由于這個(gè)原因,往往不能估計(jì)維護(hù)技術(shù)的有效性,不能確定一個(gè)產(chǎn)品程序的優(yōu)良程度,而且很難確定維護(hù)的實(shí)際代價(jià)是什么。

在維護(hù)階段需要記錄一些與維護(hù)有關(guān)的信息,這些信息可作為估計(jì)維護(hù)的有效程度,確定軟件產(chǎn)品的質(zhì)量,估算維護(hù)費(fèi)用等工作的原始依據(jù)。維護(hù)檔案記錄主要包括:

程序名稱;

源程序語句條數(shù);

機(jī)器代碼指令條數(shù);

所用的程序設(shè)計(jì)語言;

程序安裝的日期;

程序安裝后的運(yùn)行次數(shù);

與程序安裝后運(yùn)行次數(shù)有關(guān)的處理故障次數(shù);

程序改變的層次及名稱;

修改程序增加的源程序語句條數(shù);

修改程序減少的源程序語句條數(shù);

每次修改所付出的人時(shí)數(shù);

修改程序的日期;

軟件維護(hù)人員的姓名;

維護(hù)申請(qǐng)報(bào)告的名稱、維護(hù)類型;

維護(hù)開始時(shí)間和維護(hù)結(jié)束時(shí)間;

花費(fèi)在維護(hù)上的累計(jì)人時(shí)數(shù);

維護(hù)工作的凈收益等。

5.評(píng)價(jià)維護(hù)活動(dòng)

缺乏有效的數(shù)據(jù)就無法評(píng)價(jià)維護(hù)活動(dòng)。如果已經(jīng)開始保存維護(hù)記錄了,則可以對(duì)維護(hù)工作做一些定量度量。至少可以從下述7個(gè)方面度量維護(hù)工作:

每次程序運(yùn)行平均失效的次數(shù);

用于每一類維護(hù)活動(dòng)的總?cè)藭r(shí)數(shù);

平均每個(gè)程序、每種語言、每種維護(hù)類型所做的程序變動(dòng)數(shù);

維護(hù)過程中增加或刪除一個(gè)源語句平均花費(fèi)的人時(shí)數(shù);

維護(hù)每種語言平均花費(fèi)的人時(shí)數(shù);

一張維護(hù)要求表的平均周轉(zhuǎn)時(shí)間;

不同維護(hù)類型所占的百分比。

根據(jù)對(duì)維護(hù)工作定量度量的結(jié)果,可以做出關(guān)于開發(fā)技術(shù)、語言選擇、維護(hù)工作量規(guī)劃、資源分配及其他許多方面的決定,而且可以利用這些數(shù)據(jù)去分析評(píng)價(jià)維護(hù)任務(wù)。

6.4維護(hù)的管理

軟件維護(hù)管理包括有缺陷報(bào)告、批準(zhǔn)對(duì)產(chǎn)品的修改、軟件的可維護(hù)性、影響軟件可維護(hù)性的因素、軟件可維護(hù)性度量、提高軟件可維護(hù)性的方法等。

1.缺陷報(bào)告

缺陷報(bào)告必須包括足夠的信息,使維護(hù)程序員能夠再現(xiàn)該問題,通常是某種類型的軟件故障。另外,維護(hù)程序員必須指出缺陷的嚴(yán)重性,典型的嚴(yán)重性類別包括致命的、主要的、通常的、較小的和微不足道的。

理想情況下,用戶提出的每個(gè)缺陷都應(yīng)立即糾正。而實(shí)際上,程序開發(fā)公司通常人力不足,開發(fā)和維護(hù)工作都會(huì)滯后。如果缺陷是致命的,例如工資發(fā)放軟件在發(fā)工資的前一天或有員工增減工資的前一天崩潰了,那么必須立即采取糾正措施。其他情況下,必須立即對(duì)每一份缺陷報(bào)告進(jìn)行初步的調(diào)查。

維護(hù)程序員應(yīng)該首先參考缺陷報(bào)告文件。缺陷報(bào)告包括已經(jīng)發(fā)現(xiàn)但尚未糾正的所有缺陷,以及關(guān)于在缺陷得到糾正之前用戶如何繞過它們的建議。如果缺陷以前已經(jīng)報(bào)告過,缺陷報(bào)告中的任何信息都應(yīng)傳遞給用戶。但如果用戶報(bào)告的是新缺陷,那么維護(hù)程序員應(yīng)該對(duì)問題加以研究并設(shè)法找出原因和解決問題。

另外,應(yīng)該設(shè)法找到繞過問題的辦法,因?yàn)橛锌赡苄枰?~9個(gè)月的時(shí)間才能分配人力對(duì)軟件做出必要的修改??紤]到程序員,特別是能夠勝任維護(hù)工作的優(yōu)秀程序員的短缺,對(duì)于那些不十分緊急的缺陷報(bào)告,只能建議用戶通過某種方法繼續(xù)使用帶有缺陷的軟件,直到缺陷可以得到解決。

然后,維護(hù)程序員的結(jié)論要連同所有支持其結(jié)論的文檔——用以得出上述結(jié)論的清單、設(shè)計(jì)、手冊(cè)等,一同加入缺陷報(bào)告文件中。負(fù)責(zé)交付后維護(hù)的管理員應(yīng)該定期閱讀該報(bào)告,確定各種糾錯(cuò)任務(wù)的優(yōu)先次序。該文件還應(yīng)包括客戶在完善性維護(hù)和適應(yīng)性維護(hù)等方面的要求,下一次將糾正優(yōu)先級(jí)最高的缺陷。

2.批準(zhǔn)對(duì)產(chǎn)品的修改

一旦決定進(jìn)行糾錯(cuò)性維護(hù),維護(hù)程序員就要查找軟件運(yùn)行失敗的原因,并承擔(dān)起修正該錯(cuò)誤的任務(wù)。代碼改變后,必須像對(duì)整個(gè)產(chǎn)品進(jìn)行測(cè)試一樣,對(duì)所做修改進(jìn)行回歸測(cè)試。然后必須更新文檔,以反映所做的修改。特別是對(duì)改變后的代碼制品,要在其序言注釋中加入關(guān)于進(jìn)行了哪些修改、為什么修改、由誰做的修改以及何時(shí)進(jìn)行修改等方面的信息。如果有必要,分析或設(shè)計(jì)制品也需要修改。

在完善性維護(hù)或適應(yīng)性維護(hù)之后,也要采取類似的步驟。唯一的區(qū)別是,完善性維護(hù)和適應(yīng)性維護(hù)是按客戶要求進(jìn)行的,不是由缺陷報(bào)告引發(fā)的。

如果維護(hù)程序員對(duì)所做的修改測(cè)試不充分該怎么辦呢?產(chǎn)品在發(fā)布前,要通過一個(gè)獨(dú)立的小組進(jìn)行軟件質(zhì)量保證,即維護(hù)SQA小組的成員一定不能作為維護(hù)程序員給相同的管理者提供報(bào)告。SQA保持管理上的獨(dú)立很重要。

維護(hù)工作是容易出錯(cuò)的,交付后維護(hù)期間的測(cè)試是困難的,也是消耗時(shí)間的。SQA小組不應(yīng)低估測(cè)試對(duì)軟件維護(hù)的影響,一旦新版本得到SQA小組的批準(zhǔn),它就可以發(fā)布了。

3.軟件的可維護(hù)性

許多軟件的維護(hù)十分困難,原因在于,這些軟件的文檔不全、質(zhì)量差、開發(fā)過程不注意采用好的方法,忽視程序設(shè)計(jì)風(fēng)格等。許多維護(hù)要求并不是因?yàn)槌绦蛑谐鲥e(cuò)而提出的,而是為適應(yīng)環(huán)境變化或需求變化而提出的。為了使得軟件能夠易于維護(hù),必須考慮使軟件具有可維護(hù)性。

軟件可維護(hù)性是指糾正軟件系統(tǒng)出現(xiàn)的錯(cuò)誤和缺陷,以及為滿足新的要求進(jìn)行修改、擴(kuò)充或壓縮的難易程度。在前面的章節(jié)中曾經(jīng)多次強(qiáng)調(diào),提高可維護(hù)性是支配軟件工程方法學(xué)所有步驟的關(guān)鍵目標(biāo)。

4.影響軟件可維護(hù)性的因素

維護(hù)就是在軟件交付使用后進(jìn)行的修改,修改之前必須理解待修改的對(duì)象,修改之后應(yīng)該進(jìn)行必要的測(cè)試,以保證所做的修改是正確的。如果是改正性維護(hù),還必須預(yù)先進(jìn)行調(diào)試以確定錯(cuò)誤的具體位置。因此,影響軟件可維護(hù)性的因素主要有下述7個(gè):

1)可理解性

軟件可理解性表現(xiàn)為維護(hù)人員理解軟件的結(jié)構(gòu)、功能、接口和內(nèi)部處理過程的難易程度。模塊化(模塊結(jié)構(gòu)良好,高內(nèi)聚,松耦合)、詳細(xì)的設(shè)計(jì)文檔、結(jié)構(gòu)化設(shè)計(jì)、程序內(nèi)部的文檔和良好的高級(jí)程序設(shè)計(jì)語言等,都對(duì)提高軟件的可理解性有重要貢獻(xiàn)。

2)可測(cè)試性

軟件的可測(cè)試性指程序正確性的難易程度。診斷和測(cè)試的容易程度取決于軟件容易理解的程度,良好的文檔對(duì)診斷和測(cè)試是至關(guān)重要的。維護(hù)人員應(yīng)該能夠得到在開發(fā)階段用過的測(cè)試方案,以便進(jìn)行回歸測(cè)試。

3)可修改性

軟件可修改性指修改程序的難易程度。軟件容易修改的程度和本書第3章講過的結(jié)構(gòu)化設(shè)計(jì)原理和啟發(fā)規(guī)則直接有關(guān)。耦合、內(nèi)聚、信息隱藏、局部化、控制域與作用域的關(guān)系等等,都影響軟件的可修改性。

4)可靠性

軟件可靠性指一個(gè)程序在滿足用戶功能需求的基礎(chǔ)上,在一定時(shí)間內(nèi)正確執(zhí)行的概率。軟件的可靠性越好,越有助于減少由于修改軟件而出現(xiàn)更多的錯(cuò)誤,越有利于維護(hù)工作。

5)可移植性

軟件可移植性指把程序從一種計(jì)算環(huán)境(硬件配置和操作系統(tǒng))轉(zhuǎn)移到另一種計(jì)算環(huán)境的難易程度。把與硬件、操作系統(tǒng)以及其他外部設(shè)備有關(guān)的程序代碼集中放到特定的程序模塊中,可以把因環(huán)境變化而必須修改的程序局限在少數(shù)程序模塊中,從而降低修改的難度。

6)可使用性

軟件可使用性是指程序方便、實(shí)用及易于使用的程度。一個(gè)可使用的程序應(yīng)是易于使用、允許用戶出錯(cuò)和改變、并盡可能不使用戶陷入混亂狀態(tài)的程序。

7)效率

效率指一個(gè)程序能執(zhí)行預(yù)定功能而又不浪費(fèi)機(jī)器資源的程度(即對(duì)存儲(chǔ)容量、通道容量和執(zhí)行時(shí)間的使用情況)。編程時(shí),不能一味追求效率,有時(shí)需要犧牲部分執(zhí)行效率而提高程序的其他特性。

對(duì)于不同類型的維護(hù),上述7個(gè)因素的側(cè)重點(diǎn)也不相同。表6-1列出了在各類維護(hù)中應(yīng)側(cè)重哪些特性。

5.軟件可維護(hù)性度量

軟件維護(hù)性度量的任務(wù)是對(duì)軟件產(chǎn)品的維護(hù)性給出量化的評(píng)價(jià),和其他軟件質(zhì)量特性一樣,軟件維護(hù)的度量也分為內(nèi)部維護(hù)性度量和外部維護(hù)性度量。

從表6-2中可以看出,內(nèi)部維護(hù)性度量是在軟件產(chǎn)品尚未開發(fā)完成時(shí)實(shí)施的度量。此時(shí)只有階段產(chǎn)品,例如已得到設(shè)計(jì)規(guī)格說明和源程序(但未經(jīng)測(cè)試),度量的目的在于預(yù)測(cè)將獲得的軟件產(chǎn)品的維護(hù)性。而外部維護(hù)性度量則是在產(chǎn)品完成后,經(jīng)運(yùn)行開發(fā)出的程序而獲得的維護(hù)性數(shù)據(jù)。

維護(hù)性度量的實(shí)施者可能是用戶、測(cè)試人員、開發(fā)人員、產(chǎn)品評(píng)價(jià)人員或是軟件維護(hù)人員。以下分別說明內(nèi)部維護(hù)性子特性度量及外部維護(hù)性子特性度量的含義:

(1)內(nèi)部維護(hù)性子特性度量。

易分析性度量—預(yù)測(cè)未來維護(hù)人員或軟件產(chǎn)品用戶在維護(hù)工作中為診斷軟件產(chǎn)品缺陷或失效原因,或是找出要修改的部分所付出的工作量和資源。

易變更性度量—預(yù)測(cè)未來維護(hù)人員或軟件產(chǎn)品用戶在進(jìn)行維護(hù)時(shí),修改軟件所需的工作量。

穩(wěn)定性度量—預(yù)測(cè)對(duì)軟件產(chǎn)品進(jìn)行修改后的穩(wěn)定程度,例如,如果某軟件產(chǎn)品修改的局部化程度較高,或是修改變更的副作用較小,表明未來產(chǎn)品的維護(hù)性的穩(wěn)定性較好。

測(cè)試性度量—預(yù)測(cè)軟件產(chǎn)品中設(shè)計(jì)并實(shí)現(xiàn)的自動(dòng)測(cè)試輔助功能的總量。

維護(hù)性的依從性度量—評(píng)估軟件產(chǎn)品遵循與維護(hù)性有關(guān)的用戶組織的標(biāo)準(zhǔn)、約定或法規(guī)的能力。例如,如果開發(fā)的軟件是出口給某外國公司的產(chǎn)品,那就要評(píng)估該產(chǎn)品是否能符合該國、該公司有關(guān)軟件維護(hù)性的標(biāo)準(zhǔn)或法規(guī)。

(2)外部維護(hù)性子特性度量。

易分析性度量—軟件維護(hù)人員或軟件產(chǎn)品用戶在維護(hù)工作中為診斷軟件產(chǎn)品缺陷或失效原因,或是找出要修改的部分所付出的工作量和資源。

易變更性度量—軟件維護(hù)人員或軟件產(chǎn)品用戶在進(jìn)行維護(hù)時(shí),修改所付出的工作量,如實(shí)現(xiàn)變更所用時(shí)間。

穩(wěn)定性度量—在軟件產(chǎn)品修改后的測(cè)試或運(yùn)行時(shí)對(duì)所出現(xiàn)的意外行為屬性的度量,如變更成功比率。

測(cè)試性度量—在測(cè)試已經(jīng)修改或未修改的軟件時(shí)所付出的測(cè)試工作量等測(cè)試屬性的度量。

維護(hù)性的依從性度量—軟件產(chǎn)品不遵循說要求的與維護(hù)性相關(guān)的標(biāo)準(zhǔn)、約定或法規(guī)的功能數(shù)和出現(xiàn)依從性問題的數(shù)量。

6.提高軟件可維護(hù)性的方法

軟件的可維護(hù)性對(duì)于延長軟件的生存期具有決定意義,因此必須考慮怎樣才能提高軟件的可維護(hù)性。為此,可以從以下5個(gè)方面著手。

(1)建立明確的軟件質(zhì)量目標(biāo)。

如果要使程序完全滿足可維護(hù)性的7種影響軟件可維護(hù)性的因素,肯定是很難實(shí)現(xiàn)的。實(shí)際上,某些因素是相互促進(jìn)的,如可理解性和可測(cè)試性,可理解性和可修改性;某些質(zhì)量特性是相互抵觸的,如效率和可移植性,效率和可修改性。因此,為保證程序的可維護(hù)性,應(yīng)該在一定程度上滿足可維護(hù)的各個(gè)因素,但各個(gè)因素的重要性又是隨著程序的用途或計(jì)算機(jī)環(huán)境的不同而改變的。

對(duì)編譯程序來說,效率和可移植性是主要的;對(duì)信息管理系統(tǒng)來說,可使用性和可修改性可能是主要的。通過實(shí)驗(yàn)證明,強(qiáng)調(diào)效率的程序包含的錯(cuò)誤比強(qiáng)調(diào)簡明性的程序所包含的錯(cuò)誤要高出10倍,所以在提出目標(biāo)的同時(shí)還必須規(guī)定它們的優(yōu)先級(jí),這樣有助于提高軟件的質(zhì)量。

(2)使用先進(jìn)的軟件開發(fā)技術(shù)和工具。

使用先進(jìn)的軟件開發(fā)技術(shù)是軟件開發(fā)過程中提高軟件質(zhì)量、降低成本的有效方法之一,也是提高可維護(hù)性的有效技術(shù)。常用的技術(shù)有:模塊化、結(jié)構(gòu)化程序設(shè)計(jì)、自動(dòng)重建結(jié)構(gòu)和重新格式化的工具等。

例如,面向?qū)ο蟮能浖_發(fā)方法就是一個(gè)常用的強(qiáng)而有力的軟件開發(fā)方法。面向?qū)ο蠓椒ㄊ前凑杖说乃季S方法,用現(xiàn)實(shí)世界的概念來思考問題的,這樣能自然地解決問題。它強(qiáng)調(diào)模擬現(xiàn)實(shí)世界中的概念而不是強(qiáng)調(diào)算法,鼓勵(lì)開發(fā)者在開發(fā)過程中按應(yīng)用領(lǐng)域的實(shí)際概念來思考并建立模型,模擬客觀世界,使描述問題的問題空間和解空間盡量一致,開發(fā)出盡量直觀、自然地表現(xiàn)求解方法的軟件系統(tǒng)。

總之,面向?qū)ο蠓椒ㄩ_發(fā)出來的軟件系統(tǒng)的穩(wěn)定性好、容易修改、易于測(cè)試和調(diào)試,因此可維護(hù)性好。

(3)建立明確的質(zhì)量保證工作。

質(zhì)量保證是提高軟件質(zhì)量所做的各種檢查工作。在軟件開發(fā)和軟件維護(hù)的各階段,質(zhì)量保證檢查是非常有效的方法。為了保證軟件的可維護(hù)性,有4種類型的軟件檢查。

①在檢查點(diǎn)進(jìn)行復(fù)審。

檢查點(diǎn)是軟件開發(fā)過程中一個(gè)階段的終點(diǎn)。檢查點(diǎn)進(jìn)行檢查的目標(biāo)是,證實(shí)已開發(fā)的軟件是滿足設(shè)計(jì)要求的。保證軟件質(zhì)量的最佳方法是,在軟件開發(fā)的最初階段就把質(zhì)量要求考慮進(jìn)去,并在每個(gè)階段的終點(diǎn),設(shè)置檢查點(diǎn)進(jìn)行檢查。各階段的檢查重點(diǎn)、對(duì)象和方法如表6-3所示。

②驗(yàn)收檢查。

驗(yàn)收檢查是對(duì)一個(gè)特殊的檢查點(diǎn)的檢查,它是把軟件從開發(fā)轉(zhuǎn)移到維護(hù)的最后一次檢查。它對(duì)減少維護(hù)費(fèi)用,提高軟件質(zhì)量非常重要。

③周期性的維護(hù)檢查。

上述兩種軟件檢查可用來保證新的軟件系統(tǒng)的可維護(hù)性。周期性的維護(hù)檢查的結(jié)果是開發(fā)階段對(duì)檢查點(diǎn)進(jìn)行檢查的繼續(xù),采用的檢查方法和內(nèi)容都是相同的。把多次檢查的結(jié)果與以前進(jìn)行的驗(yàn)收檢查的結(jié)果和檢查點(diǎn)檢查的結(jié)果進(jìn)行比較,對(duì)檢查結(jié)果的任何變化進(jìn)行分析,并找出原因。

④對(duì)軟件包進(jìn)行檢查。

上述三種方法使用與組織內(nèi)部開發(fā)和維護(hù)的軟件或?qū)樯倭坑脩粼O(shè)計(jì)的軟件,很難適用于有很多用戶的通用軟件包。因軟件包屬于賣方的資產(chǎn),用戶很難獲得軟件包源代碼和完整的文檔。對(duì)軟件包的維護(hù)通常采用單位的維護(hù)程序員在分析研究賣方提供的用戶手冊(cè)、操作手冊(cè)、培訓(xùn)手冊(cè)、新版本策略指導(dǎo)、計(jì)算機(jī)環(huán)境和驗(yàn)收測(cè)試的基礎(chǔ)上,深入了解本單位的希望和要求,來編制軟件包檢驗(yàn)程序。軟件包檢測(cè)程序是一個(gè)測(cè)試程序,它檢查軟件包程序所執(zhí)行的功能是否與用戶的要求和條件相一致。

(4)選擇可維護(hù)的程序設(shè)計(jì)語言。

程序設(shè)計(jì)語言的選擇對(duì)軟件可維護(hù)性影響很大。恰當(dāng)?shù)某绦蛟O(shè)計(jì)語言能使編碼時(shí)困難最少,可以減少需要的程序測(cè)試量,并且可以得到更容易閱讀、更容易維護(hù)的程序。

第四代語言(4GL),例如查詢語言、圖形語言、報(bào)表生成語言和非常高級(jí)語言等,對(duì)減少維護(hù)費(fèi)用來說是最有吸引力的語言。人們?nèi)菀桌斫?、使用和修改它們?/p>

例如,用戶使用4GL開發(fā)商業(yè)應(yīng)用程序比使用通常的高級(jí)語言快很多倍。一些4GL是過程語言,另一些是非過程語言。對(duì)非過程語言,用戶不需要指出實(shí)現(xiàn)算法,只需向編譯程序或解釋程序提出自己的要求。例如它能自動(dòng)選擇報(bào)表格式、文字字符類型等。自動(dòng)生成指令能改進(jìn)軟件的可靠性。另外,4GL容易理解,容易編程,程序容易修改,因此改進(jìn)了可維護(hù)性。

(5)改進(jìn)程序的文檔。

程序員利用程序文檔來解釋和理解程序的內(nèi)部結(jié)構(gòu),以及程序同系統(tǒng)內(nèi)其他程序、操作系統(tǒng)和其他軟件系統(tǒng)是如何相互作用的。程序文檔包括源代碼注釋、設(shè)計(jì)文檔、系統(tǒng)流程、程序流程圖和交叉引用表等。

程序文檔是對(duì)程序的總目標(biāo)、程序的各組成部分之間的關(guān)系、程序設(shè)計(jì)策略、程序時(shí)間過程的歷史數(shù)據(jù)等的說明和補(bǔ)充。程序文檔能提高程序的可閱讀性。為了維護(hù)程序,人們不得不閱讀和理解程序文檔。雖然大家對(duì)程序的看法不一,但普遍同意以下觀點(diǎn):

好的文檔能使程序更容易閱讀,壞的文檔比沒有更糟糕;

好的文檔簡明扼要,風(fēng)格統(tǒng)一,容易修改;

程序編碼中加入必要的注釋可提高程序的可理解性;

程序越長、越復(fù)雜,越應(yīng)該注意程序文檔的編寫。

6.5預(yù)

護(hù)

幾乎所有歷史比較悠久的軟件開發(fā)組織,都有一些十幾年前開發(fā)出的老系統(tǒng)。目前,某些老系統(tǒng)仍然在為用戶服務(wù),但是,當(dāng)初開發(fā)這些程序時(shí)并沒有使用軟件工程方法學(xué)來指導(dǎo)。因此,這些程序的體系結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)都很差,文檔不全甚至完全沒有文檔,對(duì)曾經(jīng)做過的修改也沒有完整的記錄。針對(duì)這些壽命長、目前正在為用戶服務(wù)的老版本的軟件系統(tǒng),為了更好地發(fā)揮其優(yōu)勢(shì),需要進(jìn)行預(yù)防性維護(hù)。

預(yù)防性維護(hù),就是采用先進(jìn)的軟件工程方法對(duì)需要維護(hù)的軟件或軟件中的某一部分(重新)進(jìn)行設(shè)計(jì)、編制和測(cè)試。預(yù)防性維護(hù)的目的是為了提高軟件的可維護(hù)性、可靠性等,為以后進(jìn)一步改進(jìn)軟件打下良好基礎(chǔ)。

怎樣滿足用戶對(duì)上述這類老系統(tǒng)的維護(hù)要求呢?為了修改這類程序以適應(yīng)用戶新的或變更的需求,有以下幾種做法可供選擇:

(1)盲目修改。反復(fù)多次地做修改程序的嘗試,與不可見的設(shè)計(jì)及源代碼“頑強(qiáng)戰(zhàn)斗”,以實(shí)現(xiàn)所要求的修改。

(2)認(rèn)真閱讀。通過仔細(xì)分析程序,盡可能多地掌握程序的內(nèi)部工作細(xì)節(jié),以便更有效地修改它。

(3)重新設(shè)計(jì)。在深入理解原有設(shè)計(jì)的基礎(chǔ)上,用軟件工程方法重新設(shè)計(jì)、重新編碼和測(cè)試那些需要變更的軟件部分。

(4)借助先進(jìn)工具。以軟件工程方法學(xué)為指導(dǎo),對(duì)程序全部重新設(shè)計(jì)、重新編碼和測(cè)試,為此可以使用CASE工具(逆向工程和再工程工具)來幫助理解原有的設(shè)計(jì)。

第一種做法很盲目,通常人們采用后3種做法。其中第4種做法稱為軟件再工程,而第3種做法實(shí)質(zhì)上是局部的再工程。

預(yù)防性維護(hù)方法是由米勒(Miller)提出來的,他的想法是“結(jié)構(gòu)化翻新”,并將這個(gè)概念定義為:把今天的方法學(xué)應(yīng)用到昨天的系統(tǒng)上,以支持明天的需求。

粗看起來,在一個(gè)正在工作的程序版本已經(jīng)存在的情況下,重新開發(fā)一個(gè)大型程序,似乎是一種浪費(fèi)。其實(shí)不然,下述事實(shí)很能說明問題。

(1)維護(hù)一行源代碼的代價(jià)可能是最初開發(fā)該行源代碼代價(jià)的14~40倍;

(2)重新設(shè)計(jì)軟件體系結(jié)構(gòu)(程序及數(shù)據(jù)結(jié)構(gòu))時(shí)使用了現(xiàn)代設(shè)計(jì)概念,它對(duì)將來的維護(hù)可能有很大的幫助;

(3)由于現(xiàn)有的程序版本可作為軟件原型使用,開發(fā)生產(chǎn)率可大大高于平均水平;

(4)用戶具有較多使用該軟件的經(jīng)驗(yàn),因此,能夠很容易地搞清新的變更需求和變更的范圍;

(5)利用逆向工程和再工程的工具,可以使一部分工作自動(dòng)化;

(6)在完成預(yù)防性維護(hù)的過程中可以建立起完整的軟件配置。

雖然由于條件所限,目前預(yù)防性維護(hù)在全部維護(hù)活動(dòng)中僅占很小比例,但是,我們不應(yīng)該忽視這類維護(hù),在條件具備時(shí)應(yīng)該主動(dòng)地進(jìn)行預(yù)防性維護(hù)。

6.6軟件維護(hù)的副作用

通過維護(hù)可以延長軟件的壽命,使其創(chuàng)造更多的價(jià)值。但是,修改軟件是危險(xiǎn)的,每修改一次,可能會(huì)產(chǎn)生新的潛在錯(cuò)誤。因此,維護(hù)的副作用是指由于修改程序而導(dǎo)致新的錯(cuò)誤或新增加一些不必要的活動(dòng)。一般,軟件維護(hù)產(chǎn)生的副作用有如下3種。

1.修改代碼的副作用

在使用程序設(shè)計(jì)語言修改源代碼時(shí),可能引入新的錯(cuò)誤。例如修改或刪除一個(gè)標(biāo)識(shí)符、改變占用存儲(chǔ)的大小、改進(jìn)程序的執(zhí)行效率、改變邏輯運(yùn)算符,以及把設(shè)計(jì)上的改變翻譯成代碼的改變、邊界條件的邏輯測(cè)試做出改變等。任何一個(gè)修改都容易引入錯(cuò)誤,因此在修改時(shí)必須特別小心。

2.修改數(shù)據(jù)的副作用

在修改數(shù)據(jù)結(jié)構(gòu)時(shí),有可能造成軟件設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)不匹配,因而導(dǎo)致軟件出錯(cuò)。例如在重新定義局部常量或全局常量、修改全局?jǐn)?shù)據(jù)或公共數(shù)據(jù)、重新初始化控制標(biāo)志或指針、減小或增大一個(gè)數(shù)組大小、減小或增大一個(gè)高層數(shù)據(jù)結(jié)構(gòu)大小、重新排列輸入或輸出的參數(shù)時(shí),非常容易導(dǎo)致設(shè)計(jì)與數(shù)據(jù)不相容的錯(cuò)誤。修改數(shù)據(jù)的副作用是修改軟件信息結(jié)構(gòu)導(dǎo)致的,它可以通過詳細(xì)的設(shè)計(jì)文檔來加以控制。在文檔中通過一種交叉引用,把數(shù)據(jù)元素、記錄、文件和其他結(jié)構(gòu)聯(lián)系起來。

3.修改文檔的副作用

對(duì)數(shù)據(jù)流、軟件結(jié)構(gòu)、模塊邏輯或任何其他有關(guān)特性進(jìn)行修改時(shí),必須對(duì)相關(guān)技術(shù)文檔進(jìn)行相應(yīng)修改。但修改文檔過程會(huì)產(chǎn)生新的錯(cuò)誤,導(dǎo)致文檔與程序功能不匹配、缺省條件改變、新錯(cuò)誤信息不正確等,產(chǎn)生修改文檔的副作用。例如對(duì)交互輸入的順序或格式進(jìn)行修改,如果沒有正確地記入文檔中,可能引起重大的問題。因此,必須在軟件交付前對(duì)整個(gè)軟件配置進(jìn)行評(píng)審,以減少文檔的副作用。

為了控制因修改而引起的副作用,要做到以下幾點(diǎn):

(1)按模塊把修改分組;

(2)自頂向下地安排被修改模塊的順序;

(3)每次只修改一個(gè)模塊;

(4)對(duì)每個(gè)修改過的模塊,在安排修改下一個(gè)模塊之前,要確定這個(gè)修改的副作用。

6.7軟件文檔與編寫要求及方法

文檔(document)是指某些數(shù)據(jù)媒體和其中所記錄的數(shù)據(jù)。文檔具有永久性,并可以由人或機(jī)器閱讀。在軟件工程中文檔常常用來表示對(duì)活動(dòng)、需求、過程或結(jié)果進(jìn)行描述、定義、規(guī)定、報(bào)告或認(rèn)證的任何書面或圖示的信息。文檔也是軟件產(chǎn)品的一部分,沒有文檔的軟件就不稱其為軟件。軟件文檔的編制在軟件開發(fā)中占有突出的地位和相當(dāng)大的工作量。高質(zhì)量、高效率地開發(fā)、管理和維護(hù)文檔,對(duì)于轉(zhuǎn)讓、變更、修正、擴(kuò)充和使用文檔,對(duì)于充分發(fā)揮軟件產(chǎn)品的效益有著重要的意義。

舉例:一位軟件公司的老總感慨地說:“做軟件公司,最痛苦的事情是下班之后,你發(fā)現(xiàn)自己的公司除了幾臺(tái)電腦外,幾乎什么也沒有了?!币?yàn)楣咀钪靛X的資產(chǎn)都在每個(gè)程序員的腦子里,這些人一旦離開,公司的資產(chǎn)就等于零。

6.7.1軟件文檔的重要性與分類

文檔是影響軟件可維護(hù)性的決定因素。由于長期使用的大型軟件系統(tǒng)在使用過程中必然會(huì)經(jīng)受多次修改,所以維護(hù)期間的文檔比程序代碼更重要。例如國內(nèi)某著名IT企業(yè)所提到的“人人都痛恨別人不寫文檔,人人自己都不愿意寫文檔”,說明軟件文檔十分重要。

軟件系統(tǒng)的文檔可以分為用戶文檔和系統(tǒng)文檔兩類。用戶文檔主要描述系統(tǒng)功能和使用方法,并不關(guān)心這些功能是怎樣實(shí)現(xiàn)的;系統(tǒng)文檔描述系統(tǒng)設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試等各方面的內(nèi)容。文檔在開發(fā)人員、維護(hù)人員、管理人員、用戶與計(jì)算機(jī)之間起著重要的橋梁作用,如圖6-4所示。

軟件開發(fā)人員在各個(gè)階段中以文檔作為前階段工作成果的體現(xiàn)和后階段工作的依據(jù)。軟件開發(fā)過程中軟件開發(fā)人員需制定一些工作計(jì)劃或工作報(bào)告,這些計(jì)劃和報(bào)告都要提供給管理人員,并得到必要的支持。管理人員則可通過這些文檔了解軟件開發(fā)項(xiàng)目安排、進(jìn)度、資源使用和成果等。軟件開發(fā)人員需為用戶了解軟件的使用、操作和維護(hù)提供詳細(xì)的資料。文檔作為計(jì)算機(jī)軟件的重要組成部分,告訴用戶如何操作和維護(hù)系統(tǒng)。

圖6-4文檔的橋梁作用

下面分別討論用戶文檔和系統(tǒng)文檔。

1.用戶文檔

用戶文檔是用戶了解系統(tǒng)的第一步,它應(yīng)該能使用戶獲得對(duì)系統(tǒng)的準(zhǔn)確的初步印象。文檔的結(jié)構(gòu)方式應(yīng)該使用戶能夠方便地根據(jù)需要閱讀有關(guān)的內(nèi)容。用戶文檔至少應(yīng)該包括下述5方面的內(nèi)容。

(1)功能描述:說明系統(tǒng)能做什么。

(2)安裝文檔:說明怎樣安裝這個(gè)系統(tǒng)以及怎樣使系統(tǒng)適應(yīng)特定的硬件配置。

(3)使用手冊(cè):圖表結(jié)合、文字前后描述統(tǒng)一,簡要說明如何著手使用這個(gè)系統(tǒng)(應(yīng)該通過豐富例子說明怎樣使用常用的系統(tǒng)功能,還應(yīng)該說明用戶操作錯(cuò)誤時(shí)怎樣恢復(fù)和重新啟動(dòng))。

(4)參考手冊(cè):詳盡描述用戶可以使用的所有系統(tǒng)設(shè)施以及它們的使用方法,還應(yīng)該解釋系統(tǒng)可能產(chǎn)生的各種出錯(cuò)信息的含義(對(duì)參考手冊(cè)最主要的要求是完整,因此通常使用形式化的描述技術(shù))。

(5)操作員指南(如果需要有系統(tǒng)操作員的話):說明操作員應(yīng)該如何處理使用中出現(xiàn)的各種情況。

上述內(nèi)容可以分別作為獨(dú)立的文檔,也可以作為一個(gè)文檔的不同分冊(cè),具體做法應(yīng)該由系統(tǒng)規(guī)模決定。

2.系統(tǒng)文檔

系統(tǒng)文檔又稱開發(fā)文檔,指從問題定義、需求說明到驗(yàn)收測(cè)試計(jì)劃這樣一系列和系統(tǒng)實(shí)現(xiàn)有關(guān)的文檔。描述系統(tǒng)設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試的文檔對(duì)于理解程序和維護(hù)程序來說是極端重要的。和用戶文檔類似,系統(tǒng)文檔的結(jié)構(gòu)也應(yīng)該能把讀者從對(duì)系統(tǒng)概貌的了解,引導(dǎo)到對(duì)系統(tǒng)每個(gè)方面每個(gè)特點(diǎn)的更形式化更具體的認(rèn)識(shí)。下面通過表6-4顯示出軟件生存期各階段與各種文檔編制的關(guān)系。

文檔最終要向軟件管理部門,或向用戶回答下列問題:①What:工作目標(biāo)要滿足哪些需求?②Where:開發(fā)的軟件在什么環(huán)境中實(shí)現(xiàn),所需信息從哪里來?③When:開發(fā)工作的時(shí)間如何安排?④Who:開發(fā)或維護(hù)工作打算由誰來完成?⑤How:需求應(yīng)如何實(shí)現(xiàn)?⑥Why:為什么要進(jìn)行這些軟件開發(fā)或維護(hù)修改工作?

6.7.2軟件文檔應(yīng)該滿足的要求

總的說來,軟件文檔應(yīng)該滿足下述要求:

必須描述如何使用這個(gè)系統(tǒng),沒有這種描述時(shí)即使是最簡單的系統(tǒng)也無法使用;

必須描述怎樣安裝和管理這個(gè)系統(tǒng);

必須描述系統(tǒng)需求和設(shè)計(jì);

必須描述系統(tǒng)的實(shí)現(xiàn)和測(cè)試,以便使系統(tǒng)成為可維護(hù)的。

在項(xiàng)目開發(fā)過程中,應(yīng)該按要求編寫好11種文檔,文檔編制要求具有針對(duì)性、精確性、清晰性、完整性、靈活性、可追溯性。

(1)可行性分析報(bào)告。說明該軟件開發(fā)項(xiàng)目的實(shí)現(xiàn)在技術(shù)上、經(jīng)濟(jì)上和社會(huì)因素上的可行性,評(píng)述為了合理地達(dá)到開發(fā)目標(biāo)可供選擇的各種可能實(shí)施方案,說明并論證所選定實(shí)施方案的理由。

(2)項(xiàng)目開發(fā)計(jì)劃。為軟件項(xiàng)目實(shí)施方案制訂出具體計(jì)劃,應(yīng)該包括各部分工作的負(fù)責(zé)人員、開發(fā)的進(jìn)度、開發(fā)經(jīng)費(fèi)的預(yù)算、所需的硬件及軟件資源等。

(3)軟件需求說明書(軟件規(guī)格說明書)。對(duì)所開發(fā)軟件的功能、性能、用戶界面及運(yùn)行環(huán)境等做出詳細(xì)的說明。它是在用戶與開發(fā)人員雙方對(duì)軟件需求取得共同理解并達(dá)成協(xié)議的條件下編寫的,也是實(shí)施開發(fā)工作的基礎(chǔ)。該說明書應(yīng)給出數(shù)據(jù)邏輯和數(shù)據(jù)采集的各項(xiàng)要求,為生成和維護(hù)系統(tǒng)數(shù)據(jù)文件做好準(zhǔn)備。

(4)概要設(shè)計(jì)說明書。該說明書是概要實(shí)際階段的工作成果,它應(yīng)說明功能分配、模塊劃分、程序的總體結(jié)構(gòu)、輸入/輸出以及接口設(shè)計(jì)、運(yùn)行設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和出錯(cuò)處理設(shè)計(jì)等,為詳細(xì)設(shè)計(jì)提供基礎(chǔ)。

(5)詳細(xì)設(shè)計(jì)說明書。著重描述每一模塊是怎樣實(shí)現(xiàn)的,包括實(shí)現(xiàn)算法、邏輯流程等。

(6)用戶操作手冊(cè)。本手冊(cè)詳細(xì)描述軟件的功能、性能和用戶界面,使用戶對(duì)如何使用該軟件得到具體的了解,為操作人員提供該軟件各種運(yùn)行情況的有關(guān)知識(shí),特別是操作方法的具體細(xì)節(jié)。

(7)測(cè)試計(jì)劃。為做好集成測(cè)試和驗(yàn)收測(cè)試,需為如何組織測(cè)試制訂實(shí)施計(jì)劃。計(jì)劃應(yīng)包括測(cè)試的內(nèi)容、進(jìn)度、條件、人員、測(cè)試用例的選取原則、測(cè)試結(jié)果允許的偏差范

圍等。

(8)測(cè)試分析報(bào)告。測(cè)試工作完成以后,應(yīng)提交測(cè)試計(jì)劃執(zhí)行情況的說明,對(duì)測(cè)試結(jié)果加以分析,并提出測(cè)試的結(jié)論意見。

(9)開發(fā)進(jìn)度月報(bào)。該月報(bào)系軟件人員按月向管理部門提交的項(xiàng)目進(jìn)展情況報(bào)告,報(bào)告應(yīng)包括進(jìn)度計(jì)劃與實(shí)際執(zhí)行情況的比較、階段成果、遇到的問題和解決的辦法以及下個(gè)月的打算等。

(10)項(xiàng)目開發(fā)總結(jié)報(bào)告。軟件項(xiàng)目開發(fā)完成以后,應(yīng)與項(xiàng)目實(shí)施計(jì)劃對(duì)照,總結(jié)實(shí)際執(zhí)行的情況,如進(jìn)度、成果、資源利用、成本和投入的人力,此外,還需對(duì)開發(fā)工作做出評(píng)價(jià),總結(jié)出經(jīng)驗(yàn)和教訓(xùn)。

(11)軟件維護(hù)手冊(cè)。主要包括軟件系統(tǒng)說明、程序模塊說明、操作環(huán)境、支持軟件的說明、維護(hù)過程的說明,便于軟件的維護(hù)。

6.7.3對(duì)軟件文檔編制的質(zhì)量要求

為了使軟件文檔能起到多種橋梁作用,使它有助于程序員編制程序,有助于管理人員監(jiān)督和管理軟件開發(fā),有助于用戶了解軟件的工作和應(yīng)做的操作,有助于維護(hù)人員進(jìn)行有效的修改和擴(kuò)充,文檔的編制必須保證一定的質(zhì)量。

質(zhì)量差的軟件文檔不僅使讀者難于理解,給使用者造成許多不便,而且會(huì)削弱對(duì)軟件的管理(如管理人員難以確認(rèn)和評(píng)價(jià)開發(fā)工作的進(jìn)展),增加軟件的成本(如一些工作可能被迫返工),甚至造成更加有害的后果(如誤操作等)。造成軟件文檔質(zhì)量不高的原因可能是:缺乏實(shí)踐經(jīng)驗(yàn),缺乏評(píng)價(jià)文檔質(zhì)量的標(biāo)準(zhǔn);不重視文檔編寫工作或是對(duì)文檔編寫工作的安排不恰當(dāng)。

高質(zhì)量的文檔應(yīng)當(dāng)體現(xiàn)在以下幾個(gè)方面。

(1)針對(duì)性:文檔編制以前應(yīng)分清讀者對(duì)象,按不同的類型、不同層次的讀者,決定怎樣適應(yīng)他們的需要。例如,管理文檔主要是面向管理人員的,用戶文檔主要是面向用戶的,這兩類文檔不應(yīng)像開發(fā)文檔(面向軟件開發(fā)人員)那樣過多地使用軟件的專業(yè)術(shù)語。

(2)精確性:文檔的行文應(yīng)當(dāng)十分確切,不能出現(xiàn)多義性的描述。同一課題若干文檔內(nèi)容應(yīng)該協(xié)調(diào)一致,應(yīng)是沒有矛盾的。

(3)清晰性:文檔編寫應(yīng)力求簡明,如有可能,配以適當(dāng)?shù)膱D表,以增強(qiáng)其清晰性。

(4)完整性:任何一個(gè)文檔都應(yīng)當(dāng)是完整的、獨(dú)立的,它應(yīng)自成體系。例如,前言部分應(yīng)作一般性介紹,正文給出中心內(nèi)容,必要時(shí)還有附錄,列出參考資料等。同一課題的幾個(gè)文檔之間可能有些部分相同,這些重復(fù)是必要的。例如同一項(xiàng)目的用戶手冊(cè)和操作手冊(cè)中關(guān)于本項(xiàng)目功能、性能、實(shí)現(xiàn)環(huán)境等方面的描述是沒有差別的。特別要避免在文檔中出現(xiàn)轉(zhuǎn)引其他文檔內(nèi)容的情況。例如一些段落并未具體描述,而用“見××文檔××節(jié)”的方式,這將給讀者帶來許多不便。

(5)靈活性:各個(gè)不同的軟件項(xiàng)目,其規(guī)模和復(fù)雜程度有許多實(shí)際差別,不能同等對(duì)待。對(duì)于較小或較簡單的項(xiàng)目,可做適當(dāng)調(diào)整或合并。例如可將用戶手冊(cè)和操作手冊(cè)合并成用戶操作手冊(cè);軟件需求說明書可包括對(duì)數(shù)據(jù)的要求,從而去掉數(shù)據(jù)要求說明書;概要設(shè)計(jì)說明書與詳細(xì)設(shè)計(jì)說明書合并成軟件設(shè)計(jì)說明書等。

(6)可追溯性:由于各開發(fā)階段編制的文檔與各階段完成的工作有著緊密的關(guān)系,前后兩個(gè)階段生成的文檔,隨著開發(fā)工作的逐步擴(kuò)展,具有一定的繼承關(guān)系。在一個(gè)項(xiàng)目各開發(fā)階段之間提供文檔必定存在著可追溯的關(guān)系。例如某一項(xiàng)軟件需求,必定在設(shè)計(jì)說明書、測(cè)試計(jì)劃以至用戶手冊(cè)中有所體現(xiàn)。必要時(shí)應(yīng)能做到跟蹤追查。

6.7.4軟件文檔的管理和維護(hù)

在整個(gè)軟件生存期中,各種文檔作為半成品或是最終成品,會(huì)不斷地被生成、修改或補(bǔ)充。為了最終得到高質(zhì)量的產(chǎn)品,達(dá)到上節(jié)提出的質(zhì)量要求,必須加強(qiáng)對(duì)文檔的管理。以下幾個(gè)方面是應(yīng)注意做到的:

(1)軟件開發(fā)小組應(yīng)設(shè)一位文檔保管人員,負(fù)責(zé)集中保管本項(xiàng)目已有文檔的兩套主文本。兩套文本內(nèi)容完全一致。其中的一套可按一定手續(xù),辦理借閱。

(2)軟件開發(fā)小組的成員可根據(jù)工作需要在自己手中保存一些個(gè)人文檔。這些一般都應(yīng)是主文本的復(fù)制件,注意和主文本保持一致,在做必要的修改時(shí),也應(yīng)先修改主文本。

(3)開發(fā)人員個(gè)人只保存著主文本中與他工作相關(guān)的部分文檔。

(4)在新文檔取代了舊文檔時(shí),管理人員應(yīng)及時(shí)注銷舊文檔。在文檔內(nèi)容有更改時(shí),管理人員應(yīng)隨時(shí)修訂主文本,使其及時(shí)反映更新了的內(nèi)容。

(5)項(xiàng)目開發(fā)結(jié)束時(shí),文檔管理人員應(yīng)收回開發(fā)人員的個(gè)人文檔。發(fā)現(xiàn)個(gè)人文檔與主文本有差別時(shí),應(yīng)立即著手解決,這常常是未及時(shí)修訂主文本造成的。

(6)在軟件開發(fā)過程中,可能發(fā)現(xiàn)需要修改已完成的文檔,特別是規(guī)模較大的項(xiàng)目,主文本的修改必須特別謹(jǐn)慎。修改以前要充分估計(jì)修改可能帶來的影響,并且要按照提議、評(píng)議、審核、批準(zhǔn)和實(shí)施等步驟加以嚴(yán)格的控制。

軟件文檔作為一類配置項(xiàng),必須納入配置管理的范圍。在整個(gè)軟件生命周期中,通過軟件配置管理,控制這些配置項(xiàng)的投放和更改,記錄并報(bào)告配置的狀態(tài)和更改要求,驗(yàn)證配置項(xiàng)的安全性和正確性以及系統(tǒng)級(jí)上的一致性。上面所提到的文檔保管員,可能就是軟件配置管理員,可通過軟件配置信息數(shù)據(jù)庫,對(duì)配置項(xiàng)(主要是文檔)進(jìn)行跟蹤和控制。

6.8軟件逆向工程和再工程

所謂軟件再工程(Reengineering),是以軟件工程學(xué)為指導(dǎo),對(duì)老系統(tǒng)進(jìn)行重新設(shè)計(jì)、用更先進(jìn)的程序設(shè)計(jì)語言重新編碼、執(zhí)行新的測(cè)試過程、修改和更新系統(tǒng)結(jié)構(gòu)和系統(tǒng)數(shù)據(jù)、重新建立其文檔等方法,來提高老系統(tǒng)的可維護(hù)性。就是說,將新技術(shù)和新工具應(yīng)用于老系統(tǒng)的一種較徹底的預(yù)防性維護(hù)。

軟件再工程作為一種新的預(yù)防性維護(hù)方法,近年來得到很大發(fā)展。它通過逆向工程和軟件重構(gòu)等技術(shù),有效地提高現(xiàn)有軟件的可理解性、可維護(hù)性和復(fù)用性。

典型的軟件再工程過程模型如圖6-5所示,該模型定義了6類活動(dòng)。一般情況下,這些活動(dòng)是順序發(fā)生的,但每個(gè)活動(dòng)都可能重復(fù),形成一個(gè)循環(huán)的過程,這個(gè)過程可以在任意一個(gè)活動(dòng)之后結(jié)束。下面簡要地介紹該模型所定義的6類活動(dòng)。

圖6-5軟件再工程過程模型

1.庫存目錄分析

每個(gè)軟件組織都應(yīng)該保存其擁有的所有應(yīng)用系統(tǒng)的庫存目錄。該目錄包含關(guān)于每個(gè)應(yīng)用系統(tǒng)的基本信息,例如最初構(gòu)建時(shí)間、以往維護(hù)情況、訪問的數(shù)據(jù)庫、接口情況、文檔數(shù)量與質(zhì)量、代碼復(fù)雜性等。在確定對(duì)一個(gè)軟件實(shí)施再工程之前,應(yīng)收集這些數(shù)據(jù),根據(jù)業(yè)務(wù)重要程度、壽命、當(dāng)前可維護(hù)情況等對(duì)應(yīng)用軟件進(jìn)行分析,從中選出再工程的修造者,合理地分配再工程所需要的資源。

2.文檔重構(gòu)

文檔重構(gòu)就是重新構(gòu)建原本缺乏文檔的應(yīng)用系統(tǒng)的文檔。根據(jù)應(yīng)用系統(tǒng)的重要性和復(fù)雜性,可以選擇對(duì)文檔全部重構(gòu)或維持現(xiàn)狀。

老系統(tǒng)固有的特點(diǎn)是缺乏文檔。具體情況不同,處理這個(gè)問題的方法也不同:

(1)建立文檔非常耗費(fèi)時(shí)間,不可能為數(shù)百個(gè)程序都重新建立文檔。如果一個(gè)程序是相對(duì)穩(wěn)定的,正在走向其有用生命的終點(diǎn),而且可能不會(huì)再經(jīng)歷什么變化,那么,讓它保持現(xiàn)狀是一個(gè)明智的選擇。

(2)為了便于今后的維護(hù),必須更新文檔,但是由于資源有限,應(yīng)采用“使用時(shí)建文檔”的方法,也就是說,不是一下子把某應(yīng)用系統(tǒng)的文檔全部都重建起來,而是只針對(duì)系統(tǒng)中當(dāng)前正在修改的那些部分建立完整文檔。隨著時(shí)間流逝,將得到一組有用的和相關(guān)的文檔。

(3)如果某應(yīng)用系統(tǒng)是完成業(yè)務(wù)工作的關(guān)鍵,而且必須

溫馨提示

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

評(píng)論

0/150

提交評(píng)論