軟件4大定律

軟件是個非常特殊的產品, 學過軟件工程的都知道, 軟件工程的理想就是生產軟件像福特公司生產汽車流水線一樣,源源不斷的自動生產軟件出來。這樣我們就不需要那么多的軟件工程師來寫代碼了。 事實上我們發現今天的軟件工程師的崗位越來越多了,而不是越來越少了。這說明軟件工程沒有幫助我們解決軟件自動化生產問題,它絕不像汽車可以在流水線上生產出來! 其實流水線是個產品復制的過程, 不適合腦力勞動的活動如設計,研發,探索。而軟件開發恰恰是腦力勞動的成果。 而軟件的復制則要比汽車流水線簡單多了。 軟件復制的成本幾乎為零,或者說5元錢的成本-一張光盤。 所以我們認為軟件是個特殊的產品。 對于軟件的研究已經有許多著作了, 基于幾十年的軟件開發和軟件市場推廣的經驗, 總結了軟件的一些的特點和規律—— 形成了這軟件4大定律:

 

軟件只能證明有錯,不能證明無錯

軟件是個特殊的產品, E.W.Dijkstra j 說過:  “程序測試能證明錯誤的存在, 但不能證明錯誤不存在“。其中一個比較著名的例子就是程序里有一個邏輯上的死循環(Dead Loop), 我們無法知道它是個死循環還是在等待地球爆炸。 還有在并行軟件開發中,我們常常會遇到racing-condition引起的bug問題。

 

 

什么叫racing condition引起的bug?據個例子來說,比如A開車上午10點路過馬甸橋,同一天B開車上午10點恰好也路過馬甸橋和A擦身而過引發了一個錯誤(bug)。這和時間順序,地點,環境相關的問題就是racing condition問題, 而且很難重現這個問題。  這也就是為什么凡由軟件控制的機器和設備, 我們是沒法證明其100%正確的, 發生錯誤是個概率問題。 前段時間特斯拉剎車門事件, 盡管特斯拉公布了數據,輿情消停了許多。 最近又有車主報告特斯拉后座車門打不開,檢查結果是軟件認為車在行駛中,故而車門上鎖了,但是車主的車就停在那兒了,所以可能是傳感器問題, 也有可能是軟件問題。

 

數據也不是萬能的, 它也有可能是錯的!這里需要告誡的是, 凡有軟件的地方,就不能假定100%的正確可靠, 出了問題我們要用軟件的知識和規律來思考。 

 

2:8定律,軟件功能開發20%成本,而讓軟件成熟需要花80%成本

在軟件規律中有不少二八原則, 稱為帕累托法則(The Pareto Principle or The 80/20 Rule) 。比如 20% 的努力產生了80% 的結果;20% 的工作創造了80% 的收入;20% 的錯誤導致了80% 的崩潰;20% 的功能導致了80% 的使用量。這里我們想表達的是如果一個成熟,可靠的軟件產品共投資了1億美元, 那么開發實現其功能可能只要花2000萬美元,其余8000萬美元是花在了讓產品成熟和可靠。為什么會這樣呢?

 

 

在我們軟件開發中對QA測試的投入是大量的, 微軟甚至軟件開發人員和QA人數是1:1的。有人統計過,如果在研發過程中糾正一個錯誤(Bug)的代價是5美元,同樣的錯誤如果發生在用戶現場,你可能要花幾千甚至幾萬美元去改正(fixing)它。而有些錯誤是公司不能承擔的, 比如芯片在Cut后發現問題, 那么所有Cut的芯片只能都報廢,當汽車發現致命缺陷是,只能召回,公司蒙受巨大損失。 

 

關于招投標,在許多場合客戶都會采用招投標的方式來采購軟件產品。 但是我們發現恰恰軟件是不適合招投標的,因為一般招標文件羅列的需求都是軟件功能, 而軟件的成熟度和可靠性很難量化指標。 問題是招投標考量的是那20%投入的功能, 哪個傻瓜還會去投入80%的錢讓產品成熟起來呢? 這或許是為什么我國很難出現世界級的軟件公司和產品的一個因素吧。

 

軟件成熟度不由開發者的投入決定的,而是由客戶數和時間決定的

這和定律1有關聯, 定律1說軟件無法證明正確性, 只能證明有錯。為了讓產品向正確方向更加靠近, 我們采用的方法就是不停的測試,抓bug。當我們再也抓不到bug,是不是說明軟件是正確的呢?理論上是成立的, 但是實際上很難做到。  

 

我們經驗是在開發者環境里,我們很難窮舉和想象出用戶使用產品的各個場景, 也就是說,無論我們研發團對QA如何測試,也是替代不了市場和客戶實際使用的過程。但是這不等于說公司內部QA測試就不重要了, 你該記住內部測試糾錯5美元的事,到了產品發布后期在用戶現場糾錯,成本可能是幾千或幾萬美元的事了。

 

一個軟件產品證明其成熟度和可靠性唯有市場實際使用者的多少以及使用的時間來衡量。這和技術成熟度曲線(The Hype Cycle & Amara's Law)規則有點類似。 

 

 

我們傾向于過高估計技術在短期內的影響,并低估長期效應。新技術的引入會引發一陣浪潮, 技術團隊會很感興趣采用這些新技術,但是不久會碰見一大堆問題對結果感到失望。但是邁過了這個技術不成熟坎,迎來的是未來穩步的發展。 

 

這也就引申出了另外一個話題,目前許多企業尤其是比較大型的國企在糾結自己使用的軟件是找第三方軟件公司呢?還是自己招人研發,有些公司在這方面反反復復的, 錢花了不少,系統還是不好用。 理論上來說軟件是典型的“造船不如買船, 買船不如租船”的行業。

 

因為開發一個軟件只給自己用肯定是個虧本買賣,除非企業開發這個軟件是公司核心掙錢的工具,比如那些BAT互聯網公司。 從行業的健康發展來看, 社會需要很好的分工, 不要走別人路讓別人無路可走, 最后自己也無路可走。 還有就是要改改重硬輕軟的毛病, 不讓軟件廠商健康發展, 最后所有軟件都得自己開發, 結果一定是得不償失。 

 

軟件免費定律

不同于傳統產品,軟件是可以免費的,而原廠商可以活著,甚至活的更好。這是因為軟件的復制成本幾乎為零。 以前軟件產品刻在光盤上,成本大概是5元人民幣,和軟件價值比,這個成本微不足道,但是隨著網絡,互聯網的發達, 我們可以在網上下載軟件,光盤業省了!這在其它行業是不可想象的。“世界上相同的軟件,只要一份就可以了”。

 

傳統行業比如汽車,復制成本不是個小數。汽車行業的競爭不可能是一家汽車廠商免費提供汽車而把其它競爭者逼死。但是軟件可以-免費是其大殺器。大家還記得網景公司(Netscape)在1994年10月發布了他們的旗艦產品Navigator(導航者,網景瀏覽器)。但是很快Netscape的優勢就被削弱了, 因為微軟在這個時候匆促的購入了Spyglass公司的技術,改成Internet Explorer并綁定在其Windows中,說白了就是免費了。掀起了軟件巨頭微軟和網景之間的瀏覽器大戰,如今我們已經看不到Netscape了。

 

 

還有中國公司360周鴻祎靠一招免費殺毒軟件干掉其它行業的巨頭。 當初周鴻祎發現別人的殺毒軟件賣200元,自己賣25元還是做不過別人, 連第四,第五都排不上。所以換個思路,軟件免費。 真是因為軟件的復制成本為零, 周鴻祎這么做不至于賠錢,但是這讓其它競爭者無錢可賺。 有意思的是自從360免費后,電腦病毒似乎一下子消失了, 這個非常耐人尋味。 還有一個問題, 既然你把軟件免費了,你靠什么掙錢?答案是你得從其它地方掙錢,這就是人說的“羊毛出在豬身上”。 

 

 

推薦閱讀 

在線咨詢 MESSAGE

姓名 *

電話 *

郵箱 *

咨詢意向 *

公司名稱

所屬行業

需求概述 *

{转码词},{转码词1},{转码词2},{转码词3}