版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第七章軟件維護(hù)
一、復(fù)習(xí)要求
1.了解軟件質(zhì)量定義和軟件質(zhì)量度量。
2.了解軟件維護(hù)的類型與策略。
3.了解軟件維護(hù)的過程與管理方法。
4.了解可維護(hù)性的概念。
5.了解提高可維護(hù)性的方法。
6.了解軟件逆向工程與再工程的概念
二、內(nèi)容提要
1.軟件質(zhì)量的概念
(1)軟件質(zhì)量的定義
關(guān)于軟件質(zhì)量的定義,曾給出過多種定義。
■ANSI/IEEEStd729-1983定義軟件質(zhì)量為“與軟件產(chǎn)品滿足規(guī)定的和隱含的需求的能
力有關(guān)的特征或特性的全體”。
■M.J.Fisher定義軟件質(zhì)量為“所有描述計(jì)算機(jī)軟件優(yōu)秀程度的特性的組合”。
也就是說,為滿足軟件的各項(xiàng)精確定義的功能、性能需求,符合文檔化的開發(fā)標(biāo)準(zhǔn),需
要相應(yīng)地給出或設(shè)計(jì)一些質(zhì)量特性及其組合,作為在軟件開發(fā)與維護(hù)中的重要考慮因素。如
果這些質(zhì)量特性及其組合都能在產(chǎn)品中得到滿足,則這個(gè)軟件產(chǎn)品質(zhì)量就是高的。
軟件質(zhì)量反映了以下三方面的問題:
■軟件需求是度量軟件質(zhì)量的基礎(chǔ)。不符合需求的軟件就不具備質(zhì)量。
?規(guī)范化的標(biāo)準(zhǔn)定義了一組開發(fā)準(zhǔn)則,用來指導(dǎo)軟件人員用工程化的方法來開發(fā)軟件。
如果不遵守這些開發(fā)準(zhǔn)則,軟件質(zhì)量就得不到保證。
-往往會(huì)有一些隱含的需求沒有顯式地提出來。如軟件應(yīng)具備良好的可維護(hù)性。如果軟
件只滿足那些精確定義了的需求而沒有滿足這些隱含的需求,軟件質(zhì)量也不能保證。
軟件質(zhì)量是各種特性的復(fù)雜組合。它隨著應(yīng)用的不同而不同,隨著用戶提出的質(zhì)量要求
不同而不同。因此,有必要討論各種質(zhì)量特性,以及評(píng)價(jià)質(zhì)量的準(zhǔn)則,還要介紹為保證質(zhì)量
所進(jìn)行的各種活動(dòng)。
(2)軟件質(zhì)量特性與質(zhì)量模型
軟件質(zhì)量特性,反映了軟件的本質(zhì)。討論一個(gè)軟件的質(zhì)
量,問題最終要?dú)w結(jié)到定義軟件的質(zhì)量特性。而定義一個(gè)軟
件的質(zhì)量,就等價(jià)于為該軟件定義一系列質(zhì)量特性。
人們通常把影響軟件質(zhì)量的特性用軟件質(zhì)量模型來描
述。已有多種有關(guān)軟件質(zhì)量模型的方案。它們共同的特點(diǎn)是:
把軟件質(zhì)量特性定義成分層模型。最基本的叫做基本質(zhì)量特
圖7.1McCall質(zhì)量模型框架
1
性,它可以由一些子質(zhì)量特性定義和度量。子質(zhì)量特性在必要時(shí)又可由它的一些子質(zhì)量特性
定義和度量。
早在1976年,山Boehm等提出軟件質(zhì)量模型的分層方案。1979年McCall等人改進(jìn)Boehm
質(zhì)量模型又提出了一種軟件質(zhì)量模型。模型的三層次式框架如圖7.1所示。質(zhì)量模型中的質(zhì)
量概念基于11個(gè)特性之上。而這11個(gè)特性分別面向軟件產(chǎn)品的運(yùn)行、修正、轉(zhuǎn)移。它們與
特性的關(guān)系如圖7.2所示。McCall等認(rèn)為,特性是軟件質(zhì)量的反映,軟件屬性可用做評(píng)價(jià)準(zhǔn)
則,定量化地度量軟件屬性可知軟件質(zhì)量的優(yōu)劣。
正確性可靠性效率可使用性完整性
圖7.2McCall軟件質(zhì)量模型
McCall等人的質(zhì)量特性定義如下:
正確性在預(yù)定環(huán)境下,軟件滿足設(shè)計(jì)規(guī)格說明及用戶預(yù)期目標(biāo)的程度。它要求軟件本身沒
____________有錯(cuò)誤。__________________________________________________________________
可靠性軟件按照設(shè)計(jì)要求,在規(guī)定時(shí)間和條件下不出故障,持續(xù)運(yùn)行的程度。____________
效率為了完成預(yù)定功能,軟件系統(tǒng)所需的計(jì)算機(jī)資源的多少。
完整性為某一口的而保護(hù)數(shù)據(jù),避免它受到偶然的或右意的破壞、改動(dòng)或遺失的能力。
可使用性對(duì)于一個(gè)軟件系統(tǒng),用戶學(xué)習(xí)、使用軟件及為程序準(zhǔn)備輸入和解釋輸出所需工作量
的大小。
可維護(hù)性為滿足用戶新的要求,或當(dāng)環(huán)境發(fā)生了變化,或運(yùn)行中發(fā)現(xiàn)了新的錯(cuò)誤時(shí),對(duì)一個(gè)
____________已投入運(yùn)行的軟件進(jìn)行相應(yīng)診斷和修改所需工作量的大小。______________________
可測(cè)試性測(cè)試軟件以確保其能夠執(zhí)行預(yù)定功能所需工作量的大小。________________________
靈活性修改或改進(jìn)一個(gè)已投入運(yùn)行的軟件所需工作量的大小。
可移植性將一個(gè)軟件系統(tǒng)從一個(gè)計(jì)算機(jī)系統(tǒng)或環(huán)境移植到另一個(gè)計(jì)算機(jī)系統(tǒng)或環(huán)境中運(yùn)行時(shí)
所需工作量的大小。
可復(fù)用性一個(gè)軟件(或軟件的部件)能再次用于其它應(yīng)用(該應(yīng)用的功能與此軟件或軟件部件
的所完成的功能有關(guān))的程度。
互連性又稱相互操作性。連接一個(gè)軟件和其它系統(tǒng)所需工作量的大小。如果這個(gè)軟件要聯(lián)
網(wǎng)或與其它系統(tǒng)通信或要把其它系統(tǒng)納入到自己的控制之下,必須有系統(tǒng)間的接口,
________使之可以聯(lián)結(jié)。____________________________________________________________
對(duì)以上各個(gè)質(zhì)量特性直接進(jìn)行度量是很困難的,有些情況下甚至是不可能的。因此,
McCall定義了?些評(píng)價(jià)準(zhǔn)則,使用它們對(duì)反映質(zhì)量特性的軟件屬性分級(jí),以此來估計(jì)軟件質(zhì)
量特性的值。軟件屬性一般分級(jí)范圍從0(最低)到10(最高)。各評(píng)價(jià)準(zhǔn)則定義如下。
可跟蹤性在特定的開發(fā)和運(yùn)行環(huán)境下跟蹤設(shè)計(jì)表示或?qū)嶋H程序部件到原始需求的(可追溯)能
________生________________________________________________
完備性軟件需求充分實(shí)現(xiàn)的程度。__________________________________________________
一致性在整個(gè)軟件設(shè)計(jì)與實(shí)現(xiàn)的過程中技術(shù)與記號(hào)的統(tǒng)一程度。
安全性防止軟件受到意外的或蓄意的存取、使用、修改、毀壞,或防止泄密的程度。
2
容錯(cuò)性系統(tǒng)出錯(cuò)(機(jī)器臨時(shí)發(fā)生故障或數(shù)據(jù)輸入不合理)時(shí),能以某種預(yù)定方式,做出適當(dāng)
處理,得以繼續(xù)執(zhí)行和恢復(fù)系統(tǒng)的能力。它又稱健壯性。
準(zhǔn)確性能達(dá)到的計(jì)算或控制精度。它又稱精確性。
簡(jiǎn)單性在不復(fù)雜、可理解的方式下,定義和實(shí)現(xiàn)軟件功能的程度。
執(zhí)行效率為了實(shí)現(xiàn)某個(gè)功能,提供使用最少處理時(shí)間的程度。
存儲(chǔ)效率為了實(shí)現(xiàn)某個(gè)功能,提供使用最少存儲(chǔ)空間的程度。
存取控制軟件對(duì)用戶存取權(quán)限的控制方式達(dá)到的程度。
存取審杳軟件對(duì)用戶存取權(quán)限的檢行程度。
操作性操作軟件的難易程度。它通常取決于與軟件操作有關(guān)的操作規(guī)程,以及是否提供有
用的輸入/輸出方法。
易訓(xùn)練性軟件輔助新的用戶使用系統(tǒng)的能力。這取決于是否提供幫助用戶熟練掌握軟件系統(tǒng)
的方法。它又稱可培訓(xùn)性或培訓(xùn)性。
簡(jiǎn)明性軟件易讀的程度。這個(gè)特性可以幫助人們方便地閱讀本人或他人編制的程序和文檔。
它又稱可理解性。
模塊獨(dú)立軟件系統(tǒng)內(nèi)部接口達(dá)到的高內(nèi)聚、低耦合的程度。
性
自描述性對(duì)軟件功能進(jìn)行自我說明的程度。亦稱自含文檔性。
結(jié)構(gòu)性軟件能達(dá)到的結(jié)構(gòu)良好的程度.
文檔完備軟件文檔齊全、描述清楚、滿足規(guī)范或標(biāo)準(zhǔn)的程度。
性
通用性軟件功能覆蓋面寬廣的程度。
可擴(kuò)充性軟件的體系結(jié)構(gòu)、數(shù)據(jù)設(shè)計(jì)和過程設(shè)計(jì)的可擴(kuò)充的程度0
可修改性軟件容易修改,而不致于產(chǎn)生副作用的程度。
自檢性軟件監(jiān)測(cè)自身操作效果和發(fā)現(xiàn)自身錯(cuò)誤的能力,又稱工具性。
機(jī)器獨(dú)立不依賴于某個(gè)特定設(shè)備及計(jì)算機(jī)而能工作的程度,又稱硬件獨(dú)立性。
性
軟件獨(dú)立軟件不依賴于非標(biāo)準(zhǔn)程序設(shè)計(jì)語(yǔ)言特征、操作系統(tǒng)特征,或其它環(huán)境約束,僅靠自
性身能實(shí)現(xiàn)其功能的程度,又稱自包含性。
通信共享使用標(biāo)準(zhǔn)的通信協(xié)議、接口和帶寬的標(biāo)準(zhǔn)化的程度。
性
數(shù)據(jù)共享使用標(biāo)準(zhǔn)數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型的程度。
性
通信性提供有效的I/o方式的程度。
正確性和容錯(cuò)性是相互補(bǔ)充的。正確的程序不一定是可容錯(cuò)的程序。反過來,可容錯(cuò)的
程序不一定是完全正確的程序。我們要求個(gè)可靠的軟件應(yīng)當(dāng)在正常的情況下能夠正確地工
作;而在意外的情況下,也能做出適當(dāng)?shù)奶幚?,隔離故障,盡快地恢復(fù)。這才是一個(gè)好的程
序。此外,有人在靈活性中加了一個(gè)評(píng)價(jià)準(zhǔn)則,叫做“可重配置特性”,它是指軟件系統(tǒng)本身
各部分的配置能按用戶要求實(shí)現(xiàn)的容易程度。在簡(jiǎn)明性中也加了一個(gè)評(píng)價(jià)準(zhǔn)則,即“清晰性”,
它是指軟件的內(nèi)部結(jié)構(gòu)、內(nèi)部接口要清晰,人一機(jī)界面要清晰。
(3)ISO的軟件質(zhì)量評(píng)價(jià)模型
ISO/IEC9126-1991標(biāo)準(zhǔn)規(guī)定的軟件質(zhì)量模型由三層組成。在這個(gè)標(biāo)準(zhǔn)中,三層次中的
第一層為稱為質(zhì)量特性,第二層稱為質(zhì)量子特性,第三層稱為度量。如圖7.3所示。該標(biāo)準(zhǔn)
定義了6個(gè)質(zhì)量特性,即功能性、可靠性、可維護(hù)性、效率、可使用性、可移植性;并推薦
了21個(gè)子特性,如適合性、準(zhǔn)確性、互操作性、依從性、安全性、成熟性、容錯(cuò)性、易恢復(fù)
3
性、易理解性、易學(xué)習(xí)性、易操作性、時(shí)間特性、資源特性、易分析性、易變更性、穩(wěn)定性、
易測(cè)試性、適應(yīng)性、易安裝性、遵循性、易替換性,但不做為標(biāo)準(zhǔn)。用于評(píng)價(jià)質(zhì)量子特性的
度量沒有統(tǒng)一的標(biāo)準(zhǔn),由各使用單位視實(shí)際情況制定。
(4)軟件質(zhì)量特性之間的競(jìng)爭(zhēng)
在軟件的質(zhì)量特性與質(zhì)量特性之間、質(zhì)量特性與子特性之間存在著有利影響和不利影
響,若用表示該質(zhì)量特性對(duì)質(zhì)量特性有有利影響;用“▽”表示該質(zhì)量特性對(duì)質(zhì)量特
性有不利影響。則有下面表7』所示的關(guān)系。例如,由于效率的要求,應(yīng)盡可能采用匯編語(yǔ)
言。但是用匯編語(yǔ)言編制出的程序,可靠性、可移植性以及可維護(hù)性都很差。在進(jìn)行軟件質(zhì)
量設(shè)計(jì)時(shí),必須考慮利弊,全面權(quán)衡,根據(jù)質(zhì)量需求,適當(dāng)合理地選擇/設(shè)計(jì)質(zhì)量特性,并
進(jìn)行評(píng)價(jià)。
質(zhì)量特性質(zhì)量子特性度量
適合性
準(zhǔn)確性
功能性互操作性
依從性
安全性
成熟性度
量
可靠性容錯(cuò)性
易恢復(fù)性由
軟
使
件易理解性
質(zhì)用
可使用性易學(xué)習(xí)性
量
易操作性單
時(shí)間特性位
效率
資源特性自
易分析性行
穩(wěn)定性
可維護(hù)性
易變更性
易測(cè)試性
適應(yīng)性
易安裝性
可移植性
遵循性
易替換性
圖7.3ISO軟件質(zhì)量度量模型
表7.1各質(zhì)量特性與質(zhì)量特性之間的關(guān)系
功能性可靠性可使用性效率可維護(hù)性可移植性
功能性△△
可靠性V△
可使用性V△△
效率VVV
可維護(hù)性△V△
可移植性VV
4
(5)質(zhì)量活動(dòng)
產(chǎn)品的高質(zhì)量將導(dǎo)致成本的下降。質(zhì)量活動(dòng)開始于20世紀(jì)40年代E.EdwardsDeming
的開創(chuàng)性工作,由日本人發(fā)揚(yáng)廣大,他們開發(fā)了一種系統(tǒng)化的方法以從根本上消除造成產(chǎn)品
缺陷的原因。1970年代到1980年代,他們的工作移植到西方,稱為“全面質(zhì)量管理(TQC)”。
該活動(dòng)采用的是4個(gè)步驟的過程:
①開展:是一個(gè)連續(xù)的過程改進(jìn)體系,其目的是開發(fā)一個(gè)看得見的可重復(fù)的和可度量
的過程;
②當(dāng)然的質(zhì)量:只有在前?步完成之后才可啟動(dòng)。這一步將檢查影響過程的無形因素,
并優(yōu)化這些因素對(duì)過程的影響。例如,軟件過程可能受到高層職員流動(dòng)的影響,而這又是由
于公司內(nèi)部不斷重組引起的。公司組織的穩(wěn)定對(duì)于軟件質(zhì)量的提高有很大幫助,因此在這一
步可以對(duì)公司的重組提出建議。
③感性:意指“第五感覺”。這一步從過程轉(zhuǎn)到用戶身上。通過檢查用戶使用軟件產(chǎn)品
的情況,改進(jìn)產(chǎn)品本身,并(潛在地)改進(jìn)軟件產(chǎn)品的生產(chǎn)過程。
④有魅力的質(zhì)量:通過觀察產(chǎn)品在市場(chǎng)上的使用,尋找產(chǎn)品在相關(guān)領(lǐng)域發(fā)展的方向,
從而開發(fā)出有預(yù)見性的新產(chǎn)品。
2.軟件維護(hù)的概念
(1)軟件維護(hù)的定義
我們稱在軟件運(yùn)行/維護(hù)階段對(duì)軟件產(chǎn)品所進(jìn)行的修改就是所謂的維護(hù)。要求進(jìn)行維護(hù)
的原因多種多樣,歸結(jié)起來有三種類型:
■改正在特定的使用條件下暴露出來的一些潛在程序錯(cuò)誤或設(shè)計(jì)缺陷;
■因在軟件使用過程中數(shù)據(jù)環(huán)境發(fā)生變化或處理環(huán)境發(fā)生變化,需要修改軟件以適應(yīng)這
種變化。
■用戶和數(shù)據(jù)處理人員在使用時(shí)常提HI改進(jìn)現(xiàn)有功能,增加新的功能,以及改善總體性
能的要求,為滿足這些要求,就需要修改軟件把這些要求納入到軟件之中。
由這些原因引起的維護(hù)活動(dòng)可以歸為以下幾類:
①改正性維護(hù)
在軟件交付使用后,必然會(huì)有一部分隱藏的錯(cuò)誤被帶到運(yùn)行階段來。這些隱藏下來的錯(cuò)
誤在某些特定的使用環(huán)境下就會(huì)暴露出來。為了識(shí)別和糾正軟件錯(cuò)誤、改正軟件性能上的缺
陷、排除實(shí)施中的誤使用,應(yīng)當(dāng)進(jìn)行的診斷和改正錯(cuò)誤的過程,就叫做改正性維護(hù)。
②適應(yīng)性維護(hù)
隨著計(jì)算機(jī)的匕速發(fā)展,外部環(huán)境(新的硬、軟件配置)或數(shù)據(jù)環(huán)境(數(shù)據(jù)庫(kù)、數(shù)據(jù)格式、
數(shù)據(jù)輸入/輸出方式、數(shù)據(jù)存儲(chǔ)介質(zhì))可能發(fā)生變化,為了使軟件適應(yīng)這種變化,而去修改軟
件的過程就叫做適應(yīng)性維護(hù)。
③完善性維護(hù)
在軟件的使用過程中,用戶往往會(huì)對(duì)軟件提出新的功能與性能要求。為了滿足這些要求,
需要修改或再開發(fā)軟件,以擴(kuò)充軟件功能、增強(qiáng)軟件性能、改進(jìn)加工效率、提高軟件的可維
護(hù)性。這種情況下進(jìn)行的維護(hù)活動(dòng)叫做完善性維護(hù)。
在維護(hù)階段的最初一、二年,改正性維護(hù)的工作量較大。隨著錯(cuò)誤發(fā)現(xiàn)率急劇降低,并
趨于穩(wěn)定,就進(jìn)入了正常使用期。然而,由于改造的要求,適應(yīng)性維護(hù)和完善性維護(hù)的工作
量逐步增加。實(shí)踐表明,在幾種維護(hù)活動(dòng)中,完善性維護(hù)所占的比重最大,來自用戶要求擴(kuò)
充、加強(qiáng)軟件功能、性能的維護(hù)活動(dòng)約占整個(gè)維護(hù)工作的50%。
5
④預(yù)防性維護(hù)
除了以上三類維護(hù)之外,還有一類維護(hù)活動(dòng),叫做預(yù)防性維護(hù)。這是為了提高軟件的可
維護(hù)性、可靠性等,為以后進(jìn)一步改進(jìn)軟件打下良好基礎(chǔ)。通常,預(yù)防性維護(hù)定義為:“把今
天的方法學(xué)用于昨天的系統(tǒng)以滿足明天的需要”。也就是說,采用先進(jìn)的軟件工程方法對(duì)需要
維護(hù)的軟件或軟件中的某一部分(重新)進(jìn)行設(shè)計(jì)、編制和測(cè)試。
在整個(gè)軟件維護(hù)階段所花費(fèi)的全部工作量中,預(yù)防性維護(hù)只占很小的比例,而完善性維護(hù)占
了幾乎一半的工作量。參看圖7.4。從圖7.5中可以看到,軟件維護(hù)活動(dòng)所花費(fèi)的工作占整個(gè)
生存期工作量的70%以上。
(2)影響維護(hù)工作量的因素
在軟件維護(hù)中,影響維護(hù)工作量的程序特性有以下6種。
■系統(tǒng)大?。合到y(tǒng)越大,理解掌握起來越困難。系統(tǒng)越大,所執(zhí)行功能越復(fù)雜。因而需
要更多的維護(hù)工作量。
■程序設(shè)計(jì)語(yǔ)言:語(yǔ)言的功能越強(qiáng),生成程序所需的指令數(shù)就越少;語(yǔ)言的功能越弱,
實(shí)現(xiàn)同樣功能所需語(yǔ)句就越多,程序就越大。有許多軟件是用較老的程序設(shè)計(jì)語(yǔ)言書寫的,
程序邏輯復(fù)雜而混亂,且沒有做到模塊化和結(jié)構(gòu)化,直接影響到程序的可讀性。
-系統(tǒng)年齡:老系統(tǒng)隨著不斷的修改,結(jié)構(gòu)越來越亂;由于維護(hù)人員經(jīng)常更換,程序又
變得越來越難于理解。而且許多老系統(tǒng)在當(dāng)初并未按照軟件工程的要求進(jìn)行開發(fā),因而沒有
文檔,或文檔太少,或在長(zhǎng)期的維護(hù)過程中文檔在許多地方與程序?qū)崿F(xiàn)變得不一致,這樣在
維護(hù)時(shí)就會(huì)遇到很大困難。
■數(shù)據(jù)庫(kù)技術(shù)的應(yīng)用:使用數(shù)據(jù)庫(kù),可以簡(jiǎn)單而有效地管理和存儲(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ù)等,可減少大量的工作量。
■其它:例如,應(yīng)用的類型、數(shù)學(xué)模型、任務(wù)的難度、開關(guān)與標(biāo)記、IF嵌套深度、索引
或下標(biāo)數(shù)等,對(duì)維護(hù)工作量都有影響。
此外,許多軟件在開發(fā)時(shí)并未考慮將來的修改,這就為軟件的維護(hù)帶來許多問題。
(3)軟件維護(hù)的策略
根據(jù)影響軟件維護(hù)工作量的各種因素,針對(duì)三種典型的維護(hù),JamesMartin等提出了一
些策略,以控制維護(hù)成本.
①改正性維護(hù)
要生成100%可靠的軟件成本太高,不一定合算。但通過使用新技術(shù),可大大提高可靠
性,減少進(jìn)行改正性維護(hù)的需要。這些技術(shù)包括:數(shù)據(jù)庫(kù)管理系統(tǒng)、軟件開發(fā)環(huán)境、程序自
動(dòng)生成系統(tǒng)、較高級(jí)(第四代)的語(yǔ)言,應(yīng)用以上4種方法可產(chǎn)生更加可靠的代碼。此外,
6
■利用應(yīng)用軟件包,可開發(fā)出比由用戶完全自己開發(fā)的系統(tǒng)可靠性更高的軟件。
-結(jié)構(gòu)化技術(shù),用它開發(fā)的軟件易于理解和測(cè)試。
■防錯(cuò)性程序設(shè)計(jì)。把自檢能力引入程序,通過非正常狀態(tài)的檢查,提供審查跟蹤。
-通過周期性維護(hù)審查,在形成維護(hù)問題之前就可確定質(zhì)量缺陷。
②適應(yīng)性維護(hù)
這一類的維護(hù)不可避免,但可以控制。
■在配置管理時(shí).,把硬件、操作系統(tǒng)和其它相關(guān)環(huán)境因素的可能變化考慮在內(nèi),可以減
少某些適應(yīng)性維護(hù)的工作量。
■把與硬件、操作系統(tǒng),以及其它外圍設(shè)備有關(guān)的程序歸到特定的程序模塊中??砂岩?/p>
環(huán)境變化而必須修改的程序局部于某些程序模塊之中。
■使用內(nèi)部程序列表、外部文件,以及處理的例行程序包,可為維護(hù)時(shí)修改程序提供方
便。
③完善性維護(hù)
利用前兩類維護(hù)中列舉的方法,也可以減少這一類維護(hù)。特別是數(shù)據(jù)庫(kù)管理系統(tǒng)、程序
生成器、應(yīng)用軟件包,可減少系統(tǒng)或程序員的維護(hù)工作量。
此外,建立軟件系統(tǒng)的原型,把它在實(shí)際系統(tǒng)開發(fā)之前提供給用戶。用戶通過研究原型,
進(jìn)一步完善他們的功能要求,就可以減少以后完善性維護(hù)的需要。
(4)維護(hù)成本
有形的軟件維護(hù)成本是花費(fèi)了多少錢,而其它非直接的的維護(hù)成本有更大的影響。例如,
無形的成本可以是:
■一些看起來是合理的修復(fù)或修改請(qǐng)求不能及時(shí)安排,使得客戶不滿意;
■變更的結(jié)果把一些潛在的錯(cuò)誤引入正在維護(hù)的軟件,使得軟件整體質(zhì)量下降;
■當(dāng)必須把軟件人員抽調(diào)到維護(hù)工作中去時(shí),就使得軟件開發(fā)工作受到干擾。
軟件維護(hù)的代價(jià)是在生產(chǎn)率方面的驚人下降。有報(bào)告說,生產(chǎn)率將降到原來的40分之
一。維護(hù)工作量可以分成生產(chǎn)性活動(dòng)(如分析和評(píng)價(jià)、設(shè)計(jì)修改和實(shí)現(xiàn))和“輪轉(zhuǎn)”活動(dòng)(如力
圖理解代碼在做什么、試圖判明數(shù)據(jù)結(jié)構(gòu)、接口特性、性能界限等)。下面的公式給出了一個(gè)
維護(hù)工作量的模型:
M=p+Kec-d
其中,M是維護(hù)中消耗的總工作量,p是上面描述的生產(chǎn)性工作量,K是一個(gè)經(jīng)驗(yàn)常數(shù),c
是因缺乏好的設(shè)計(jì)和文檔而導(dǎo)致復(fù)雜性的度量,d是對(duì)軟件熟悉程度的度量。
這個(gè)模型指明,如果使用了不好的軟件開發(fā)方法(未按軟件工程要求做),原來參加開發(fā)
的人員或小組不能參加維護(hù),則工作量(及成本)將按指數(shù)級(jí)增加。
3.軟件維護(hù)活動(dòng)
(1)維護(hù)機(jī)構(gòu)
除了較大的軟件開發(fā)公司外,通常在軟件維護(hù)工作方面,不保持正式的維護(hù)機(jī)構(gòu)。維護(hù)
往往是在沒有計(jì)劃的情況下進(jìn)行的。雖然不要求建立一個(gè)正式的維護(hù)機(jī)構(gòu),但是在開發(fā)部門,
確立一個(gè)非正式的維護(hù)機(jī)構(gòu)則是非常必要的。例如圖7.6就是一個(gè)維護(hù)機(jī)構(gòu)的組織方案。
7
維護(hù)人員
圖7.6軟件維護(hù)的機(jī)構(gòu)
維護(hù)申請(qǐng)?zhí)峤唤o一個(gè)維護(hù)管理員,他把申請(qǐng)交給某個(gè)系統(tǒng)監(jiān)督員去評(píng)價(jià)。?旦做出評(píng)價(jià),
由修改負(fù)責(zé)人確定如何進(jìn)行修改。在維護(hù)人員對(duì)程序進(jìn)行修改的過程中,由配置管理員嚴(yán)格
把關(guān),控制修改的范圍,對(duì)軟件配置進(jìn)行審計(jì)。
維護(hù)管理員、系統(tǒng)監(jiān)督員、修改負(fù)責(zé)人等,均代表維護(hù)工作的某個(gè)職責(zé)范圍。修改負(fù)責(zé)
人、維護(hù)管理員可以是指定的某個(gè)人,也可以是一個(gè)包括管理人員、高級(jí)技術(shù)人員在內(nèi)的小
組。系統(tǒng)監(jiān)督員可以有其他職責(zé),但應(yīng)具體分管某一個(gè)軟件包。
在開始維護(hù)之前,就把責(zé)任明確下來,可以大大減少維護(hù)過程中的混亂。
(2)軟件維護(hù)工作流程
先確認(rèn)維護(hù)要求。這需要維護(hù)人員與用戶反復(fù)協(xié)商,弄清錯(cuò)誤概況以及對(duì)亞務(wù)的影
響大小,以及用戶希望做什么樣的修改。然后由維護(hù)組織管理員確認(rèn)維護(hù)類型。
對(duì)于改正性維護(hù)申請(qǐng),從評(píng)價(jià)錯(cuò)誤的嚴(yán)重性開始。如果存在嚴(yán)重的錯(cuò)誤,則必須安
排人員,在系統(tǒng)監(jiān)督員的指導(dǎo)下,進(jìn)行問題分析,尋找錯(cuò)誤發(fā)生的原因,進(jìn)行“救火”性的
緊急維護(hù);對(duì)于不嚴(yán)重的錯(cuò)誤,可根據(jù)任務(wù)、機(jī)時(shí)情況、視輕重緩急,進(jìn)行排隊(duì),統(tǒng)一安排
時(shí)間。
對(duì)于適應(yīng)性維護(hù)和完善性維護(hù)申請(qǐng),需要先確定每項(xiàng)申請(qǐng)的優(yōu)先次序。若某項(xiàng)申請(qǐng)
的優(yōu)先級(jí)非常高,就可立即開始維護(hù)工作,否則,維護(hù)申請(qǐng)和其它的開發(fā)工作一樣,進(jìn)行排
隊(duì),統(tǒng)一安排時(shí)間。
盡管維護(hù)申請(qǐng)的類型不同,但都要進(jìn)行同樣的技術(shù)工作。這些工作有:修改軟件需
求說明、修改軟件設(shè)計(jì)、設(shè)計(jì)評(píng)審、對(duì)源程序做必要的修改、單元測(cè)試、集成測(cè)試(回歸測(cè)
試)、確認(rèn)測(cè)試、軟件配置評(píng)審等。
在每次軟件維護(hù)任務(wù)完成后,最好進(jìn)行一次情況評(píng)審,確認(rèn):在目前情況下,設(shè)計(jì)、
編碼、測(cè)試中的哪一方面可以改進(jìn)?哪些維護(hù)資源應(yīng)該有但沒有?工作中主要的或次要的障
礙是什么?從維護(hù)申請(qǐng)的類型來看是否應(yīng)當(dāng)有預(yù)防性維護(hù)?
(3)維護(hù)評(píng)價(jià)
評(píng)價(jià)維護(hù)活動(dòng)比較困難,因?yàn)槿狈煽康臄?shù)據(jù)。但如果維護(hù)記錄做得比較好,就可以得
出一些維護(hù)“性能”方面的度量值。可參考的度量值如:
每次程序運(yùn)行時(shí)的平均出錯(cuò)次數(shù);
花費(fèi)在每類維護(hù)上的總“人時(shí)”數(shù);
每個(gè)程序、每種語(yǔ)言、每種維護(hù)類型的程序平均修改次數(shù);
8
因?yàn)榫S護(hù),增加或刪除每個(gè)源程序語(yǔ)句所花費(fèi)的平均“人時(shí)”數(shù);
用于每種語(yǔ)言的平均“人時(shí)”數(shù);
維護(hù)申請(qǐng)報(bào)告的平均處理時(shí)間;
各類維護(hù)申請(qǐng)的百分比。
這七種度量值提供了定量的數(shù)據(jù),據(jù)此可對(duì)開發(fā)技術(shù)、語(yǔ)言選擇、維護(hù)工作計(jì)劃、資源
分配、以及其它許多方面做出判定。因此,這些數(shù)據(jù)可以用來評(píng)價(jià)維護(hù)工作。
4.程序修改的步驟及修改的副作用
(1)分析和理解程序
經(jīng)過分析,全面、準(zhǔn)確、迅速地理解程序是決定維護(hù)成敗和質(zhì)量好壞的關(guān)鍵。在這方面,
軟件的可理解性和文檔的質(zhì)量非常重要。必須:
理解程序的功能和目標(biāo);
掌握程序的結(jié)構(gòu)信息,即從程序中細(xì)分出若干結(jié)構(gòu)成分。如程序系統(tǒng)結(jié)構(gòu)、控制結(jié)
構(gòu)、數(shù)據(jù)結(jié)構(gòu)和輸入/輸出結(jié)構(gòu)等;
了解數(shù)據(jù)流信息,即所涉及到的數(shù)據(jù)來源何處,在哪里被使用;
了解控制流信息,即執(zhí)行每條路徑的結(jié)果;
理解程序的操作(使用)要求;
為了容易地理解程序,要求自頂向下地理解現(xiàn)有源程序的程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu),為此可
采用如下方法:
①分析程序結(jié)構(gòu)圖:
分析各個(gè)過程的源代碼,建立一個(gè)直接調(diào)用矩陣D或調(diào)用樹。
建立過程的間接調(diào)用矩陣。
分析各個(gè)過程的接口,估計(jì)更改的復(fù)雜性。
②數(shù)據(jù)跟蹤
建立各層次的程序級(jí)上的接口圖,展示各模塊或過程的調(diào)用方式和接口參數(shù);
利用數(shù)據(jù)流分析方法,對(duì)過程內(nèi)部的一些變量進(jìn)行跟蹤;維護(hù)人員通過這種數(shù)據(jù)流
跟蹤,可獲得有關(guān)數(shù)據(jù)在過程間如何傳遞,在過程內(nèi)如何處理等信息。
③控制跟蹤
控制流跟蹤同樣可在結(jié)構(gòu)圖基礎(chǔ)上或源程序基礎(chǔ)上進(jìn)行??刹捎梅?hào)執(zhí)行或?qū)嶋H動(dòng)態(tài)跟
蹤的方法,了解數(shù)據(jù)如何從一個(gè)輸入源到達(dá)輸出點(diǎn)的。
④在分析的過程中,充分閱讀和使用源程序清單和文檔,分析現(xiàn)有文檔的合理性。
⑤充分使用由編譯程序或匯編程序提供的交叉引用表、符號(hào)表、以及其它有用的信息。
⑥如有可能,積極參加開發(fā)工作。
(2)修改程序
對(duì)程序的修改,必須事先做出計(jì)劃,有預(yù)謀地、周密有效地實(shí)施修改。
①設(shè)計(jì)程序的修改計(jì)劃
程序的修改計(jì)劃要考慮人員和資源的安排。修改計(jì)劃的內(nèi)容主要包括:
規(guī)格說明信息:數(shù)據(jù)修改、處理修改、作業(yè)控制語(yǔ)言修改、系統(tǒng)之間接口的修改等;
維護(hù)資源:新程序版本、測(cè)試數(shù)據(jù)、所需的軟件系統(tǒng)、計(jì)算機(jī)時(shí)間等;
人員:程序員、用戶相關(guān)人員、技術(shù)支持人員、廠家聯(lián)系人、數(shù)據(jù)錄入員等;
提供:紙面、計(jì)算機(jī)媒體等。
針對(duì)以上每一項(xiàng),要說明必要性、從何處著手、是否接受、日期等。通常,可采用自頂
向下的方法,在理解程序的基礎(chǔ)上,
i)研究程序的各個(gè)模塊、模塊的接口、及數(shù)據(jù)庫(kù),從全局的觀點(diǎn),提出修改計(jì)劃。
9
ii)依次地把要修改的、以及那些受修改影響的模塊和數(shù)據(jù)結(jié)構(gòu)分離出來。為此,要
識(shí)別受修改影響的數(shù)據(jù);
識(shí)別使用這些數(shù)據(jù)的程序模塊;
對(duì)于上面程序模塊,按是產(chǎn)生數(shù)據(jù)、修改數(shù)據(jù)、還是刪除數(shù)據(jù)進(jìn)行分類;
識(shí)別對(duì)這些數(shù)據(jù)元素的外部控制信息;
識(shí)別編輯和檢查這些數(shù)據(jù)元素的地方;
隔離要修改的部分;
iii)詳細(xì)地分析要修改的、以及那些受變更影響的模塊和數(shù)據(jù)結(jié)構(gòu)的內(nèi)部細(xì)節(jié),設(shè)計(jì)修
改計(jì)戈I,標(biāo)明新邏輯及要改動(dòng)的現(xiàn)有邏輯。
iv)向用戶提供回避措施。用戶的某些業(yè)務(wù)因軟件中發(fā)生問題而中斷,為不讓系統(tǒng)長(zhǎng)時(shí)
間停止運(yùn)行,需把問題局部化,在可能的范圍內(nèi)繼續(xù)開展業(yè)務(wù)??梢圆扇〉拇胧┯校?/p>
在問題的原因還未找到時(shí),先就問題的現(xiàn)象,提供回避的操作方法。
如果弄清了問題的原因,可通過臨時(shí)修改或改變運(yùn)行控制以回避在系統(tǒng)運(yùn)行時(shí)產(chǎn)
生的問題。
②修改代碼,以適應(yīng)變化
正確、有效地編寫修改代碼;
要謹(jǐn)慎地修改程序,盡量保持程序的風(fēng)格及格式,要在程序清單上注明改動(dòng)的指令;
不要?jiǎng)h除程序語(yǔ)句,除非完全肯定它是無用的;
不要試圖共用程序中已有的臨時(shí)變量或工作區(qū),為了避免沖突或混淆用途,應(yīng)自行
設(shè)置自己的變量;
插入錯(cuò)誤檢測(cè)語(yǔ)句;
在修改過程中做好修改的詳細(xì)記錄,消除變更中任何有害的副作用(波動(dòng)效應(yīng)):
③修改程序的副作用
所謂副作用是指因修改軟件而造成的錯(cuò)誤或其它不希望發(fā)生的情況,有三種副作用:
修改代碼的副作用。在使用程序設(shè)計(jì)語(yǔ)言修改源代碼時(shí),都可能引入錯(cuò)誤。例如,
刪除或修改一個(gè)子程序、刪除或修改一個(gè)標(biāo)號(hào)、刪除或修改一個(gè)標(biāo)識(shí)符、改變程序代碼的時(shí)
序關(guān)系、改變占用存儲(chǔ)的大小、改變邏輯運(yùn)算符、修改文件的打開或關(guān)閉、改進(jìn)程序的執(zhí)行
效率,以及把設(shè)計(jì)上的改變翻譯成代碼的改變、為邊界條件的邏輯測(cè)試做出改變時(shí),都容易
引入錯(cuò)誤。
修改數(shù)據(jù)的副作用。在修改數(shù)據(jù)結(jié)構(gòu)時(shí),有可能造成軟件設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)不匹配,
因而導(dǎo)致軟件出錯(cuò)。數(shù)據(jù)副作用就是修改軟件信息結(jié)構(gòu)導(dǎo)致的結(jié)果。例如,在重新定義局部
的或全局的常量、重新定義記錄或文件的格式、增大或減小一個(gè)數(shù)組或高層數(shù)據(jù)結(jié)構(gòu)的大小、
修改全局或公共數(shù)據(jù)、重新初始化控制標(biāo)志或指針、重新排列輸入/輸出或子程序的參數(shù)時(shí),
容易導(dǎo)致設(shè)計(jì)與數(shù)據(jù)不相容的錯(cuò)誤。數(shù)據(jù)副作用可以通過詳細(xì)的設(shè)計(jì)文檔加以控制。在此文
檔中描述了一種交叉引用,把數(shù)據(jù)元素、記錄、文件和其它結(jié)構(gòu)聯(lián)系起來。
文檔的副作用。對(duì)數(shù)據(jù)流、軟件結(jié)構(gòu)、模塊邏輯或任何其它有關(guān)特性進(jìn)行修改時(shí),
必須對(duì)相關(guān)技術(shù)文檔進(jìn)行相應(yīng)修改。否則會(huì)導(dǎo)致文檔與程序功能不匹配,缺省條件改變,新
錯(cuò)誤信息不正確等錯(cuò)誤。使得軟件文檔不能反映軟件的當(dāng)前狀態(tài)。對(duì)于用戶來說,軟件事實(shí)
上就是文檔。如果對(duì)可執(zhí)行軟件的修改不反映在文檔里,就會(huì)產(chǎn)生文檔的副作用。例如,對(duì)
交互輸入的順序或格式進(jìn)行修改,如果沒有正確地記入文檔中,就可能引起重大的問題。過
時(shí)的文檔內(nèi)容、索引和文本可能造成沖突,引起用戶的失敗和不滿。因此,必須在軟件交付
之前對(duì)整個(gè)軟件配置進(jìn)行評(píng)審,以減少文檔的副作用。
為了控制因修改而引起的副作用,要做到:
D按模塊把修改分組;
10
ii)自頂向下地安排被修改模塊的順序;
iii)每次修改一個(gè)模塊;
iv)對(duì)于每個(gè)修改了的模塊,在安排修改下一個(gè)模塊之前,要確定這個(gè)修改的副作用。
可以使用交叉引用表、存儲(chǔ)映象表、執(zhí)行流程跟蹤等。
(3)重新驗(yàn)證程序
在將修改后的程序提交用戶之前,需要用以下的方法進(jìn)行充分的確認(rèn)和測(cè)試,以保證整
個(gè)修改后的程序的正確性。
①靜態(tài)確認(rèn)
修改軟件,伴隨著引起新的錯(cuò)誤的危險(xiǎn)。為了能夠做出正確的判斷,驗(yàn)證修改后的程序
至少需要兩個(gè)人參加。要檢查
修改是否涉及到規(guī)格說明?修改結(jié)果是否符合規(guī)格說明?有沒有歪曲規(guī)格說明?
程序的修改是否足以修正軟件中的問題?源程序代碼有無邏輯錯(cuò)誤?修改時(shí)有無修
補(bǔ)失誤?
修改部分對(duì)其它部分有無不良影響(副作用)?
對(duì)軟件進(jìn)行修改,常常會(huì)引發(fā)別的問題,因此有必要檢查修改的影響范圍。
②計(jì)算機(jī)確認(rèn)
在充分進(jìn)行了以上確認(rèn)的基礎(chǔ)上,要用計(jì)算機(jī)對(duì)修改程序進(jìn)行確認(rèn)測(cè)試:
確認(rèn)測(cè)試順序:先對(duì)修改部分進(jìn)行測(cè)試,然后隔離修改部分,測(cè)試程序的未修改部
分,最后再把它們集成起來進(jìn)行測(cè)試。這種測(cè)試稱為回歸測(cè)試。
準(zhǔn)備標(biāo)準(zhǔn)的測(cè)試用例。
充分利用軟件工具幫助重新驗(yàn)證過程。
在重新確認(rèn)過程中,需邀請(qǐng)用戶參加。
③維護(hù)后的驗(yàn)收——在交付新軟件之前,維護(hù)主管部門要檢驗(yàn):
全部文檔是否完備,并已更新;
所有測(cè)試用例和測(cè)試結(jié)果己經(jīng)正確記載;
記錄軟件配置所有副本的工作已經(jīng)完成;
維護(hù)工序和責(zé)任已經(jīng)確定。
從維護(hù)角度來看所需測(cè)試種類如:
令對(duì)■修改事務(wù)的測(cè)試;令對(duì)修改程序的測(cè)試;
令操作過程的測(cè)試;令應(yīng)用系統(tǒng)運(yùn)用過程的測(cè)試;
令使用過程的測(cè)試;令系統(tǒng)各部分之間接口的測(cè)試;
令作業(yè)控制語(yǔ)言的測(cè)試;令與系統(tǒng)軟件接口的測(cè)試;
令軟件系統(tǒng)之間接口的測(cè)試;令安全性測(cè)試;
令后備/恢復(fù)過程的測(cè)試。
5.軟件可維護(hù)性
(1)軟件可維護(hù)性的定義
所謂軟件可維護(hù)性,是指糾正軟件系統(tǒng)出現(xiàn)的錯(cuò)誤和缺陷,以及為滿足新的要求進(jìn)行修
改、擴(kuò)充或壓縮的容易程度??删S護(hù)性、可使用性、可靠性是衡量軟件質(zhì)量的幾個(gè)主要質(zhì)量
特性,也是用戶十分關(guān)心的幾個(gè)方面??上У氖怯绊戃浖|(zhì)量的這些重要因素,目前尚沒有
對(duì)它們定量度量的普遍適用的方法。但是就它們的概念和內(nèi)涵來說則是很明確的。
軟件的可維護(hù)性是軟件開發(fā)階段各個(gè)時(shí)期的關(guān)鍵目標(biāo)。
目前廣泛使用的是用如下的七個(gè)特性來衡量程序的可維護(hù)性。而且對(duì)于不同類型的維
護(hù),這七種特性的側(cè)重點(diǎn)也不相同。表7.2顯示了在各類維護(hù)中應(yīng)側(cè)重哪些特性。圖中的“O”
表示需要的特性。
II
表7.2在各類維護(hù)中的側(cè)重點(diǎn)
改正性維護(hù)適應(yīng)性維護(hù)完善性維護(hù)
可理解性
可測(cè)試性q
可修改性
可靠性
可移植性
可使用性4
效率
上面所列舉的這些質(zhì)量特性通常體現(xiàn)在軟件產(chǎn)品的許多方面,為使每一個(gè)質(zhì)量特性都達(dá)
到預(yù)定的要求,需要在軟件開發(fā)的各個(gè)階段采取相應(yīng)的措施加以保證。因此,軟件的可維護(hù)
性是產(chǎn)品投入運(yùn)行以前各階段面向上述各質(zhì)量特性要求進(jìn)行開發(fā)的最終結(jié)果。
(2)可維護(hù)性的度量
人們一直期望對(duì)軟件的可維護(hù)性做出定量度量,但要做到這一點(diǎn)并不容易。許多研究工
作集中在這個(gè)方面,形成了一個(gè)引人注目的學(xué)科——軟件度量學(xué)。下面我們介紹度量一個(gè)可
維護(hù)的程序的七種特性時(shí)常用的方法。這就是質(zhì)量檢查表、質(zhì)量測(cè)試、質(zhì)量標(biāo)準(zhǔn)。
質(zhì)量檢查表是用于測(cè)試程序中某些質(zhì)量特性是否存在的一個(gè)問題清單。評(píng)價(jià)者針對(duì)檢查表上
的每一個(gè)問題,依據(jù)自己的定性判斷,回答“Yes”或者“N。”。質(zhì)量測(cè)試與質(zhì)量標(biāo)準(zhǔn)則用于
定量分析和評(píng)價(jià)程序的質(zhì)量。由于許多質(zhì)量特性是相互抵觸的,要考慮幾種不同的度量標(biāo)準(zhǔn),
相應(yīng)地去度量不同的質(zhì)量特性。
①可理解性
可理解性表明人們通過閱讀源代碼和相關(guān)文檔,了解程序功能及其如何運(yùn)行的容易程
度。一個(gè)可理解的程序主要應(yīng)具備以下一些特性:模塊化(模塊結(jié)構(gòu)良好、功能完整、簡(jiǎn)明),
風(fēng)格一致性(代碼風(fēng)格及設(shè)計(jì)風(fēng)格的一致性),不使用令人捉摸不定或含糊不清的代碼,使用
有意義的數(shù)據(jù)名和過程名,結(jié)構(gòu)化,完整性(對(duì)輸入數(shù)據(jù)進(jìn)行完整性檢查)等。
用于可理解性度量的檢查表的內(nèi)容有:程序是否模塊化?結(jié)構(gòu)是否良好?每個(gè)模塊是否
有注釋塊,說明程序的功能、主要變量的用途及取值、所有調(diào)用它的模塊、以及它調(diào)用的所
有模塊?在模塊中是否有其它有用的注釋內(nèi)容,包括輸入輸出、精確度檢查、限制范圍和約
束條件、假設(shè)、錯(cuò)誤信息、程序履歷等?在整個(gè)程序中縮進(jìn)和間隔的使用風(fēng)格是否一致?在
程序中每一個(gè)變量,過程是否具有單一的有意義的名字?程序是否體現(xiàn)了設(shè)計(jì)思想?程序是
否限制使用?般系統(tǒng)中沒有的內(nèi)部函數(shù)過程與子程序?是否能通過建立公共模塊或子程序來
避免多余的代碼?所有變量是否是必不可少的?是否避免了把程序分解成過多的模塊、函數(shù)
或子程序?程序是否避免了很難理解的、非標(biāo)準(zhǔn)的語(yǔ)言特性?
對(duì)于可理解性,可以使用一種叫做“90—10測(cè)試”的方法來衡量。即把一份被測(cè)試的源
程序清單拿給一位有經(jīng)驗(yàn)的程序員閱讀10分鐘,然后把這個(gè)源程序清單拿開,讓這位程序員
憑自己的理解和記憶,寫出該程序的90%。如果程序員真的寫出來了,則認(rèn)為這個(gè)程序具有
可理解性,否則這個(gè)要重新編寫。
②可靠性
可靠性表明一個(gè)程序按照用戶的要求和設(shè)計(jì)目標(biāo),在給定的段時(shí)間內(nèi)正確執(zhí)行的概
率。關(guān)于可靠性,度量的標(biāo)準(zhǔn)主要有:平均失效間隔時(shí)間MTTF(MeanTimeToFailure)、平
均修復(fù)時(shí)間MTTR(MeanTimeToRepairerror),有效性A(=MTBD/(MTBD+MDT))?
度帛;可靠性的方法,主要有兩類:
12
■根據(jù)程序錯(cuò)誤統(tǒng)計(jì)數(shù)字,進(jìn)行可靠性預(yù)測(cè)。常用方法是利用一些可靠性模型,根據(jù)程
序測(cè)試時(shí)發(fā)現(xiàn)并排除的錯(cuò)誤數(shù)預(yù)測(cè)平均失效間隔時(shí)間MTTF。
■根據(jù)程序復(fù)雜性,預(yù)測(cè)軟件可靠性。用程序復(fù)雜性預(yù)測(cè)可靠性,前提條件是可靠性與
復(fù)雜性有關(guān)。因此可用復(fù)雜性預(yù)測(cè)出錯(cuò)率。程序復(fù)雜性度量標(biāo)準(zhǔn)可用于預(yù)測(cè)哪些模塊最可能
發(fā)生錯(cuò)誤,以及可能出現(xiàn)的錯(cuò)誤類型。了解了錯(cuò)誤類型及它們?cè)谀睦锟赡艹霈F(xiàn),就能更快地
查出和糾正更多的錯(cuò)誤,提高可靠性。
用于可靠性度量的檢查表的內(nèi)容有:程序中對(duì)可能出現(xiàn)的沒有定義的數(shù)學(xué)運(yùn)算是否做了
檢查?如除以“0”。循環(huán)終止和多重轉(zhuǎn)換變址參數(shù)的范圍,是否在使用前做了測(cè)試?下標(biāo)的
范圍是否在使用前測(cè)試過?是否包括錯(cuò)誤恢復(fù)和再啟動(dòng)過程?所有數(shù)值方法是否足夠準(zhǔn)確?
輸入的數(shù)據(jù)是否檢查過?測(cè)試結(jié)果是否令人滿意?大多數(shù)執(zhí)行路徑在測(cè)試過程中是否都已執(zhí)
行過?對(duì)最復(fù)雜的模塊和最復(fù)雜的模塊接口,在測(cè)試過程中是否集中做過測(cè)試?測(cè)試是否包
括正常的、特殊的和非正常的測(cè)試用例?程序測(cè)試中除了假設(shè)數(shù)據(jù)外,是否還用了實(shí)際數(shù)據(jù)?
為了執(zhí)行一些常用功能,程序是否使用了程序庫(kù)?
③可測(cè)試性
可測(cè)試性表明論證程序正確性的容易程度。程序越簡(jiǎn)單,證明其正確性就越容易。而且
設(shè)計(jì)合用的測(cè)試用例,取決于對(duì)程序的全面理解。因此,一個(gè)可測(cè)試的程序應(yīng)當(dāng)是可理解的,
可靠的,簡(jiǎn)單的。
用于可測(cè)試性度量的檢查表的內(nèi)容有:程序是否模塊化?結(jié)構(gòu)是否良好?程序是否可理
解?程序是否可靠?程序是否能顯示任意的中間結(jié)果?程序是否能以清楚的方式描述它的輸
出?程序是否能及時(shí)地按照要求顯示所有的輸入?程序是否有跟蹤及顯示邏輯控制流程的能
力?程序是否能從檢查點(diǎn)再啟動(dòng)?程序是否能顯示帶說明的錯(cuò)誤信息?
對(duì)于程序模塊,可用程序復(fù)雜性來度量可測(cè)試性。程序的環(huán)路復(fù)雜性越大,程序的路徑
就越多。因此,全面測(cè)試程序的難度就越大。
④可修改性
可修改性表明程序容易修改的程度。?個(gè)可修改的程序應(yīng)當(dāng)是可理解的、通用的、靈活
的、簡(jiǎn)單的。其中,通用性是指程序適用于各種功能變化而無需修改。靈活性是指能夠容易
地對(duì)程序進(jìn)行修改。
測(cè)試可修改性的一種定量方法是修改練習(xí)。其基本思想是通過做幾個(gè)簡(jiǎn)單的修改,來評(píng)
價(jià)修改的難度。設(shè)C是程序中各個(gè)模塊的平均復(fù)雜性,n是必須修改的模塊數(shù),A是要修改
的模塊的平均復(fù)雜性。則修改的難度D由下式計(jì)算:
D=A/C
對(duì)于簡(jiǎn)單的修改,若D>1,說明該程序修改困難。A和C可用任何一種度量程序復(fù)雜
性的方法計(jì)算。
用于可修改性度量的檢查表的內(nèi)容有:程序是否模塊化?結(jié)構(gòu)是否良好?程序是否可理
解?在表達(dá)式、數(shù)組/表的上下界、輸入/輸出設(shè)備命名符中是否使用了預(yù)定義的文字常數(shù)?
是否具有可用于支持程序擴(kuò)充的附加存儲(chǔ)空間?是否使用了提供常用功能的標(biāo)準(zhǔn)庫(kù)函數(shù)?程
序是否把可能變化的特定功能部分都分離到單獨(dú)的模塊中?程序是否提供了不受個(gè)別功能發(fā)
生預(yù)期變化影響的模塊接口?是否確定了一個(gè)能夠當(dāng)做應(yīng)急措施的一部分,或者能在小一些
的計(jì)算機(jī)上運(yùn)行的系統(tǒng)子集?是否允許一個(gè)模塊只執(zhí)行一個(gè)功能?每一個(gè)變量在程序中是否
用途單一?能否在不同的硬件配置上運(yùn)行?能否以不同的輸入/輸出方式操作?能否根據(jù)資
源的可利用情形,以不同的數(shù)據(jù)結(jié)構(gòu)或不同的算法執(zhí)行?
⑤可移植性
可移植性表明程序轉(zhuǎn)移到一個(gè)新的計(jì)算環(huán)境的可能性的大小?;蛘咚砻鞒绦蚩梢匀菀?/p>
地、有效地在各種各樣的計(jì)算環(huán)境中運(yùn)行的容易程度。
13
一個(gè)可移植的程序應(yīng)具有結(jié)構(gòu)良好、靈活、不依賴于某一具體計(jì)算機(jī)或操作系統(tǒng)的性能。
用于可移植性度量的檢查表的內(nèi)容有:是否是用高級(jí)的獨(dú)立于機(jī)器的語(yǔ)言來編寫程序?
是否是用廣泛使用的標(biāo)準(zhǔn)化的程序設(shè)計(jì)語(yǔ)言來編寫程序,且是否僅使用了這種語(yǔ)言的標(biāo)準(zhǔn)版
本和特性?程序中是否使用了標(biāo)準(zhǔn)的普遍使用的庫(kù)功能和子程序?程序中是否極少使用或根
本不使用操作系統(tǒng)的功能?程序中數(shù)值計(jì)算的精度是否與機(jī)器的字長(zhǎng)或存儲(chǔ)器大小的限制無
關(guān)?程序在執(zhí)行之前是否初始化內(nèi)存?程序在執(zhí)行之前是否測(cè)定當(dāng)前的輸入/輸出設(shè)備?
程序是否把與機(jī)器相關(guān)的語(yǔ)句分離了出來,集中放在了一些單獨(dú)的程序模塊中,并有說明文
檔?程序是否結(jié)構(gòu)化?并允許在小一些的計(jì)算機(jī)上分段(覆蓋)運(yùn)行?程序中是否避免了依賴
于字母數(shù)字或特殊字符的內(nèi)部位表示,并有說明文件?
⑥效率
效率表明一個(gè)程序能執(zhí)行預(yù)定功能而又不浪費(fèi)機(jī)器資源的程度。這些機(jī)器資源包括內(nèi)存
容量、外存容量、通道容量和執(zhí)行時(shí)間。
用于效率度量的檢查表的內(nèi)容有:程序是否模塊化?結(jié)構(gòu)是否良好?程序是否具有高度
的區(qū)域性(與操作系統(tǒng)的段頁(yè)處理有關(guān))?是否消除了無用的標(biāo)號(hào)與表達(dá)式,以充分發(fā)揮編譯
器優(yōu)化作用?程序的編譯器是否有優(yōu)化功能?是否把特殊子程序和錯(cuò)誤處理子程序都?xì)w入了
單獨(dú)的模塊中?在編譯時(shí)是否盡可能多地完成了初始化工作?是否把所有在?個(gè)循環(huán)內(nèi)不變
的代碼都放在了循環(huán)外處理?是否以快速的數(shù)學(xué)運(yùn)算代替了較慢的數(shù)學(xué)運(yùn)算?是否盡可能地
使用了整數(shù)運(yùn)算,而不是實(shí)數(shù)運(yùn)算?是否在表達(dá)式中避免了混合數(shù)據(jù)類型的使用,消除了不
必要的類型轉(zhuǎn)換?程序是否避免了非標(biāo)準(zhǔn)的函數(shù)或子程序的調(diào)用?在幾條分支結(jié)構(gòu)中,是否
最有可能為“真”的分支首先得到測(cè)試?在復(fù)雜的邏輯條件中,是否最有可能為“真”的表
達(dá)式首先得到測(cè)試?
⑦可使用性
從用戶觀點(diǎn)出發(fā),把可使用性定義為程序方便、實(shí)用、及易于使用的程度。一個(gè)可使用
的程序應(yīng)是易于使用的、能允許用戶出錯(cuò)和改變,并盡可能不使用戶陷入混亂狀態(tài)的程序。
用于可使用性度量的檢查表的內(nèi)容有:
i)程序是否具有自描述性?例如,是否有適應(yīng)不同讀者,并附有實(shí)例的程序使用說
明?是否有交互形式的Help功能?是否一有請(qǐng)求,就能對(duì)每一個(gè)操作方式作出解釋?用戶能
否很快熟悉程序的使用而無需他人的幫助?是否有請(qǐng)求,就能很容易地獲得當(dāng)前程序狀態(tài)
信息?
ii)程序是否能始終如一地按照用戶的要求運(yùn)行?例如,程序是否有句法上統(tǒng)一的命令
語(yǔ)言和錯(cuò)誤信息格式?通過盡量縮小響應(yīng)時(shí)間的差異,程序在相似的條件下,其表現(xiàn)是否也
相似?
iii)程序是否讓用戶對(duì)數(shù)據(jù)處理有一個(gè)滿意的和適當(dāng)?shù)目刂疲坷?,程序在交互方式運(yùn)
行時(shí),能否控制中止一項(xiàng)任務(wù),開始或恢復(fù)另一項(xiàng)任務(wù)?在沒有副作用的情形下,程序是否
允許處理作廢?程序是否允許用戶查看后臺(tái)處理?程序是否有一種易懂的命令語(yǔ)言并允許通
過命令組合建立宏指令?程序能否在一旦用戶有要求忖提供提示信息,幫助用戶使用系統(tǒng)?
程序能否提供可理解的、非危險(xiǎn)性的錯(cuò)誤信息?
iv)程序是否容易學(xué)會(huì)使用?例如,程序是否不需要專門的數(shù)據(jù)處理知識(shí)就能使用?對(duì)
輸入格式、要求和限制的解釋是否完整和清楚?在交互系統(tǒng)中,用戶輸入是否在菜單指示支
持下進(jìn)行?程序是否提供帶有糾錯(cuò)提示的錯(cuò)誤信息?對(duì)交互式系統(tǒng),是否有“聯(lián)機(jī)”手冊(cè)?對(duì)
批處理系統(tǒng),手冊(cè)是否容易得到?手冊(cè)是否是用用戶術(shù)語(yǔ)寫的?
v)程序是否使用數(shù)據(jù)管理系統(tǒng)來自動(dòng)地處理事務(wù)性工作和管理格式化、地址分配及存
儲(chǔ)器組織。
vi)程序是否具有容錯(cuò)性?例如,程序是否容忍典型的輸入打字錯(cuò)誤?當(dāng)輸入動(dòng)作需要
14
重復(fù)時(shí),程序能否接受簡(jiǎn)化輸入?命令能否簡(jiǎn)寫?程序能否驗(yàn)證輸入的數(shù)據(jù)?
vii)程序是否靈活?例如,程序是否允許以自由形式輸入?程序是否可以重復(fù)使用而無
須對(duì)輸入值做過多的說明?對(duì)用戶而言,是否有各種不同的輸出選擇?程序是否可以針對(duì)所
選擇的運(yùn)行方式,刪除不必要的輸入、計(jì)算和輸出?程序是否允許用戶擴(kuò)充命令語(yǔ)言?程序
是否可移植?程序是否允許用戶定義自己的功能集和特性集?程序能否以子集形式出現(xiàn)?程
序是否允許有經(jīng)驗(yàn)的用戶使用運(yùn)行較快的版本、簡(jiǎn)寫命令、缺省值等,而讓沒有經(jīng)驗(yàn)的用戶
使用運(yùn)行較慢的版本,并提供求助命令及監(jiān)控能力等。
⑧其它間接定量度量可維護(hù)性的方法
Gilb提出了與軟件維護(hù)期間工作量有關(guān)的一些數(shù)據(jù),可以使用它們間接地對(duì)軟件的可維
護(hù)性做出估計(jì)。
■問題識(shí)別的時(shí)間;■收集維護(hù)工具的時(shí)間;
■分析、診斷問題的時(shí)間;■具體的改錯(cuò)或修改的時(shí)間;
'局部測(cè)試的時(shí)間;■集成或回歸測(cè)試的時(shí)間;
■修改規(guī)格說明的時(shí)間;■維護(hù)的評(píng)審時(shí)間;
■因管理活動(dòng)拖延的時(shí)間;■恢復(fù)時(shí)間。
這些數(shù)據(jù)反映了維護(hù)全過程中檢錯(cuò)一糾錯(cuò)一驗(yàn)證的周期,即從檢測(cè)出軟件存在的問題開
始至修正它們并經(jīng)回歸測(cè)試驗(yàn)證這段時(shí)間??梢源致缘卣J(rèn)為,這個(gè)周期越短,維護(hù)越容易。
6.提高可維護(hù)性的方法
(1)建立明確的軟件質(zhì)量目標(biāo)和優(yōu)先級(jí)
一個(gè)可維護(hù)的程序應(yīng)是可理解的、可靠的、可測(cè)試的、可修改的、可移植的、效率高的、
可使用的。但要實(shí)現(xiàn)這所有的目標(biāo),需要付出很大的代價(jià),而且也不一定行得通。因?yàn)槟承?/p>
質(zhì)量特性是相互促進(jìn)的,例如可理解性和可測(cè)試性、可理解性和可修改性。但另一些質(zhì)量特
性卻是相互抵觸的,例如效率和可移植性、效率和可修改性等。因此,盡管可維護(hù)性要求每
一種質(zhì)量特性都要得到滿足,但它們的相對(duì)重要性應(yīng)隨程序的用途及計(jì)算環(huán)境的不同而不同。
所以,應(yīng)當(dāng)對(duì)程序的質(zhì)量特性,在提出目標(biāo)的同時(shí)還必須規(guī)定它們的優(yōu)先級(jí)。這樣有助于提
高軟件的質(zhì)量,并對(duì)軟件生存期的費(fèi)用產(chǎn)生很大的影響。
(2)使用提高軟件質(zhì)量的技術(shù)和工具
①模塊化
模塊化是軟件開發(fā)過程中提高軟件質(zhì)量,降低成本的有效方法之一。也是提高可維護(hù)性
的有效的技術(shù)。它的優(yōu)點(diǎn)是如果需要改變某個(gè)模塊的功能,則只要改變這個(gè)模塊,對(duì)其它模
塊影響很??;如果需要增加程序的某些功能,則僅需增加完成這些功能的新的模塊或模塊層;
程序的測(cè)試與重復(fù)測(cè)試比較容易;程序錯(cuò)誤易于定位和糾正;容易提高程序效率。
②結(jié)構(gòu)化程序設(shè)計(jì)
結(jié)構(gòu)化程序設(shè)計(jì)不僅使得模塊結(jié)構(gòu)標(biāo)準(zhǔn)化,而且將模塊間的相互作用也標(biāo)準(zhǔn)化了。因而
把模塊化又向前推進(jìn)了一步。采用結(jié)構(gòu)化程序設(shè)計(jì)可以獲得良好的程序結(jié)構(gòu)。
③使用結(jié)構(gòu)化程序設(shè)計(jì)技術(shù),提高現(xiàn)有系統(tǒng)的可維護(hù)性
■采用備用件的方法——當(dāng)要修改某一個(gè)模塊時(shí),用一個(gè)新的結(jié)構(gòu)良好的模塊替換掉整
個(gè)模塊。這種方法要求了解所替換模塊的外部(接口)特性,可以不了解其內(nèi)部工作情況。
它有利于減少新的錯(cuò)誤,并提供了一個(gè)用結(jié)構(gòu)化模塊逐步替換掉非結(jié)構(gòu)化模塊的機(jī)會(huì)。
■采用自動(dòng)重建結(jié)構(gòu)和重新格式化的工具(結(jié)構(gòu)更新技術(shù))——這種方法采用如代碼評(píng)價(jià)
程序、重定格式程序、結(jié)構(gòu)化工具等自動(dòng)軟件工具,把非結(jié)構(gòu)化代碼轉(zhuǎn)換成良好結(jié)構(gòu)代碼。
■改進(jìn)現(xiàn)有程序的不完善的文檔——改進(jìn)和補(bǔ)充文檔的H的是為了提高程序的可理解
性,以提高可維護(hù)性。
15
■使用結(jié)構(gòu)化程序設(shè)計(jì)方法實(shí)現(xiàn)新的子系統(tǒng)。
-采用結(jié)構(gòu)化小組程序設(shè)計(jì)的思想和結(jié)構(gòu)文檔工具——軟件開發(fā)過程中,建立主程序員
小組,實(shí)現(xiàn)嚴(yán)格的組織化結(jié)構(gòu),強(qiáng)調(diào)規(guī)范,明確領(lǐng)導(dǎo)以及職能分工,能夠改善通信.、提高程
序生產(chǎn)率;在檢查程序質(zhì)量時(shí),采取有組織分工的結(jié)構(gòu)普查,分工合作,各司其職,能夠有
效地實(shí)施質(zhì)量檢查。同樣,在軟件維護(hù)過程中,維護(hù)小組也可以采取與主程序員小組和結(jié)構(gòu)
普查類似的方式,以保證程序的質(zhì)量。
(3)進(jìn)行明確的質(zhì)量保證審查
質(zhì)量保證審查對(duì)于獲得利維持軟件的質(zhì)量,是一個(gè)很有用的技術(shù)。除了保證軟件得到適
當(dāng)?shù)馁|(zhì)量外,審查還可以用來檢測(cè)在開發(fā)和維護(hù)階段內(nèi)發(fā)生的質(zhì)量變化。一旦檢測(cè)出問題來,
就可以采取措施來糾正,以控制不斷增長(zhǎng)的軟件維護(hù)成本,延長(zhǎng)軟件系統(tǒng)的有效生命期。
為了保證軟件的可維護(hù)性,有四種類型的軟件審查。
①在檢查點(diǎn)進(jìn)行復(fù)審
保證軟件質(zhì)量的最佳方法是在軟件開發(fā)的最初階段就把質(zhì)量要求考慮進(jìn)去,并在開發(fā)過
程每一階段的終點(diǎn),設(shè)置檢查點(diǎn)進(jìn)行檢查。檢查的目的是要證實(shí)已開發(fā)的軟件是否符合標(biāo)準(zhǔn),
是否滿足規(guī)定的質(zhì)量需求。在不同的檢查點(diǎn),檢查的重點(diǎn)不完全相同。如圖7.7所示。
可靠性可理解性可理解性可靠性
可適用性可修改性可修改性有效性
可測(cè)試性可移植性
有效性
圖7.7軟件開發(fā)期間各個(gè)檢查點(diǎn)的檢查重點(diǎn)
②驗(yàn)收檢查
驗(yàn)收檢查是一個(gè)特殊的檢查點(diǎn)的檢查,是交付使用前的最后一次檢查,是軟件投入運(yùn)行
之前保證可維護(hù)性的最后機(jī)會(huì)。它實(shí)際上是驗(yàn)收測(cè)試的一部分,只不過它是從維護(hù)的角度提
出驗(yàn)收的條件和標(biāo)準(zhǔn)。
③周期性地維護(hù)審查
軟件在運(yùn)行期間,為了糾正新發(fā)現(xiàn)的錯(cuò)誤或缺陷,為了適應(yīng)計(jì)算環(huán)境的變化,為了響應(yīng)
用戶新的需求,必須進(jìn)行修改。因此會(huì)導(dǎo)致軟件質(zhì)量有變壞的危險(xiǎn),可能產(chǎn)生新的錯(cuò)誤,破
壞程序概念的完整性。因此,必須像硬件的定期檢查一樣,每月一次,或二月一次,對(duì)軟件
做周期性的維護(hù)審查,以跟蹤軟件質(zhì)量的變化。周期性維護(hù)審查實(shí)際上是開發(fā)階段檢查點(diǎn)復(fù)
查的繼續(xù),并且采用的檢查方法、檢查內(nèi)容都是相同的。為了便于用戶進(jìn)行運(yùn)行管理,適時(shí)
提供維護(hù)工具以及有關(guān)信息是很重要的。
維護(hù)審查的結(jié)果可以同以前的維護(hù)審查的結(jié)果,以及以前的驗(yàn)收檢查的結(jié)果和檢查點(diǎn)檢
查的結(jié)果相比較,任何種改變都表明在軟件質(zhì)量上或其它類型的問題上可能起了變化。
對(duì)于改變的原因應(yīng)當(dāng)進(jìn)行分析。例如,如果使用的是復(fù)雜性度量標(biāo)準(zhǔn),則應(yīng)當(dāng)隨機(jī)地選擇少
量模塊,再次測(cè)量其復(fù)雜性。如果新的復(fù)雜性值大于以前的值,則可能:
■是軟件可維護(hù)性退化的癥兆;
?預(yù)示將來維護(hù)該系統(tǒng)需要更多的維護(hù)工作量;
■表明修改太倉(cāng)促,沒有考慮到要保持系統(tǒng)的完整性;
■是軟件的文檔化工具以及維護(hù)人員的專業(yè)知識(shí)不足所造成的。
16
反之,若復(fù)雜性值減小,則表明軟件質(zhì)量是穩(wěn)定的。
④對(duì)軟件包進(jìn)行檢查
軟件包是一種標(biāo)準(zhǔn)化了的,可為不同單位、不同用戶使用的軟件。軟件包賣主考慮到他
的專利權(quán),一般不會(huì)提供給用戶他的源代碼和程序文檔。因此,對(duì)軟件包的維護(hù)采取以下方
法。使用單位的維護(hù)人員首先要仔細(xì)分析、研究賣主提供的用戶手冊(cè)、操作手冊(cè)、培訓(xùn)教程、
新版本說明、計(jì)算機(jī)環(huán)境要求書、未來特性表,以及賣方提供的驗(yàn)收測(cè)試報(bào)告等,在此基礎(chǔ)
上,深入了解本單位的希望和要求,編制軟件包的檢驗(yàn)程序。該檢驗(yàn)程序檢查軟件包程序所
執(zhí)行的功能是否與用戶的要求和條件相一致。為了建立這個(gè)程序,維護(hù)人員可以利用賣方提
供的驗(yàn)收測(cè)試實(shí)例,還可以自己重新設(shè)計(jì)新的測(cè)試實(shí)例。根據(jù)測(cè)試結(jié)果,檢查和驗(yàn)證軟件包
的參數(shù)或控制結(jié)構(gòu),以完成軟件包的維護(hù)。
(4)選擇可維護(hù)的程序設(shè)計(jì)語(yǔ)言
程序設(shè)計(jì)語(yǔ)言的選擇,對(duì)程序的可維護(hù)性影響很大。
可維護(hù)性
低——?i'.(j
|第一代||第二代||第三代||
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 化 學(xué)物質(zhì)組成的表示課件-2024-2025學(xué)年九年級(jí)化學(xué)人教版(2024)上冊(cè)
- 學(xué)術(shù)項(xiàng)目勞務(wù)合同模板
- 運(yùn)輸合作合同模板
- 夫妻之間借錢還貸合同模板
- 蘿卜加工合同模板
- 菱形護(hù)坡工程合同模板
- 食品產(chǎn)品生產(chǎn)合同模板
- 酒店聘請(qǐng)員工合同模板
- 產(chǎn)品分類服務(wù)合同模板
- 電商人才培訓(xùn)招標(biāo)合同模板
- 社會(huì)工作實(shí)務(wù)操作手冊(cè) 課件 項(xiàng)目五 兒童社會(huì)工作
- 信息化建設(shè)成果總結(jié)
- ICU獲得性衰弱的預(yù)防和護(hù)理課件
- 新生兒窒息的診治教學(xué)設(shè)計(jì)
- 高職院?;旌鲜襟w育課程學(xué)習(xí)效果評(píng)價(jià)體系的構(gòu)建
- 糖尿病性酮癥酸中毒護(hù)理查房課件
- 馮姓的研究報(bào)告作文
- 海南經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院輔導(dǎo)員招聘考試行政管理教師崗筆試面試歷年真題庫(kù)試卷
- 神經(jīng)內(nèi)科課件
- 鋰電池環(huán)境試驗(yàn)應(yīng)急預(yù)案
- 大學(xué)食堂原料物資豬肉采購(gòu)?fù)稑?biāo)方案(技術(shù)標(biāo))
評(píng)論
0/150
提交評(píng)論