軟體設計的切入點是什麼?如何從最初的需求提取出一個粗粒度的軟體結構?

shenmanli發表於2017-06-14
一切設計的切入點是什麼呢?我們必須從最初的需求和約束條件的混沌中提取出一個粗粒度的軟體結構,然後再把它劃分為構成待開發系統的有實際意義的各個部分,這就形成了一個清晰的初期概念設計,並形成一種理性、深入、細膩及智慧的設計風格。


“頂層架構設計”相關模式的思維導圖如下。



分散式系統模式語言的根模式和切入點。這些模式有助於我們從最初的需求和約束條件的混沌中提取出一個粗粒度的軟體結構,然後再把它劃分為構成待開發系統的有實際意義的各個部分。


1)憑直覺設計容易形成大泥球


要設計出可持續軟體,必須關注質量的幾個關鍵因素,包括:執行方面質量因素(如效能和可用性)和開發方面質量因素(如擴充套件性和可維護性)。


設計大的分散式系統很容易讓它變得複雜。剛開始,我們所擁有的只是關於要開發的軟體系統的一系列需求和約束條件,或者是一個不成熟的開發方案。如果只是憑著直覺來設計,其結果很可能是“一個大泥球”、一個設計和編碼都很混亂的軟體,這會導致最終無法分辨其內在的元素。


這一類軟體難於理解、維護和改進,並且隨著時間的流逝很容易在穩定性、效能、可伸縮性.以及其它核心執行架構質量上陷入困境。


2)結構應該易於理解


決定軟體開發成功與否的一個重要因素是結構。結構應該易於被開發人員理解,應該對系統及其開發所面臨的壓力具有彈性,應該支援圍繞它而推進的開發過程,應該兼顧使用並維護它的組織和個體的需求。


簡單的說,這種結構應該給軟體系統的開發人員和其他相關人員提供一個良好的環境。然而,如果軟體的結構設計沒有遠見和適當的指導,它就很容易變得混亂,而且還會導致不僅系統的全域性難以把握,甚至區域性也是難以把握,其表現在於程式碼中充滿零碎的細節和假設而難以理解。


3)需要一個粗粒度的概念設計


因此,在這樣的軟體開發過程中,我們需要一個粗粒度的系統概念,在抽象和分離這兩個手段的幫助下,可以暫時忽略不必要的細節,在更廣的層次上組織系統的核心概念。這種概念設計需要考慮兩個層面的問題:


客戶需求:軟體必須是對系統應用領域來說是有意義的表現。特別是系統提供的功能需求和質量特性必須支援具體的業務,否則對使用者來說這樣的設計就沒有實際價值。


生態環境:系統設計更進一步考慮的問題是生態環境。我們是處於一個不斷變化的世界中,需求的變化不可避免。變化可能是因為質量上的新要求、新的的功能需求加入、業務流程的改變、具體業務演算法的選擇、以及系統表現層的不同選項等。如果不能明確地知道應用領域中哪些東西會發生變化,或者軟體必須支援什麼樣的變化,就很難為軟體系統或產品提供適當層次和程度的靈活性。


作為整個設計的入口,必須應對上述挑戰,從而不僅反映軟體系統的功能需求,還能為技術架構的進一步細化打下堅實的基礎。

相關文章