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

