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

字號(hào):

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