最近在看《軟體架構師教程》,今天就第五章《軟體架構設計》總結一下,其中還有自己所聯想到的。主要從以下幾個方面來描述:
軟體架構
架構的定義,在業界,目前主要分為兩類:結構派 和 策略派。結構派認為架構是指軟體中各構件的組織圖以及各構件之前的相互關係。策略派認為軟體的架構設計是要為軟體的每個重要的決擇進行權衡,並作出最終決定。
架構,作為系統中最重要的組成部分,對整個系統有著重要的作用:
對於軟體開發而言,首先,架構設計能使系統各方面品質達到預期的目標;其次,它能全過程指導開發、測試,並有效地管理軟體的複雜性,降低維護成本。
在軟體工程方面,架構設計能有效地支援計劃的編製,支援衝突分析,使受益人目標一致。
目前對於軟體架構的研究,還處於不成熟的階段。在軟體生命週期的各個階段中,架構設計以及與軟體工程的結合,也正處於摸索階段,正在嘗試如何讓架構設計更好的指導工程的生命週期各階段的活動。
ABSD
全稱:Architecutre Based Software Development,即基於架構的開發方法。就是在架構設計後,以文檔化的架構為系統的主線,指導並保證其它活動的順利開展。
主要經曆以下階段:
可以看出,ABSD是一個迭代的開發模型:在需求萃取完成之後,需要提取出體繫結構的需求,包括功能需求、品質屬性及系統的約束,後再者將會成為影響架構設計的重點。架構設計到架構的複審,是一個較小的週期,目的是為了架構設計能通過審核達到預期的品質目標。當審核通過後,架構指導開發過程完成系統實現。過程中,可能會對架構進行演化,在一定程度上,也可以說是在做架構的重構,這時,需要再次重複整個過程,這是一個大的迭代。
具體的過程,請看以下幾個圖:
設計過程完成後,需要對架構進行文檔化,主要輸入兩個文檔:《架構規格說明書》、用於測試體繫結構需求的《品質設計說明書》。
《品質設計說明書》中應該對品質目標進行定義,它也是後面進行架構評估的依據。定義時,可以依據ATAM中的5,具體內容參見本章的“架構評估”小節。
《架構規格說明書》中,應使用較成熟的架構描述方法對架構進行描述。如可採用業界目前比較認可的4+1視圖。
文檔的完整性是軟體架構成功的關鍵。文檔應該從使用者的角度進行編寫,必須分發給所有與系統有關的開發人員、且必須保證開發人員手上的文檔是最新的。同時,這些輸出的文檔也應該面向架構評估。
複審之前,最好做一個較小的系統原型,以方便評估。
複審的目前是為了保證架構能滿足軟體的品質要求,架構設計的構件和層次要比較合理,架構的描述要清晰。
架構風絡
其實,架構風格就是架構模式。
模式,是在一定的環境下,不斷地重複出現的一種形式。也就是說,一個特定的架構模式,有其適用的使用情境。例如,最受歡迎的三層架構,在系統較小時就不太適用。又如,物件導向的架構,在對於以資料處理為核心的應用情境也可能不太適用,同時,對於查詢密集的系統使用物件導向,極大影響系統效能,反倒成為一種反模式。
架構重用,是軟體架構研究的核心目標之一。對架構模式的研究,可以極大的促進業界對軟體架構的重用。
DSSA
由於一個領域中的核心領域對象往往不會發生改變,所以對它們進行研究,可以實現核心業務的積累和重用。由於整個領域中核心對象往往不會發生改變,而圍繞它們的應用,按照應用程式的類別劃分後,同一類別下的應用程式往往架構也是類似的。所以對一類系統進行架構分析,就是為了找出在此類系統中通用的架構模式。
GIX4項目也是使用了基於領域的架構。準確地說,GIX4的架構是使用了領域驅動、模型驅動的產品線架構。具體架構內容,會在後面的文章《架構設計師-GIX4-架構介紹》中介紹,其中會對DSSA如何在GIX4上應用做一個較全面的講述。
架構評估
在架構設計的目的中,我已經說過,架構設計最重要的目的是為了讓系統能滿足預期的品質需求。所以,在架構評估階段,最重要的也就是評估這個架構是否能滿足品質需求。也就是說,架構評估,重點關注的是品質屬性。
在《教程》中提到,本階段需要使用情境的方式來定義產品的品質目標。其實不然,品質目標是架構設計的重要依據,往往是在架構設計的初始階段就已經被定義好了,也就是前面提到的架構設計階段的輸出《品質設計說明書》。雖然那時的定義不一定完整,但是一樣可以在架構評估過程中,先對它進行評估,然後就可以作為架構評估過程中品質評估的基準了。
其實,就大方向上看,架構評估也是架構設計的一個部分。評估的過程,就是各專家在一起對架構初稿進行審核、提問、反思、建議。架構師以一人之力,很難把一個大型系統的架構設計得天衣無縫;這時集多人的力量在一起對初稿進行評估,可以起到查漏補缺的作用。
小結
架構設計是軟體設計過程中最重要的活動之一,架構設計的優劣直接影響到目標系統的各個品質屬性。
我認為,基於架構的開發方法,是一個很重要的方法論,我們可以用它來保證軟體達到品質標準,並指導整個開發過程。同時,可以結合目前業界流行的敏捷方法來實施,這樣可以在不同高度對軟體開發進行控制。