軟體開發和其他製造業的區別在於,軟體的成本在於研發,而不是製造,製造業可以有既有的模式來進行流水線的工作方式,大大的提高產品的品質。
雖然,軟體有這種固有的特點,但是我認為還是可以藉助製造業的管理經驗來管理軟體開發。尤其是,軟體不會受許多物質條件的限制,也就有了很多更大的發揮空間。
一個產品,如何才能稱之為品質高的產品?我認為應該滿足一下條件:
1.符合消費者的需要(功能性)
2.健壯
3.高效(競爭力的體現)
其實傳統製造業要弄個新產品出來,並不比軟體開發容易。先要構思,然後一步一步修改,觸達,諸如此類,不管哪個環節,如果是軟體開發來說,都比較節省成本,因為軟體要部署比硬體部署技術手段要容易多了。正因為如此,我們應該對提高軟體開發品質保持信心的。
提高軟體開發的品質,首先要貫徹一個恰當的開發流程。
以前有什麼瀑布型,現在有什麼敏捷型,他們固然是有其優點,但是往往實際工作中沒有得到普及,為什嗎?因為沒有建立具體化的實施機制和管理層沒有理解和在團隊中推動這些,這和製造業的老闆有很大的不同。中國的軟體業是新生的,英雄主義的,而不是工業化的。
管理層對開發沒有概念,完全依賴某些高端的開發人員,是問題的根源。要改變,首先就要對抗英雄主義,要建立機制,而不是依賴個人經驗(雖然機制是基於經驗的)。
機制,是將一些含糊不清的過程,用文字表述出來,並量化實施的方法。麥當勞和肯德基的成功,不是因為它有很多牛B的廚師,而是因為他能將某個牛B的廚師的經驗給總結出來,並能制定一個可以重現的過程。這是有難度的,國內那些山寨麥當勞就做不出統一的口味。
要做一個好產品容易,要做很多很多一樣水準的產品就難,而這正是工業化的精髓。
所謂保證產品的品質的含義,其實質就是建立一個科學的生產流程。並且要用製造業的態度去提高軟體產品的品質。
首先要明白生產者和消費者的關係:
生產是為了滿足消費者。
不能滿足消費者的不是產品,是垃圾。
因此從生產關係來看,首先就有如下關係:
<p$1$2$3$4$5$6>
生產者是要服務消費者的。但是如何才能服務消費者?靠自己的開發知識等等,這些雖然沒錯,但是生產的關鍵除了內在的因素,外在的因素更值得重視。這就是生產的條件和前提。生產的前提是什嗎?是你需要知道消費者需要什麼。
如果把生產者和消費者看做生產線的兩個環節,出來的是最終產品,你會發現所謂的現實中的消費者其實是在生產線的第一環節的:
沒有“消費者”的輸出,就沒有“生產者”的輸入,就不會有最終的產品出來。任何企業,他的生產關係都不會那麼簡單,實際上需要許許多多的生產人員組成一條長長的生產線。但是,每兩個生產單元的關係,都離不開所示。因此這裡先把他們一般化:
B單元依賴A的輸出,對於任何一個B來說,他應該保證A的輸出是符合自己的要求的,也就是他才是消費者,才是老大。我用紅線分隔了AB,分別代表了輸入,和輸出。一個生產環節要成功,首先要重視輸入,輸入不嚴格,劣質,註定輸出也是劣質的。而B自身的輸出,由後繼的C來保證其品質。上面已經提到了,所謂的品質,就是要滿足三個條件:功能,品質,效能。如果每一個B都能履行自己監督的義務,那麼一個成功的生產過程就出來了。
如何提高B的監督水準?
B之所以會積極的監督A,是因為B需要依賴A的產品輸出,這是天然的約束關係。但是B同時也要提高自己評判產品品質的能力。如何提高產品的品質?在其他生產線不容易,但是在軟體開發生產線,我認為答案可以很直接,那就是測試代碼。每個B都為A編寫測試代碼,A通不過,自然要退回去重寫。
企業中生產線不會只有一條。
一個軟體企業應該有三條生產線:
1.設計生產線
2.編碼生產線
3.管理生產線
設計生產線串連外部消費者,由消費者做開端,到最終編碼人員組成。
設計生產線的難度在於是散開的。而且,越是後端越是多生產環節,涉及的人員越多,對管理的壓力也就越大。消費者-〉架構設計師-〉中層設計師-〉編碼主管-〉編碼者,會越來越複雜。
編碼生產線位於設計生產線的末端成員組成,這本身就是龐雜的。
管理生產線的任務,在於跟蹤生產環節出現的品質問題,收集生產資料,以真正改善生產結構。
總結:
提高軟體開發品質,首先是關注開發流程,而開發流程,要關注開發的一般環節,所謂環環相扣,做好一般的環節,自然就會水到渠成。