總體設(shè)計(jì)
考題重點(diǎn)
設(shè)計(jì)過程
典型的總體設(shè)計(jì)步驟
?1.設(shè)想供選擇的方案
????????在總體設(shè)計(jì)階段分析員應(yīng)該考慮各種可能的實(shí)現(xiàn)方案,并且力求從中選出最佳方案。 需求分析階段得出的數(shù)據(jù)流圖是總體設(shè)計(jì)的極好的出發(fā)點(diǎn)。 設(shè)想供選擇的方案的一種常用的方法是,設(shè)想把數(shù)據(jù)流圖中的處理分組的各種可能的方法,拋棄在技術(shù)上行不通的分組方法(例如,組內(nèi)不同處理的執(zhí)行時(shí)間不相容),余下的分組方法代表可能的實(shí)現(xiàn)策略,并且可以啟示供選擇的物理系統(tǒng)
2.選取合理的方案
????????應(yīng)該從前一步得到的一系列供選擇的方案中選取若干個(gè)合理的方案,通常至少選取低成本、中等成本和高成本的3種方案。在判斷哪些方案合理時(shí)應(yīng)該考慮在問題定義和可行性研究階段確定的工程規(guī)模和目標(biāo),有時(shí)可能還需要進(jìn)一步征求用戶的意見。 對每個(gè)合理的方案,分析員都應(yīng)該準(zhǔn)備下列4份資料。 (1) 系統(tǒng)流程圖。 (2) 組成系統(tǒng)的物理元素清單。 (3) 成本/效益分析。 (4) 實(shí)現(xiàn)這個(gè)系統(tǒng)的進(jìn)度計(jì)劃
3.推薦最佳方案
????????用戶和有關(guān)的技術(shù)專家應(yīng)該認(rèn)真審查分析員所推薦的最佳系統(tǒng),如果該系統(tǒng)確實(shí)符合用戶的需要,并且是在現(xiàn)有條件下完全能夠?qū)崿F(xiàn)的,則應(yīng)該提請使用部門負(fù)責(zé)人進(jìn)一步審批。在使用部門的負(fù)責(zé)人也接受了分析員所推薦的方案之后,將進(jìn)入總體設(shè)計(jì)過程的下一個(gè)重要階段——結(jié)構(gòu)設(shè)計(jì)
4.功能分解
????????為了最終實(shí)現(xiàn)目標(biāo)系統(tǒng),必須設(shè)計(jì)出組成這個(gè)系統(tǒng)的所有程序和文件(或數(shù)據(jù)庫)。對程序(特別是復(fù)雜的大型程序)的設(shè)計(jì),通常分為兩個(gè)階段完成:首先進(jìn)行結(jié)構(gòu)設(shè)計(jì),然后進(jìn)行過程設(shè)計(jì)。 為確定軟件結(jié)構(gòu),首先需要從實(shí)現(xiàn)角度把復(fù)雜的功能進(jìn)一步分解。分析員結(jié)合算法描述仔細(xì)分析數(shù)據(jù)流圖中的每個(gè)處理,如果一個(gè)處理的功能過分復(fù)雜,必須把它的功能適當(dāng)?shù)胤纸獬梢幌盗斜容^簡單的功能
5. 設(shè)計(jì)軟件結(jié)構(gòu)
????????通常程序中的一個(gè)模塊完成一個(gè)適當(dāng)?shù)淖庸δ?。?yīng)該把模塊組織成良好的層次系統(tǒng),頂層模塊調(diào)用它的下層模塊以實(shí)現(xiàn)程序的完整功能,每個(gè)下層模塊再調(diào)用更下層的模塊,完成程序的一個(gè)子功能,最下層的模塊完成最具體的功能
6. 設(shè)計(jì)數(shù)據(jù)庫
????????對于需要使用數(shù)據(jù)庫的那些應(yīng)用系統(tǒng),軟件工程師應(yīng)該在需求分析階段所確定的系統(tǒng)數(shù)據(jù)需求的基礎(chǔ)上,進(jìn)一步設(shè)計(jì)數(shù)據(jù)庫
7. 制定測試計(jì)劃
????????在軟件開發(fā)的早期階段考慮測試問題,能促使軟件設(shè)計(jì)人員在設(shè)計(jì)時(shí)注意提高軟件的可測試性。第7章具體討論
8. 書寫文檔
????????應(yīng)該用正式的文檔記錄總體設(shè)計(jì)的結(jié)果,在這個(gè)階段應(yīng)該完成的文檔通常有下述幾種。 系統(tǒng)說明 用戶手冊 測試計(jì)劃包括測試策略,測試方案,預(yù)期的測試結(jié)果,測試進(jìn)度計(jì)劃等 詳細(xì)的實(shí)現(xiàn)計(jì)劃 數(shù)據(jù)庫設(shè)計(jì)結(jié)果
9.審查和復(fù)審
????????最后應(yīng)該對總體設(shè)計(jì)的結(jié)果進(jìn)行嚴(yán)格的技術(shù)審查,在技術(shù)審查通過之后再由客戶從管理角度進(jìn)行復(fù)審
設(shè)計(jì)原理
模塊化
????????模塊是由邊界元素限定的相鄰程序元素(例如,數(shù)據(jù)說明,可執(zhí)行的語句)的序列,而且有一個(gè)總體標(biāo)識符代表它。
????????模塊是構(gòu)成程序的基本構(gòu)件。
????????模塊化就是把程序劃分成獨(dú)立命名且可獨(dú)立訪問的模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊集成起來構(gòu)成一個(gè)整體,可以完成指定的功能滿足用戶的需求
抽象
????????人類在認(rèn)識復(fù)雜現(xiàn)象的過程中使用的最強(qiáng)有力的思維工具是抽象。人們在實(shí)踐中認(rèn)識到,在現(xiàn)實(shí)世界中一定事物、狀態(tài)或過程之間總存在著某些相似的方面(共性)。把這些相似的方面集中和概括起來,暫時(shí)忽略它們之間的差異,這就是抽象?;蛘哒f抽象就是抽出事物的本質(zhì)特性而暫時(shí)不考慮它們的細(xì)節(jié)。
????????軟件工程過程的每一步都是對軟件解法的抽象層次的一次精化。在可行性研究階段,軟件作為系統(tǒng)的一個(gè)完整部件;在需求分析期間,軟件解法是使用在問題環(huán)境內(nèi)熟悉的方式描述的;當(dāng)由總體設(shè)計(jì)向詳細(xì)設(shè)計(jì)過渡時(shí),抽象的程度也就隨之減少了;最后,當(dāng)源程序?qū)懗鰜硪院?,也就達(dá)到了抽象的最低層。?
逐步求精
????????逐步求精定義是為了能集中精力解決主要問題而盡量推遲對問題細(xì)節(jié)的考慮。
????????逐步求精最初是由Niklaus Wirth提出的一種自頂向下的設(shè)計(jì)策略。按照這種設(shè)計(jì)策略,程序的體系結(jié)構(gòu)是通過逐步精化處理過程的層次而設(shè)計(jì)出來的。通過逐步分解對功能的宏觀陳述而開發(fā)出層次結(jié)構(gòu),直至最終得出用程序設(shè)計(jì)語言表達(dá)的程序。
????????求精實(shí)際上是細(xì)化過程。
????????抽象與求精是一對互補(bǔ)的概念。
信息隱藏和局部化
????????信息隱藏原理:應(yīng)該這樣設(shè)計(jì)和確定模塊,使得一個(gè)模塊內(nèi)包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,是不能訪問的。 ? ? ? ?
????????局部化是指把一些關(guān)系密切的軟件元素物理地放得彼此靠近。 ? ? ? ?
????????如果在測試期間和以后的軟件維護(hù)期間需要修改軟件,使用信息隱藏原理作為模塊化系統(tǒng)設(shè)計(jì)的標(biāo)準(zhǔn)就會帶來極大好處。
模塊獨(dú)立
? ? ? ? 模塊獨(dú)立性:開發(fā)具有獨(dú)立功能而且和其他模塊之間沒有過多的相互作用的模塊,就可以做到模塊獨(dú)立
????????模塊的獨(dú)立性很重要,因?yàn)?.有效的模塊化(即具有獨(dú)立的模塊)的軟件比較容易開發(fā)出來。2.獨(dú)立的模塊比較容易測試和維護(hù)。
????????模塊的獨(dú)立程度可以由兩個(gè)定性標(biāo)準(zhǔn)度量,這兩個(gè)標(biāo)準(zhǔn)分別稱為內(nèi)聚和耦合。
耦合
????????耦合是對一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊之間互連程度的度量。耦合強(qiáng)弱取決于模塊間接口的復(fù)雜程度,進(jìn)入或訪問一個(gè)模塊的點(diǎn),以及通過接口的數(shù)據(jù)。 模塊耦合分為數(shù)據(jù)耦合、控制耦合、特征耦合、公共環(huán)境耦合和內(nèi)容耦合
????????數(shù)據(jù)耦合 兩個(gè)模塊彼此間通過參數(shù)交換信息,而且交換的信息僅僅是數(shù)據(jù),那么這種耦合稱為數(shù)據(jù)耦合。數(shù)據(jù)耦合是低耦合。系統(tǒng)中至少必須存在這種耦合。
????????控制耦合 傳遞的信息中有控制信息(盡管有時(shí)這種控制信息以數(shù)據(jù)的形式出現(xiàn)),則這種耦合稱為控制耦合。控制耦合是中等程度的耦合。
????????特征耦合 當(dāng)把整個(gè)數(shù)據(jù)結(jié)構(gòu)作為參數(shù)傳遞而被調(diào)用的模塊只需要使用其中一部分?jǐn)?shù)據(jù)元素時(shí),就出現(xiàn)了特征耦合。
????????公共環(huán)境耦合 當(dāng)兩個(gè)或多個(gè)模塊通過一個(gè)公共數(shù)據(jù)環(huán)境相互作用時(shí),它們之間的耦合稱為公共環(huán)境耦合。 公共環(huán)境可以是全程變量、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)、任何存儲介質(zhì)上的文件、物理設(shè)備等。 公共環(huán)境耦合的復(fù)雜程度隨耦合的模塊個(gè)數(shù)而變化,當(dāng)耦合的模塊個(gè)數(shù)增加時(shí)復(fù)雜程度顯著增加。
????????只有兩個(gè)模塊有公共環(huán)境,耦合有下面兩種可能。 (1) 一個(gè)模塊往公共環(huán)境送數(shù)據(jù),另一個(gè)模塊從公共環(huán)境取數(shù)據(jù)。這是數(shù)據(jù)耦合的一種形式,是比較松散的耦合。 (2) 兩個(gè)模塊都既往公共環(huán)境送數(shù)據(jù)又從里面取數(shù)據(jù),這種耦合比較緊密,介于數(shù)據(jù)耦合和控制耦合之間。
????????內(nèi)容耦合 最高程度的耦合是內(nèi)容耦合。如果出現(xiàn)下列情況之一,兩個(gè)模塊間就發(fā)生了內(nèi)容耦合。 一個(gè)模塊訪問另一個(gè)模塊的內(nèi)部數(shù)據(jù)。 ?一個(gè)模塊不通過正常入口而轉(zhuǎn)到另一個(gè)模塊的內(nèi)部。 ?兩個(gè)模塊有一部分程序代碼重疊(只可能出現(xiàn)在匯編程序中)。 ?一個(gè)模塊有多個(gè)入口(這意味著一個(gè)模塊有幾種功能)。 應(yīng)該堅(jiān)決避免使用內(nèi)容耦合。
????????應(yīng)該采取下述設(shè)計(jì)原則: 盡量使用數(shù)據(jù)耦合,少用控制耦合和特征耦合,限制公共環(huán)境耦合的范圍,完全不用內(nèi)容耦合。
內(nèi)聚
內(nèi)聚衡量一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度。
內(nèi)聚標(biāo)志著一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度,它是信息隱藏和局部化概念的自然擴(kuò)展。簡單地說,理想內(nèi)聚的模塊只做一件事情。 內(nèi)聚和耦合是密切相關(guān)的,模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合。 內(nèi)聚分為三大類低內(nèi)聚、中內(nèi)聚和高內(nèi)聚
低內(nèi)聚
????????一個(gè)模塊完成一組任務(wù),這些任務(wù)彼此間即使有關(guān)系,關(guān)系也是很松散的,就叫做偶然內(nèi)聚。 一個(gè)模塊完成的任務(wù)在邏輯上屬于相同或相似的一類,則稱為邏輯內(nèi)聚。 一個(gè)模塊包含的任務(wù)必須在同一段時(shí)間內(nèi)執(zhí)行,就叫時(shí)間內(nèi)聚。
中內(nèi)聚
????????一個(gè)模塊內(nèi)的處理元素是相關(guān)的,而且必須以特定次序執(zhí)行,則稱為過程內(nèi)聚。 模塊中所有元素都使用同一個(gè)輸入數(shù)據(jù)和(或)產(chǎn)生同一個(gè)輸出數(shù)據(jù),則稱為通信內(nèi)聚。
高內(nèi)聚
????????一個(gè)模塊內(nèi)的處理元素和同一個(gè)功能密切相關(guān),而且這些處理必須順序執(zhí)行(通常一個(gè)處理元素的輸出數(shù)據(jù)作為下一個(gè)處理元素的輸入數(shù)據(jù)),則稱為順序內(nèi)聚。 模塊內(nèi)所有處理元素屬于一個(gè)整體,完成一個(gè)單一的功能,則稱為功能內(nèi)聚。功能內(nèi)聚是最高程度的內(nèi)聚
啟發(fā)規(guī)則
1.改進(jìn)軟件結(jié)構(gòu)提高模塊獨(dú)立性 設(shè)計(jì)出軟件的初步結(jié)構(gòu)以后,應(yīng)該審查分析這個(gè)結(jié)構(gòu),通過模塊分解或合并,力求降低耦合提高內(nèi)聚。
2. 模塊規(guī)模應(yīng)該適中 一個(gè)模塊的規(guī)模不應(yīng)過大,最好能寫在一頁紙內(nèi)(通常不超過60行語句)
3.深度、寬度、扇出和扇入都應(yīng)適當(dāng)
????????深度:軟件結(jié)構(gòu)中控制的層數(shù)
????????寬度:軟件結(jié)構(gòu)內(nèi)同一個(gè)層次上的模塊總數(shù)的最大值
????????扇出:一個(gè)模塊直接控制(調(diào)用)的模塊數(shù)目
????????扇入:一個(gè)模塊被多少個(gè)上級模塊直接調(diào)用的數(shù)目
4.模塊的作用域應(yīng)該在控制域之內(nèi) 作用域:受該模塊內(nèi)一個(gè)判定影響的所有模塊的集合。 控制域:模塊本身以及所有直接或間接從屬于它的模塊的集合。
?
5.力爭降低模塊接口的復(fù)雜程度 模塊接口復(fù)雜是軟件發(fā)生錯(cuò)誤的一個(gè)主要原因。應(yīng)該仔細(xì)設(shè)計(jì)模塊接口,使得信息傳遞簡單并且和模塊的功能一致。
6.設(shè)計(jì)單入口單出口的模塊 這條啟發(fā)式規(guī)則警告軟件工程師不要使模塊間出現(xiàn)內(nèi)容耦合。當(dāng)從頂部進(jìn)入模塊并且從底部退出來時(shí),軟件是比較容易理解的,因此也是比較容易維護(hù)的。
7.模塊功能應(yīng)該可以預(yù)測 模塊的功能應(yīng)該能夠預(yù)測,但也要防止模塊功能過分局限。?
描繪軟件結(jié)構(gòu)的圖形工具
層次圖和HIPO圖
?
結(jié)構(gòu)圖?
常用的四個(gè)模塊
1.傳入模塊
從下屬模塊取得數(shù)據(jù),進(jìn)行某些處理,再將其結(jié)果傳給上級模塊。在此,將它傳送的數(shù)據(jù)流稱為邏輯輸入數(shù)據(jù)流
2.傳出模塊
從上級模塊獲得數(shù)據(jù),進(jìn)行某些處理,再將其結(jié)果傳給下屬模塊。在此,將它傳送的數(shù)據(jù)流稱為邏輯輸出數(shù)據(jù)流
3.變換模塊/加工模塊
它是從上級模塊獲得數(shù)據(jù),進(jìn)行特定的處理,將其轉(zhuǎn)換為其他形式,再傳回上級模塊它所加工的數(shù)據(jù)流叫做變換數(shù)據(jù)流
4.協(xié)調(diào)模塊
對所有下屬模塊進(jìn)行協(xié)調(diào)和管理的模塊。在一個(gè)好的軟件結(jié)構(gòu)圖中,協(xié)調(diào)模塊應(yīng)在較高層出現(xiàn)
面向數(shù)據(jù)流的設(shè)計(jì)方法?
????????面向數(shù)據(jù)流的設(shè)計(jì)方法把信息流映射成軟件結(jié)構(gòu),信息流的類型決定了映射的方法。信息流有下述兩種類型
變換流:信息沿輸入通路進(jìn)入系統(tǒng),由外部形式變換成內(nèi)部形式,進(jìn)入系統(tǒng)的信息通過變換中心, 經(jīng)加工處理以后再沿輸出通路變換成外部形式離開軟件系統(tǒng)。 當(dāng)數(shù)據(jù)流圖具有這些特征時(shí),這種信息流就叫作變換流
事務(wù)流:數(shù)據(jù)沿輸入通路到達(dá)一個(gè)處理T,這個(gè)處理根據(jù)輸入數(shù)據(jù)的類型在若干個(gè)動作序列中選出一個(gè)來執(zhí)行。這類數(shù)據(jù)流應(yīng)該劃為一類特殊的數(shù)據(jù)流,稱為事務(wù)流
圖中的處理T稱為事務(wù)中心, 它完成下述任務(wù)
1.接收輸入數(shù)據(jù)(輸入數(shù)據(jù)又稱為事務(wù))
2.分析每個(gè)事務(wù)以確定它的類型
3.根據(jù)事務(wù)類型選取一條活動通路
DFD轉(zhuǎn)軟件結(jié)構(gòu)圖
變換流
以CD為變換中心? ? ? ? ?箭頭尾部記得加圓圈
以D為變換中心
事務(wù)流
文章來源:http://www.zghlxwxcb.cn/news/detail-797873.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-797873.html
到了這里,關(guān)于軟件工程復(fù)習(xí)自用---第五章的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!