軟體架構設計

軟體架構設計

在軟體需求確定後,就進入軟體設計階段。

最后更新 2022/4/22 上午10:19
佚名
预计阅读 10 分钟
分类
分享
标签
架構設計

軟體設計

在軟體需求確定後,就進入軟體設計階段。軟體設計是軟體工程的重要階段。軟體設計的基本目的就是回答“系統應該如何實現”這個問題。軟體設計的任務,就是把軟體需求規格說明書中規定的功能要素,考慮實際條件,轉換為滿足軟體系統需求的技術方案,為下個階段的軟體實施工作奠定基礎。

軟體設計概述

軟體設計是軟體開發過程中決定軟體產品質量的關鍵階段。在軟體設計階段所做出的決策,將最終決定軟體開發能否成功,更重要的是,這些設計決策將決定軟體維護的難易程度。

軟體設計活動是獲取高質量、低耗費、易維護軟體最重要的一個環節。其主要目的是繪製軟體的藍圖,權衡和比較各種技術和實施方法的利弊,合理分配各種資源,構建軟體系統的詳細方案和相關模型,指導軟體實施工作順利開展。

軟體設計是開發時期的起始階段,關係到整個軟體開發時期的質量。軟體開發時期信息流描述了軟體設計從軟體需求到軟體編碼,起到承上啟下的作用,如圖5-1所示。

软件开发时期的信息流

圖5-1 軟體開發時期的信息流

軟體設計的任務

軟體設計的任務是從軟體需求說明書出發,根據需求分析階段確定的功能設計軟體系統的整體結構、劃分功能模塊、確定每個模塊的實現算法,形成軟體的具體設計方案。軟體設計是一種在設計者計劃中通過諸如軟體如何滿足客戶的需要,如何才能容易地實現和如何才能方便地擴展功能以適應新的需求等不同角度考慮的創造性活動。

從軟體工程的角度,一般將軟體設計分為概要設計和詳細設計兩個階段,如圖5-2所示。根據軟體項目的規模和複雜度,概要設計和詳細設計既可以合併為軟體設計階段,也可以反覆疊代,直至完全實現軟體需求內容。

软件设计阶段的划分与任务

圖5-2 軟體設計階段的劃分與任務

概要設計

概要設計也稱總體設計,從需求分析階段的工作結果出發,明確可選的技術方案,做好劃分軟體結構的前期工作,然後劃分出組成系統的物理元素,並進行軟體體系結構設計、數據設計和用戶界面設計。

概要設計的主要參與者有軟體分析人員、用戶、軟體項目管理人員以及相關的技術專家。軟體分析人員完成對目標系統的物理方案和最終的軟體結構設計;用戶參與評價並最終審批系統的物理方案和最終的軟體結構;軟體項目管理人員參與評價軟體分析人員設計的系統物理方案和軟體結構,並對軟體分析人員的設計工作進行指導;相關的技術專家則主要參與評價軟體分析人員設計的系統物理方案以及軟體結構。

概要設計的主要任務是完成體系結構設計、數據設計和用戶界面設計。

1)體系結構設計。確定各子系統模塊間的數據傳遞和調用關係。在結構化設計主題劃分,主要確定類及類間關係。 2)數據設計。數據設計包括資料庫、數據文件和全局數據結構的定義。在結構化設計中,通過需求階段的實體-聯繫圖、數據字典建立數據模型。在面向對象設計中,通過類的抽象與實例化,以及類的永久存儲設計,完成數據設計過程。 3)用戶界面設計。包括與系統交互的人機界面設計,以及模塊間、系統與外部系統的接口關係。在結構化設計中,根據數據流條目,定義模塊接口、全局的數據結構。在面向對象設計中,定義關聯類、接口類、邊界類等,既滿足人機互動界面數據的統一,又完成類間數據的傳遞。

詳細設計

詳細設計的任務是在概要設計的基礎上,具體實現各部分的細節,直至系統的所有內容都有足夠詳細的過程描述,使得編碼的任務就是將詳細設計的內容“翻譯”成程式設計語言。確切地說,詳細設計的任務是完成過程設計。

過程設計包括確定軟體各模塊內部的具體實現過程及局部數據結構。在結構化設計中,模塊獨立性約束了數據結構與算法相分離的情況,使得二者在設計時務必有局部性,減少外部對二者的影響。在面向對象設計中,類的封裝性較好地體現了算法和數據結構的內部性。類的繼承性提供了多個類(類家族)共同實現過程設計的機制。

軟體設計原則

隨著軟體開發技術不斷進步,一些良好的設計原則不斷被提出,並指導軟體設計過程,確保軟體質量。

(1) 分而治之:分而治之是用於解決大型、複雜程度高的問題時所採用的策略。把大問題劃分成若干小問題,把對一個大問題的求解轉換為對若干小問題的解答,這樣就極大地降低了問題的複雜度。模塊化是軟體設計實現分而治之思想的技術手段。在結構化設計中,模塊可以是函數、過程,甚至是代碼片段。在面向對象設計中,類是模塊的主要形式。

(2) 重用設計模式:重用是指同一事物不作修改或稍作改動就能多次使用的機制。由於概要設計完成的是系統軟體結構,因而重用的內容是軟體設計模式。軟體設計模式針對一類軟體設計的過程和模型,而不是面對一次具體的軟體設計。通過重用設計模式,不僅使得軟體設計質量得到保證,而且把資源集中於設計中的新流程、新方法中,並在設計時更進一步考慮新流程、新方法在將來的重用。

(3) 可跟蹤性:軟體設計的任務之一就是確定軟體各部分間的關係。因為設計系統結構就是要確定系統各部分、各模塊間的相互調用或控制關係,以便在需要修改模塊時,能掌握與修改模塊有關的其他部分,並正確追溯問題根源。

(4) 靈活性:設計的靈活性主要指設計具有易修改性。修改包括對已有設計的增加、刪除、改動等活動。發生修改的原因主要有,用戶需求發生變更,設計存在缺陷,設計需要進行優化,設計利用重用。

軟體設計靈活性主要通過系統描述問題的抽象來體現。抽象是對事物相同屬性或操作的統一描述,具有廣泛性。因此,系統設計和設計模式的抽象程度越高,覆蓋的範圍就越大。如“鳥”對“麻雀”的抽象,既能體現麻雀能飛的特性,也覆蓋了其他鳥類的說明。但抽象是一把“雙刃劍”,過度的抽象反而會引起理解和設計上的困難。如用“生物”去抽象 “麻雀”實體,則作為馬的很多特徵將難以在“生物”中定義。

(5) 一致性:一致性在軟體設計方法和過程中都得到體現。在軟體設計中,界面視圖的一致性保證了用戶體驗和對系統的忠誠度,如 windows 作業系統的界面,雖歷經多個版本的變更,但用戶操作方式基本沒有改變。用統一的規則和約束規範模塊接口定義,確保編碼階段對接口和數據結構的統一操作,減少數據理解上的歧義,使得軟體質量得到保證。

(6)可靠性:設計應貫穿於功能設計的各個環節,在滿足基本功能的同時要全面考慮影響可靠性的各種因素。在設計實現時,軟體架構設計應合理,儘量降低各模塊間的耦合性,提高系統容錯性,以免單個模塊發生故障時會影響到其他模塊乃至整個系統。並且在軟體開發過程中應遵循開發測試同步進行的原則,實時測試和發現問題,並反覆驗證,降低風險,提高軟體的可靠性。

(7) 可擴展性:軟體的設計和實現上確保模塊作用邊界明晰,使用統一標準的輸入輸出接口,利於軟體相關業務的橫向擴展,模塊中包含數據類型、子功能和操作界面均獨立編譯動態庫,利於軟體相關業務的縱向擴展。

(8) 可維護性:在設計實現時,軟體各配置項應提供完備的日誌記錄(包括過程日誌和異常日誌等),同時在軟體出錯時應有明確的異常信息提示。所有的故障狀態和信息都應自動記錄和存儲,便於事後的故障對策分析。

改進軟體設計,提高軟體質量需要遵循如下原則。

1)模塊高獨立性

設計出軟體的初步結構以後,應該進一步分解或合併模塊,力求降低耦合併提高內聚。例如,多個模塊公有的一個子功能可以獨立定義一個模塊,由這些模塊調用;有時可以通過分解或合併模塊以減少控制信息的傳遞及對全程數據的引用,並降低接口的複雜程度。

2)模塊規模適中

大的模塊往往是由於分解不充分,但是進一步分解必須符合問題結構,一般分解後不應該降低模塊獨立性。過小的模塊開銷大於有效操作,而且模塊數目過多將使系統接口複雜。因此過小的模塊有時不值得單獨存在,特別是只有一個模塊調用它時,通常可以把它合併到上級模塊中而不必單獨存在。

3)深度、寬度、扇出和扇入適當深度表示軟體結構中控制的層數,能夠粗略地標誌一個系統的大小和複雜程度,如

圖5-3所示。它和程式長度之間應該有粗略的對應關係,當然這個對應關係是在一定範圍內變化的。如果層數過多,則應該考慮是否有許多管理模塊過於簡單,需要適當合併。寬度是軟體結構內同一個層次上的模塊總數的最大值。一般寬度越大系統越複雜。對寬度影響最大的因素是模塊的扇出。

软件结构有关术语

圖5-3 軟體結構有關術語

Keep Exploring

延伸阅读

更多文章
同分类 2025/8/13

推薦一款高性能狀態機管理解決方案

在實際軟體開發中,尤其是工業軟體,每一款設備都有複雜的狀態以及狀態之間的切換的功能需求,在這種情況下,如何管理狀態以及狀態之間切換,和對應狀態下的功能控制,成為非常重要的一個問題。

继续阅读