



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、01什么是bug相信絕大部分程序員都聽說過這個故事:曾經真的有人在計算機里找到了一只昆蟲,正是這只昆蟲導致了計算機程序運行出現了錯誤。(但真實情況是,人們在那之前就已經把程序的異常行為稱為bug了,但因為這則故事富有趣味,所以一直被人們津津樂道。)但說真的,當談論bug時我們究竟談論的是什么?這里是關于bug的精確定義:程序的行為并沒有符合程序員的預期。程序員的預期沒有滿足絕大部分理性用戶的期望。通常來說只要程序能夠嚴格執行程序員給出的指令,它就可以算是處于正常工作的狀態。但有時候程序員期望程序執行的行為會出乎普通用戶的意料,甚至給他們帶來麻煩,所以這也算是一類bug。其他軟件功能上的不足都可
2、以歸納到新功能需求中。如果說程序的工作狀態的確與我們期望的一致,但離用戶期望還有差距,則意味著它需要新“功能”。“功能”和“bug”定義之間的區別也就在這。請注意硬件也可能產生bug。程序員不太可能發出“讓計算機爆炸”這類的指令。如果程序員編寫了一段程序導致了計算機真的爆炸了,這很有可能是硬件bug引起的。硬件中當然可能存在某些bug,但應該不會是如此夸張的這種。本質上說,任何導致程序員指令沒有被正確執行的故障,都可以被認為是bug,除非程序員打算讓計算機做一些它本不應該去做的事情。舉個例子,如果程序員告訴計算機去“統治整個世界”,但是它本身就不是被設計用來統治世界的,那就意味著計算機需要一個
3、新的“統治整個世界”的功能。這也就算不上是一個bug。硬件至于硬件,你應該同時考慮到硬件設計者的預期,以及大部分程序員的對于它們的期望。從這個層面上說,程序員其實是主要的“用戶”,硬件設計者則是需要考慮程序員預期的人。當然,我們也應該關心普通用戶的期望,特別是針對那些普通用戶會與之打交道的硬件設備,比如打印機、顯示器和鍵盤等。02bug的源頭bug來自哪里?我們能把所有bug的成因范圍縮小至一個或者幾個之內嗎?答案是肯定的。bug通常來自開發者嘗試降低代碼復雜性未果而產生的副作用。也有部分來自對其實簡單的代碼產生的誤解。除了一些拼寫錯誤以外,我能十分肯定以上兩點基本就是所有bug產生的根本原因
4、,盡管我還沒有進行深入的研究來證明這件事。復雜的事物容易引起用戶的誤操作。想象一下一個黑色盒子,上面有上百萬個沒有任何標識的按鈕,而其中的16個按鈕按下之后會毀滅整個世界,那么使用這個盒子的人中注定有人會一不小心讓毀滅降臨。在編程中也存在類似的情況,如果你無法輕易理解編程語言的文檔,或者是這門語言本身,你就或多或少存在錯誤使用它的可能。說真的,就那個長滿上百萬個沒有標識按鈕的盒子而言,正確的使用方式不可能存在。你永遠也不可能弄清正確的方式是什么,即使你計劃閱讀完1000頁的說明書,也不一定能記住能夠幫助你正確使用盒子的整套流程。同樣的道理,只要你讓事物變得足夠復雜,人們就會傾向于用錯誤的而不是
5、正確的方式使用它。如果你把50、100或者1000個這類的復雜組件拼裝在一起,無論由多聰明的工程師來進行拼裝,它們也永遠無法正常工作。所以你開始明白bug來自哪里了吧?你每引入一絲復雜性,開發者(這里的“開發者”甚至包括你自己)誤用你的代碼的概率就高一分。一旦代碼的意圖和使用方法變得極不明確,就會讓使用這份代碼的人犯錯。又因為你的代碼和其他的代碼混合在了一起,導致了開發者誤用和犯錯的可能性大大增加。而后這些代碼又會繼續和其他的代碼混合,形成惡性循環。復雜性的構成硬件設計者將硬件制造得極為復雜的情況時常發生。所以它必須與復雜的匯編編程語言集成。而這又使得匯編語言和編譯器同樣復雜起來。當你遇到這種
6、情況時,如果你不提前對程序進行精妙的設計或者全方位的測試的話,基本上無法避免bug的發生。只要你的設計不夠完美,那么在運行的一瞬間,大量的bug就會涌現出來。站在其他程序員的視角看這件事也很重要。畢竟有些事對你來說很簡單,但是對其他人來說或許很復雜。如果你想要感同身受地體驗一下其他人看不懂你的代碼的感受,你可以找一份你從沒有使用過的類庫的文檔來閱讀看看。也可以找一些你從沒有閱讀過的代碼來閱讀。嘗試理解整段程序而不是單行代碼的含義,并且想象當你需要對它進行修改時應該從哪里入手。這些都是其他人閱讀你代碼時的體驗。你大概注意到在閱讀他人代碼時,即使并不復雜的代碼也足以讓人產生挫敗感。現在我們考慮另一種程序員誤解簡單代碼的情況。這也是需要額外小心的另一件事。如果你察覺到某位程序員在向你解釋一段代碼時敘述得牛頭不對馬嘴,那便意味著他應該是誤解了代碼中的某些內容。當然如果他正在研究的領域極其復雜,也情有可原,可能需要他讀到博士學位才能完全掌握它。這兩個方面是緊密關聯的。當你編寫代碼時,需要承擔的部分職責是讓將來閱讀你代碼的程序員理解它,并且是很輕松地就能理解。如果你確實是這么做的,但是他在閱讀過程中仍然產生了嚴重誤解或許他根本就不明白“if”語句是什么含義。那應該就與你無關了。假設將來那些
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025電梯安裝施工合同范本
- 2025股權轉讓合同轉讓合同
- 2025綜合租賃合同示范文本
- 內蒙古自治區赤峰市紅山區赤峰第四中學2023-2024學年高二下學期5月期中生物試題 含解析
- 2025屆遼寧省遼南協作體高三下學期第三次模擬物理試卷
- 降壓藥物護理
- 普通心理學(第2版)課件 第十二章 人格
- 人教版小學一年級語文上學期期末檢測題
- 2025年醫患溝通學試題
- 初三畢業班中考前家長會班主任發言稿模版
- 可行性研究報告編制服務投標方案
- 山東省汽車維修工時定額(T-SDAMTIA 0001-2023)
- 專業文獻閱讀技巧
- 控制吸煙的政策與法規案例分析
- 國企經理成員崗位聘任協議-(參考模版)
- 中國公民普通護照申請表(正面)
- 人工智能與房地產營銷
- 23J916-1:住宅排氣道(一)
- 北京市初中學業水平考試體育與健康知識
- VDA6.3-2016過程審核對應的資料
- 駐足思考瞬間整理思路并有力表達完整版
評論
0/150
提交評論