當前位置:
首頁 > 最新 > 軟體開發之防呆

軟體開發之防呆

我的第一台台式機,一台廉價的組裝機,用了幾年後開機時經常出現滴滴的報錯聲,無法啟動,於是打開機箱,拔出內存條,擦了擦,再插進去,往內存槽插入時,感覺挺費勁,不管怎麼說弄好了。加電!一股糊味!頓覺不妙,立即停電,內存條糊了,原來內存條插反了。仔細觀察內存條上有個缺口,上網一搜這東西叫防呆口。有防呆口,居然也沒防住我插錯,自己真是個「人才」。

下圖的內存條缺口,即為防呆口。

對應的內存槽

仔細觀察電腦的各種插口,有各種防呆設計,我就不貼圖了。

故事講完,開始進入正題。

著名的科幻作家Douglas Adams說過:

"a common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools"

大致翻譯:人們常常低估人類愚蠢程度,企圖設計完全防呆的東西。(防呆不防傻)

在內存條防呆設計的前提下,我還能插錯內存條,可能就屬於the ingenuity of complete fools的範疇里,蠢出了水平。

防呆(foolproof):防止呆笨的人做錯事,連愚笨的人也不會搞錯的設計方法。(也防豬隊友)

要克服的是人類容易犯錯的天性。

具體說:

1.具有即使有人為疏忽也不會發生錯誤的構造──不需要注意力。

2.具有外行人來做也不會錯的構造──不需要經驗與直覺

3 具有不管是誰或在何時工作都不會出差錯的構造──不需要專門知識與高度的技能。

防呆法、防呆設計多見傳統的工廠生產流程中,在軟體系統提的不多,用於系統設計的就更少。

日本人總結的防呆法的十大原理,其中斜體為我對應到軟體開發中對應物(可能不準確):

1、斷根原理

將會造成錯誤的原因從根本上排除掉,使其絕不發生。一般以不對稱的形狀、工具等方法防錯。

2、保險原理

用兩個以上的動作必需共同或者依序執行才能完成工作。這個工作不能隨便開始

軟體開發:代碼互檢

3、自動原理

如電梯超載時,門關不上,防止電梯過載。

軟體開發:單元測試和自動化測試。

4、相符原理

用核查是否相符的動作,來防止錯誤的發生。

例如:開刀手術前必須點檢工具數量是否符合,以免有工具遺留在人體內。

軟體開發: 函數入參合法性檢查,防禦式編程。

5、順序原理

避免工作順序或者流程前後倒置,可依編號排列,減少或者避免錯誤的發生。

6、隔離原理

用分隔不同區域的方式,來達到保護某些區域的目的,使不能造成危險或者錯誤

軟體開發:架構設計中有對應的「隔離艙」的概念,如不同業務的物理環境進行隔離,防止故障蔓延。防火牆的DMZ區的劃分等等。

7、複製原理

同一件工作、如需做兩次以上,最好採用複製來達成。

軟體開發:對於編碼階段,就是最好復用已有的函數。對於部署階段,拓展集群系統時,最好是無腦複製。

8、層別原理

9、警告原理

如有不正常的現象發生,能以聲光或者方式顯示警告的訊號,以避免錯誤即將發生。

對應於軟體系統告警,無需多言。

10、緩和原理

用各種方法減少錯誤發生後所造成的損害。

例如:汽車安全帶

軟體開發: 定期數據備份等

其實所謂防呆,我們取其思想,忽略上面的具體措施,

將自己和別人都當傻瓜一樣對待,設計機制來防止自己和別人犯錯。

努力將部分操作無腦化、自動化,將人們的精力從部分細節中解放出來,從而將我們的精力放到更需要創造力的地方。

編碼

有編碼有錯誤時,可及時檢查出來。如靜態語言的類型檢查,良好的單元測試,測試驅動開發,靜態檢查工具等。

單元測試/測試驅動開發,用測試來檢驗和約束程序行為,而靜態檢查或者高級的Type-driven development,通過編程語言的類型系統,讓編譯器強迫你按照一種「正確」方式實現代碼。

剛入行時,我更喜歡動態語言,寫起來天馬行空。現在基於對人的不靠譜特性的考慮,我更喜歡靜態語言,若能實現Type-driven development,則更好。

部署

盡量減少需要人工配置的信息、對於人工配置的信息增加足夠檢驗,配置不正確程序能不啟動,給出足夠提示信息等。

部署過程儘可能簡單化、傻瓜化。

運行

複雜系統配備看板(dashboard),能夠對當前各個組件以及組件間的鏈接狀態有一個直覺的感官,將抽象數據流、執行流可視化。

附:

認識到自己是一個普通人,不丟人。守拙其實個高級技巧。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

細數敗家七宗罪
我手中的畫筆能畫出生命線哦

TAG:全球大搜羅 |