1. 程式人生 > >軟體架構質量屬性之《獨孤九劍》

軟體架構質量屬性之《獨孤九劍》

   什麼是架構?架構是一個系統的基本組織結構,涵蓋所包含的元件、元件之間的關係、元件與環境的關係、以及指導架構設計和演進的原則等內容。經常有人問架構重點需要關注多少屬性,我們粗略的可以概括一下九點:可修改性、可測試性、可擴充套件性、效能、可用性、安全性、可部署性、共享性。

      一、可修改性

  什麼是可修改性?可修改性是指一個系統進行修改的容易程度,以及系統適應這些修改的靈活性。

  與可修改性相關的幾個方面:可讀性(readability)、模組化(modularity)、可重用性(reusability)、可維護性(maintainability)

        可讀性涉及要素:1)寫得好。方法、函式、變數、類、模組是否簡單明瞭。2)文件齊全。程式碼中註釋是否齊全。3)結構規整。結構清晰明瞭、註釋簡介規範。

   提高可讀性策略:1.提供顯示介面;2.減少雙向依賴;3.抽象公共服務;4.使用繼承技術;5.使用延遲繫結技術。

      二、可測試性

  什麼是可測試性?可測試性是指軟體系統通過執行基本的測試來暴露其錯誤的難易程度。

  軟體測試包括:功能測試(白盒測試、黑盒測試)、效能測試(負載測試、壓力測試、可擴充套件性測試)、安全性測試、可用性測試、安裝測試、可訪問性測試。

  增強可測試性策略:1)降低系統複雜度(子系統)、2)高內聚低耦合、3)提供定義良好的介面、4)降低類的複雜性、5)正確的異常處理、6)無限迴圈和/或阻塞等待、7)依賴於時間的邏輯、8)併發性、9)記憶體管理。

      三、可擴充套件性

  什麼是可擴充套件性?可擴充套件性重點關注的是程式碼和應用程式是否能符合將來未知的編碼而進行的提前設計。比如:程式碼設計中我們儘可能要求功能的最小化原則,介面設計的高內聚低耦合原則,應用程式設計子系統等,都和可擴充套件性相關。

        四、效能

  什麼是效能?效能是指系統能夠滿足吞吐量或時延要求程度的指標,用每秒執行事務的數量或單個事務耗費的時間來表示。

  效能複雜度一般用大寫的O符合表示,定義為輸入變化的響應情況,通常用執行程式碼所耗費的時間來表示。

  度量效能方法:1.使用上下文管理器度量時間 2.使用時間模組開計時程式碼 3.使用時間模組來度量程式碼效能 4.使用時間模組度量CPU時間 

      五、可用性

  程式設計的可用性主要包括以下幾點:是否符合使用者的操作心裡,是否滿足效能要求,是否開發者能在系統真實執行的環境下進行相應的修改,是否程式可以進行友好的擴充套件而不是僵化設計。

      六、可擴充套件性

  可擴充套件性包括兩種:水平擴充套件和垂直擴充套件。

  水平擴充套件包括:1)活躍冗餘 2)熱備份 3)故障檢測或重啟 4)快取它 5)去偶 6)優雅降級 7)資料接近程式碼 8)按照SLA設計

  垂直擴充套件包括:1)向現有系統新增更多資源 2)更好地利用系統中的現有資源

      七、安全性

  安全性是軟體重要的方面。資訊系統安全架構需要包含以下幾個方面:保密性、完整性、可用性、認證、授權、不可否認性。

  常見的安全漏洞:溢位錯誤(快取溢位、算術溢位、整型溢位)、未經驗證或驗證不當的輸入、不當的訪問控制、加密問題、使用HTTP而沒有使用HTTPS、不安全的認證、弱密碼的使用、安全雜湊或祕鑰的重用、弱加密技術、無效或過期的證書/祕鑰、資訊洩露、伺服器的元資訊、開放的索引頁、開發的埠、靜態條件、系統時鐘漂移、不安全的檔案(資料夾)操作等

  Python中常見的四種安全問題:讀取輸入、表示式求值、溢位錯誤、序列化問題。

  Web應用中的安全問題:伺服器端模板注入、伺服器端模板注入-迴避、服務拒絕、跨站指令碼攻擊等

  安全編碼的策略:輸入驗證、最簡原則、最小特權原則、清理資料、授權訪問、進行有效的測試、多層防禦實踐、定義安全需求、模型威脅、安全策略的架構和設計

     八、可部署性

  與可部署性相關的因素:模組結構、產品執行環境和開發環境、開發生態系統支援、標準化配置、標準化基礎設施、容器的使用

     九、共享性

  面對現今網際網路蓬勃發展,出現了很多大資料雲端計算的新理念,比如:BaaS、IaaS、PaaS、SaaS、DaaS、低程式碼等,我們可以理解為共享技術。比如雲計算裡的多租戶、為什麼要上雲,都是為了最大化節約社會資源,增強系統的可共享性,而進行的創新。

  共享性涉及的要素:可分為軟體共享性和硬體共享性。

  軟體共享性的策略:虛擬機器技術、雲端計算技術、大資料技術等;硬體共享性的策略:共享資料庫、共享硬體系統等

           總綱

  系統架構需要關注的屬性客觀因素不外乎以上九大專題內容,不過真實的系統架構設計我們又不僅僅需要關注以上內容,還包括系統的主觀因素,環境、相關利益者等都能制約系統的架構。我們需要靈活運用以上的知識,比如有的架構更關注安全性可能會捨棄部分的可用性,又比如我們為了增強系統的可修改性,可能系統的可部署性又需要折中處理。我們需要融匯貫通的理解主客觀因素,平衡制約系統的主客觀矛盾,所以我在總結篇介紹

  系統架構的核心理念:他強由他強,清風拂山崗;他橫由他橫,明月照大江;他自狠來他自惡,我自一口真氣足。最終達到《無招》境界!