




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
(1)可行性研究與計劃(2)需求分析(3)總體設(shè)計
(4)詳細設(shè)計(5)實現(xiàn)(6)集成測試(7)確認測試(8)使用和維護(根據(jù)國標(biāo)《計算機軟件開發(fā)規(guī)范》)下游上游軟件設(shè)計--將分析模型轉(zhuǎn)換為設(shè)計模型數(shù)據(jù)詞典數(shù)據(jù)流圖實體關(guān)系圖狀態(tài)轉(zhuǎn)換圖加工規(guī)格說明控制規(guī)格說明數(shù)據(jù)對象描述過程設(shè)計接口設(shè)計體系結(jié)構(gòu)設(shè)計(總體)數(shù)據(jù)設(shè)計將設(shè)計模型金字塔倒立的后果是什么?數(shù)據(jù)設(shè)計體系結(jié)構(gòu)設(shè)計接口設(shè)計過程設(shè)計軟件設(shè)計是后續(xù)開發(fā)步驟及軟件維護工作的基礎(chǔ)。如果沒有設(shè)計,只能建立一個不穩(wěn)定的系統(tǒng)結(jié)構(gòu)學(xué)習(xí)要求明確結(jié)構(gòu)化設(shè)計的主要任務(wù)、設(shè)計步驟、具體方法;了解其他設(shè)計方法如Jackson方法的思想及特點具體掌握軟件的概要設(shè)計及詳細設(shè)計的基本思想和方法;重點掌握從數(shù)據(jù)流圖導(dǎo)出初始結(jié)構(gòu)圖及如何對初始結(jié)構(gòu)圖進行改進的方法。6.1模
塊6.2
概要設(shè)計的基本概念6.3結(jié)構(gòu)化設(shè)計(SD方法)概要6.4
塊間聯(lián)系和塊內(nèi)聯(lián)系6.5
設(shè)計技巧6.6從數(shù)據(jù)流圖導(dǎo)出初始結(jié)構(gòu)圖6.1模
塊
考核要求:識記:模塊的概念及其特性。.分析階段主要解決軟件系統(tǒng)“做什么”。設(shè)計階段主要解決軟件系統(tǒng)“怎么做”。如果問題較簡單,要求一旦確定了,立刻就可以開始編程。但對大型系統(tǒng)來說,為了保證產(chǎn)品的質(zhì)量,并使開發(fā)工作能順利進行,我們必須先為編程制訂一個周密的計劃,這項工作就稱為設(shè)計(Design),設(shè)計實際上是為需求說明書到程序間的過渡架起一座橋梁。軟件結(jié)構(gòu)設(shè)計的內(nèi)容:軟件系統(tǒng)的結(jié)構(gòu),包括數(shù)據(jù)結(jié)構(gòu)、程序結(jié)構(gòu)。程序結(jié)構(gòu)程序結(jié)構(gòu)表明了程序各個部件(模塊)的組織情況,是軟件的過程表示。
程序系統(tǒng)應(yīng)由許多較小的單元組成(右圖),這種單元可稱為模塊,即用一個名字可以調(diào)用的一段程序語句,也可以暫將它理解成類似“子程序”的概念。結(jié)構(gòu)圖反映程序中模塊之間的層次調(diào)用關(guān)系和聯(lián)系:它以特定的符號表示模塊、模塊間的調(diào)用關(guān)系和模塊間信息的傳遞1模塊:模塊用矩形框表示,并用模塊的名字標(biāo)記它。結(jié)構(gòu)圖2模塊的調(diào)用關(guān)系和接口:模塊之間用單向箭頭聯(lián)結(jié),箭頭從調(diào)用模塊指向被調(diào)用模塊。3模塊間的信息傳遞:當(dāng)一個模塊調(diào)用另一個模塊時,調(diào)用模塊把數(shù)據(jù)或控制信息傳送給被調(diào)用模塊,以使被調(diào)用模塊能夠運行。而被調(diào)用模塊在執(zhí)行過程中又把它產(chǎn)生的數(shù)據(jù)或控制信息回送給調(diào)用模塊。4在模塊A的箭頭尾部標(biāo)以一個菱形符號,表示模塊A有條件地調(diào)用另一個模塊B。當(dāng)一個在調(diào)用箭頭尾部標(biāo)以一個弧形符號,表示模塊A反復(fù)調(diào)用模塊C和模塊D程序的系統(tǒng)結(jié)構(gòu)圖信息隱蔽由parnas方法提倡的信息隱蔽是指,每個模塊的實現(xiàn)細節(jié)對于其它模塊來說是隱蔽的。也就是說,模塊中所包含的信息(包括數(shù)據(jù)和過程)不允許其它不需要這些信息的模塊使用。一個模塊具有輸入和輸出、功能、內(nèi)部數(shù)據(jù)、程序代碼等四個特性。輸入和輸出分別是模塊需要的和產(chǎn)生的信息,功能是指模塊所做的工作,輸入輸出和功能構(gòu)成了一個模塊的外貌,即模塊的外部特性。模塊用程序代碼完成它的功能,內(nèi)部數(shù)據(jù)是僅供該模塊本身引用的數(shù)據(jù),內(nèi)部數(shù)據(jù)和程序代碼是模塊的內(nèi)部特性。對模塊的外部環(huán)境只需了解它的外部特性就足夠了,其內(nèi)部特性應(yīng)該是不必了解的?!坝赏庀蚶铩笔禽^合理的一種思考過程、所以應(yīng)先確定模塊的外部特性,再確定其內(nèi)部特性6.2
概要設(shè)計的基本概念考核要求:
識記:
概要設(shè)計的基本任務(wù)、幾種設(shè)計方法構(gòu)成模塊的原則。
領(lǐng)會:概要設(shè)計的主要工作是完成模塊分解,確定系統(tǒng)的模塊層次結(jié)構(gòu)。
概要設(shè)計(又稱總體設(shè)計)的基本任務(wù):·將系統(tǒng)劃分成模塊·決定每個模塊的功能·決定模塊的調(diào)用關(guān)系·決定模塊的界面,即模塊間傳遞的數(shù)據(jù)
概要設(shè)計的主要工作:
完成模塊分解,確定系統(tǒng)的模塊層次結(jié)構(gòu)。
概要設(shè)計需交付的文檔:
▼數(shù)據(jù)結(jié)構(gòu)的描述部分;▼模塊說明部分,它包括模塊結(jié)構(gòu)圖及每個模塊的功能說明。模塊結(jié)構(gòu)圖(前圖)描述了系統(tǒng)的模塊組成以及模塊間的調(diào)用關(guān)系,每個模塊的功能說明則需描述模塊的輸入輸出及其功能(即“做什么”,不是“怎么做”)。6.3結(jié)構(gòu)化設(shè)計(SD方法)概要考核要求:
識記:結(jié)構(gòu)化設(shè)計(StructureDesign,簡稱SD方法)的基本思想、目標(biāo)、描述方式步驟。結(jié)構(gòu)圖中的主要成分。塊間聯(lián)系與塊內(nèi)聯(lián)系的概念。領(lǐng)會:塊間聯(lián)系和塊內(nèi)聯(lián)系是衡量模塊之間相對獨立性的標(biāo)準(zhǔn)。SD方法的目標(biāo):建立結(jié)構(gòu)良好的程序系統(tǒng)。評價設(shè)計質(zhì)量的兩個標(biāo)準(zhǔn):塊間聯(lián)系和塊內(nèi)聯(lián)系。SD遵循的原則:自頂向下,逐步細化模塊化抽象化信息隱蔽6.3.1相對獨立單一功能的模塊結(jié)構(gòu)
SD方法的基本思想:是將系統(tǒng)設(shè)計成由相對獨立、單一功能的模塊組成的結(jié)構(gòu)。用SD方法設(shè)計的程序系統(tǒng),由于模塊之間是相對獨立的,所以每個模塊可以獨立地被理解、編程、測試、排錯和修改,這就使復(fù)雜的研制工作得以簡化,此外,模塊的相對獨立性也能有效地防止錯誤在模塊之間擴散蔓延,因而提高了系統(tǒng)的可靠性。6.3.2塊間聯(lián)系和塊內(nèi)聯(lián)系塊間聯(lián)系和塊內(nèi)聯(lián)系是衡量模塊之間相對獨立性的兩個標(biāo)準(zhǔn)(見下圖)。
塊間聯(lián)系:指模塊之間的聯(lián)系,它是對模塊獨立性的直接衡量,塊間聯(lián)系越小就意味著模塊的獨立性越高,所以這是一個最基本的標(biāo)準(zhǔn)。
塊內(nèi)聯(lián)系:
指一個模塊內(nèi)部各成分(語句或語句段)之間的聯(lián)系,塊內(nèi)聯(lián)系大了,則模塊的相對獨立性勢必會提高。
SD方法的目標(biāo)是使塊間聯(lián)系盡量小,塊內(nèi)聯(lián)系盡量大。
6.3.3
描述方式
SD方法使用的描述方式是結(jié)構(gòu)圖(下圖)描述了程序的模塊結(jié)構(gòu),并反映了塊間聯(lián)系和塊內(nèi)聯(lián)系等特性。結(jié)構(gòu)圖中的主要成分有:
·模塊——它用方框表示,方框中寫有模塊的名字,一個模塊的名字應(yīng)適當(dāng)?shù)胤从尺@個模塊的功能,這就在某種程度上反映了塊內(nèi)聯(lián)系?!ふ{(diào)用——從一個模塊指向另一模塊的箭頭表示前一模塊中含有對后一模塊的調(diào)用?!?shù)據(jù)——調(diào)用箭頭邊上的小箭頭表示調(diào)用時從一個模塊傳送給另一模塊的數(shù)據(jù),小箭頭也指出了傳送的方向。左圖(a)的結(jié)構(gòu)圖說明模塊A含有一個或多個對模塊B的調(diào)用。A調(diào)用B時,A將數(shù)據(jù)X、Y傳送給B,B返回到A時,將數(shù)據(jù)Z傳送給A。如果B將對Y作修改,然后再將Y回送給A。則Y應(yīng)出現(xiàn)在調(diào)用箭頭的兩邊(左圖(b)).
左圖中的A為B的調(diào)用模塊或調(diào)用者,B為A的被調(diào)模塊或下層模塊。
除上述基本符號外,結(jié)構(gòu)圖中可以再加上一些輔助性的符號,如左圖表示模塊A有條件地調(diào)用模塊B,并有條件地調(diào)用C或D,圖中的菱形符號表示一個條件。右圖表示模塊A循環(huán)地調(diào)用B和C,弧形箭頭表示循環(huán)。下頁圖中帶有雙豎線的方框表示現(xiàn)成的模塊(如程序庫中現(xiàn)有的模塊),它們不必再另行編寫,這種模塊總出現(xiàn)在結(jié)構(gòu)圖的底層。設(shè)計員可根據(jù)具體情況決定是否有必要畫出這些輔助性的符號。結(jié)構(gòu)圖并不一定是樹形的,許多程序的結(jié)構(gòu)呈“清真寺”狀(左圖),即頂是尖的,中間較寬,而底部較窄。如果所使用的高級語言允許遞歸,則程序結(jié)構(gòu)可以是右圖的形狀。
應(yīng)該注意:一個模塊在結(jié)構(gòu)圖中只能出現(xiàn)一次,否則修改模塊結(jié)構(gòu)時就需要修改多處,這容易造成錯誤。為了避免線條交叉過多,可采用右圖的表示方式:在某些地方用圓表示被調(diào)用模塊。為了便于理解程序的整個結(jié)構(gòu),設(shè)計員應(yīng)將整個結(jié)構(gòu)圖畫在一張紙上。
畫結(jié)構(gòu)圖的一般習(xí)慣:輸入模塊在左,輸出模塊在右,而計算模塊居中。
6.3.4步驟
SD方法可分兩步進行:
建立一個滿足系統(tǒng)說明書要求的初始結(jié)構(gòu)圖。
對結(jié)構(gòu)圖作逐步改進,即在結(jié)構(gòu)圖中找出塊間聯(lián)系和塊內(nèi)聯(lián)系尚可改進之處,然后對有關(guān)部分的結(jié)構(gòu)作適當(dāng)?shù)男薷?,以提高塊內(nèi)聯(lián)系和減少塊間聯(lián)系。6.4
塊間聯(lián)系和塊內(nèi)聯(lián)系考核要求:
識記:塊間聯(lián)系的各種類型、塊內(nèi)聯(lián)系的各種類型。
領(lǐng)會:塊間聯(lián)系的衡量角度、塊內(nèi)聯(lián)系各種類型的含義和特點。SD方法的設(shè)計總則。
應(yīng)用:模塊分解時.使塊間聯(lián)系盡可能小、塊內(nèi)聯(lián)系盡可能大。
6.4.1
塊間聯(lián)系的各種類型
塊間聯(lián)系的大小一般可從三個角度來衡量:
方式——塊間聯(lián)系是通過怎樣的方式進行的。
作用——塊間共用的信息是作什么用的。
數(shù)量——塊間共用信息的多少。
1.聯(lián)系的方式
塊間聯(lián)系的方式一般有兩種:“用過程語句調(diào)用”或“直接引用”。用過程語句調(diào)用是通過模塊的名字調(diào)用整個模塊,而“直接引用”是指一個模塊直接存取另一模塊內(nèi)部的某些信息,這兩種方式相比,前者的塊間聯(lián)系較低,而后者的塊間聯(lián)系則很高。圖4.11(a)的是某個缺乏經(jīng)驗的設(shè)計員設(shè)計的結(jié)構(gòu)。模塊GETACOMMAND的功能是從終端獲取一條命令,為完成該功能,它調(diào)用模塊READTERMINAL,后者的功能是從終端讀入一行字符(LINE),GETACOMMAND對這行字符再進行處理就可得到一條命令。假設(shè)系統(tǒng)有多個終端,從哪個終端讀呢?READTERMINAL需要終端號。設(shè)計員在模塊GETACOMMAND中安排了一個單元存放終端號TERMNUM。READTERMINAL執(zhí)行時引用這個單元,然后從所指終端讀入,并將一行字符返回給GETACOMMAND。該圖中從模塊READTERMINAL內(nèi)部到模塊GETACOMMAND內(nèi)部的箭頭就表示“直接引用”。現(xiàn)在假設(shè)系統(tǒng)需要作一個修改,增加一個模塊GETADATALINE,其功能是從終端獲取一行數(shù)據(jù)。修改人員意識到應(yīng)該利用模塊READTERMINAL作為子模塊,下面有幾種修改方案:1)
GETADATALINE在調(diào)用READTERMINAL之前,修改GETACOMMAND中的TERMNUM(圖4.11(b))。
這樣有可能造成錯誤,因為原先編寫GETACOMMAND時不知道會有其他模塊修改TERMNUM,因此在GETADATALINE執(zhí)行后再執(zhí)行GETACOMMAND時,它就可能使用錯誤的終端號一TERMNUM。2)如果修改人員意識到上述問題,他可能會在GETADATALINE中先保護TERMINAL的當(dāng)前值,再設(shè)置新的值,然后調(diào)用READTERMINAL,返回后再恢復(fù)TERMNUM原先的值。但這樣做還有問題,因為如果GETADATALINE同GETACOMMAND并行執(zhí)行(例如在多道程序的環(huán)境中),則錯誤仍然存在;即使沒有并行執(zhí)行的可能性,這種設(shè)計亦是隱晦的,將來很容易造成錯誤。3)修改模塊GETACOMMAND,使其每次調(diào)用READTERMINAL之前重新設(shè)置TERMINAL。但這樣修改后,編寫GETADATALINE和程序員還必須去修改模塊GETACOMMAND而這是一個本應(yīng)與它無關(guān)的模塊。另外,如果GETADATALINE同GETACOMMAND并行執(zhí)行,則錯誤仍然存在。4)GETADATALINE調(diào)用READTERMINAL從前先保護TERMINAL原先值再設(shè)置新值,從READTERMINAL返回后再恢復(fù)原先值;對GETACOMMAND亦作類似的修改,即調(diào)用READTERMINAL之前和之后分別保護或恢復(fù)TERMINAL的原先值。這樣,如果GETADATALINE的保護或恢復(fù)指令有錯時,GETADATALINE執(zhí)行時就會失誤。為了解決GETADATALINE的失誤,必需去研究其他的模塊,也就是說,一個模塊的錯誤可能造成另一個模塊執(zhí)行時失誤,因此為解決某個模塊的失誤,需要到其他模塊去找原因??梢韵胂瘢@樣的排錯是極其困難的。5)修改人員另外編寫一個讀終端模塊,不再利用原有的READTERMINAL?,F(xiàn)在,因為有兩個不同的讀終端模塊,首先是增加了額外的工作量;第二,如果將來終端的硬件特征有了變化時,程序員必須記著有兩個讀終端模塊要隨之作修改。上面的幾種修改方案都有各種問題,沒有一個是令人滿意的。
“直接引用”的缺點:界面不清楚,理解某個模塊時必須同時去了解另一模塊內(nèi)部的情況,編程時亦是如此;修改時往往要涉及多個模塊;排錯時亦必須同時分析幾個模塊才能找出錯誤的原因......??傊?,“直接引用”使兩個模塊間出現(xiàn)了密切的聯(lián)系,致使理解、編程、修改、排錯時,這兩個模塊不能單獨處理,造成“分而不解”的局面,兩個模塊實際上不能成為“獨立的”單元?!爸苯右谩笔遣B(tài)的,它造成極強的塊間聯(lián)系,這種塊間聯(lián)系方式增加了開發(fā)工作的難度,使理解、編程、修改、排錯等活動都難以進行。圖4.11(c)的塊間聯(lián)系方式是用過程語句調(diào)用,此時兩個模塊共用的信息是作為過程語句的參數(shù)顯式傳送的,因而每個模塊的輸入輸出數(shù)據(jù)明顯可見。另外,用過程語句調(diào)用是通過引用模塊名調(diào)用整個模塊,而不是像“直接引用”那樣,用模塊名之外的其他名字引用模塊內(nèi)部個別的信息。對圖4.ll的例子,有經(jīng)驗的設(shè)計員會認識到造成上述修改難題的根本原因是GETACOMMAND和READTERMINAL之間病態(tài)的直接引用,所以原先的設(shè)計應(yīng)該將終端號TERMNUM作為READTERMINAL一個輸入?yún)?shù)顯式傳送給它(圖4.11(c))。
2.共用信息的作用模塊間共用信息可以作"控制信息"用,也可以做數(shù)據(jù)用.但是如果混合用則塊間聯(lián)系最高.“混合”型是指一個模塊修改另一模塊的指令。圖4.12(a)中,模塊A修改模塊B中的指令L,由于從修改一方看來,L是數(shù)據(jù),而從被修改一方看來L是指令,所以稱為“混合”型,或“數(shù)據(jù)/控制”型。缺點:如果模塊A將L改錯了,則模塊B執(zhí)行時會失誤,即修改一方的錯誤,會使被修改一方執(zhí)行時失誤,這樣為了解決某個模塊的失誤,必須到另一模塊去尋找致錯的原因;另外,在理解、編程、修改時,這兩個模塊也是難以單獨考慮的。所以共用信息作“數(shù)據(jù)/控制”,其塊間聯(lián)系是很高的。
共用信息作“控制”用的情況有好幾種:
一種是一個模塊直接轉(zhuǎn)向另一模塊內(nèi)部的某個位置,圖4.12(b)中,模塊A轉(zhuǎn)向棋塊B中的某個位置L,這里L(fēng)對雙方來說都是指令,所以稱為“控制”型。這種情況的缺點是:一個模塊的內(nèi)部改動可能對其他模塊有直接的影響。如模塊B欲將L前的某些指令移到L之后,此時就必需考慮這一改動會給模塊A帶來什么影響,這樣的程序是不易維護的;同樣,在理解和編程時,這兩個模塊也是“分而不解”。圖4.12(a)和(b)都是引用了模塊名之外的另一個名字(模塊的內(nèi)部名),因而都是病態(tài)的。另一種情況是:將控制信號作為參數(shù)顯式傳送到另一模塊。圖4.13(a)中,模塊A將一個參數(shù)“平均/最高”傳送給模塊B,模塊B按這個參數(shù)的值是“平均”還是“最高”,取出“平均成績”或取出“最高成績”回送給模塊A。
參數(shù)“平均/最高”是一個開關(guān)量,它的作用是告訴模塊B如何工作。這種設(shè)計方案完全是人為地增加了不必要的額外負擔(dān),調(diào)用模塊向被調(diào)模塊傳送“控制”型參數(shù)(開關(guān)量)的情況是完全可以避免的,圖4.13(a)只需改成圖4.13(b)就可以了,這里模塊A根據(jù)需要調(diào)用模塊B1或B2,即需要取“平均成績”時調(diào)用B1,需要取“最高成績”時調(diào)用B2,這就降低了模塊間的聯(lián)系,使結(jié)構(gòu)也更易理解并更易實現(xiàn)了。3.共用信息的數(shù)量程序中的聯(lián)系是因共享信息造成的,模塊間的共用的信息越多則塊間的聯(lián)系越大。
為了提高可理解性、可維護性和可靠性,一個模塊最好只引用其調(diào)用模塊顯式傳送給它的參數(shù)以及它本身的局部變量,這樣,模塊同系統(tǒng)其他部分的聯(lián)系就會大大減少。
各類塊間聯(lián)系的特性見下表:
塊間聯(lián)系類型對修改的敏感性可修改性可理解性復(fù)用性數(shù)據(jù)型不一定好好好復(fù)合型不一定中中中控制型中差差差公共型差中壞壞內(nèi)容型壞壞壞壞
模塊分解的目的是為了降低復(fù)雜性,如果能將一個復(fù)雜的大問題,化為幾個孤立的小問題,從而可以分而治之、各個擊破,就降低了問題的復(fù)雜性。
如何達到塊間聯(lián)系盡可能?。?/p>
每個模塊用過程語句(或函數(shù)方式等)調(diào)用其他模塊。
模塊間傳送的參數(shù)作數(shù)據(jù)用。
模塊間共用的信息(如參數(shù)等)盡量少。6.4.2
塊內(nèi)聯(lián)系的各種類型
塊內(nèi)聯(lián)系是指一個模塊內(nèi)部各成分之間(如語句之間或語句段之間)的聯(lián)系。
SD方法的另一個目標(biāo)是:
塊內(nèi)聯(lián)系盡量大,即,模塊分解時應(yīng)盡量把相互有密切聯(lián)系的成分劃分在同一模塊,而不要把不相關(guān)的成分湊到一個模塊中。
塊內(nèi)聯(lián)系常見的類型:
偶然型
特點:組成模塊的成分純屬偶然,沒有必然聯(lián)系。圖4.14模塊T中的三個語句實際上沒有任何聯(lián)系(假定A、B、C、D不在文件CAREDFILE中),但是因為模塊P、Q、R、S中都含有這樣的語句段,設(shè)計員為節(jié)省空間將它們放在模塊T中。主要缺點:不易修改、模塊含義不易理解,難以測試。偶然型塊內(nèi)聯(lián)系通常是為了節(jié)省空間而產(chǎn)生的,所以只要有足夠的空間就應(yīng)避免構(gòu)造這種模塊,免得造成維護時的困難。
邏輯型(Logicalcohesion)特點:將幾個邏輯上相似的功能放到一個模塊中。模塊ABC本身的程序流程圖會像圖4.15(c)那樣:各個功能可以共用某一段程序(事實上就是為了節(jié)省這些空間,設(shè)計員才構(gòu)造了這個模塊),但對各個功能中不相同的部分,程序必須判別一個開關(guān)量后,才能選擇執(zhí)行某一個分支。
主要缺點:難理解、難編程.難修改?!芭既恍汀焙汀斑壿嬓汀甭?lián)系都是很弱的,它們都是為了節(jié)省空間,而把沒有聯(lián)系的成分放到一個模塊中了。瞬時型
特點:將需要同時執(zhí)行的成分放在同一模塊中。
如初始化模塊(為各種變量置初值,打開若干個文件等)或結(jié)束模塊等?!八矔r型”的塊內(nèi)聯(lián)系稍強于“邏輯型”的。
通訊型(CommunicationalCohesion)
特點:模塊中的成分引用共同的數(shù)據(jù)。
圖4.16中的三個模塊都屬于這一類,模塊A中包含三個部分,這三部分使用同一數(shù)據(jù)來源產(chǎn)生幾個報告,模塊B包含兩個部分,一部分將輸入數(shù)據(jù)存入,另一部分將輸入數(shù)據(jù)打印;模塊C中的兩個部分都是對同一文件進行管理。缺點:復(fù)用性較差。“通訊型”的塊內(nèi)聯(lián)系比“順序型”稍弱,因為各成分的執(zhí)行次序可以是任意的。
順序型
特點:模塊中某個成分的輸出是另一個成分的輸入。
圖4.17中的兩個模塊都屬于這一類型:模塊A讀入數(shù)據(jù)并進行編輯,模塊B進行累加并將結(jié)果打印?!绊樞蛐汀北取巴ㄓ嵭汀睆姡驗闊o論從數(shù)據(jù)的角度或執(zhí)行的先后次序來看,模塊中某一部分的執(zhí)行依賴于另一部分,但是同“功能性”相比,“順序型”還是相當(dāng)弱的,因為模塊中可能包含了幾個功能,也可能僅包含某個功能的一部分。
缺點:復(fù)用性較差。
功能型(FunctionalCohesion)
特點:一個模塊包括并僅包括為完成某一個具體任務(wù)所必需的所有成分。
如:
求平方根
計算每小時工資
計算利息
印出支票
解一個方程
優(yōu)點:界面比較清晰,易于理解,同其他模塊的聯(lián)系較低。功能型模塊也易于測試和維護。復(fù)用性較好。例如:見圖4.18,從模塊A的調(diào)用者看來,A的作用是“處理一個命令”,所以它是功能型的,至于模塊A是“怎么做”的,它是否又要調(diào)用其他模塊,它的調(diào)用者是不關(guān)心,也不知道的。從模塊的調(diào)用者看來,B的作用是“處理SEND命令”,所以它也是功能型的。同理圖中其他的模塊也都是功能型的。圖4.19,是個求解一元二次方程的程序。從模塊A的調(diào)用者看來,模塊A的功能是“求ax2+bx+c=0的根”,顯然,這是一個功能,所以A是功能型的。再看模塊B。從它的調(diào)用者看來,B的功能是求平方根,所以B也是功能型的。顯然,B的內(nèi)部也有許多細節(jié),但模塊A是不必知道的。各類塊內(nèi)聯(lián)系的特性:塊內(nèi)聯(lián)系類型塊間聯(lián)系
清晰性
復(fù)用性可修改性可理解性功能型好
好
好
好
好順序型好
好
中
好
好通訊型中
好
差
中
中瞬時型差
中
壞
中
中邏輯型壞
壞
壞
壞
差偶然型壞
差
壞
壞
壞
6.4.3
設(shè)計總則SD方法的設(shè)計總則是:
·使每個模塊執(zhí)行一個功能?!つK間傳送數(shù)據(jù)型參數(shù)?!つK間共用信息盡量少。6.5
設(shè)計技巧考核要求:
識記:變換型程序結(jié)構(gòu)、事務(wù)型程序結(jié)構(gòu);作用范圍和控制范圍;模塊的大??;模塊的扇出和扇入等概念。
領(lǐng)會:病人監(jiān)護系統(tǒng)設(shè)計中使用的設(shè)計技巧。
應(yīng)用:對初始結(jié)構(gòu)圖進行改進。
結(jié)構(gòu)圖的改進有兩條途徑:減少塊間聯(lián)系和提高塊內(nèi)聯(lián)系。6.5.1
建立了初始結(jié)構(gòu)圖之后,就可考慮對結(jié)構(gòu)圖作逐步改進,結(jié)構(gòu)圖的改進是圍繞著SD的總則進行的,即要使每個模塊執(zhí)行一個功能,模塊間應(yīng)傳送數(shù)據(jù)型參數(shù),而且參數(shù)盡可能少。設(shè)計員可以逐個檢查每個模塊及其界面,找出可改進的地方。在設(shè)計時使用了以下一些技巧:
·減少塊間聯(lián)系,其中用得最多的是減少模塊之間傳送的參數(shù)個數(shù)?!は貜?fù)的功能?!は肮艿馈毙阅K。·要考慮將來可能發(fā)生的變化。·如果一個模塊的篇幅較大,可以從中抽出一些功能構(gòu)成它的下層模塊?!と绻粋€模塊的篇幅較小,可以考慮將它同其調(diào)用模塊合并?!けM可能研究整張結(jié)構(gòu)圖,而不是由幾個設(shè)計員分別考慮一張結(jié)構(gòu)圖的各個部分?!こ跏冀Y(jié)構(gòu)圖也可以暫不滿足系統(tǒng)說明書中的某些要求,而在改進過程中使這些要求逐步得到滿足,因為越到后面,結(jié)構(gòu)圖的“可維護性”越好,局部的改動不會影響整個大局。
從以上討論可以看出,改進的過程帶有很強的試探性,設(shè)計員需對各種可能的方案作比較和權(quán)衡,設(shè)計員的經(jīng)驗也是非常重要的。6.5.2功能型的模塊的組成一個功能型的模塊應(yīng)包括以下成分:
·執(zhí)行某項具體任務(wù)的部分?!ねㄖ恼{(diào)用模塊發(fā)生了例外情況的部分?!ぴ跀?shù)據(jù)結(jié)束時通知調(diào)用模塊“文件完”的部分。6.5.3
消除重復(fù)的功能設(shè)計過程中經(jīng)常會發(fā)現(xiàn)幾個模塊具有相類似的功能,這將給編程、修改帶來麻煩。圖4.36(a)中,Q1和Q2兩個模塊具有類似的功能,但又不完全相同,如何將其中重復(fù)的部分消去呢?
錯誤的方法:將Q1和Q2合并成一個模塊Q’(圖4.36(b)),此時模塊Q’是“邏輯型”的。
正確的方法是:
先仔細分析Q1、Q2,找出這兩個模塊中相同的功能(圖4.36(a))中的虛線部分),然后把這個功能分離出來,構(gòu)成它們的一個公共的下層模塊Q(圖4.36(c))。如果余下的模塊Q‘l或Q’2比較簡單,則可以同它們的調(diào)用模塊X或Y合并,所以圖4.36(d)、圖4.36(e)的方案都是可能的。
圖4.36(c)、(d)、(e)的幾個方案消除了重復(fù)的功能,而且塊內(nèi)聯(lián)系較高,塊間聯(lián)系較低。6.5.4
作用范圍和控制范圍
一個判定的作用范圍是指所有受這個判定影響的模塊的集合。只要模塊中含有一些依賴于這個判定的操作,那么該模塊就在這個判定的作用范圍之中。如果整個模塊是否執(zhí)行取決于某個判定,則該模塊的調(diào)用模塊也在這個判定的作用范圍之中。
一個模塊的控制范圍包括它本身及其所有的下屬模塊(即由這個模塊管理的整個結(jié)構(gòu)層次),控制范圍純粹是結(jié)構(gòu)方面的特點,而與模塊的功能無關(guān)。
SD方法認為作用范圍應(yīng)該是控制范圍的子集,也就是說,受某個判定影響的所有模塊應(yīng)該在該判定所在模塊的管理之下。作用范圍和控制范圍的4種情況:
作用范圍不在控制
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學(xué)檔案數(shù)字化管理制度
- 婦女更年期安全管理制度
- 化工廠培訓(xùn)考核管理制度
- 智能制造設(shè)備管理制度
- 降壓藥的原理講課件
- 公司員工花名冊管理制度
- 【課件】光合作用與能量轉(zhuǎn)化第一課時課件高一上學(xué)期生物人教版(2019)必修1
- 專題-漢譯英-整句(含答案)六年級英語下學(xué)期小升初高頻考點培優(yōu)(內(nèi)蒙古專版)
- 急性重癥胰腺炎的治療講課件
- 呼吸困難病人治療指南講課件
- 2024年婦幼健康“三基”培訓(xùn)考試復(fù)習(xí)題庫-下(多選、判斷題)
- 子癇的搶救和護理
- 中職英語新課標(biāo)詞匯表
- 2024秋期國家開放大學(xué)《國際法》一平臺在線形考(形考任務(wù)1至5)試題及答案
- 中華文明的起源與早期國家課件
- Unit 8 I come from China. (教學(xué)設(shè)計)-2023-2024學(xué)年湘少版(三起)英語四年級下冊
- 2024年浙江高考英語考綱詞匯表
- 化工過程安全管理導(dǎo)則培訓(xùn)
- 古代文論-楊寧老師-筆記
- 2024年西藏事業(yè)單位真題
評論
0/150
提交評論