版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第四章 軟件設計4.1 軟件設計的概述4.2 軟件設計的概念與原理4.3 軟件設計的原則4.4 結(jié)構(gòu)化設計的方法4.5 系統(tǒng)包裝4.6 軟件詳細設計概述4.7 軟件詳細設計表示法第1頁,共107頁。學習目標重點掌握軟件設計的工具和方法正確理解概要設計與詳細設計的任務和目標,靈活運用相關(guān)的工具和方法深刻理解軟件結(jié)構(gòu)設計的原則及詳細設計的規(guī)范化第2頁,共107頁。可將軟件生命周期分為定義、開發(fā)及維護三個階段??尚行匝芯砍醪巾椖坑媱澬枨蠓治龈乓O計詳細設計實現(xiàn)測試使用維護退役定義階段開發(fā)階段維護階段第3頁,共107頁。軟件設計的重要性1軟件開發(fā)階段的第一步,其基本任務是回答“如何做?”它是在對系統(tǒng)信
2、息、功能、行為和各種要求理解的基礎上構(gòu)建未來的系統(tǒng)。設計的決策影響軟件實現(xiàn)的成功與否。第4頁,共107頁。軟件設計的重要性2是軟件開發(fā)過程中用以保證質(zhì)量的關(guān)鍵步驟。是整個軟件工程和軟件維護的基礎。如果沒有設計,只能建立一個不穩(wěn)定的系統(tǒng)。第5頁,共107頁。軟件設計的重要性3軟件需求分析階段已經(jīng)完全清楚了軟件的 各種需求,較好地解決了要讓所開發(fā)的軟件“做什么”的問題,并已在軟件需求規(guī)格說明和數(shù)據(jù)要求規(guī)格說明中詳盡和充分的闡明了這些需求。下一步就要著手實現(xiàn)軟件的需求,即要解決“怎么做”的問題。 第6頁,共107頁。軟件設計的重要性4軟件設計是開發(fā)階段中重要的步驟,是軟件開發(fā)過程中用以保證質(zhì)量的關(guān)鍵
3、步驟。軟件設計提供了軟件的表示,使軟件的質(zhì)量評價成為可能。同時,軟件設計又是將用戶要求準確地轉(zhuǎn)化為最終的軟件產(chǎn)品的唯一途徑。第7頁,共107頁。軟件設計的重要性軟件設計是后續(xù)開發(fā)步驟幾軟件維護工作的基礎。如果沒有設計,只能建立一個不穩(wěn)定的系統(tǒng)。如圖所示,只要出現(xiàn)一些微小的變動,就會使得軟件受創(chuàng),而且難以測試。設計實現(xiàn)維護測試維護有設計測試沒有設計實現(xiàn)維護第8頁,共107頁。系統(tǒng)分析與需求分析的區(qū)別需求分析是一個項目的開端,也是項目建設的基石。是對用戶需求的定義,對軟件系統(tǒng)的描述。在以往建設失敗的項目中,80是由于需求分析的不明確而造成的。因此一個項目成功的關(guān)鍵因素之一,就是對需求分析的把握程度
4、。而項目的整體風險往往表現(xiàn)在需求分析不明確、業(yè)務流程不合理,用戶不習慣或不愿意去用承建方的軟件。作為第三方的監(jiān)理公司,必須提醒承建方、客戶方重視需求分析的重要性。系統(tǒng)分析的任務:將用戶的業(yè)務邏輯轉(zhuǎn)化為程序邏輯,計算時間和成本。根據(jù)開發(fā)人員的理論知識和實際的經(jīng)驗,人們會采用各種滿足實際情況的系統(tǒng)分析、開發(fā)方法、步驟以及文檔等等。一般情況下,在系統(tǒng)分析書中應該有以下內(nèi)容(視項目而定):1、系統(tǒng)需求說明說明系統(tǒng)是一個什么樣的系統(tǒng),用市場上現(xiàn)有的系統(tǒng)來類比, 用客戶(或是我們自己)需要一個什么樣的系統(tǒng)進行說明,力求完整。 第9頁,共107頁。2、 系統(tǒng)資源說明對系統(tǒng)所需要的軟件、硬件資源進行說明。描述
5、系統(tǒng)所需要的所有的成本(包括人員、時間、設備、系統(tǒng)、一次性投入資金、持續(xù)性投入資金這樣的所有資源)。 3、 系統(tǒng)可行性分析對系統(tǒng)的實施中的資源進行分析,說明投入的合理性和必然性,對其中的所有不可預見性的投入進行合理的量化說明,來說明系統(tǒng)的實施的可行性 。系統(tǒng)分析階段就是要全面了解系統(tǒng)的商業(yè)需求和處理要求并制作書面文件,詳細地定義信息系統(tǒng)的功能。這一階段的最根本的目的就是解決系統(tǒng)要做什么的問題- What to do?系統(tǒng)分析準備在進行詳細的系統(tǒng)開發(fā)前,開發(fā)人員必須先理解一些概念,包括方法、模型、工具和技術(shù)。第10頁,共107頁。1模型:是對問題做出的一種抽象,它由一組圖示符號和組織這些符號的規(guī)
6、則組成。建模是問題域中定義軟件解的一種方法。建模的目的主要是為了減少問題的復雜性。2. 工具 系統(tǒng)開發(fā)工具是一些幫助生成模型或其它組件的軟件。系統(tǒng)開發(fā)人員常用的是CASE工具,如Microsoft Visio 、 RationalRose等。用了CASE工具,開發(fā)軟件能更加規(guī)范,標準化,從而提高軟件開發(fā)的效率。3. 技術(shù)技術(shù)就是幫助分析員完成系統(tǒng)開發(fā)活動或任務的一組方法。有時一種技術(shù)適用于整個生命周期。常在開發(fā)過程中使用的技術(shù)有:項目管理技術(shù)、用戶面談技術(shù)、數(shù)據(jù)建模技術(shù)、結(jié)構(gòu)化分析技術(shù)、軟件測試技術(shù)、面向?qū)ο蠓治雠c設計技術(shù)等。4. 系統(tǒng)開發(fā)方法第11頁,共107頁。方法是一組完成系統(tǒng)開發(fā)生命周
7、期每一階段活動的技術(shù),它提供了完成每一步的詳細指導。常用的方法有結(jié)構(gòu)化方法和面向?qū)ο蠓椒?。本章主要以結(jié)構(gòu)化方法為例。20世紀70年代出現(xiàn)了結(jié)構(gòu)化的系統(tǒng)分析設計方法。結(jié)構(gòu)化系統(tǒng)分析(Structured Analysis ,簡稱SA),是一種簡單實用,使用很廣的方法。它往往是將一個復雜的系統(tǒng)分解、抽象成為多個簡單的子系統(tǒng);使用自頂向下逐層分解的方式,將一個復雜系統(tǒng)分解,抽象成為多個簡單的子系統(tǒng),如果某個子系統(tǒng)仍然復雜,將其進一步分解。第12頁,共107頁。目前作為針對“軟件危機”的最佳對策,面向?qū)ο螅∣O)技術(shù)已經(jīng)引起人們的普遍關(guān)注。而許多編程語言(C+、VB、VF、PB、Delphi等)也都推
8、出了支持面向?qū)ο蟮男掳姹尽?面向?qū)ο蠓椒ǖ幕舅枷胧牵瑥默F(xiàn)實世界客觀存在的事物出發(fā)來構(gòu)造軟件系統(tǒng),并在系統(tǒng)構(gòu)造中盡可能運用人類的自然思維方式。開發(fā)一個軟件是為了解決某些問題。面向方法強調(diào)直接以現(xiàn)實世界中的事物為中心來思考問題、認識問題,并根據(jù)這些事物的本質(zhì)特征,把它們抽象地表示為系統(tǒng)中的對象,作為系統(tǒng)的基本構(gòu)成單位。這可以使系統(tǒng)直接地映射問題域,保持問題域中事物及其相互關(guān)系的本來面貌。第13頁,共107頁。系統(tǒng)分析階段的任務主要解決了系統(tǒng)“做什么”的問題,系統(tǒng)設計階段要解決的任務則是系統(tǒng)“怎么做”的問題。 系統(tǒng)分析員審查可行性研究報告、軟件項目開發(fā)計劃、軟件需求規(guī)格說明書,提出候選的最佳推薦方
9、案,用系統(tǒng)流程圖(注意畫法,見前面),組成系統(tǒng)物理元素清單,將成本效益分析、系統(tǒng)的進度計劃,供專家審定,審定后即進入軟件設計階段。 軟件設計階段的主要任務是要實現(xiàn)邏輯模型(DFD和DD等)向物理模型轉(zhuǎn)換,即要解決“系統(tǒng)如何實現(xiàn)”問題,該階段又可畫分為概要設計和詳細設計兩個階段。第14頁,共107頁。1 軟件設計的概述概要設計:面向邏輯功能的設計詳細設計:面向物理的設計第15頁,共107頁。從工程管理的角度來看,軟件設計分兩步概要設計,將軟件需求轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)和軟件的系統(tǒng)結(jié)構(gòu),并建立接口。詳細設計,即過程設計。通過對結(jié)構(gòu)表示進行細化,得到軟件的數(shù)據(jù)結(jié)構(gòu)和算法。4.1 軟件設計的概述第16頁,共1
10、07頁。概要設計 概要設計又稱為總體設計或初步設計,它的基本目的就是回答“概括地說,系統(tǒng)應該如何實現(xiàn)?”這個問題。在總體設計階段,應劃分出組成系統(tǒng)的物理元素程序、文件、數(shù)據(jù)庫、人工過程和文檔等,并確定系統(tǒng)中每個程序由哪些模塊組成以及這些模塊相互間的關(guān)系。第17頁,共107頁。1.基本任務設計軟件系統(tǒng)結(jié)構(gòu):采用某種設計方法,將一個復雜的系統(tǒng)按功能劃分成模塊。確定每個模塊的功能。確定模塊之間的調(diào)用關(guān)系。確定模塊之間的接口,即模塊之間傳遞的信息。 評價模塊結(jié)構(gòu)的質(zhì)量.第18頁,共107頁。第19頁,共107頁。4.1.1 概要設計的基本任務與過程1 軟件結(jié)構(gòu)設計2 數(shù)據(jù)結(jié)構(gòu)的設計3 編寫概要設計文檔
11、4 評審第20頁,共107頁。1 軟件結(jié)構(gòu)設計采用某種設計方法,將一個復雜的系統(tǒng)按功能分成模塊確定每個模塊的功能確定模塊之間的層次(調(diào)用)關(guān)系確定模塊之間的聯(lián)結(jié)形式評價模塊結(jié)構(gòu)的質(zhì)量第21頁,共107頁。2 數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設計數(shù)據(jù)結(jié)構(gòu)設計 需求分析:確定數(shù)據(jù)結(jié)構(gòu)特性 概要設計:加以細化 詳細設計:規(guī)定具體的實現(xiàn)細節(jié)數(shù)據(jù)庫設計 概念設計 邏輯設計 物理設計第22頁,共107頁。3 編寫概要設計文檔 概要設計說明書數(shù)據(jù)庫設計說明用戶手冊修訂測試計劃第23頁,共107頁。4 評審任務判斷是否實現(xiàn)了需求中規(guī)定的功能、性能設計的方案是否可行第24頁,共107頁。4.1.2 概要設計文檔引言總體設計接口
12、設計運行設計系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設計系統(tǒng)出錯設計第25頁,共107頁。4.2 軟件設計的概念與原理第26頁,共107頁。4.2.1 模塊化1.定義所謂模塊,是指具有相對獨立性的,由數(shù)據(jù)說明、執(zhí)行語句等程序?qū)ο髽?gòu)成的集合。程序中的每個模塊都需要單獨命名,通過名字可實現(xiàn)對指定模塊的訪問。在高級語言中,模塊具體表現(xiàn)為函數(shù)、子程序、過程等。一個模塊具有輸入/輸出(接口)、功能、內(nèi)部數(shù)據(jù)和程序代碼四個特征。模塊化是指將整個程序劃分為若干個模塊,每個模塊用于實現(xiàn)一個特定的功能。劃分模塊對于解決大型復雜的問題是非常必要的,可以大大降低解決問題的難度。第27頁,共107頁。例如,我們設C(x)為問題x所對應的復雜度函
13、數(shù),E(x)為解決問題x所需要的工作量函數(shù)。對于兩個問題P1和P2,如果: C(P1) C(P2) 即問題P1的復雜度比P2高,則顯然有: E(P1) E(P2) 即解決問題P1比P2所需的工作量大。在人們解決問題的過程中,發(fā)現(xiàn)存在有另一個有趣的規(guī)律:C(P1+P2) C(P1)+C(P2)即解決由多個問題復合而成的大問題的復雜度大于單獨解決各個問題的復雜度之和。也就是說,對于一個復雜問題,將其分解成多個小問題分別解決比較容易。由此我們可以推出:E(P1+P2) E(P1)+E(P2)第28頁,共107頁。即將復雜問題分解成若干個小問題,各個擊破,所需要的工作量小于直接解決復雜問題所需的工作量
14、。模塊化可以降低解決問題的復雜度,從而降低軟件開發(fā)的工作量。模塊化不但可以降低軟件開發(fā)的難度,而且可以使程序結(jié)構(gòu)清晰,增加易讀性和易修改性。此外,模塊化還有利于提高代碼的可重用性及團隊合作開發(fā)大型軟件的可行性。第29頁,共107頁。模塊化和軟件成本的關(guān)系第30頁,共107頁。4.2.2 抽象抽象是人類在解決復雜問題過程中使用的思維工具,即抽出事物本質(zhì)的共同的特性而暫不考慮它的細節(jié)軟件系統(tǒng)進行模塊設計時,可有不同的抽象層次。在最高的抽象層次上,可以使用問題所處環(huán)境的語言概括地描述問題的解法。在較低的抽象層次上,則采用過程化的方法。結(jié)構(gòu)化程序中自頂向下、逐步求精的模塊劃分思想正是人類思維中運用抽象
15、方法解決復雜問題的體現(xiàn)。此外,在程序設計中運用抽象的方法還能夠提高代碼的可重用性。第31頁,共107頁。功能分解法面向數(shù)據(jù)的分解法面向事件的分解法有外向內(nèi)的分解法面向?qū)ο蟮姆纸夥ǖ?2頁,共107頁。對于復雜的問題,經(jīng)過抽象、概括,可以把握主要問題,暫時忽略事務的細微差別不同的抽象層次,對問題的概括成都不同,使用的專業(yè)程序也不一樣軟件工程中階段性的工作成果及方法,是對抽象的思想的具體應用,是逐步趨于具體化,逐步求精的過程。第33頁,共107頁。4.2.3 信息隱蔽信息隱蔽:在設計和確定模塊時,使得一個模塊包含的信息對于不需要這些信息的其它模塊來說是不能訪問的也就是說,模塊中所包含的信息(包括數(shù)
16、據(jù)和過程)不允許其它不需要這些信息的模塊使用。信息隱蔽的目的主要是為了提高模塊的獨立性,減少將一個模塊中的錯誤擴散到其他模塊的機會。第34頁,共107頁。4.2.4 模塊的獨立性模塊獨立性, 是指軟件系統(tǒng)中每個模塊只涉及軟件要求的具體的子功能, 而和軟件系統(tǒng)中其它的模塊的聯(lián)系最小且接口是簡單的一般采用兩個準則度量模塊獨立性。即模塊間耦合和模塊內(nèi)聚第35頁,共107頁。 耦合是模塊之間的互相連接的緊密程度的度量。 內(nèi)聚是模塊功能強度(一個模塊內(nèi)部各個元素彼此結(jié)合的緊密程度)的度量。 模塊獨立性比較強的模塊應是高內(nèi)聚低耦合的模塊。第36頁,共107頁。非直接 數(shù)據(jù) 標記 控制 外部 公共 內(nèi)容 耦
17、合 耦合 耦合 耦合 耦合 耦合 耦合耦合性模塊獨立性模塊間的耦合第37頁,共107頁。非直接耦合(Nondirect Coupling) 兩個模塊之間沒有直接關(guān)系,它們之間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實現(xiàn)的。非直接耦合的模塊獨立性最強。第38頁,共107頁。數(shù)據(jù)耦合 (Data Coupling)一個模塊訪問另一個模塊時,彼此之間是通過簡單數(shù)據(jù)參數(shù) (不是控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量) 來傳遞交換輸入、輸出信息的(“傳值”)。main()int x,y; printf(x+y= %d,sum(x,y);/*主函數(shù)與sum函數(shù)之間即為數(shù)據(jù)耦合關(guān)系*/sum(int a,int b)
18、int c; c=a+b; return(c); 第39頁,共107頁。標記耦合 (Stamp Coupling)一組模塊通過數(shù)據(jù)結(jié)構(gòu)(標記)傳遞記錄信息,就是標記耦合。這個標記是某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是簡單變量 (“傳地址”) 。例如高級語言中的數(shù)組名,記錄名,文件名等即為標記,其實傳遞的標記的地址.第40頁,共107頁??刂岂詈?(Control Coupling) 如果一個模塊通過傳送開關(guān)、標志、名字等控制信息,明顯地控制選擇另一模塊的功能,就是控制耦合。標志變量第41頁,共107頁。外部耦合(External Coupling)一組模塊都訪問同一全局簡單變量而不是同一全局數(shù)據(jù)結(jié)構(gòu),
19、而且不是通過參數(shù)表傳遞該全局變量的信息,則稱之為外部耦合。公共耦合(Common Coupling)若一組模塊都訪問同一個公共數(shù)據(jù)環(huán)境,則它們之間的耦合就稱為公共耦合。公共的數(shù)據(jù)環(huán)境可以是全局數(shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)等。第42頁,共107頁。公共耦合的復雜程度隨耦合模塊的個數(shù)增加而顯著增加。若只是兩模塊間有公共數(shù)據(jù)環(huán)境,則公共耦合有兩種情況。松散公共耦合和緊密公共耦合。第43頁,共107頁。內(nèi)容耦合 (Content Coupling)如果發(fā)生下列情形,兩個模塊之間就發(fā)生了內(nèi)容耦合 (1) 一個模塊直接訪問另一個模塊的內(nèi)部數(shù)據(jù); (2) 一個模塊不通過正常入口轉(zhuǎn)到另一模塊內(nèi)部;
20、 (3) 兩個模塊有一部分程序代碼重迭(只可能出現(xiàn)在匯編語言中); (4) 一個模塊有多個入口。第44頁,共107頁。 c 總結(jié):數(shù)據(jù)耦合的程度最低,其次是控制耦合,再其次是公共耦合,程度最高的是內(nèi)容耦合。第45頁,共107頁。模塊內(nèi)聚內(nèi)聚性是對一個模塊內(nèi)部各個組成元素之間相互結(jié)合的緊密程度的度量指標。模塊中組成元素結(jié)合的越緊密,模塊的內(nèi)聚性就越高,模塊的獨立性也就越高。理想的內(nèi)聚性要求模塊的功能應明確、單一,即一個模塊只做一件事情。在進行模塊化設計時,耦合性和內(nèi)聚性都是必須考慮的重要指標。但經(jīng)實踐證明,保證模塊的高內(nèi)聚性比低耦合性更為重要,在軟件設計時應將更多的注意力集中在提高模塊的內(nèi)聚性上
21、。模塊的內(nèi)聚性主要可劃分為如上幾種不同的類型。巧合 邏輯 時間 過程 通信 信息 功能內(nèi)聚 內(nèi)聚 內(nèi)聚 內(nèi)聚 內(nèi)聚 內(nèi)聚 內(nèi)聚內(nèi)聚性模塊獨立性第46頁,共107頁。偶然內(nèi)聚(Coincidental Cohesion) 巧合內(nèi)聚 (偶然內(nèi)聚)。當模塊內(nèi)各部分之間沒有聯(lián)系,或者即使有聯(lián)系,這種聯(lián)系也很松散, 則稱這種模 塊為巧合內(nèi) 聚模塊,它 是內(nèi)聚程度 最低的模塊。第47頁,共107頁。邏輯內(nèi)聚(Logical Cohesion)這種模塊把幾種 相關(guān)的功能組合 在一起,每次被 調(diào)用時,由傳送 給模塊的判定參 數(shù)來確定該模塊 應執(zhí)行哪一種功 能。第48頁,共107頁。時間內(nèi)聚 (Classica
22、l Cohesion)時間內(nèi)聚又稱為經(jīng)典內(nèi)聚。這種模塊大多為多功能模塊,但模塊的各個功能的執(zhí)行與時間有關(guān),通常要求所有功能必須在同一時間段內(nèi)執(zhí)行。例如初始化模塊和終止模塊。第49頁,共107頁。過程內(nèi)聚 (Procedural Cohesion) 使用流程圖做為工具設計程序時,把流程圖中的某一部分劃出組成模塊,就得到過程內(nèi)聚模塊。例如,把流程圖中的循環(huán)部分、判定部分、計算部分分成三個模塊,這三個模塊都是過程內(nèi)聚模塊。第50頁,共107頁。通信內(nèi)聚 (Communication Cohesion)如果一個模塊內(nèi)所有處理元素都在同一個數(shù)據(jù)結(jié)構(gòu)上或各功能部分都使用了相同的輸入數(shù)據(jù),或產(chǎn)生了相同的輸出
23、數(shù)據(jù),則稱之為通信內(nèi)聚模塊。通常,通信內(nèi)聚模塊是通過數(shù)據(jù)流圖來定義的。第51頁,共107頁。第52頁,共107頁。順序內(nèi)聚 (Squence Cohesion)一個模塊內(nèi)的處理元素和同一個功能密切相關(guān),且必須順序執(zhí)行。第53頁,共107頁。功能內(nèi)聚:是最強的內(nèi)聚 (Functional Cohesion)一個模塊中各個部分都是完成某一具體功能必不可少的組成部分,或者說該模塊中所有部分都是為了完成一項具體功能而協(xié)同工作,不可分割的。則稱該模塊為功能內(nèi)聚模塊。第54頁,共107頁。4.3 軟件結(jié)構(gòu)設計原則(1)模塊的分解,盡量做到“高內(nèi)聚,低耦合”。分解是指把一個模塊分解成若干個從屬于它的下層模塊
24、。一般按功能分解,分解到成為一個小的功能單一的模塊為止。一般一個模塊內(nèi)包含的語句在30-50條左右較好(指高級語言)。第55頁,共107頁。(2)模塊的扇出和扇入模塊的扇出指一個模塊擁有的直屬下級模塊的個數(shù),一般扇出數(shù)控制在7以內(nèi)。模塊的扇入是指一個模塊的直接上級模塊的個數(shù)。在設計中,扇入系數(shù)大,說明模塊分解得好,通用性強,冗余度低。第56頁,共107頁。(3)模塊的控制范圍和判斷作用范圍模塊的控制范圍:本身及其所有下級模塊。模塊的判斷作用范圍:被判斷調(diào)用的模塊。原則:A.對于任何一個內(nèi)部存在判斷調(diào)用的模塊,它的判斷作用的范圍應該是其控制范圍的一個子集。B.存在判斷調(diào)用的模塊,所在層次不要與那
25、些屬于判斷作用范圍的模塊所在的層次相隔太遠。第57頁,共107頁。ABCDEFG模塊G中有一條判斷調(diào)用D的語句,違反第1條原則第58頁,共107頁。ABCDEFG違反第2條原則第59頁,共107頁。ABCDEFG違反第2條原則第60頁,共107頁。ABCDEFG正確第61頁,共107頁。(4)力爭降低模塊接口的復雜程度模塊接口復雜是軟件發(fā)生錯誤的一個主要原因。應該仔細設計模塊接口,使得信息傳遞簡單并且和模塊的功能一致。接口復雜或不一致(即看起來傳遞的數(shù)據(jù)之間沒有聯(lián)系),是緊聯(lián)結(jié)或低聚合的征兆,應該重新分析這個模塊的獨立性。(5)設計單入口單出口的模塊(6)模塊功能應該可以預測模塊的功能應該能夠
26、預測,但也要防止模塊功能過分局限。第62頁,共107頁。4 軟件系統(tǒng)設計技術(shù)層次圖和HIPO(=H層次圖+IPO輸入處理輸出圖)第63頁,共107頁。改進的IPO圖(表):IPO 表系統(tǒng):_ 作者:_模塊:_ 日期:_編號:_被調(diào)用:處理:調(diào)用:輸出:輸入:局部數(shù)據(jù)元素注釋:第64頁,共107頁。結(jié)構(gòu)圖:結(jié)構(gòu)化設計的主要思想是自頂向下地分解功能,以使分解后的功能可由系統(tǒng)的一個給定程序執(zhí)行。結(jié)構(gòu)圖可以將程序功能有層次地組織起來,其中的每一個程序都執(zhí)行一系列的功能。建立結(jié)構(gòu)圖的主要規(guī)則是:程序是分層的,模塊按高內(nèi)聚、低耦合的方式組織。(1) 結(jié)構(gòu)圖的主要內(nèi)容(如圖3.2.5) (2)圖3-10(書
27、P44)第65頁,共107頁。4.4 結(jié)構(gòu)化設計的方法結(jié)構(gòu)化設計方法是已結(jié)構(gòu)化分析產(chǎn)生的數(shù)據(jù)流圖為基礎,根據(jù)數(shù)據(jù)流圖的特征,按一定的策略映射出軟件的功能結(jié)構(gòu)圖的方法。第66頁,共107頁。4.4 結(jié)構(gòu)化設計的方法面向數(shù)據(jù)流的設計方法(即結(jié)構(gòu)化設計SD-與SA銜接) 以需求分析階段產(chǎn)生的DFD為基礎,把信息流映射成軟件結(jié)構(gòu),信息流的類型決定了映射的方法。信息流分為兩種類型:變換流和事務流。(一)概念1.變換流2.事務流3.設計過程第67頁,共107頁。1.變換流外部表示內(nèi)部表示信息輸入流輸出流變換流信息流時間參看圖形,信息沿輸入通路進入系統(tǒng),同時由外部形式變換成內(nèi)部形式,進入系統(tǒng)的信息通過變換中
28、心,經(jīng)過加工處理以后再沿輸出通路變換成外部形式離開軟件系統(tǒng)。當數(shù)據(jù)流具有這些特征時,這種信息流稱為變換流。第68頁,共107頁。2.事務流T事務事務中心數(shù)據(jù)沿輸入通路到達一個處理T,這個處理根據(jù)輸入數(shù)據(jù)的類型在若干個動作序列中選出一個來執(zhí)行。這種“以事務為中心的”的數(shù)據(jù)流,成為“事務流”。處理T稱為事務中心,完成以下任務:接收輸入數(shù)據(jù);分析每個事務以確定它的類型;根據(jù)事務類型選取一條活動通路。第69頁,共107頁。精化數(shù)據(jù)流程圖流類型區(qū)分事務中心和數(shù)據(jù)接收通路區(qū)分輸入和輸出分支映射成事務結(jié)構(gòu)映射成變換結(jié)構(gòu)運用模塊設計規(guī)則,精化軟件結(jié)構(gòu)導出接口描述和全程數(shù)據(jù)結(jié)構(gòu)復查詳細設計事務分析變換分析事務變
29、換面向數(shù)據(jù)流的設計過程第70頁,共107頁。(二)變換分析1.復查基本系統(tǒng)模型復查的目的是確保系統(tǒng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)符合實際。2.復查并精化數(shù)據(jù)流程圖3.確定數(shù)據(jù)流程圖具有變換特性還是事務特性只有當遇到有明顯事務特性的信息流時,才采用事務分析方法,否則,一般都認為是變換流,采用變換分析的方法。第71頁,共107頁。4.確定輸入流和輸出流的邊界,從而孤立出變換中心(1)檢查“輸入流”的邊界從輸入的數(shù)據(jù)源開始,沿著每一個由數(shù)據(jù)源傳入的數(shù)據(jù)流的移動方向進行跟蹤分析,逐個分析它所經(jīng)過的處理邏輯功能。如果僅是傳入的數(shù)據(jù)流作形式上的轉(zhuǎn)換,邏輯上沒有進行實際的數(shù)據(jù)處理功能,則這些處理邏輯屬于系統(tǒng)的“輸入處
30、理部分”。順著傳入的數(shù)據(jù)流的移動方向,一直跟蹤到它被真正地處理為止。第72頁,共107頁。(2)檢查“輸出流”的邊界從輸出結(jié)果的地方開始,逆著每一個傳遞出去的數(shù)據(jù)流,由外向里反方向跟蹤,逐個分析它的處理邏輯功能,一直反方向跟蹤到它被真正地產(chǎn)生出來為止。(3)得到變換中心根據(jù)前兩步的分析結(jié)果,畫出一個閉環(huán)界線,在界線以內(nèi)的就是變換中心。第73頁,共107頁。5.完成“第一級分解”CmCaCtCe第一級分解的方法第74頁,共107頁。控制模塊Cm是抽象出來的,它位于軟件結(jié)構(gòu)最頂層,協(xié)調(diào)控制下屬模塊。輸入信息處理控制模塊Ca,協(xié)調(diào)對所有輸入數(shù)據(jù)的接收。變換中心控制模塊Ct,管理對內(nèi)部形式的數(shù)據(jù)的所有
31、操作。輸出信息處理控制模塊Ce,協(xié)調(diào)輸出信息的產(chǎn)生過程。第75頁,共107頁。6.完成“第二級分解”所謂第二級分解就是把數(shù)據(jù)流程圖中的每個處理映射成軟件結(jié)構(gòu)中一個適當?shù)哪K。完成第二級分解的方法是,從變換中心的邊界開始沿著輸入通路向外移動,把輸入通路中每個處理邏輯映射成軟件結(jié)構(gòu)中Ca控制下的一個低層模塊;然后沿輸出通路向外移動,把輸入通路中每個處理邏輯映射成直接或間接受模塊Ce控制的一個低層模塊;最后把變換中心內(nèi)的每個處理映射成受Ct控制的一個模塊。第76頁,共107頁。ADCBCmCaCBDA第二級分解的方法第77頁,共107頁。7.使用模塊的設計原則,對第一次分割得到的軟件結(jié)構(gòu)進一步精化。
32、為了得到一個易于實現(xiàn)、易于測試和易于維護的軟件結(jié)構(gòu),根據(jù)軟件設計的基本原則和其它啟發(fā)性原則,對初步分割得到的模塊進行再分解或合并。第78頁,共107頁。(三)事務分析事務分析的設計步驟和變換分析的設計步驟大部分相同或類似,主要差別僅在由數(shù)據(jù)流程圖到軟件結(jié)構(gòu)的映射方法不同。由事務流映射成的軟件結(jié)構(gòu)包括一個接收分支和一個發(fā)送分支。映射出接收分支結(jié)構(gòu)的方法和變換分析映射出輸入結(jié)構(gòu)的方法相似,即從事務中心的邊界開始,把沿著接收流通路的處理邏輯映射成模塊。發(fā)送分支的結(jié)構(gòu)包含一個調(diào)度模塊,它控制下層的所有活動模塊;然后把數(shù)據(jù)流程圖中的每一個活動流通路映射成與它的特征相對應的結(jié)構(gòu)。第79頁,共107頁。總控
33、調(diào)度A_CTLB_CTLC_CTL接收通路C通路B通路A通路事務分析的映射方法第80頁,共107頁。(四)總結(jié)對于一個大系統(tǒng),常常把變換分析和事務分析應用到同一個數(shù)據(jù)流程圖的不同部分,由此得到的子結(jié)構(gòu)形成“構(gòu)件”,可以利用它們構(gòu)造完整的軟件結(jié)構(gòu)。一般說來,如果數(shù)據(jù)流不具有顯著的事務特點,最后使用變換分析;反之,如果具有明顯的事務中心,則應該采用事務分析技術(shù)。第81頁,共107頁。4.5 系統(tǒng)包裝將系統(tǒng)的功能按作業(yè)流程圖順序組織成若干個功能單元、部件,最后進行“實體化”組裝,實現(xiàn)一個可以運作的軟件系統(tǒng)第82頁,共107頁。4.5.1 把系統(tǒng)定義成若干個作業(yè)硬件分界線(反映系統(tǒng)的分布特性)處理方式
34、分界線(反映系統(tǒng)的交互特性)周期分界線第83頁,共107頁。4.5.2 把作業(yè)定義成若干個作業(yè)步利用現(xiàn)有的軟件包由于安全和保密的需要資源的限制等。第84頁,共107頁。4.5.3 定義程序和裝配單元第85頁,共107頁。4.6 軟件詳細設計概述 詳細設計(又稱過程設計)是對概要設計階段建立的模型(即每個組成模塊)再進行詳細定義和說明。包括定義每一模塊的詳細功能、輸入數(shù)據(jù)、使用文件及使用方式,確定輸出內(nèi)容及格式,模塊實現(xiàn)的詳細算法,每一模塊的程序構(gòu)成等。 詳細設計的任務具體主要有如下五點。 (1) 確定每個模塊的具體算法。 (2) 確定每個模塊的內(nèi)部數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫的物理結(jié)構(gòu)。 (3) 確定模塊
35、接口的具體細節(jié)。(即確定模塊接口的詳細信息,包括模塊之間的接口信息、模塊與系統(tǒng)外部的接口信息及用戶界面等。)第86頁,共107頁。(4) 為每個模塊設計一組測試用例。(5) 編寫文檔,參加復審。 詳細設計階段給出了程序的框架,它基本上決定了最終的程序代碼的質(zhì)量。結(jié)構(gòu)化程序設計就是保證程序的簡明易懂的重要技術(shù)。1結(jié)構(gòu)化程序設計 結(jié)構(gòu)化程序設計的基本思路,是把一個復雜的問題分階段進行,每個階段處理的問題都在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi),這也正是前面介紹的結(jié)構(gòu)化方法的主體思想。結(jié)構(gòu)程序設計是釆用“自頂向下,逐步細化”的設計方法和單入口單出口的控制結(jié)構(gòu)。結(jié)構(gòu)程序設計使用三種基本控制結(jié)構(gòu):順序、選擇、循環(huán)
36、。流程圖如下。第87頁,共107頁。這三種基本結(jié)構(gòu)就可以實現(xiàn)任何單入口單出口的程序。但為了使用方便,還允許有DO_UNTIL和DO_CASE兩種控制結(jié)構(gòu)。有時為了提前從循環(huán)中跳出,還允許有BREAK結(jié)構(gòu)。我們稱只允許使用三種基本結(jié)構(gòu)的為經(jīng)典的結(jié)構(gòu)化程序設計;除三種基本結(jié)構(gòu)外,還可用DO_UNTIL和DO_CASE的為擴展的結(jié)構(gòu)程序設計;若再加上BREAK則稱為修正的結(jié)構(gòu)程序設計。第88頁,共107頁。2. 詳細設計可采用的工具 1). (傳統(tǒng)的)程序流程圖 程序流程圖是最早出現(xiàn)且使用較為廣泛的算法表達工具之一,能夠有效地描述問題求解過程中的程序邏輯結(jié)構(gòu)。程序流程圖中經(jīng)常使用的基本符號如圖5.1
37、7所示。圖3.2.10 程序流程圖中的基本符號(a) 一般處理框;(b) 輸入/輸出框;(c) 判斷框;(d) 流程線;(e) 起止框第89頁,共107頁。 程序流程圖的主要優(yōu)點在于對程序的控制流程描述直觀、清晰,使用靈活,便于閱讀和掌握,因此在20世紀40年代末到70年代初被普遍采用。但隨著程序設計方法的發(fā)展,程序流程圖的許多缺點逐漸暴露出來, 這些缺點主要體現(xiàn)在以下方面: (1) 程序流程圖中可以隨心所欲地使用流程線,容易造成程序控制結(jié)構(gòu)的混亂,與結(jié)構(gòu)化程序設計的思想相違背。 (2) 程序流程圖難以描述逐步求精的過程,容易導致程序員過早考慮程序的控制流程,而忽略程序全局結(jié)構(gòu)的設計。 (3)
38、 程序流程圖難以表示系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)。 為此,人們寧可選擇其他一些更有利于結(jié)構(gòu)化設計的表達工具, NS圖和PAD圖就是其中的兩種圖形工具。第90頁,共107頁。 2). NS圖 NS圖又稱為盒圖,它是為了保證結(jié)構(gòu)化程序設計而由Nassi和Shneiderman共同提出的一種圖形工具。在NS圖中,所有的程序結(jié)構(gòu)均使用矩形框表示,它可以清晰地表達結(jié)構(gòu)中的嵌套及模塊的層次關(guān)系。NS圖中,基本控制結(jié)構(gòu)的表示符號如圖3.2.11所示。 由于NS圖中沒有流程線,不可能隨意轉(zhuǎn)移控制,因而表達出的程序結(jié)構(gòu)必然符合結(jié)構(gòu)化程序設計的思想,有利于培養(yǎng)軟件設計人員的良好設計風格。但當所描述的程序嵌套層次較多時,不僅影
39、響可讀性而且不易修改。第91頁,共107頁。圖3.2.11 NS圖中基本控制結(jié)構(gòu)的表示符號順序結(jié)構(gòu);(b) 分支結(jié)構(gòu);(c) 多分支CASE結(jié)構(gòu);(d) while-do結(jié)構(gòu);(e) do-until結(jié)構(gòu);(f) 調(diào)用模塊A第92頁,共107頁。 3). PAD圖 PAD(Problem Analysis Diagram,問題分析圖)是繼程序流程圖和NS圖后,由日立公司在20世紀70年代提出的又一種用于詳細設計的圖形表達工具。它只能用于結(jié)構(gòu)化程序的描述。PAD圖采用了易于使用的樹型結(jié)構(gòu)圖形符號,既利于清晰地表達程序結(jié)構(gòu),又利于修改。PAD圖中所經(jīng)常使用的基本符號如圖5.19所示。第93頁,共1
40、07頁。圖5.19 PAD中基本符號順序結(jié)構(gòu);(b) 分支結(jié)構(gòu);(c) 多分支CASE結(jié)構(gòu);(d) 當型循環(huán);(e);直到型循環(huán);(f) 對s的細化第94頁,共107頁。 PAD圖具有的主要優(yōu)點如下: (1) 使用PAD圖描述的程序結(jié)構(gòu)層次清晰,邏輯結(jié)構(gòu)關(guān)系直觀、易讀、易記、易修改。 (2) PAD圖為多種常用高級語言提供了相應的圖形符號, 每種控制語句都與一個專門的圖形符號相對應,易于PAD圖向高級語言源程序轉(zhuǎn)換。 (3) 支持自頂向下、逐步求精的設計過程。 (4) 既能夠描述程序的邏輯結(jié)構(gòu),又能夠描述系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)。第95頁,共107頁。圖5.20 三種詳細設計中使用的圖形工具示例采用程序流程圖描述計算應發(fā)工資模塊;(b) 采用NS圖描述計算應發(fā)工資模塊;(c) 采用PAD圖描述計算應發(fā)工資模塊第96頁,共107頁。第97頁,共107頁。 4). PDL語言 PDL (Process Design Language)語言即過程設計語言,是一種用于描述程序算法和定義數(shù)據(jù)結(jié)構(gòu)的偽代碼。PDL語言的構(gòu)成與用于描述加工的結(jié)構(gòu)化語言相似,是一種兼有自然語言和結(jié)構(gòu)化程序設計語言語法的“混合型”語言。PDL語言與結(jié)構(gòu)化語言的主要區(qū)別在于:由于PDL語言表達的算法是編碼的直接依據(jù),因此其語法結(jié)構(gòu)更加嚴格并且處理過程描述更加具體詳細。第98頁,共107頁。PDL語言的主要特點如下:(1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋼制門招標文件的簡明和易懂性
- 清潔合同物業(yè)保潔
- 池河鎮(zhèn)七年級歷史下冊 第三單元 明清時期:統(tǒng)一多民族國家的鞏固與發(fā)展 第20課 清朝君主專制的強化教案 新人教版
- 2024年九年級語文上冊 第四單元 詩詞誦讀《水調(diào)歌頭》教案 鄂教版
- 八年級英語上冊 Unit 5 My Future Lesson 26 What Will I Be教案 (新版)冀教版
- 2024年學年八年級道德與法治下冊 第二單元 理解權(quán)利義務教案 新人教版
- 江蘇省江陰市高中生物 第三章 細胞的基本結(jié)構(gòu) 3.1 細胞膜-系統(tǒng)的邊界教案 新人教版必修1
- 鉆孔機租賃合同(2篇)
- 租車退車合同(2篇)
- 蘇教版音樂課件
- 財務管理的數(shù)字化轉(zhuǎn)型
- 當前臺海局勢分析課件
- 基于云計算的醫(yī)療物聯(lián)網(wǎng)系統(tǒng)的設計與應用
- 周亞夫軍細柳(教師版)-十年(2013-2022)中考真題之課內(nèi)文言文(全國通用)
- 供水公司招聘抄表員試題
- 職業(yè)生涯規(guī)劃大賽成長賽道
- 浙江省9+1高中聯(lián)盟2022-2023學年高二上學期期中考試地理試題(解析版)
- 酒店裝修施工組織設計方案
- 固定資產(chǎn)處置方案
- 大數(shù)據(jù)對智能能源的應用
- 2024年腫瘤科工作計劃
評論
0/150
提交評論