軟件工程:實(shí)踐者的研究方法第8章軟件質(zhì)量保證

字號:

第8章 軟件質(zhì)量保證
    本書中所描述的軟件工程方法的目標(biāo)是:生產(chǎn)出高質(zhì)量的軟件。但是許多讀者會遇到這種難題的挑戰(zhàn):“什么是軟件質(zhì)量?”
    Philip Crosby [CRP79]在他關(guān)于質(zhì)量的劃時代著作中為上述問題提供了一個謊謬的答案:
    質(zhì)量管理的問題不在于人們不知道什么是質(zhì)量,問題在于人們認(rèn)為他們自己知道什么…
    在這一點(diǎn)上,質(zhì)量與性共性頗多。每個人都需要它(當(dāng)然,是在某種條件之下)。每個人都覺得自己理解它(盡管人們不愿意解釋它)。每個人都認(rèn)為實(shí)行它只需遵從自然的趨勢(畢竟我們不管怎樣都還做得不錯)。當(dāng)然,大多數(shù)人認(rèn)為這一領(lǐng)域的問題都是由他人引起的(假設(shè)只要他們花了時間就能把事情做好)。
    有些軟件開發(fā)者仍然相信軟件質(zhì)量是在編碼之后才應(yīng)該開始擔(dān)心的事情。這太謊謬了!“軟件質(zhì)量保證”(SQA)是一種應(yīng)用于整個軟件過程的保護(hù)性活動(參見第2章)。SQA包括:(1)一種質(zhì)量管理方法,(2)有效的軟件工程技術(shù)(方法和工具),(3)在整個軟件過程中采用的正式技術(shù)復(fù)審,(4)一種多層次的測試策略,(5)對軟件文檔及其修改的控制、(6)保證軟件遵從軟件開發(fā)標(biāo)準(zhǔn)的規(guī)程(在適用時),以及(7)度量和報告機(jī)制。
    在本章中,我們將集中討論與軟件組織“在正確的時間、以正確的方式、做正確的事情”相關(guān)的管理問題和特定過程活動。有關(guān)質(zhì)量的量化討論將在第18章中給出。
    8.1質(zhì)量概念①
    據(jù)說沒有兩片雪花是完全相同的。當(dāng)然在我們望著雪花飄落時,很難想象雪花的不同,更不會想到每一片雪花都具有獨(dú)一無二的結(jié)構(gòu)。為了觀察雪花之間的差異,我們必須非常仔細(xì)地檢查各個標(biāo)本,也許要用放大鏡才行。實(shí)際上觀察得越仔細(xì),發(fā)現(xiàn)的不同之處就越多。
    這種現(xiàn)象稱為“樣本間差異”,不但適用于自然界的萬物,而且適用于人類的一切產(chǎn)品。例如,如果非常仔細(xì)的觀察兩個“相同”的電路板,就可以觀察到電路板上的銅線路在幾何形狀、位置和厚度上都有所不同,而且電路板上鉆孔的位置和直徑也各不相同。
    所有的工程和制造產(chǎn)品都會表現(xiàn)出差異。也許不借助于精密儀器對幾何特征、電路特征、或者其他零件屬性進(jìn)行測量,不同樣本之間的差異將非常不明顯。但是在足夠精密的儀器幫助下,我們就會得到這樣的結(jié)論:沒有任何物品的兩個樣本是完全一樣的。
    這一物理世界中的規(guī)律同樣適用于軟件嗎?想象一個程序,在它執(zhí)行過程中的某一點(diǎn)上需要按照某一關(guān)鍵字的升序?qū)θ舾捎涗涍M(jìn)行排序。這些記錄的性質(zhì)并不重要,有可能是雇員記錄、客戶數(shù)據(jù)庫、實(shí)時航空控制系統(tǒng)的地圖坐標(biāo)、或者隨便什么。
    編寫這一排序例程(或者從一個可復(fù)用構(gòu)件庫中選擇例程)的程序員決定使用“快速排序”來解決這一問題。終產(chǎn)品的觀察者能否將這一軟件與一個除了使用(比如說)“冒泡排序”之外與前者完全相同的產(chǎn)品區(qū)別開來呢?也許可以,但是可能會需要更多信息,甚至精密的工具來區(qū)分兩個系統(tǒng)的不同。
    差異控制是質(zhì)量控制的核心。制造商希望盡可能減小生產(chǎn)的產(chǎn)品之間的差異,即使進(jìn)行復(fù)制軟盤這樣相對簡單的工作也不例外。我們希望盡可能縮小任何一對所謂完全相同的磁盤之間的差異。當(dāng)然這并不成問題——軟盤復(fù)制僅僅是一項微不足道的制造操作,我們可以保證總是能夠創(chuàng)建完全相同的軟件副本。
    但是,我們真的能夠做到嗎?我們需要保證軟盤上的磁道具有某一特定的耐久性,以保證絕大多數(shù)的軟驅(qū)能夠正確讀出這些軟盤。而且必須保證區(qū)分0和1的磁通量足夠大,使得讀寫頭能夠正確探測0與1。軟盤復(fù)制機(jī)可能的確會磨損和超出忍耐范圍。因此,象軟盤復(fù)制這樣“簡單”的過程也會遇到樣本差異問題。
    那么軟件開發(fā)組織控制差異的需要可能是怎樣的呢?對于每個不同的項目,我們希望盡可能減小完成項目預(yù)計需要的資源和實(shí)際使用的資源之間的差異,包括人員、設(shè)備和時間。一般來說,我們希望測試程序能夠覆蓋軟件的不同發(fā)布版本之間的某個已知百分比。我們不僅希望盡可能縮小發(fā)布產(chǎn)品中的缺陷數(shù)量,而且要保證不同版本之間的錯誤數(shù)量差異也保持小。(如果產(chǎn)品的第三個發(fā)布版本中錯誤數(shù)量十倍于此前的版本,我們的客戶將會感到失望。)我們希望自己的熱線技術(shù)支持在解決不同客戶的問題時,速度和準(zhǔn)確程度差異盡可能減小。這樣的舉列可以無窮無盡。
    8.1.1質(zhì)量
    American Heritage Dictionary(《美國傳統(tǒng)字典》)中對質(zhì)量的定義是:“某一事物的特征或?qū)傩浴薄W鳛橐粋€事物的屬性,質(zhì)量指的是可以度量的特征——那些可以與已知標(biāo)準(zhǔn)進(jìn)行比較的東西,如長度、顏色、電的性質(zhì)、可延展性等等。但是軟件,很大程度上是一種知識實(shí)體,其特征的定義遠(yuǎn)比物理對象要困難得多。
    然而,程序特征的度量的確存在。這樣的屬性包括循環(huán)復(fù)雜度、內(nèi)聚力、功能點(diǎn)、代碼行數(shù)和其他許多在第18章和第23章中討論的屬性。在根據(jù)對象的可度量特征考察一個對象時,可以有以下兩種不同的質(zhì)量:設(shè)計質(zhì)量和符合質(zhì)量。
    設(shè)計質(zhì)量:是指設(shè)計者為一件產(chǎn)品規(guī)定的特征。材料等級、耐久性、及性能的規(guī)約都屬于設(shè)計質(zhì)量。當(dāng)規(guī)定使用更高級別的材料、要求達(dá)到更強(qiáng)的耐久性和更高層次的性能時,如果產(chǎn)品能夠依照規(guī)約進(jìn)行制造,則產(chǎn)品的設(shè)計質(zhì)量便會提高。
    符合質(zhì)量:是指在制造過程中符合設(shè)計規(guī)格的程度。同樣,符合程度越高,符合質(zhì)量也就越高。
    在軟件開發(fā)時,設(shè)計質(zhì)量包括系統(tǒng)的需求、規(guī)約和設(shè)計。符合質(zhì)量則主要關(guān)注實(shí)現(xiàn)問題。如果實(shí)現(xiàn)了符合設(shè)計、得到的系統(tǒng)滿足系統(tǒng)需求和性能目標(biāo),則符合質(zhì)量較高。
    8.1.2質(zhì)量控制
    差異控制可以等同于質(zhì)量控制。但我們?nèi)绾螌?shí)現(xiàn)質(zhì)量控制呢?“質(zhì)量控制”是為了保證每一件工作產(chǎn)品都滿足對它的需求而應(yīng)用于整個開發(fā)周期中的一系列審查、復(fù)審和測試。質(zhì)量控制在創(chuàng)建工作產(chǎn)品的過程中包括一個反饋循環(huán)。度量和反饋相結(jié)合,使得我們能夠在得到的工作產(chǎn)品不能滿足其規(guī)約時調(diào)整開發(fā)過程。這種方法將質(zhì)量控制視為整個制造過程的一部分。
    質(zhì)量控制活動可以是全自動的、全人工的,也可以是自動工具與人員交互的結(jié)合。質(zhì)量控制中的關(guān)鍵概念之一是所有工作產(chǎn)品都具有定義好的和可度量的規(guī)約,我們可以將每個過程的產(chǎn)品與這一規(guī)約進(jìn)行比較。反饋循環(huán)的引入對于小化產(chǎn)生的缺陷至關(guān)重要。
    8.1.3質(zhì)量保證
    “質(zhì)量保證”由管理層的審計和報告功能構(gòu)成。質(zhì)量保證的目標(biāo)是為管理層提供為獲知產(chǎn)品質(zhì)量信息所需的數(shù)據(jù),從而獲得產(chǎn)品質(zhì)量是否符合預(yù)定目標(biāo)的認(rèn)識和信心。當(dāng)然如果質(zhì)量保證所提供的數(shù)據(jù)發(fā)現(xiàn)了問題,則管理層負(fù)責(zé)解決這一問題,并為解決質(zhì)量問題分配所需的資源。
    8.1.4質(zhì)量的成本
    質(zhì)量成本包括所有由質(zhì)量工作或者進(jìn)行與質(zhì)量有關(guān)的活動所導(dǎo)致的成本。質(zhì)量成本研究的開展能夠?yàn)楫?dāng)前質(zhì)量成本設(shè)定基線,標(biāo)識降低質(zhì)量成本的機(jī)會,并提供一種規(guī)范化的比較基礎(chǔ)。規(guī)范化的基礎(chǔ)幾乎全都以“元”(錢)計算。一旦我們將質(zhì)量成本以“元”為單位進(jìn)行了規(guī)范化,我們就擁有了必要的數(shù)據(jù)來評估能夠在何處改進(jìn)現(xiàn)有過程。而且,還可以進(jìn)一步評估那些基于“元”的項在改變時所產(chǎn)生的影響。
    質(zhì)量成本可以被劃分為與預(yù)防、鑒定及失敗相關(guān)的成本。“預(yù)防成本”包括:
    ·質(zhì)量計劃。
    ·正式技術(shù)復(fù)審。
    ·測試設(shè)備。
    ·培訓(xùn)。
    “鑒定成本”包括為深入了解“首次通過”各個過程時產(chǎn)品的狀態(tài)而開展的那些活動。鑒定成本的例子如下:
    ·過程內(nèi)和過程間審查。
    ·設(shè)備校準(zhǔn)和維護(hù)。
    ·測試。
    “失敗成本”是指如果在將產(chǎn)品交付給客戶之前已經(jīng)消除了缺陷時就不會存在的成本。失敗成本可以進(jìn)一步劃分為內(nèi)部失敗成本和外部失敗成本。“內(nèi)部失敗成本”是指在產(chǎn)品交付之前發(fā)現(xiàn)錯誤而引發(fā)的成本。內(nèi)部失敗成本包括:
    ·返工。
    ·修復(fù)。
    ·失敗模式分析。
    “外部失敗成本”是指與產(chǎn)品交付給客戶之后所發(fā)現(xiàn)的缺陷相關(guān)的成本。外部失敗成本的例子如下:
    ·解決客戶的抱怨。
    ·退換產(chǎn)品。
    ·求助電話支持。
    ·保修工作。
    正如我們所預(yù)料的,發(fā)現(xiàn)和修改一個缺陷的成本將隨著我們從預(yù)防到檢測、從內(nèi)部失敗到外部失敗工作的開展而急劇增加。圖8-1,根據(jù)Boehm[BOE81]所收集的數(shù)據(jù),闡述了這一現(xiàn)較蟆*
    Kaplan及其同事[KAP95]報告了更多近期的數(shù)據(jù),該報告以IBM的Rochester開發(fā)部門的工作為基礎(chǔ):
    審查200000行代碼總共用了7053個小時,結(jié)果是預(yù)防了3112個潛在的缺陷。假定雇傭一名程序員的成本為每小時40美元,預(yù)防3112個缺陷的總成本為282120美元,約為每個缺陷91美元。
    下面將這些數(shù)字與產(chǎn)品交付給客戶之后消除缺陷的成本加以比較。假定沒有進(jìn)行代碼審查,但是程序員編碼格外小心,而在交付的產(chǎn)品中每1000行代碼中只有1個缺陷漏網(wǎng)[大大優(yōu)于產(chǎn)業(yè)界的平均水平]。這意味著在客戶的操作環(huán)境中仍然有200個缺陷需要改正。估算改正每個缺陷的成本為25000美元,則總成本將高達(dá)5百萬美元,大約比進(jìn)行缺陷預(yù)防的產(chǎn)品的總成本高出18倍。
    當(dāng)然,IBM生產(chǎn)的軟件被數(shù)以萬計的客戶所使用,因此,有可能交付后改正軟件缺陷的成本要高于平均水平,但這并不能否定上面所說的結(jié)果。即使普通軟件組織的缺陷改正成本僅僅為IBM的25%(大多數(shù)組織并不知道這項成本究竟是多少!),但用于質(zhì)量控制和保證活動而節(jié)約的成本仍然令人嘆服。