<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        【善于防守-健壯代碼的防御性編程技巧】

        來源:懂視網 責編:小采 時間:2020-11-09 08:06:32
        文檔

        【善于防守-健壯代碼的防御性編程技巧】

        【善于防守-健壯代碼的防御性編程技巧】:最近在看【美】Pete GoodLiffe寫的《編程匠藝》,很有感觸。邊讀邊想,發現能夠與作者產生強烈的共鳴,這真是一種美妙的感覺。所以想把與作者產生共鳴和得學習的一些地方記下來,來加深對這些被實踐證明了是正確的編程技巧的掌握。 防御性編程:顧名思義,防
        推薦度:
        導讀【善于防守-健壯代碼的防御性編程技巧】:最近在看【美】Pete GoodLiffe寫的《編程匠藝》,很有感觸。邊讀邊想,發現能夠與作者產生強烈的共鳴,這真是一種美妙的感覺。所以想把與作者產生共鳴和得學習的一些地方記下來,來加深對這些被實踐證明了是正確的編程技巧的掌握。 防御性編程:顧名思義,防

        最近在看【美】Pete GoodLiffe寫的《編程匠藝》,很有感觸。邊讀邊想,發現能夠與作者產生強烈的共鳴,這真是一種美妙的感覺。所以想把與作者產生共鳴和得學習的一些地方記下來,來加深對這些被實踐證明了是正確的編程技巧的掌握。 防御性編程:顧名思義,防

        最近在看【美】Pete GoodLiffe寫的《編程匠藝》,很有感觸。邊讀邊想,發現能夠與作者產生強烈的共鳴,這真是一種美妙的感覺。所以想把與作者產生共鳴和值得學習的一些地方記下來,來加深對這些被實踐證明了是正確的編程技巧的掌握。

        防御性編程:顧名思義,防御性編程是一種細致的,謹慎的編程方法。為了開發可靠的軟件產品,我們要謹慎地設計系統的每個細節,便是其能盡可能的“保護”自己,,我們通過明確的代碼中增加很多的假設,當假設在現實的客戶環境中執行時才不至于崩潰,給一些客戶莫名奇妙的錯誤或者異常。防御性編程是一種防衛方式,而不是一種補救方式。

        圖1 修補性的編程

        下面是常見的防御性編程技巧:

        1.使用好的編碼風格和合理的設計:

        好的編碼風格會讓人耳目一新,而且越是清晰地代碼,越是體現了作者思路的清晰度,模塊組件內部的高內聚,低耦合也會使代碼的維護和使用更加便捷,更不容易出錯。

        2.不要倉促的編寫代碼:

        不要在腦袋里有了大體思路之后就馬上很“職業”地噼里啪啦的敲下代碼,然后大體檢查后剩下的就交給編譯器去檢查吧,于是運行通過,編寫下面一個函數,這樣就會隱藏大量的危險的代碼,久而久之就會陷入自己給自己挖的大坑里,拔都拔不出腿。

        關鍵: 欲速則不達。每敲一個字,都要想清楚自己要輸入的是什么。

        3. 不相信任何人:

        不相信任何可能給自己寫的代碼帶來麻煩的人,這些人包括:真正的客戶,惡意的用(有可能是黑客),客戶端的代碼(Client Code),運行環境(可能存在磁盤空間已滿,網絡斷開等),外部運行庫(自己寫的代碼所依賴的外部dll已從請求位置移除)。

        4 . 編碼的目標是清晰,不是一味地準求簡潔:

        如果從簡潔(可能理解起來比較困惑)和清晰(可能比較冗長)的代碼里選擇一種,我想大部分人會選擇清晰地代碼,盡管比較冗長(畢竟代碼不是寫在花銀子買來的紙上的 :-) )。

        5.不想讓其他人做他們不該做的事情:

        設計上不想讓其他人訪問的屬性或者方法要盡量將可訪問性限制在類或者包的內部。

        6.編譯時打開所有的警告開關

        日益發達,功能強大的編譯器會告訴我們,哪些代碼寫的不太符合規范,哪些變量聲明了未使用等等這些可能在實際的運行環境中給我們帶來意外結果,我們卻感覺莫名其妙,無從下手修補的代碼。重視編譯后的警告信息會讓我們的代碼更加健壯。

        7.使用安全的數據結構:

        最常見安全隱患是緩沖區溢出,例如:一個buffer的長度是10,但是向buffer寫入了長度為11的數據,這樣會可能覆蓋掉其他的數據,這樣可能會造成遭難性的影響。當然現在.net 這樣優秀的開發平臺有CLR去管理內存,給我們騰出了更多的時間和精力去考慮我們想要用代碼完成的事情。

        8.檢查所有的返回值:

        如果一個函數有返回值,這樣做肯定是有理由的。要對這個返回值進行檢查,如果不對返回值檢查就會產生很多難以察覺的錯誤。檢查這個返回值,這個返回值可能是一個錯誤代碼(C程序一般都是返回錯誤代碼吧),必須辨別這個代碼并處理所有的錯誤,忍受這個錯誤,危險就會悄無聲息的潛入我們的程序。C#提供了沿堆棧逐級向外拋出的異常機制,我們應該在寫的C#代碼中,對不同級別的異常做合理的封裝(底層異常要體現底層這個級別來例如:DBException,業務層的異常要體現出業務類的異常來ProductInfoInitialException)。

        9.審慎的處理內存等寶貴的資源:

        這些資源包括:內存,磁盤文件,網絡連接,數據庫連接。哈哈,現在jvm,clr都可以做到自動的清理資源和垃圾回收,我們真是太幸福了,但是也不要太大意了,我們還是需要顯示的釋放那些我們不再需要的資源,畢竟jvm和clr都是遵循一定的機制(詳見http://www.cnblogs.com/anorthwolf/archive/2009/12/07/1618744.html),我們必須顯示的終止對那些不再使用和不會被自動清理的對象的引用,不太先進的垃圾回收器會被循環引用對象所蒙蔽。

        10.盡量晚的聲明變量:

        也就是要靠著使用變量最近的代碼段來聲明變量。

        11.在聲明變量的位置初始化變量:

        如果初始化了所有的變量,那么他的用途就是明確的。“如果我不初始化它,我就不關心它”的經驗主義是錯誤的,如果一個變量在一個位置聲明,在另一個位置初始化,并在第三個地方被使用,那么一旦初始化代碼被跳過,就會得到意想不到的結果,到時候我們再去查找原因,那就難嘍。

        12.小心的進行強制類型裝換:

        有些類型之間雖然可以進行強制類型轉換,但是有些類型在轉換的過程中會丟失掉一些數據。

        13.提供默認的行為:

        例如:Switch語句,要對default 有默認的實現。

        14.檢查數值的上下線:

        .net 框架中已經對一些數值類型有了范圍的約束,但是如果我們在一些業務開發中要對是否符合現實情況作出檢查:例如年齡不能為負數等等。

        15.約束:

        約束主要包括:

        1.5.1 前置條件:輸入一段代碼之前必須為真。

        1.5.2 后置條件:輸入一段代碼之后必須為真。

        1.5.3 不變條件:程序運行到一個特定點,必須為真。

        1.5.3 斷言:任何其他關于程序在給定位置的狀態的陳述。

        具體內容是:

        檢查所有的數組邊界。

        在廢除指針前,斷言指針是否清零。

        確保函數參數的有效性。

        在函數結果返回前,進行充分的檢查。

        在操作對象之前證明他的狀態時一致的。

        總結一下,編寫正確而且優秀的代碼是很重要的,這需要記錄下你所做的所有的設想。這樣會使程序維護起來更加的容易,會使錯誤減少。防御性編程就是一種預想最壞的情況并為之做好準備的方法。他是一種可以防止簡單的錯誤變成難以找到的錯誤的技術。與防御性代碼一起使用編入代碼的約束,會使程序更加的健壯。

        作者:小倫 出處:http://www.cnblogs.com/shiyulun1984/

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        【善于防守-健壯代碼的防御性編程技巧】

        【善于防守-健壯代碼的防御性編程技巧】:最近在看【美】Pete GoodLiffe寫的《編程匠藝》,很有感觸。邊讀邊想,發現能夠與作者產生強烈的共鳴,這真是一種美妙的感覺。所以想把與作者產生共鳴和得學習的一些地方記下來,來加深對這些被實踐證明了是正確的編程技巧的掌握。 防御性編程:顧名思義,防
        推薦度:
        標簽: 方法 在看 代碼
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 13小箩利洗澡无码视频网站免费| 国产亚洲日韩在线a不卡| 你懂得的在线观看免费视频| 亚洲精品国产V片在线观看| 黄色免费网址大全| 亚洲国产综合无码一区二区二三区| 美女视频黄.免费网址| 亚洲成年看片在线观看| 免费大片av手机看片高清| 久久精品国产精品亚洲艾草网美妙| 中文字幕在线免费观看视频| 亚洲欧洲日产国码无码久久99| 中文字幕日本人妻久久久免费| 水蜜桃亚洲一二三四在线| 5g影院5g天天爽永久免费影院| 亚洲制服丝袜一区二区三区| 在线观看无码AV网站永久免费| 亚洲色偷偷偷综合网| 亚洲国产精品自产在线播放| 可以免费观看的毛片| 久久精品国产亚洲av水果派| 成人午夜免费福利| www.xxxx.com日本免费| 91在线亚洲精品专区| 成人免费毛片视频| h在线看免费视频网站男男| 4480yy私人影院亚洲| 四虎影院免费视频| 精品多毛少妇人妻AV免费久久| 91精品国产亚洲爽啪在线观看| 午夜老司机免费视频| 免费无码一区二区三区蜜桃 | 99在线免费观看视频| 久久国产亚洲精品| 亚洲午夜精品一级在线播放放 | 在线免费不卡视频| 免费无码作爱视频| 无码亚洲成a人在线观看| 久久精品国产亚洲网站| 成年女人午夜毛片免费看| 永久免费无码网站在线观看个 |