Can you summarize the following document?
        
  防禦性程式設計有時也被電腦科學家稱為安全程式設計(Secure programming)。潛在的軟體缺陷可能會被黑客利用,而進行程式碼注入,拒絕服務攻擊或其他攻擊。  防禦性程式設計與非防禦性程式設計之間的區別在於,程式設計師不會對特定的函式呼叫或庫的使用情況做假設。下面是一個例子:  當輸入超過1000個字元時,該函式將會崩潰。一些新手程式設計師可能並不會覺得這是個問題,因為沒有使用者會輸入這麼長的字串。實行防禦性程式設計的程式設計師不會允許這樣的錯誤,因為這段程式包含一個已知的bug,一個可能會導致緩衝區溢位攻擊的漏洞。下面這個例子是一個解決方案:

  進攻式程式設計(Offensive programming )是防禦式程式設計( defensive programming)的子集,其思想為:在重點的程式碼處不應該一些錯誤進行處理。在實踐中,只有來自於軟體外部的錯誤應該被處理(如:使用者的輸入);理論上,軟體自身和相關可控的資料是可信的。

  

  const char* trafficlight_colorname(enum trafficlight_color c) {

  const char* trafficlight_colorname(enum trafficlight_color c) {

  

  if (is_legacy_compatible(user_config)) { } else {

  // 完全信任新程式碼 new_code(user_config);

  下面是常見的防禦式程式設計的技術。

  如果原始碼是廣為利用地且經得起測試的,那麼重用程式碼將有助於減少bug。  然而,重用程式碼往往不是最好的方案,越是底層的程式碼(往往指框架),重用程式碼帶來的潛在危害就越是大。重用過於複雜的程式碼將大大地增加程式碼的複雜度。

  在重用舊程式碼、包、API、配置等事物前,我們必須思考這些事物是否值得被重用,思考這些是否會造成遺留問題。  遺留問題的產生,往往是因為舊的設計無法適應當今的需求,尤其舊的設計往往不是為了當今需求,因此開發和測試可能存在缺陷。
防禦性程式設計(Defensive programming)是防禦式設計的一種具體體現,它是為了保證,對程式的不可預見的使用,不會造成程式功能上的損壞。它可以被看作是為了減少或消除墨菲定律效力的想法。防禦式程式設計主要用於可能被濫用,惡作劇或無意地造成災難性影響的程式上。