提高質量為何如此之難
precision cribbage 的故事說明,"符合需求"並非是質量全部含義--除非你接受的是某種關於需求的非傳統定義。這個故事同時也說明,基於錯誤的數量來定義質量也是不全面的--這方面的例子有:
所謂質量,就是指沒有任何錯誤。
雖然實際上這類定義不堪一駁,但是許多年來它們一直是人們關於高質量軟體的主流認識。在這種意識的支配下,軟體開發人員及其主管們對提高軟體質量的要求置若罔聞。難道他們不願意去提高質量嗎?即使沒有其他人向他們提出這種要求,哪怕僅僅是為了滿足自己的自尊心,他們也應該這要去做呀?毫無疑問,他們的確願意提高質量,但是事實並非如此--原因何在?
"還不算壞"效應
cozywrite 和cribbage 只不過是兩個典型的故事,我還能舉出成百上千的這類事例;我一點也不懷疑,你也可以舉出許多這樣的例子。如果你問一下軟體開發人員:"你們是否對高質量的軟體產品有興趣?"我敢肯定,出於其職業的自尊心,他們一定會回答說:"當然!"
然而,假設你要是向他們專門詢問一下cozywrite 或precision cribbage 的改進問題,其開發人員將會回答:"但是,它已經是乙個好的產品了呀。其中的確有錯誤,但是這是很自然的事,所有軟體都存在問題。而且,(既然使用者願意購買它,就說明)它總要比競爭對手更好一些。"很自然地,下面的三句話的正確性都是可以證明的:
1. 使用者的確在使用他們的軟體產品,而且因此很高興,所以這個產品是高質量的;
2. 沒有哪個軟體沒有錯誤(至少我們還不能證明其反面);
3. 使用者是在對多種相互競爭的產品進行比較之後才確定購買它的,這說明使用者認為它相對更好。
在這種環境之中,除非有來自外界的推動力,否則開發者自身不會有多少積極性去提高軟體質量。比如說,要是使用者不再使用或者不再購買其軟體產品,那麼開發者才可能會決定去改進質量--但是也許已經為時太晚。如果出現了乙個管理體制更為高效的競爭對手,那麼原來銷售軟體的企業就只有淡出市場的份了。
但是對於那些服務於某個更大企業的內部軟體開發部門而言,他們幾乎不會面臨多少競爭,因此這種部門的前景注定會日漸蕭條。這種蕭條是否重要,取決於其上層企業對"質量"的定義。如果上層企業能夠獲得其所需要的價值,而且也不知道還有更好的途徑,這種蕭條的狀況將一直持續下去。但是一旦其所從屬的上層企業開始不滿起來,危機就將發生。
"這不可能"效應
你是否知道,要是你有八英呎六英吋高,你就可以被nba 的一支球隊中聘為首發中鋒,並且因此每年可以掙到3,000,000 美元?現在你已經知道了這一點,那麼為什麼不馬上開始乙個增加身高的計畫呢?這種問法幼稚得可笑,因為你並不知道如何才能使自己長高幾英呎。
你是否又知道,要是可以把你的軟體中的錯誤數量減少至每一百萬行**中不超過乙個,你的軟體市場就會每年增加3,000,000 美元的份額?這種問法同樣幼稚得可笑,因為你並不知道如何才能把自己的軟體中的錯誤數量降低到每一百萬行**中不超過乙個。
在他的" quality is free"5 一書中philip 說過,提高質量的積極性總是來自於對質量的代價(我更偏愛使用"質量的價值"一詞,雖然二者的意思完全一樣)的分析。在我的諮詢經歷中,我經常要與深受困擾的專案主管們交談,他們之所以有所煩惱,大多是因為他們企圖削減軟體的開發費用,或者縮短開發周期;但是,我卻很少遇到哪位主管為軟體質量的提高煩惱過。他們不用大傷腦筋,就可以輕鬆地告訴我為了削減費用或加快進度,那些工作才是應該做的;然而,對於提高軟體質量所能帶來的價值,他們卻似乎從來也沒有考慮過去評估一下。
而當我建議他們評估一下質量帶來的價值時,他們通常的反應讓我感覺到,自己好像是在告訴他們長高到八英呎六英吋之後的價值--對他們來說,提高質量是"挾泰山以超北海"的工作。既然對如何實現這個目標一無所知,又為何要因為對其價值的評估而自尋煩惱呢?即使知道如何評估,但是既然我們對這種價值並不認同,那麼又有什麼必要去實現它呢?圖1-3 顯示出了這個惡性迴圈的過程。這裡採用的是作用圖的形式,我將在稍後對這種圖表進行解釋,並且將在本卷中一直使用它。現在,讓我們暫且特別留意它是如何解釋提高質量的工作的開展為何這樣舉步維艱。
圖1-3 一種惡性的迴圈,它導致開發組織無法著手提高軟體質量
對圖1-3 中圖表的解釋仁者見仁,可能得出樂觀的結論,也可能得出悲觀的結論。從樂觀的角度來看,這張圖表說明,一旦開發組織開始領悟到質量的真實價值,其改進質量的積極性就會提高,進而可以促進其更好地理解如何才能提高質量,最後反過來使其更好地理解到質量的價值。crosby之所以不惜付出質量分析的代價以改革開發組織的行政機制,原因正在於此。
儘管如此,從悲觀的角度來看,這種迴圈也可以理解一種阻礙作用,它會阻礙以更高質量為目標的改革。如果不能意識到質量的價值,實現質量的積極性就是無本之木;反過來,對實現質量的方法的理解也就無從談起。既然連實現質量的途徑都不清楚,那麼評估其價值又有什麼意義呢?
鎖定效應
圖1-3 也恰好是說明鎖定效應的乙個例子。乙個被鎖定的系統會盡力使自己維持在現有的執行模式上,縱然有很多合理的原因要求改變它,該系統依然故我。關於鎖定現象,最佳的例子莫過於標準程式語言的選擇。無論是由於何種歷史原因,一旦某個企業現在正在使用某一種程式語言,那麼就需要花費更大的代價才能使之更換成另一種語言;在試圖考察其他可替換語言的價值時,該企業的積極性也會同時下降;因此,根本就不可能知道如何去更換程式語言。其後果是,該企業會死抱目前正在使用的語言不放--這就像在選擇車輛靠左還是靠右行駛的規則時,不同國家會固守自己現有的約定。
在本卷書中,我們將會看到很多有關鎖定情況的例子;但是在目前,我們首先只需注意到這樣乙個事實:鎖定現象都是連鎖式發生的。要是你鎖定於某一特定的程式語言,那麼你同時也很可能會所定於下面的全部或者部分方面:
支援該程式語言的一整套軟體工具
支援該語言的某種非標準變體的硬體系統
由若干特定的學校培訓出來的人力資源
從其他某些特定的企業聘用來的人力資源
精通該語言及其工具的一群顧問
由使用該程式語言的其他使用者組成的團體
一批通過改程式語言步步公升遷的主管
面向該程式語言的專業書籍以及技術培訓
與該程式語言對應的軟體工程基本理論
與該程式語言對應的使用者介面基本理論
按照上面的次序,這些因素將依次使得相應的企業鎖定於其後續的因素。如果你試圖改變其採用的標準程式語言,就會在整個企業的範圍內造成一些列連鎖反應,在其中的每一環節,你的努力都會遇到各式各樣的阻力。
對於乙個開發組織而言,調整其採用的標準程式語言究竟有無益處,這個問題並不重要。正如臨床醫學家virginia satir 經常掛在嘴邊的一句話所說的:
"在選擇工具時,人們優先挑選的並不是最適用的,而是自己最熟悉的。"
雜湊表查詢為何如此之快
雜湊是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 建立了關鍵字與儲存位置的對映關係,公式如下 設所有可能出現的關鍵字集合記為u 簡稱全集 實際發生 即實際儲存 的關鍵字集合記為k k 比 u 小得多 雜湊方法是使用函式f將u對映到表t 0...
HANA資料庫為何如此之快
原文標題是how sap hana is such a fast database,不過作者的觀點是hana的快主要源自硬體的發展,而且hana並非適合所有的應用場景。不過我關注的恰好是結論之外的部分。儲存硬體的提公升,從物理磁碟到ssd,記憶體,相應的資料庫查詢方式也發生了變化。當資料庫使用傳統的...
HANA資料庫為何如此之快
原文標題是how sap hana is such a fast database,不過作者的觀點是hana的快主要源自硬體的發展,而且hana並非適合所有的應用場景。不過我關注的恰好是結論之外的部分。儲存硬體的提公升,從物理磁碟到ssd,記憶體,相應的資料庫查詢方式也發生了變化。當資料庫使用傳統的...