如果您看到了錯誤消息,一定要仔細、準確的告訴程序員,這確實很重要。在這種情況下,程序員只要修正錯誤,而不用去找錯誤。他們需要知道是什么出問題了,系統所報的錯誤消息正好幫助了他們。如果您沒有更好的方法記住這些消息,就把它們寫下來。只報告“程序出了一個錯”是毫無意義的,除非您把錯誤消息一塊報上來。
特殊情況下,如果有錯誤消息號,一定要把這些號碼告訴程序員。不要以為您看不出任何意義,它就沒有意義。錯誤消息號包含了能被程序員讀懂的各種信息,并且很有可能包含重要的線索。給錯誤消息編號是因為用語言描述計算機錯誤常常令人費解。用這種方式告訴您錯誤的所在是一個最好的辦法。
在這種情形下,程序員的排錯工作會十分高效。他們不知道發生了什么,也不可能到現場去觀察,所以他們一直在搜尋有價值的線索。錯誤消息、錯誤消息號以及一些莫名其妙的延遲,都是很重要的線索,就像辦案時的指紋一樣重要,保存好。
如果您使用UNIX系統,程序可能會產生一個內核輸出(coredump)。內核輸出是特別有用的線索來源,別扔了它們。另一方面,大多數程序員不喜歡收到含有大量內核輸出文件的EMAIL,所以在發郵件之前最好先問一下。還有一點要注意:內核輸出文件記錄了完整的程序狀態,也就是說任何秘密(可能當時程序正在處理一些私人信息或秘密數據)都可能包含在內核輸出文件里。
“出了問題之后,我做了……”
當一個錯誤或bug發生的時候,您可能會做許多事情。但是大多數人會使事情變的更糟。我的一個朋友在學校里誤刪了她所有的Word文件,在找人幫忙之前她重裝了Word,又運行了一遍碎片整理程序,這些操作對于恢復文件是毫無益處的,因為這些操作搞亂了磁盤的文件區塊??峙略谶@個世界上沒有一種反刪除軟件能恢復她的文件了。如果她不做任何操作,或許還有一線希望。
這種用戶仿佛一只被逼到墻角的鼬(黃鼠狼、紫貂一類的動物——譯者注):背靠墻壁,面對死亡的降臨奮起反撲,瘋狂攻擊。他們認為做點什么總比什么都不做強。然而這些在處理計算機軟件問題時并不適用。
不要做鼬,做一只羚羊。當一只羚羊面對料想不到的情況或受到驚嚇時,它會一動不動,是為了不吸引任何注意,與此同時也在思考解決問題的最好辦法(如果羚羊有一條技術支持熱線,此時占線。)。然后,一旦它找到了最安全的行動方案,它便去做。
當程序出毛病的時候,立刻停止正在做的任何操作。不要按任何健。仔細地看一下屏幕,注意那些不正常的地方,記住它或者寫下來。然后慎重地點擊“確定” 或“取消”,選擇一個最安全的。學著養成一種條件反射——一旦電腦出了問題,先不要動。要想擺脫這個問題,關掉受影響的程序或者重新啟動計算機都不好,一個解決問題的好辦法是讓問題再次產生。程序員們喜歡可以被重現的問題,快樂的程序員可以更快而且更有效率的修復bug。
“我想粒子的躍遷與錯誤的極化有關”
并不只是非專業的用戶才會寫出拙劣的bug報告,我見過一些非常差的bug報告出自程序員之手,有些還是非常優秀的程序員。
有一次我與另一個程序員一起工作,他一直在找代碼中的bug,他常常遇到一個bug,但是不會解決,于是就叫我幫忙。“出什么毛病了?”我問。而他的回答卻總是一些關于bug的意見。如果他的觀點正確,那的確是一件好事。這意味著他已經完成了工作的一半,并且我們可以一起完成另一半工作。這是有效率并有用的。
但事實上他常常是錯的。這就會使我們花上半個小時在原本正確的代碼里來回尋找錯誤,而實際上問題出在別的地方。我敢肯定他不會對醫生這么做。“大夫,我得了Hydroyoyodyne(真是怪病——譯者),給我開個方子”,人們知道不該對一位醫生說這些。您描述一下癥狀,哪個地方不舒服,哪里疼、起皮疹、發燒……讓醫生診斷您得了什么病,應該怎樣治療。否則醫生會把您當做疑心病或精神病患者打發了,這似乎沒什么不對。
做程序員也是一樣。即便您自己的“診斷”有時真的有幫助,也要只說“癥狀”。“診斷”是可說可不說的,但是“癥狀”一定要說。同樣,在bug報告里面附上一份針對bug而做出修改的源代碼是有用處的,但它并不能替代bug報告本身。
如果程序員向您詢問額外的信息,千萬別應付。曾經有一個人向我報告bug,我讓他試一個命令,我知道這個命令不好用,但我是要看看程序會返回一個什么錯誤(這是很重要的線索)。但是這位老兄根本就沒試,他在回復中說“那肯定不好用”,于是我又花了好些時間才說服他試了一下那個命令。
用戶多動動腦筋對程序員的工作是有幫助的。即使您的推斷是錯誤的,程序員也應該感謝您,至少您想去幫助他們,使他們的工作變的更簡單。不過千萬別忘了報告“癥狀”,否則只會使事情變得更糟。
“真是奇怪,剛才還不好用,怎么現在又好了?”
“間歇性錯誤”著實讓程序員發愁。相比之下,進行一系列簡單的操作便能導致錯誤發生的問題是簡單的。程序員可以在一個便于觀察的條件下重復那些操作,觀察每一個細節。太多的問題在這種情況下不能解決,例如:程序每星期出一次錯,或者偶然出一次錯,或者在程序員面前從不出錯(程序員一離開就出錯。——譯者)。當然還有就是程序的截止日期到了,那肯定要出錯。
大多數“間歇性錯誤”并不是真正的“間歇”。其中的大多數錯誤與某些地方是有聯系的。有一些錯誤可能是內存泄漏產生的,有一些可能是別的程序在不恰當的時候修改某個重要文件造成的,還有一些可能發生在每一個小時的前半個小時中(我確實遇到過這種事情)。
同樣,如果您能使bug重現,而程序員不能,那很有可能是他們的計算機和您的計算機在某些地方是不同的,這種不同引起了問題。我曾寫過一個程序,它的窗口可以蜷縮成一個小球呆在屏幕的左上角,它在別的計算機上只能在 800×600 的解析度工作,但是在我的機器上卻可以在 1024×768 下工作。
原文轉自:http://www.anti-gravitydesign.com