複製鏈接
請複製以下鏈接發送給好友

軟件設計

(把事物抽象和模塊化)

鎖定
軟件設計是從軟件需求規格説明書出發,根據需求分析階段確定的功能設計軟件系統的整體結構、劃分功能模塊、確定每個模塊的實現算法以及編寫具體的代碼,形成軟件的具體設計方案 [1] 
軟件設計是把許多事物和問題抽象起來,並且抽象它們不同的層次和角度。將問題或事物分解並模塊化使得解決問題變得容易,分解的越細模塊數量也就越多,它的副作用就是使得設計者考慮更多的模塊之間耦合度的情況 [2] 
中文名
軟件設計 [1] 
外文名
software design [2] 
學    科
信息科學 [1] 
設計階段
總體設計,詳細設計 [1] 
領    域
計算機 [3] 
目    的
形成軟件的具體設計方案 [1] 

軟件設計簡介

軟件設計 軟件設計
軟件設計是從軟件需求規格説明出發,形成軟件的具體設計方案的過程,也就是説在需求分析階段明確軟件是“做什麼”的基礎上,解決軟件“怎麼做”的問題。結構化設計方將把軟件設計分為概要設計和詳細設計兩個階段。概要設計的主要任務是,通過分析需求規格説明對軟件進行功能分解,確定軟件的總體結構;詳細設計階段確定每個模塊功能所需要的算法和數據結構,設計出每個模塊的邏輯結構。軟件設計階段結束時的工作成果是軟件設計説明書,它描述軟件系統的組成模塊結、模塊間的調用關係,以及每個模塊的輸入、輸出和詳細的過程描述 [3] 

軟件設計設計基礎

軟件設計的基本目標是用比較抽象、概括的方式確定目標系統如何完成預定的任務,軟件設計是確定系統的物理模型。軟件設計是開發階段最重要的步驟,是將需求準確地轉化為完整的軟件產品或系統的唯一途徑 [4] 
從技術觀點上看,軟件設計包括軟件結構設計、數據設計、接口設計、過程設計 [4] 
(1)結構設計定義軟件系統各主要部件之間的關係 [4] 
(2)數據設計將分析時創建的模型轉化為數據結構的定義 [4] 
(3)接口設計描述軟件內部、軟件和協作系統之間及軟件與人之間如何通信 [4] 
軟件設計 軟件設計
(4)過程設計則把系統結構部件交換為軟件的過程性描述 [4] 

軟件設計基本原理

(1)抽象
軟件設計中考慮模塊化解決方案時,可以定出多個抽象級別。抽象的層次從概要設計到詳細設計逐步降低 [4] 
(2)模塊化
模塊是指把一個待開發的軟件分解成若干小的簡單的部分。模塊化是指解決一個複雜問題時自頂向下逐層把軟件系統劃分成若干模塊的過程 [4] 
(3)信息隱蔽
信息隱蔽是指在一個模塊內包含的信息(過程或數據),對於不需要這些信息的其他模塊來説是不能訪問的 [4] 
(4)模塊獨立性
模塊獨立性是指每個模塊只完成系統要求的獨立子功能,並且與其他模塊的聯繫最少且接口簡單。模塊的獨立程度是評價設計好壞的重要度量標準。衡量軟件的模塊獨立性使用耦合性和內聚性兩個定性的度量標準。內聚性是信息隱蔽和局部化概念的自然擴展。一個模塊的內聚性越強,則該模塊的獨立性越強。一個模塊與其他模塊的耦合性越強則該模塊的獨立性越弱 [4] 
內聚性是度量一個模塊功能強度的一個相對指標。內聚是從功能角度來衡量模塊的聯繫,它描述的是模塊內的功能聯繫。內聚有如下種類:偶然內聚、邏輯內聚、時間內聚、過程內聚、通信內聚、順序內聚、功能內聚。它們之間的內聚度由弱到強排列 [4] 
耦合性是模塊之間互相連接的緊密程度的度量。耦合性取決於各個模塊之間接口的複雜度、調用方式及哪些信息通過接口。耦合可以分為下列幾種:內容耦合、公共耦合、外部耦合,控制耦合、標記耦合、數據耦合、非直接耦合。它們之間的耦合度由高到低排列 [4] 
軟件設計 軟件設計
在程序結構中,各模塊的內聚性越強,則合性越弱。一般較優秀的軟件設計,應儘量做到高內聚、低耦合,即減弱模塊之間的耦合性和提高模塊內的內聚性,有利於提高模塊的獨立性 [4] 

軟件設計設計階段

軟件設計階段通常分為兩步 [1] 
一是系統的總體設計或概要設計,採用結構化的設計方法來確定軟件的系統結構,主要任務是把需求分析階段得到的系統擴展用例圖轉換為軟件結構和數據結構 [1] 
軟件設計 軟件設計
二是系統的詳細設計,即進行各模塊內部的具體設計,它的任務是為軟件結構圖中的每一個模塊確定實現的算法和局部數據結構,並用某種工具描述出來 [1] 

軟件設計設計原則

1、設計對於分析模型應該是可跟蹤的:軟件的模塊可能被映射到多個需求 [5] 
2、設計結構應該儘可能的模擬實際問題 [5] 
3、設計應該表現出一致性 [5] 
4、不要把設計當成編寫代碼 [5] 
5、在創建設計時就應該能夠評估質量 [5] 
6、評審設計以減少語義性的錯誤 [5] 
軟件設計 軟件設計
7、設計應該模塊化,將軟件邏輯地劃分為元素或子系統,幷包含數據體系結構、接口和構件的清晰表示 [5] 

軟件設計發展方向

軟件開發過程是隨着開發技術的演化而隨之改進的。從早期的瀑布式(Waterfall)的開發模型到後來出現的螺旋式的迭代(Spiral)開發,以後來開始興起的敏捷開發方法(Agile),他們展示出了在不同的時代軟件產業對於開發過程的不同的認識,以及對於不同類型項目的理解方法 [6] 
注意區分軟件開發過程和軟件過程改進之間的重要區別。諸如像ISO15504,ISO9000,CMM,CMMI這樣的名詞闡述的是一些軟件過程改進框架,他們提供了一系列的標準策略來指導軟件組織如何提升軟件開發過程的質量、軟件組織的能力,而不是給出具體的開發過程的定義 [6] 
“敏捷開發”(AgileDevelopment)是軟件工程的一個重要的發展。它強調軟件開發應當是能夠對未來可能出現的變化和不確定性作出全面反應的 [6] 
敏捷開發被認為是一種“輕量級”的方法。在輕量級方法中最負盛名的應該是“極限編程”(Extreme Programming),簡稱為XP)。而與輕量級方法相對應的是“重量級方法”的存在。重量級方法強調以開發過程為中心,而不是以人為中心。重量級方法的例子比如CMM、PSP、TSP [6] 
面向側面的程序設計(AspectOrientedProgramming),簡稱(AOP)被認為是軟件工程的另外一個重要發展。這裏的方面指的是完成一個功能的對象和函數集合 [6] 
面向服務體系架構的程序設計SOA,就是通過定義SOA編程模型來提高AI的抽象級別,解決當前API集合問題,以此降低應用程序開發者直接處理中間件或Web服務特定API時面臨的複雜度。通過從業務代碼中移除大部分的通信支持,並將它們隱藏在編程模型抽象/實現之後,簡化業務服務的開發,簡化作為服務網絡構建的業務解決方案的裝配和部署。保護業務邏輯資產,使其不受底層技術改變的影響,增加靈活性 [6] 
軟件設計 軟件設計
參考資料
  • 1.    李霞主編,大學計算機基礎,西安電子科技大學出版社,2016.12,第302-303頁
  • 2.    謝職安,何芳,IT服務外包英語閲讀教程 學生用書,知識產權出版社,2017.02,第114頁
  • 3.    李莉主編,計算機軟件技術基礎,兵器工業出版社,2003.08,第241頁
  • 4.    劉廣峯,黃霞主編,計算機基礎教程,華中科技大學出版社,2016.08,第116-117頁
  • 5.    宋丕丞著,商業技術實驗教程,首都經濟貿易大學出版社,2018.03,第160頁
  • 6.    劉偉主編,軟件質量保證與測試技術,哈爾濱工業大學出版社,2011.12,第26頁