程序員修煉之道系列 | 死掉的程序不会说谎
原創-
發表時間 2021-07-14
-
閱讀數 5010
-
最后编辑:琦琦 于 2025-05-19 10:37:37
一、“不可能事件”的發生
在軟件設計中,大家有沒有過“這不可能”的心態。“這不可能”會讓我們說服自己錯誤不可能發生,然後選擇忽略他人或程序發出的預警。
實際上,在我們意識到某些地方出了問題之前,“不可能事件”就已經發生了。如果我們因“不可能”心態忽略了這些小的錯誤,反而會面臨一個更糟糕的境地。
當出現了“不可能”的錯誤時,我們應如何正確處理它呢?
二、暴露問題優于隱藏問題
當程序出現異常狀態,此時放任異常的程序繼續執行可能會造成更大的損失,因此,有時候需要讓程序盡早崩潰。
1986年1月28日,美國“挑戰者”號航天飛機升空73秒後,“挑戰者”號突然爆炸解體,機上7名宇航員在此事故中喪生。
NASA當時給出了一個答案:這起事故的主要原因是內部溝通機制不完善。但他們隱瞞了一個細節:在“挑戰者”號升空之前,一名工程師發現了一處問題。該工程師建議NASA推遲發射,然後對飛機進行全面檢修。但NASA決定按照原計劃發射,發射計劃就此埋下了隱患。
同樣,盡早崩潰也是爲了防止項目研發中發生類似的不可控事件。在實際應用中 ,盡早崩潰有如下解釋:盡早崩潰並非不容錯,是指程序員不必因過分擔心未知的錯誤,轉而進行面面俱到的防禦性編程。
如果程序員無法分析錯誤的來源,並精准定位錯誤的發生情景時,可以盡早崩潰該進程,在合適的時機重啓進程。因爲暴露問題優于隱藏問題。
三、盡早崩潰也是有條件的
凡事都有度,過猶不及。盡早崩潰也是如此。在以下情況中,盡早崩潰就失去了它的效用。
1.已知錯誤
如果能夠定位問題,比如讀文件前沒有判斷文件是否存在已知錯誤,就沒有必要讓程序崩潰。
2.進程無法恢複
如果在無法恢複上下文的情境中,崩潰掉程序所付出的成本是巨大的。試想一下,你會使用一個在通話的時候隨時自動挂線的語音聊天軟件嗎?
用盡早崩潰的方式構建程序,這意味著不再需要防禦性編程——如果出現錯誤,那就根據具體情況來靈活處理,處理不了就讓它崩潰!一個死掉的程序通常比一個癱瘓的程序造成的損失要小得多。
-
禅道産品
禅道開源版 禅道企業版 禅道旗艦版 禅道IPD版 -
核心功能
産品管理 項目管理 質量管理 效能管理 -
使用文檔
基本版手冊 企業版手冊 旗艦版手冊 IPD版手冊 開發中心手冊 -
幫助中心
积分問答 常見問題 論壇交流 使用視頻 Gitee GitHub -
關于我們
關于我們 禅道軟件 最新動態 禅道活動 -
禅道社區
禅道博客 積分排行 積分商城 禅道書院 -
聯系方式
聯系人:高麗亞 電話:17667930330 微信:17667930330 Q Q:3645260865北京、上海、深圳分部