軟件系統概要設計的三大要素
來源:www.puwwqa.tw 編輯:山??萍? 日期:2014-11-05
概要設計是一個設計師根據用戶交互過程和用戶需求來形成交互框架和視覺框架的過程,其結果往往以反映交互控件布置、界面元素分組以及界面整體板式的頁面框架圖的形式來呈現。這是一個在用戶研究和設計之間架起橋梁,使用戶研究和設計無縫結合,將對用戶目標與需求轉換成具體界面設計解決方案的重要階段。
概要設計的目標是描述軟件模塊的外觀以及處理邏輯。模塊對外暴露的服務接口,以及需要引用的接口,接口標識,接口的訪問協議,接口描述都屬于模塊的外觀,其他的模塊通過這些接口和模塊打交道,自然需要在概要設計階段對接口做細致的刻畫,初此之外,對于關鍵的模塊,外觀還應該說明模塊的非功能屬性,比如并發處理能力,數據吞吐量以及接口調用的反饋時長等等。處理邏輯是指模塊從輸入到輸出的轉換過程,描述其轉換算法。無論通過何種圖例和表現形式,只要能夠清晰地說明模塊外觀和處理邏輯描述,就是好的概要設計。
概要設計過程一般包括四塊內容,這四塊內容都是圍繞著外觀和處理邏輯這兩個目標進行。第一部分是模塊劃分,把架構設計中劃分的業務模塊按照開發模式迭代細化,拆分成符合高內聚低耦合的功能模塊。第二部分是接口描述,重點要放在刻畫模塊內外部交互的接口形式。第三個部分是模塊的邏輯描述,最后一個部分邏輯模型設計,包括數據庫的邏輯模型設計以及值對象的概要說明。
一、模塊劃分
模塊劃分的粒度很難確定,不同的設計師會用不同的劃分策略,相同的一組功能聚集有人會分為2個功能模塊,有的人可能劃分為4個或者更多。模塊的粒度越大,對模塊的維護成本就越大,因為修改模塊的任何一個點,都有可能更新整個模塊;而且越難以解決模塊復雜耦合的問題,隨著產品的維護,模塊內的耦合會越來越嚴重,有些是因為新的需求引起模塊內聯系的增加,而有些是缺少硬約束下采用最直接的方式修改代碼造成的。當然也不是模塊劃分的越小越好,因為小粒度的模塊雖然降低了模塊自身的維護成本,但過多的模塊會增加模塊間關系維護的成本以及系統管理的復雜性。
通常來看,模塊劃分要符合開閉原則和高內聚和低耦合的原則。開閉原則強調的是維護頻度不同的功能不要放在同一個模塊內,比如有些需要本地化的功能可以通過接口和實現分離的方式劃分為業務模塊和二次接口實現模塊。高內聚和低耦合的原則強調的是把內部關聯緊密和外部交互比較單一的功能劃分成一個模塊。
同時鑒于模塊劃分的重要性,建議盡可能把模塊劃分的工作前移到架構設計階段,一方面架構設計團隊的整體素質比較高,另外一方面架構設計師更能夠站在全局的視角合理地劃分模塊。
接口描述
接口描述應該清晰地說明接口的類型,訪問方式,接口的入參和出參。通常在概要設計階段不考慮物理實現,不需要描述的非常詳細,之所以如此關照接口,原因在于通過清晰的接口描述為流程邏輯和后面的詳細設計建立一個硬約束。模塊內的數據流和控制流的入口和出口都能限定在這個約束之內,方便評審的時候能及時發現設計中存在的問題。
二、邏輯描述
邏輯描述的目標是說清楚從輸入到輸出的轉換過程。根據不同的模塊的特點,可以選用不同的描述形式,對于以數據流為主的模塊,可以使用數據流圖,控制比較復雜的可以使用數據流圖或者IPO圖,而對于規范使用UML的項目可以考慮使用活動圖。
可能有人會很疑惑在設計中沒有談到是用面向對象方法還是結構化的方法,這可是關鍵的方法論問題。確實,軟件研發的壇子里面除了哪種語言更好的話題以外,最容易挑起紛爭的就是結構化分析與設計和面向對象分析與設計之爭了。我在這里不做結論,只做一個評說。結構化分析設計出現的比較早,那時候軟件的主要使用場景更多是科學計算或者自動化控制,典型的特點是用戶交互界面簡單,更多是批處理的作業方式,更多關注程序的處理過程是否正確高效。隨著PC機時代的到來,人機交互界面在軟件中占有越來越重要的地位,原來的一套軟件只有一個操作員,而現在可能有很多的使用者,為了清楚地描述不同人群對軟件的訴求,業務用例應運而生,這就是面向對象的起點。不同的基因決定了他們各擅道場,一個擅長于后臺計算的產品設計,另一個長于面向客戶服務的產品設計。
在設計中,我們可以根據需求把兩者的特點靈活地結合在一起,比如算法密集的處理模塊,我們可以采用數據流圖,而對于和外部交互比較復雜的模塊,可以引入用例圖標識模塊支持的使用場景。
三、邏輯模型的設計
邏輯模塊的設計主要是數據庫的設計和值對象的設計。對于數據庫的邏輯模型,可以統一設計,模塊中添加引用。也可以在模塊中針對所引用的庫表獨立描述。這兩種方式都可以,如果庫表結構比較復雜的建議統一建模,而比較簡單的模型可以采用分開描述,提升模塊設計的可讀性。數據庫建?,F在已經比較成熟,這里不再多說。
模塊的輸入輸出,以及中間的數據對象,我們統稱為值對象,在概要設計階段的重點是描述值對象的關鍵屬性。需要注意的一點是值對象要和處理邏輯對應起來,特別是處理邏輯中的數據流,出口入口數據,都要在值對象上加以描述。
上一篇:沒有了
相關閱讀