知道了軟體架構的關鍵,面對有一定複雜與難度、或有競爭性目標的龐大需要的軟體系統,沒有乙個好的設計策略,完全依靠設計師的經驗與能力,往往會讓設計師顧此失彼,無法保證軟體系統的成功。
上面講到,軟體架構工程師沒有時間也沒有必要對所有需求進行深入分析;而功能或用例確定了軟體架構的大的方向、幾個關鍵的非功能需求與約束決定了軟體架構的風格。因此軟體架構設計的第一條策略是:讓關鍵需求決定架構。關鍵需求決定架構有兩個方面的涵義:一方面,功能需求與非功能需求數量眾多,應該控制架構設計時需要詳細分析的用例個數;另一方面,不同非功能需求之間往往具有相互制約性,應該權衡非功能需求之間的關係,找到影響架構的重點非功能需求。關鍵需求決定架構的策略有利於集中精力深入分析最為重要的需求。當架構工程師把全部精力撲在相對較少的關鍵需求上時,可以更為深入的分析這些需求,有利於得到透徹的認識,從而設計出合理的架構。
如何從眾多的軟體需求中準確找到關鍵需求呢?這就需要使用思維的發散與收斂原則,全面認識需求,分析所有需求之間的因果關係、特別是與軟體系統的目的目標及核心業務間的因果關係。而且,軟體架構強調的是整體,而整體性的設計決策必須基於對需求的全面認識;軟體架構應該是穩定的,而遺漏了重要的需求的架構設計最終會面臨返工的結局。因此軟體架構設計的第二條策略是:全面認識需求。有人會問:前面說軟體架構工程師沒有時間也沒有必要對所有需求進行分析,現在又說要全面認識需求,這不是自相矛盾的嗎?需要注意的是,全面認識需求不是全面分析需求。全面認識需求要求:1、將所有需求從不同的級別(組織級、使用者級、開發級)分層梳理列表歸納總結,建立跟蹤矩陣,既避免因遺漏需求而造成軟體系統達不到要求,也避免開發人員一廂情願也為使用者製造沒有實際意義的無用功能,同時,有助於軟體架構設計人員對軟體系統要求有全面的認識,清晰理清需求之間、需求與軟體系統目的目標與核心業務、商業理由間的因果關係。2、將所有需求劃分為不同的型別(功能需求或用例、質量屬性、約束與限制)進行梳理列表歸納總結,建立影響分析表,找出不同需求型別之間的相互支援、相互制約關係的影響,並在深思熟慮之後作出合適的需求權衡和取捨。
軟體架構的目的是溝通,但溝通的物件不同,對軟體系統的關注點也就不同;同時人類研究事物也是從不同的角度立場、橫看成嶺側成峰的觀察、了解、認知的。因此軟體架構的第三條策略是:多立場、多視角探尋架構。一次只從某一立場、某一視角出發圍繞少數概念和技術展開,並分析對其它部分、其它立場視角分析結果的關係與影響。
軟體架構的第四條策略是:盡早驗證架構。架構設計是現代軟體開發中最為關鍵的一環,架構設計是否合理將直接影響到軟體系統最終是否成功。畢竟軟體架構中包含了關於如何構建軟體系統的一些最重要的設計決策,而這些決策能否使最終開發出來的軟體系統滿足預期要求,都是懸而未決的重大風險,因此必須盡早驗證架構。架構驗證不可能全盤進行,必須精挑細選能夠觸發主要設計決策參與執行的、或有較高技術風險的、或最影響使用者滿意度的一些功能。
關鍵
問題
危害
策略
要點
是否遺漏了至關重要的非功能需求
對需求的理解不系統、不全面,對非功能需求不夠重視
造成返工,專案失敗
全面認識需求
從不同級別、不同類別梳理列表歸納總結,建立跟蹤矩陣與影響分析表
能否馴服數量巨大且頻繁變化的需求
對於時間和質量的矛盾,辦法不足,處理草率
耗時不少,質量不高
關鍵需求決定架構
控制架構設計時需要詳細分析的用例個數,權衡非功能需求之間的關係,找到影響架構的重點非功能需求
能否從容也設計軟體架構的不同方面
架構設計方案覆蓋範圍嚴重不足,許多關鍵決定被延遲由實現人員倉促決定
開發混亂,質量不高
多立場、多視角探尋架構
一次只從某一立場、某一視角出發圍繞少數概念和技術展開,並分析對其它部分、其它立場視角分析結果的關係與影響
是否及早驗證架構方案並作出調整
假設架構方案是可行的,直到後期才發現問題,造成大規模返工
造成返工,專案失敗
盡早驗證架構
必須精挑細選能夠觸發主要設計決策參與執行的、或有較高技術風險的、或最影響使用者滿意度的一些功能進行驗證
軟體架構設計策略
制定軟體架構設計策略 1 全面認識需求。下面的這個圖可以用作全面需求分析圖。功能需求 質量屬性 約束 組織級軟體系統實現的功能 成本,上線時間,業務限制 使用者級軟體系統實現的功能 易用性,效能,持續可用性,魯棒性 使用者的計算機水平有限 開發級軟體系統實現的功能 可擴充套件性,可重用性,可移植性,...
軟體架構設計策略
制定軟體架構設計策略 1 全面認識需求。下面的這個圖可以用作全面需求分析圖。功能需求 質量屬性 約束 組織級軟體系統實現的功能 成本,上線時間,業務限制 使用者級軟體系統實現的功能 易用性,效能,持續可用性,魯棒性 使用者的計算機水平有限 開發級軟體系統實現的功能 可擴充套件性,可重用性,可移植性,...
軟體架構設計策略
策略對實踐提供總體上的指導,對於有難度的工程 比如軟體工程 或者有競爭性目 標 軟體中時間 質量 範圍 成本之間存在競爭 而言,策略往往是制勝的關鍵。一定要 注意,策略來自於問題,沒有問題的策略是無目之本。下面,我們針對成功架構設計的四個 要素,以此衍生出四個問題,作為討論相應的策略的基礎。這樣的思...