想要理解敏捷軟件開發為什么好,需要從軟件質量講起。那么軟件的質量是什么?這個問題有很多中答案,我們不妨想看看傳統質量理論對于質量是如何理解的。教科書上說,在20世紀質量管理的發展歷程經歷了質量檢驗、統計質量控制和全面質量管理三個階段。其中,質量理念也在不斷的演變。據說有這么幾個階段:
符合性質量
20世紀40年代,符合性質量概念以符合現行標準的程度作為衡量依據,“符合標準”就是合格的產品質量,符合的程度反映了產品質量的水平。比如說我做一個杯子,沒什么特別的要求,也不是我神經質的藝術作品,就是普普通通的一個杯子,那么需要高矮長短,大小胖瘦,等等一干質量屬性,我做好了可以拿著質量標準來對比,一眼就可以看出那里出了什么問題。通過是否符合這些標準判斷產品具有相應的質量。
那么軟件的質量理是不是符合性質量呢?我個人覺得不屬于。雖然我們一樣可以拿出各種各樣的標準,比如故障率,比如bug數等等。但是這些標注都滿足確不一定是好的軟件,比如我寫一個helloworld,雖然他可以沒有bug。但是卻發揮不了任何的作用。這樣的軟件就屬于“高質量”的廢品。正如趙辛梅評價方鴻漸,“你不討厭,但是毫無用處。”,顯然毫無用處的軟件不會是真正高質量的軟件。
適用性質量
20世紀60年代,適用性質量概念以適合顧客需要的程度作為衡量的依據,從使用的角度定義產品質量,認為質量就是產品的“適用性”。是“產品在使用時能夠成功滿足用戶需要的程度”。質量涉及設計開發、制造、銷售、服務等過程,形成了廣義的質量概念。適用性質量的例子也很多,比如我買了一件Givenchy西服(我還真買了一件),但是一時又沒有特別正是的場合(目前還真沒有什么正式的場合),于是我一天四頓牛排(其實只有一頓),于是就吃胖了,這件華麗的Givenchy就穿不上了。那么這件衣服從符合性質量來說,是優質品,但是從適用性質量來說,卻不是一個高質量的產品——因為我穿不上。還有一句話,叫甲之熊掌乙之砒霜。也是適用性質量的標準體現。
那么軟件的質量是不是適用性質量呢?我個人覺得,軟件的質量至少是適用性質量。軟件,尤其是定制軟件/企業軟件,就是量體裁衣。軟件的基本質量就是要在用戶使用的過程中發揮價值,支撐客戶的業務發展。
書上說,從“符合性”到“適用性”,反映了人們在對質量的認識過程中,已經開始把顧客需求放在首要位置。但是它沒說怎么才能做到把客戶需求放到首要位置。我看光靠文檔是堆不出來的,光考說說也是不行的。這個后面講,戴明同學比我講得好。
滿意性質量
20世紀80年代,質量管理進入到TQM階段,將質量定義為“一組固有特性滿足要求的程度”。它不僅包括符合標準的要求,而且以顧客及其他相關方滿意為衡量依據,體現“以顧客為關注焦點”的原則。這個的最典型的例子是麥當勞,他所有的店鋪從風格到食物都保持在同一水平,使你無論在那里,都可以得到一定的購物體驗。也就構成了對麥當勞的滿意性質量的驗證。這個軟件上也是有例子的,內舉不必親,ThoughtWorks大多數項目都可以達到“滿意性質量”,呵呵誰讓俺們是consultant涅。
我隱約覺得滿意性質量應該是一個過程的質量,而不僅僅是軟件的質量,但是目前沒有好的想法,暫且按下不表。
卓越質量
......下略100字。個人覺得大多數軟件還沒有達到適用性質量,大多是過程也都沒有達到滿意性質量,卓越質量就先不說了吧。
總之,我們大體的認為軟件質量主要是適用性質量起碼是不會錯的。那么怎么才能達到這個質量標準涅?俺是做軟件的,質量管理還是看看Deming同學怎么說吧,不過他老人家的14點總是發生變化。我也只好斷章取義,說說一個敏捷開發人員眼中的14原則:
1. 持之以恒地改進產品和服務 Create constancy of purpose for improvement of product and service
這個很明顯嘛,small release,快速發布,每次發布都是對產品的持續改進。
2.采用新的觀念 Adopt the new philosophy
敏捷啊...
3.停止依靠大規模檢查去獲得質量 Cease dependence on mass inspection
這個還有另一個說法,build quality in。TDD,QA/BA全程參與,都是build quality in的好方法。
4.結束只以價格為基礎的采購習慣 End the practice of awarding business on the basis of price tag alone
這個...貌似是說請咨詢吧...
5.持之以恒地改進生產和服務系統 Improve constantly and forever the system of production and service
這個是敏捷過程的持續改進,對應的實踐大家可能比較陌生——Restrospective!!!
6.實行崗位職能培訓 Institute training on the job
Pair Programming,Learning Lunch敏捷從來都不缺乏學習的機會,就看你有沒有學習的動力了。
7. 建立領導力企業管理 Institute leadership
敏捷團隊的終極目標,自組織團隊,的管理是也。
8. 排除恐懼 Drive out fear
XP第一原則,勇氣,不要恐懼。
9. 打破部門之間的障礙 Break down barriers between staff areas
只有開發團隊的敏捷不是真正的敏捷,敏捷說到底,是將軟件的供求關系從合約型轉為合作型,本來就要是大破障礙。而且障礙不打破,就很難將敏捷實施到底。這也是很多同學嘗試敏捷失敗的原因,僅僅以為敏捷是技術層面上的事情,其實不是。從這個角度來所,敏捷方法的確是深刻而震撼心靈的變革,有些人...呃...敏捷在十月...
10. 取消對員工的標語訓詞和告誡 Eliminate slogans, exhortations, and targets for the work force
恩,什么激情100天...封閉開發...見鬼去吧...不過restrospective的結果是要寫在白板上的,準備時刻改進。自我表揚和自我批評,算不上訓詞吧。
11.取消定額管理和目標管理 Eliminate numerical quotas for the work force. Eliminate management by objectives
很多人都問過我,pair programming了之后,技校怎么辦?嘿嘿,Deming同學已經說了,這樣的考核不要也罷。
12 消除打擊員工工作情感的考評 Remove barriers that rob the hourly worker of his right to pride of workmanship. Remove barriers that rod people in management and in engineering of their right to pride of workmanship
敏捷團隊的自我評價很簡單,360度,由于你幾乎跟所有人都pair過,如果所有人都不說你好...這已經是rp問題了,就不是打擊這么簡單了...
13 鼓勵學習和自我提高? Encourage education and self-improvement for everyone
同前,Pair Programming,Learning Lunch敏捷從來都不缺乏學習的機會,就看你有沒有學習的動力了。
14 采取行動實現轉變 Take action to accomplish the transformation
每次restrospective之后必須定出方案,以實踐改進。而諸位如果想實施敏捷又覺得難于說服領帶,不妨拿Deming同學說說事,這位大老的殺傷力還是曼大的,尤其你老大是MBA的話