書名: 研發企業管理——思想、方法、流程和工具作者名: 林銳 彭韌本章字數: 3357字更新時間: 2019-01-01 18:02:05
1.9 論質量
1.9.1 什么是產品質量
詞典對質量的定義是:(1)典型的或本質的特征;(2)事物固有的或區別于其他事物的特征或本質;(3)優良或出色的程度。
軟件能力成熟度模型(Capacity Maturity Model,CMM)對質量的定義是:(1)一個系統、組件或過程符合特定需求的程度;(2)一個系統、組件或過程符合客戶或用戶的要求或期望的程度。
上述定義很抽象,人們看了準會一臉迷惘。就讓我們用“人的健康”來類比解釋軟件質量:
古時候人們以為長得結實、飯量大就是健康,這顯然是不科學的。現代人總是通過考察多方面的生理指標來判斷是否健康,如測量身高、體重、心跳、血壓、血液和體溫等。如果上述因素都合格,那么表明這人是健康的。如果某個指標不合格,則表明此人在某個方面不健康,醫生會對癥下藥。
通過類比,我們這樣理解產品質量:
產品質量是許多質量屬性的綜合體現,各種質量屬性反映了產品質量的方方面面。人們通過改善產品的各種質量屬性,從而提高產品的整體質量(否則無從下手)。
質量屬性可分為兩大類:
(1)產品專有的質量屬性。例如手機產品的專有質量屬性:通話質量、重量、體積、耗電量和樣式等。
(2)軟件公共質量屬性。不管什么產品,只要有軟件,就有軟件公共質量屬性,如正確性、健壯性、可靠性、性能、易用性、安全性、可擴展性、可復用性、兼容性、可移植性、可測試性、可維護性和靈活性等。
如表1-1所示是常見的十個軟件公共質量屬性,供讀者了解。
表1-1 常見的軟件公共質量屬性

產品的質量因素可能非常多,我們還要學會識別質量要素(即重要的質量因素),具體如下:
(1)從商業角度講,客戶最關心的、能成為賣點的質量屬性才是質量要素。
(2)從技術角度講,對整體質量影響最大的那些質量屬性才是質量要素。
對于任何一種商業產品,我們首先要識別質量要素,才能給出提高質量的有效建議。如果某些質量屬性并不能產生顯著的經濟效益,那么要少花費精力,只要及格就行。要把精力用在對經濟效益貢獻最大的質量要素上,而不是一股腦地想把所有的質量屬性都做好,否則不僅做不好,還可能得不償失。
1.9.2 企業的質量觀念
為了強調質量的重要性,但凡軟件工程教科書總是要舉一些歷史上發生過的重大軟件質量事故,如航天飛機爆炸、核電站失事、愛國者導彈發生故障等。
學術界喜歡宣揚質量至上的理念,而忽視企業的利益,將質量目標凌駕于企業利益之上,這種做法會誤導大量讀者。許多技術人員都有“質量越高越好”的觀念,這種觀念是被教科書灌輸的。
質量的最高境界是什么?是盡善盡美,即零缺陷,可是哪個企業能夠做到零缺陷?
我曾在2002年的著作《高質量程序設計指南——C++/C語言》中宣揚了高質量程序設計的理念,力求使C/C++程序達到零缺陷的質量目標。盡管此書得到了許多程序員的贊同,但是難以在企業中推行。我經過反思之后改變了質量觀念:
重視軟件質量是應該的,但并不是“質量越高越好”。只有極少數軟件應該追求“零缺陷”,對于絕大多數軟件而言,企業利益決定了質量目標,而不該把質量目標凌駕于企業利益之上。
航空航天系統對質量要求極高,任何缺陷都有可能導致機毀人亡,所以人們會不惜一切代價去消除缺陷。在發射航天器之前,只要發現任何異常,就會立即取消發射指令,直到異常被消除為止。在這種壓力下沒有人敢對質量有一絲松懈。
上述嚴格的系統畢竟是少數,世上絕大多數商業軟件的缺陷并不會造成機毀人亡這樣的重大損失,否則就沒有人敢從事軟件開發了。迄今為止,我認識的所有軟件人員都沒有因為軟件缺陷而坐牢或被槍斃。
在日常工作中,我們接觸過的軟件幾乎都是有缺陷的,即便是軟件業老大Microsoft,它的軟件產品也會出錯甚至死機,人們埋怨幾句后還會照樣使用這樣的軟件。
如果企業銷售出去的產品質量比較差,輕則挨罵,重則被退貨甚至被索賠,因此為了提高用戶對產品的滿意度,企業必須提高產品的質量。但是企業不可能為了追求完美的質量而不惜一切代價,當企業為提高質量所付出的代價超過收入時,這個產品已經沒有商業價值了,還不如不開發。
企業的主要目標是為了獲取合理的利潤,而不是生產完美無缺的產品。產品質量太低了或者太高了,都有可能不利于企業獲取利潤。企業理想的質量目標不是“零缺陷”,而是恰好讓廣大用戶滿意,并且將提高質量所付出的代價控制在預算之內。
事實上,在合法經營的前提下,“質量高低”和“企業效益高低”有四種對應關系:
(1)質量高,效益高。
(2)質量低,效益低。
(3)質量高,效益低。
(4)質量低,效益高。
前兩種符合人之常識,而后兩種不符合人之常識(出乎意料之外),上述4種情況都普遍存在,詳見本書第2章“企業管理中的經濟學原理”。
1.9.3 全面質量管理模型
質量的死對頭是缺陷,缺陷是混在產品中的人們不喜歡、不想要的東西,它對產品沒有好處只有壞處。人們常說的Bug就是缺陷的形象比喻。
顯然,缺陷越多質量越低,缺陷越少質量越高,提高產品質量的基本手段是消除產品中的缺陷。
讓我們看看中國古代郎中治病的故事,受點啟發。
在中國古代,有一家三兄弟全是郎中。其中老三知名度最高,二哥次之,大哥最低。人們好奇,問老三:“你們兄弟三人誰的醫術最高?”
老三回答說:“我常用猛藥給病危者醫治,偶爾有些病危者被我救活,于是我成了全國名醫。我二哥通常在人們剛剛生病的時候馬上就治愈他們,臨近村莊的人都說二哥是好郎中。我大哥不外出治病,他深知人們生病的原因,所以能夠預防家里人生病,他的醫術只有我們家里才知道。”
上述故事里,郎中三兄弟是三種治病方式的代言人。相似地,提高產品質量也有三種方式。
1.老大治病方式
老大治病的方式最高明,如果人們能夠預防生病,那么就用不著看醫生了。提高產品質量最高明的手段是:在開發過程中有效地防止工作成果產生缺陷,將高質量內建于開發過程之中。主要措施是“不斷地提高技術水平,不斷地提高規范化水平”。
2.老二治病方式
即使一個人嚴守養生之道,身體狀況良好,但總是會意外地生病的,生了病就要去看醫生。老二治病的方式就是醫院的模式,病人越早看病,就越早治好,治病的代價就越低。同理,在研發過程中,即使人們的技術水平很高,并且嚴格遵守規范,但是人非機器,總是會犯錯誤的,因此無法完全避免產生缺陷。那么怎么辦呢?
當工作成果剛剛產生時馬上進行質量檢查,及時找出并消除工作成果中的缺陷。這種方式效率高、代價低,人們一般都能學會。最常用的方法是技術評審、測試和過程檢查,已經被企業廣泛采用并取得了成效。
3.老三治病方式
老三治病的方式代價最高,只能是不得已而為之。可在現實之中,大多數企業都采用老三的方式來對付質量問題。典型現象是:在產品交付之前,沒有及時消除缺陷。當產品交付給用戶后,用著用著就出錯了,趕緊請開發者來補救。
根據上述事例和分析,我提煉出直觀的“全面質量管理模型”,如圖1-1所示。該模型的主要措施有:
(1)質量要素和目標分析。從商業利益和技術角度識別哪些質量屬性是本產品(或項目)的質量要素,給出各個質量要素的恰當目標。這樣相關人員可以把精力集中在改善質量要素上,既要使客戶感到滿意,又要使開發方承受得起。
(2)技術評審。通過同行專家對工作成果的評審討論,盡早地發現工作成果中的缺陷,并幫助開發人員及時消除缺陷,從而有效地提高產品的質量。技術評審可以在任何開發階段執行,不必等到軟件、硬件可以運行之際,越早消除缺陷就越能降低開發成本。開發人員能夠及時地得到同行專家的幫助和指導,無疑會加深對工作成果的理解,更好地預防缺陷,這在一定程度上提高了開發生產率。
(3)測試與糾錯。一旦開發完成某個模塊,開發者要先進行自我測試,然后請測試員測試。若測試發現缺陷,開發者要及時糾錯。

圖1-1 全面質量管理模型
(4)過程檢查。也叫質量保證,實質就是檢查項目的“工作過程和工作成果”是否符合既定的規范。符合規范的工作成果不見得就是高質量的,但是明顯不符合規范的工作成果十有八九是不合格的。在執行過程檢查的時候,如果發現了問題,應該記錄在問題跟蹤工具中,以便問題得到及時處理。
(5)缺陷(問題)跟蹤。人們在技術評審、測試、過程檢查時,可能發現不少缺陷(或問題),應當使用缺陷(問題)跟蹤工具,便于相關人員及時處理缺陷,隨時了解缺陷的狀態變化。
(6)持續提升企業的技術水平和規范化水平。這是企業要長期堅持的內功,不要指望速成。內功打好了,無論什么項目(產品),都能夠實現內建高質量。