前邊三篇部落格,分別從軟體工程學科的角度,軟體計劃角度,軟體需求角度三個方面來寫的.我們做好了計劃,確定了軟體的可執行性,我們開始針對軟體來做各種需求分析,有了需求,我們就可以開始真正到我們軟體的設計階段了,這章,總結有關軟體設計的相關知識!
下邊我們先來看這張圖,是關於這章要總結的結構:
這五個方面,看似沒有聯絡,其實卻有著不可分割的關係.面向過程的軟體設計,首先我們需要明白,我們需要做什麼,有什麼樣的目標; 其次,要完成這些任務,我們需要知道一些必備的基礎知識; 三,對於面向過程的開發,模組是裡邊的主要單元,而對於模組最重要的特性就是獨立性,這是我們完成其它任務的基礎;
四,等明白了模組的相關屬性等.需要我們開始設計,首先就是概要設計,即先設計我們這款軟體的結構——結構化設計方法;完成了結構設計,還有我們的詳細設計,即模組設計,這裡設計到了具體細節的編程技巧知識; 五,最後,需要我們把軟體的其它組成部分設計好,資料,檔案設計,對於過程設計,就是使這些東西過程化,使之成為一體。 當然,對於最後的編寫設計文檔,我這裡就沒有標出來,這是哪個階段都需要一個重要流程。下邊,我來分塊總結這些。
一,任務:對於從技術觀點劃分的,1,資料結構,其實就是我們每款軟體資料結構的設計;2,系統結構設計,定義系統各主要成分之間的關係就是,使之構成架構;3,過程設計,就是把結構成分轉化為軟體的過程性描述,使之成為一個有流動的程式。 對於從管理階段劃分的概要設計,和詳細設計這個就是架構的設計和細化的設計。在這裡讓大家看一下軟體設計的過程:
二,軟體設計的基礎:
1,自頂向下,逐步細化:這是我們設計的一種方法,一種思想。
2,軟體結構:包括模組結構和資料結構兩部分。
3,程式結構:表明了程式各個組件的組織情況,是軟體過程的表示。看這張圖:
對裡邊的名詞,我做一下簡單解釋:
深度:展示層次數,這個為5
寬度:表示任意一層模組的寬度,最多的為
系統的寬度,這個為7
扇出:每個模組的附載子模組,例如,M的扇出為3
ABC,扇出越大,模組受其它模組的影響越大.
扇入:表示進入模組的入口,例如T模組的扇入是4
4,大家看這幾個結構圖(反映程式中模組調用之間的層次調用關係和聯絡,資訊傳遞):
下邊這張圖,畫模組的一些規則:
5,模組化:是指整個軟體被劃分為若干個單獨命令和可編址的部分,稱之為模組,將其組裝起來可以供滿足整個系統的需求。
6,抽象化:分為過程的抽象(從系統定義到實現,每進展一步都可以看做是對軟體解決方案的抽象化過程的一次細化)和資料抽象(描述資料對象的細節,定義其相關的操作)
7,資訊隱蔽:每個模組的實現的細節對於其它模組來說是隱形。也就相當於下邊要說的模組的獨立。
三,模組的獨立性:
首先我們要知道模組的三個基本屬性:功能(實現什麼),邏輯(內部怎樣),狀態(使用的條件與環境)。當然在描述一個模組時,我們也可以通過外部特性和內部特性來描述。
對於模組的獨立性:是指每個模組只涉及要求的具體的子功能,而和軟體系統其它的模組的介面是簡單的。這裡我們一般通過模組間的耦合和模組的內聚來度量。
耦合是指模組之間相互串連的緊密程度的度量;內聚是指模組的功能強度。獨立性較強的模組應該是高內聚低耦合。下邊我們看兩張圖:
1,模組間的耦合與獨立性的關係圖:
2,模組的內聚與獨立性的關係圖:
對於其中具體的耦合和內聚,我們可以通過字面意思理解,當然,我這裡也給出串連:耦合,內聚。而,我們要做到的是高內聚低耦合!
四,結構化設計方法:
就是通過研究,分析和審查資料流圖,從軟體的需求規格說明中弄清楚資料加工流程,然後根基資料流程圖決定問題的類型,這裡分為變換型和事務型兩種,進行分析處理。下邊我來介紹這兩種類型:
這裡我先說下結構圖的幾種模組圖:
(1),變換型系統結構圖:先看一下的變換型的三大步,其中找到變換資料的過程為關鍵,其特點為一條輸入一條輸出:
這裡我給大家舉個例子(由資料流圖向變換型轉換):
(2),事務型系統結構圖:從分析資料流圖開始自頂向下,逐步分解,建立結系統構圖。它是接受一項任務,經過交易處理中心,可以選擇不同的模組進行操作,也就是一項輸入,多項輸出。這裡確定事務中心是重點,大家看例圖:
在這裡我向大家提示一下事務型系統結構圖的分析過程:
1,識別事務源(這也是重點);2,規定適當的事務型結構;3,識別各種事務和他們定義的操作;4,注意利用公用模組;5,對每個事物,或對密切聯絡的一組事務,建立一個交易處理模組;6,對交易處理模組規定他們全部的下層操作模組;7,對操作模組規定他們全部細節模組!
在這兩項設計完以後,我們需要做的時,先對模組進行說明:1,為每個模組寫一份處理說明;2,為每一個模組提供一份介面說明;3,確定全域資料結構和局部資料結構;4,指出所有的設計約束和限制;5,進行概要設計評審。
五,最後一項,設計軟體的資料,檔案和過程:
1,對於資料設計,這裡只向大家提出它的原則:a,用於軟體的系統化方法也適用於資料;b,確定所有的資料結構和在每種資料結構上施加的操作;c,應當建立一個資料詞典並用它來定義資料和軟體的設計;d,底層資料設計的決策應延遲到設計過程的後期進行;e,資料結構的表示只限於哪些必須直接使用該資料結構內資料的模組才能知道;f,應當建立一個存放有效資料結構及相關操作的庫;g,軟體設計和程式設計語言應當支援抽象資料類型的定義和實現。
2,檔案設計:主要分為兩個過程:1,邏輯設計(1,整理必須的資料元素;2,分析資料間的關係;3,確定檔案的邏輯設計。)2,實體設計(1,理解檔案的特性;2,確定檔案的組織方式,例如循序檔,直接存取檔案;3,確定檔案的儲存介質;4,確定檔案的記錄格式;5,估算存取時間和儲存容量等問題。)
3,過程設計:要決定各個模組的實現演算法,並精確的表達這些演算法。這裡有幾種方式來表達:
a,程式流程圖的物種基本控制結構圖:
在這裡我給出程式流程圖的符號:
當然,也給出一個例子,供參考理解:
b,N-S圖,也叫盒圖,它的五種基本控制結構的畫法:
c,問題分析圖(PAD圖),五種基本結構的畫法:
給出一個例子,共參考理解:
這裡談一下PAD圖的優點:(當然這些都是比較來說的,這三種圖可以比較著學習)
1,一定是結構化的
2,比較清晰
3,程式的結構易懂,便於記憶
4,很容易的將PAD圖轉換為進階語言的程式
5,可以描述資料結構
6,支援自頂向下的逐步求精的過程
當然我們還可以利用判定表這種表格工具,和虛擬碼這種文字工具,來實現這些設計,這裡不再一個個描述。
最後,我還是要把形成文檔的提綱寫一下:
總上而言為程式設計的總體過程:這裡就是針對軟體系統程式,為了去實現其功能,而先設計模型的過程。說簡單一點就是蓋房子前,我們畫的那些圖紙等設計方案!