自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用醫(yī)生的思考方式調(diào)試你的代碼

移動開發(fā)
設計和維護好的軟件就像是一個抵制復雜度的永無止境的奮斗過程。任何足夠大小的應用程序的代碼路徑和組件都能迅速成長成令人眼花繚亂的組合爆炸。一點都不簡單。

設計和維護好的軟件就像是一個抵制復雜度的永無止境的奮斗過程。任何足夠大小的應用程序的代碼路徑和組件都能迅速成長成令人眼花繚亂的組合爆炸。

一點都不簡單。

當部署類似于Heroku和AWS的平臺時,單服務器的Web應用程序成為了分布式系統(tǒng)?,F(xiàn)代瀏覽器模糊了客戶端和服務器之間的界線。當簡單程序在多個CPU內(nèi)核上運行時,它們就會成為復雜的協(xié)調(diào)問題。雖然像測試驅(qū)動開發(fā)等實踐和SOLID原則等指導,可以幫助我們模擬問題,簡化解決方案,但大多數(shù)軟件應用程序都是一些復雜的系統(tǒng),每個組件也會以意想不到的方式進行交互和組合。

當軟件系統(tǒng)中發(fā)生意外情況時,會造成很嚴重的后果。幸運的是,軟件開發(fā)人員可以借鑒另一門更古老的學科,來應對對于復雜系統(tǒng)的關注、維護和調(diào)試,這門學科就是——醫(yī)學。

[[142221]]

鑒別診斷是醫(yī)生用來匹配系列癥狀及其可能病因的系統(tǒng)化方法。一個好的鑒別診斷包括以下4個步驟:

  1. 列出所有觀察到的癥狀。
  2. 列出可能的病因。
  3. 按輕重緩急給這些病因排名。
  4. 按照優(yōu)先順序進行測試,以排除病因。

雖然上面這4個步驟是為醫(yī)生而整理的,但是我們同樣可以像一個醫(yī)生一樣思考,用一種強有力的方式來找到并消除軟件缺陷。將診斷過程分解為一個一個目的單一的步驟,確保每個步驟都能得到應有的重視。按照優(yōu)先順序是為了保證專注檢查的重點,并作出務實的干預措施。然后進行測試,排除假設,以確保調(diào)試的嚴謹。

白板是個好東西

當錯誤發(fā)生時,我們大多會想也不想地立馬去調(diào)查最可能的原因。懂得向后跟蹤和少許背景知識,人性就會趨向于投機主義。但是好的診斷始于列出的癥狀,而不是病因。寫下可以觀察出來的所有癥狀,無論是異常處理,還是錯誤代碼,哪怕只是異常的行為,都可以??梢允褂梦谋揪庉嬈骰蛘甙装?,但是,你***能對診斷過程中的每一個步驟做筆記,這很重要。從假設出發(fā)分開觀察,有助于確保你不會排除或忽視潛在原因。并且多數(shù)時候,列出更多的癥狀反而會縮小可能范圍,避免你將時間浪費在測試不正確的假設上。

寫好了一系列癥狀,那么接下來就可以開始考慮原因了。

斑馬和馬

“當你聽到馬蹄聲的時候,找的應該是馬,而不是斑馬。”

在應用程序中出現(xiàn)代碼bug的可能性比在Web框架中出現(xiàn)bug的可能性要大,而在Web框架中發(fā)現(xiàn)bug又比在操作系統(tǒng)中發(fā)現(xiàn)bug更容易。當然讓別人來審查代碼是個好主意,但事實是,大多數(shù)bug審查起來特別無聊。所以在開始考慮進階到更復雜的問題之前,先給出最簡單的解釋。

話又說回來,正如同一個癥狀卻又可能是完全不同的病因引發(fā)的,所以我們應該將所有能想到的相關病因都寫下來。就像原先我們對癥狀直接描述為“what”,后來用“how”區(qū)分開來,頭腦風暴解釋法的目的是用“how likely”來區(qū)分“how”。捕捉任何看似合理的要點,以便于節(jié)約分析。

重中之重,不能有害

鑒別診斷與其他的演繹方法不同,因為醫(yī)生必須不斷地評估風險,并權衡對病人生命的影響。當然如果我們的產(chǎn)品中存在著bug,雖然不會像醫(yī)生那樣負有生命責任那般嚴重,但是停頓修復會產(chǎn)生既現(xiàn)實又痛苦的成本費用。就像威脅生命的疾病事件一樣需要立即進行干預,嚴重的bug可能需要粗暴的簡單修復,例如回滾和重新啟動。將假設按優(yōu)先順序排列,然后再考慮權衡,并判斷決定是否啟動測試假設或立即進行干預。

準備圖表

正如患者會有醫(yī)院病歷和其他背景信息的圖表,你的軟件系統(tǒng)可能也需要具備圖表。從日志和錯誤報告系統(tǒng)收集信息,來說明你的分析。至于系統(tǒng)指標和跟蹤誤差,你不妨將它們當作是明智的預防性藥品。

如果你的病人尚未處于嚴重危險之中,那么可以先進行假設-演繹。從你定義的優(yōu)先級***的假設開始,一個一個地證明它們是錯誤的。雖然支持性證據(jù)有時候或許能有助于你找到bug的所在,但是失敗的測試驅(qū)動了演繹過程。這乍一看上去似乎有悖直覺,但是測試-消除假設策略是追溯bug到它的起因的最快方式。在許多情況下,一些簡單的測試就可以一次消除幾個假設。當然,也有時候,為了否決假設你就得執(zhí)行更多的測試。

實驗室工作

不同于醫(yī)療世界的令人難以接受,只要你愿意,你隨時都可以克隆軟件應用程序,執(zhí)行可怕的人體實驗。如果你有足夠的信息來觸發(fā)你要診斷的bug,那么可以將它復制到受控環(huán)境中,例如一個有著***數(shù)據(jù)庫備份的臨時服務器。當你消滅原因,收集到新的數(shù)據(jù),并完善假設之后,你的bug的真正原因線索將變得更加清晰。

清楚地思考復雜系統(tǒng)需要小心謹慎與全神貫注。采用結構化的診斷過程來指導檢查可以節(jié)省時間和避免挫折感,最重要的是,它很有用。下次你再陷入bug之中時,那么不妨試試拋開鍵盤,將步驟一步一步寫到白板上,像一個醫(yī)生診病一樣進行調(diào)試。

責任編輯:倪明 來源: 碼農(nóng)網(wǎng)
相關推薦

2015-06-16 11:00:06

編程新手那些事

2010-03-02 10:31:07

FirePHP調(diào)試

2021-09-23 05:57:52

Vscode JS 項目

2020-11-09 11:31:03

鴻蒙App

2012-03-07 09:02:29

代碼復用

2021-01-19 11:56:19

Python開發(fā)語言

2021-10-15 10:26:56

代碼項目Mapper

2022-07-31 19:57:26

react項目VSCode

2022-08-01 07:38:29

代碼開發(fā)

2020-11-24 19:31:41

機器學習神經(jīng)網(wǎng)絡人工智能

2019-04-01 07:36:47

深度學習神經(jīng)網(wǎng)絡機器學習

2012-02-02 15:14:29

Node.js

2022-02-09 23:02:53

Vuex開發(fā)管理模式

2015-11-10 17:10:53

創(chuàng)業(yè)思考方式

2013-08-20 09:23:06

Scala遞歸

2024-11-25 16:08:57

Python代碼代碼調(diào)試

2023-02-28 11:39:55

CMake腳本項目

2012-12-12 09:37:45

代碼編程思想代碼變質(zhì)

2010-06-03 17:19:39

2024-07-05 15:26:59

代碼Merge分支
點贊
收藏

51CTO技術棧公眾號