軟件設計

軟件設計

把事物抽象和模塊化
軟件設計是從軟件需求規格說明書出發,根據需求分析階段确定的功能設計軟件系統的整體結構、劃分功能模塊、确定每個模塊的實現算法以及編寫具體的代碼,形成軟件的具體設計方案。軟件設計是從軟件需求規格說明出發,形成軟件的具體設計方案的過程,也就是說在需求分析階段明确軟件是“做什麼”的基礎上,解決軟件“怎麼做”的問題。結構化設計方将把軟件設計分為概要設計和詳細設計兩個階段。
    中文名:軟件設計 外文名:software design 學 科:信息科學 設計階段:總體設計,詳細設計 領 域:計算機 目 的:形成軟件的具體設計方案

簡介

概要設計的主要任務是,通過分析需求規格說明對軟件進行功能分解,确定軟件的總體結構;詳細設計階段确定每個模塊功能所需要的算法和數據結構,設計出每個模塊的邏輯結構。軟件設計階段結束時的工作成果是軟件設計說明書,它描述軟件系統的組成模塊結、模塊間的調用關系,以及每個模塊的輸入、輸出和詳細的過程描述。順應這一大趨勢,設計了一種基于RT-Thread的嵌入式網絡控制器,軟件設計可分為下位機和上位機兩個部分,旨在為用戶提供一個二次開發平台,實現對小型設備進行實時控制和數據采集。

設計基礎

軟件設計的基本目标是用比較抽象、概括的方式确定目标系統如何完成預定的任務,軟件設計是确定系統的物理模型。軟件設計是開發階段最重要的步驟,是将需求準确地轉化為完整的軟件産品或系統的唯一途徑。

從技術觀點上看,軟件設計包括軟件結構設計、數據設計、接口設計、過程設計;

(1)結構設計定義軟件系統各主要部件之間的關系;

(2)數據設計将分析時創建的模型轉化為數據結構的定義;

(3)接口設計描述軟件内部、軟件和協作系統之間及軟件與人之間如何通信;

(4)過程設計則把系統結構部件交換為軟件的過程性描述。

基本原理

(1)抽象

軟件設計中考慮模塊化解決方案時,可以定出多個抽象級别。抽象的層次從概要設計到詳細設計逐步降低。

(2)模塊化

模塊是指把一個待開發的軟件分解成若幹小的簡單的部分。模塊化是指解決一個複雜問題時自頂向下逐層把軟件系統劃分成若幹模塊的過程。

(3)信息隐蔽

信息隐蔽是指在一個模塊内包含的信息(過程或數據),對于不需要這些信息的其他模塊來說是不能訪問的。

(4)模塊獨立性

模塊獨立性是指每個模塊隻完成系統要求的獨立子功能,并且與其他模塊的聯系最少且接口簡單。模塊的獨立程度是評價設計好壞的重要度量标準。衡量軟件的模塊獨立性使用耦合性和内聚性兩個定性的度量标準。内聚性是信息隐蔽和局部化概念的自然擴展。一個模塊的内聚性越強,則該模塊的獨立性越強。一個模塊與其他模塊的耦合性越強則該模塊的獨立性越弱。

内聚性是度量一個模塊功能強度的一個相對指标。内聚是從功能角度來衡量模塊的聯系,它描述的是模塊内的功能聯系。内聚有如下種類:偶然内聚、邏輯内聚、時間内聚、過程内聚、通信内聚、順序内聚、功能内聚。它們之間的内聚度由弱到強排列。

耦合性是模塊之間互相連接的緊密程度的度量。耦合性取決于各個模塊之間接口的複雜度、調用方式及哪些信息通過接口。耦合可以分為下列幾種:内容耦合、公共耦合、外部耦合,控制耦合、标記耦合、數據耦合、非直接耦合。它們之間的耦合度由高到低排列。

在程序結構中,各模塊的内聚性越強,則合性越弱。一股較優秀的軟件設計,應盡量做到高内聚、低耦合,即減弱模塊之間的耦合性和提高模塊内的内聚性,有利于提高模塊的獨立性

設計階段

軟件設計階段通常分為兩步:

一是系統的總體設計或概要設計,采用結構化的設計方法來确定軟件的系統結構,主要任務是把需求分析階段得到的系統擴展用例圖轉換為軟件結構和數據結構;

二是系統的詳細設計,即進行各模塊内部的具體設計,它的任務是為軟件結構圖中的每一個模塊确定實現的算法和局部數據結構,并用某種工具描述出來。

設計原則

1、設計對于分析模型應該是可跟蹤的:軟件的模塊可能被映射到多個需求上。

2、設計結構應該盡可能的模拟實際問題。

3、設計應該表現出一緻性。

4、不要把設計當成編寫代碼。

5、在創建設計時就應該能夠評估質量。

6、評審設計以減少語義性的錯誤。

7、設計應該模塊化,将軟件邏輯地劃分為元素或子系統,并包含數據、體系結構、接口和構件的清晰表示。

發展方向

軟件開發過程是随着開發技術的演化而随之改進的。從早期的瀑布式(Waterfall)的開發模型到後來出現的螺旋式的叠代(Spiral)開發,以後來開始興起的敏捷開發方法(Agile),他們展示出了在不同的時代軟件産業對于開發過程的不同的認識,以及對于不同類型項目的理解方法。

注意區分軟件開發過程和軟件過程改進之間的重要區别。諸如像ISO15504,ISO9000,CMM,CMMI這樣的名詞闡述的是一些軟件過程改進框架,他們提供了一系列的标準和策略來指導軟件組織如何提升軟件開發過程的質量、軟件組織的能力,而不是給出具體的開發過程的定義。

“敏捷開發”(AgileDevelopment)是軟件工程的一個重要的發展。它強調軟件開發應當是能夠對未來可能出現的變化和不确定性作出全面反應的。

敏捷開發被認為是一種“輕量級”的方法。在輕量級方法中最負盛名的應該是“極限編程”(ExtremeProgramming),簡稱為XP)。而與輕量級方法相對應的是“重量級方法”的存在。重量級方法強調以開發過程為中心,而不是以人為中心。重量級方法的例子比如CMM、PSP、TSP。

面向側面的程序設計(AspectOrientedProgramming),簡稱(AOP)被認為是軟件工程的另外一個重要發展。這裡的方面指的是完成一個功能的對象和函數的集合。

面向服務體系架構的程序設計SOA,就是通過定義SOA編程模型來提高AI的抽象級别,解決當前API集合問題,以此降低應用程序開發者直接處理中間件或Web服務特定API時面臨的複雜度。通過從業務代碼中移除大部分的通信支持,并将它們隐藏在編程模型抽象/實現之後,簡化業務服務的開發,簡化作為服務網絡構建的業務解決方案的裝配和部署。保護業務邏輯資産,使其不受底層技術改變的影響,增加靈活性。

相關詞條

相關搜索

其它詞條