95%的bug是由程序員造成的
作者在Twitter上發(fā)的一條短訊:
“在怨天尤人之前,我們應該先自我反省、努力把自身的問題解決了。”
12:22 PM –2012-5-30
你應該知道那種感覺。我們所有人都曾碰到過這樣的事情:你已經盯著代碼看了無數遍,但還是沒有發(fā)現任何問題。然而,有個故障或者錯誤始終揮之不去。 于是你開始懷疑,一定是你開發(fā)程序所用的那臺機器出了問題,也可能是操作系統(tǒng)的問題,或者是你使用的工具和庫出了問題。肯定是它們的原因!
然而,無論你多么絕望,你都不要往那條路上走。沿著那條路下去就是“伏都”計算和靠運氣編程。說白了,就是愚蠢。
譯者注:伏都教(voodoo),又譯“巫毒教”,源于非洲西部,是糅合祖先崇拜、萬物有靈論、通靈術的原始宗教。
老是要處理一些困難的、捉摸不透的問題,這是一件令人絕望的事情,但是不要讓絕望領著你誤入歧途。作為一名謙遜的程序員,最基本的要求就是要有意識:你寫的代碼在任何時候出了問題,那一定都是你的錯。這個觀點在《程序員修煉之道:從小工到專家》一書中被巧妙地歸結為“select沒有問題”:
譯者注:select是用于I/O多路轉接的一個系統(tǒng)調用函數。
在大多數項目中,你所調試的代碼里常?;祀s著這些東西:你和項目小組中的其他成員開發(fā)的應用代碼、第三方的產品(數據庫、鏈接器、圖形庫、特殊的通信系統(tǒng)或者算法等)以及平臺環(huán)境(操作系統(tǒng)、系統(tǒng)庫和編譯器)。
操作系統(tǒng)、編譯器或者第三方產品出問題的可能性是有的——但是,這絕對不應該是你碰到問題后的***反應。錯誤出現在正在開發(fā)的應用代碼中的可能性要 大得多的多。通常情況下,假定應用程序錯誤地調用了庫函數要比假定庫本身有問題更有效益。即便問題出在第三方,你還是必須徹底排除自身代碼的問題,然后再 提交錯誤報告。
我們曾經做過一個項目,項目中的一位高級工程師確信Solaris上的select系統(tǒng)調用出了問題。無數次的勸說和邏輯分析都不能改變他的主意 (事實上,所有其他的網絡應用程序在同樣的機器上都能正常工作,但他仍然固執(zhí)己見)。他花了好幾個星期來做變通方案,但是因為一些詭異的原因,這些方案似 乎都行不通。他最終不得不坐下來,仔細地閱讀關于select的文檔。然后,他找到了真正的問題,并且在幾分鐘內就把問題解決了。如今,一旦我們當中有人 開始為了一個很可能是我們自己造成的錯誤而責怪系統(tǒng)時,我們會用“select有問題”這個短語作為善意的提醒。
譯者注:Solaris是一個類似于Unix的操作系統(tǒng),最初由Sun Microsystems公司開發(fā)。早期的Solaris主要針對服務器以及企業(yè)應用領域,在Sun的高性能工作站上有廣泛的應用。
代碼產權的另一面是代碼責任。無論你的軟件出現什么樣的問題——甚至最開始出錯的地方根本就不是你的代碼——你也應該總是假定問題出在你的代碼里, 并且根據這個假設采取行動。如果你想讓世界人民接受你的軟件,那你就要為它的故障承擔全責。盡管——從嚴格意義上來說——你并不是非這么做不可。只有這 樣,你才能贏得尊敬和信用。如果你不斷地把問題推卸到其他人、其他公司或者其他的源頭上,你是無論如何也得不到尊敬和信用的。
從統(tǒng)計學的角度來說,軟件中的故障或者錯誤一般都是人為的,例外的可能性鳳毛麟角。我想你已經明白了這一點。在《代碼大全》(《CodeComplete》)一書中,Steve McConnell引用了兩個研究來證明這個觀點:
在1973年和1984年進行的兩次研究發(fā)現,在所有報告的錯誤中,大約有95%是由程序員造成的,2%是由系統(tǒng)軟件(編譯器和操作系統(tǒng))引起 的,2%是由其他軟件引起的,1%是由硬件造成的。跟1970年代和1980年代相比,現在的系統(tǒng)軟件和開發(fā)工具的使用人群要大得多,所以我猜想,現如今 應該有更高比例的錯誤是由程序員的過失造成的。
不管你的軟件出了什么問題,請你負起責任來吧!從你的代碼開始,深入進去,逐步向外調查,直到你找到確鑿的證據證明問題之所在。如果問題出在你無法 控制的代碼上,你不但學會了必要的故障排除和診斷技巧,同時還獲得了用來支持你指控別人的審計證據。當然,和你聳聳肩膀簡單地把問題歸責于操作系統(tǒng)、工具 或者應用框架相比,這樣花費的工夫要多得多——但是這也會逐步形成信任和尊敬的感覺,而這種感覺是你通過指責他人和逃避不可能得到的。
如果你真的渴望做一名謙遜的程序員,在你碰到問題的時候,你就應該很淡定地說:“嘿,這是我的錯——讓我把它弄個水落石出。”
原文鏈接:http://www.codinghorror.com/blog/2008/03/the-first-rule-of-programming-its-always-your-fault.html
譯文鏈接:http://blog.csdn.net/happydeer/article/details/18815345


2022-10-25 10:40:15
2010-03-02 10:13:56




