軟件工程導論第五版.ppt_第1頁
軟件工程導論第五版.ppt_第2頁
軟件工程導論第五版.ppt_第3頁
軟件工程導論第五版.ppt_第4頁
軟件工程導論第五版.ppt_第5頁
已閱讀5頁,還剩700頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

軟件工程,( Software Engineering ),信息學院,第1章:軟件工程學概述,1.1 軟件危機 60年代中期以前:通用硬件相當普遍,軟件卻是為某個具體的應(yīng)用而編寫的。 60年代中到70年代中:軟件作坊。,軟件危機:計算機軟件的開發(fā)和維護過程中所遇到的一系列嚴重問題。(正常、不正常運行軟件都具有這種問題),1.1.1 軟件危機的介紹,1)對軟件開發(fā)成本和進度的估計常常很不準確; 2)用戶對完成的軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生; 3)軟件產(chǎn)品的質(zhì)量往往靠不??;,軟件危機的典型表現(xiàn):,4)軟件常常是不可維護的; 5)軟件通常沒有適當?shù)奈臋n資料; 6)軟件成本在計算機系統(tǒng)總成本中所占的比例逐年上升; 7)軟件開發(fā)生產(chǎn)率提高的速度跟不上計算機應(yīng)用的發(fā)展趨勢。,1.1.2 產(chǎn)生軟件危機的原因,1)軟件本身特點造成; 2)軟件開發(fā)與維護的方法不正確。,主要表現(xiàn): (a)忽視軟件需求分析; (b)認為軟件開發(fā)就是寫程序并使之運行; (c)輕視軟件維護;,在軟件開發(fā)的不同階段進行修改需要付出的代價很不相同:,1)推廣使用在實踐中總結(jié)出來的開發(fā)軟件的成功技術(shù)和方法,并研究探索更有效的技術(shù)和方法; 2)開發(fā)和使用更好的軟件工具; 3)良好的組織管理措施。,1.1.3 解決軟件危機的途徑,為了解決軟件危機產(chǎn)生的問題,軟件工程與方法學逐漸形成,然后出現(xiàn)了兩個相互相承又各有側(cè)重的學科: 1)軟件工程學:主要應(yīng)用工程的方法和技術(shù)研究軟件開發(fā)與維護的方法、工具和管理的一門交叉學科。 2)程序設(shè)計方法學:主要應(yīng)用數(shù)學的方法研究程序的性質(zhì)以及程序設(shè)計的理論和方法的學科。,1.2 軟件工程,1.2.1 軟件工程的介紹,1968年NATO會議:軟件工程就是為了經(jīng)濟地獲得可靠的且能在實際機器上有效地運行的軟件,而建立和使用完善的工程原理。,1993年IEEE:軟件工程是(1)把系統(tǒng)的、規(guī)范的、可度量的途徑應(yīng)用于軟件開發(fā)、運行和維護過程;(2)研究(1)中提到的途徑。,1. 軟件工程關(guān)注于大型程序的構(gòu)造; 2. 軟件工程的中心課題是控制復雜性; 3. 軟件經(jīng)常變化; 4. 開發(fā)軟件的效率非常重要; 5. 和諧地合作是軟件開發(fā)的關(guān)鍵; 6. 軟件必須有效地支持它的用戶; 7. 在軟件工程領(lǐng)域中是由具有一種文化背景的人替具有另一種文化背景的人創(chuàng)造產(chǎn)品。,軟件工程的本質(zhì)特性:,1.2.2 軟件工程的基本原理,1. 用分階段的生命周期計劃嚴格管理; 2. 堅持進行階段評審; 3. 實行嚴格的產(chǎn)品控制; 4. 采用現(xiàn)代程序設(shè)計技術(shù); 5. 結(jié)果能清楚地審查; 6. 開發(fā)小組的人員應(yīng)該少而精; 7. 承認不斷改進軟件工程實踐的必要性。,1.2.3 軟件工程方法學 通常把在軟件生命周期全過程中使用的一整套技術(shù)方法的集合稱為方法學(Methodology),也稱為范型(Paradigm)。 軟件工程方法學的3要素:方法、工具和過程,1. 傳統(tǒng)方法學 也稱為生命周期方法學或結(jié)構(gòu)化范型。 結(jié)構(gòu)化方法(Structure Method)有: 1)結(jié)構(gòu)化設(shè)計方法(SD); 2)結(jié)構(gòu)化分析方法(SA); 3)結(jié)構(gòu)化分析與設(shè)計技術(shù)(SADT) 4)JACKSON方法 5)WARNIER方法,2. 面向?qū)ο蠓椒▽W 把數(shù)據(jù)和對數(shù)據(jù)的操作緊密結(jié)合起來的方法,模擬人類認識世界解決問題的方法和過程。 面向?qū)ο蟮姆椒?=對象(屬性與服務(wù)的封裝) +分類 +繼承 +通過消息的通訊,1)適用于實時事物處理系統(tǒng)的有限狀態(tài)機方法(FSM); 2)適用于并發(fā)軟件系統(tǒng)的PETRI網(wǎng)方法; 3)以數(shù)學概念和理論為基礎(chǔ)的形式化方法,如 SDC公司的形式化開發(fā)方法FDM: (Formal Development Methodology) IBM公司的維也納開發(fā)方法VDM: (Vienna Development Method ),3. 其他開發(fā)方法,1.3 軟件生命周期,軟件生命周期: 指軟件從提出到最終被淘汰的這個存在期。,軟件生命周期組成: 1)軟件定義; A.問題定義 B.可行性研究 C.需求分析 2)軟件開發(fā); D.總體設(shè)計 E.詳細設(shè)計 F.編碼和單元測試 G.綜合測試 3)運行維護。,1.問題定義; 2.可行性研究; 3.需求分析; 4.總體設(shè)計(概要設(shè)計); 5.詳細設(shè)計; 6.編碼與單元測試; 7.綜合測試; 8.維護。,軟件生命周期各個階段:,1.4 軟件過程,軟件過程:為了獲得高質(zhì)量軟件所需要完成的一系列任務(wù)的框架,它規(guī)定了完成各項任務(wù)的工作步驟。 軟件過程(ISO9000):使用資源將輸入轉(zhuǎn)化為輸出的活動所構(gòu)成的系統(tǒng)。 輸入:如軟件需求 輸出:如軟件產(chǎn)品,1.4.1 瀑布模型,1. 階段間具有順序性和依賴性 2. 推遲實現(xiàn)的觀點 3. 質(zhì)量保證的觀點,優(yōu)點:采用規(guī)范的方法;嚴格規(guī)定每個階段提交的文檔;要求每個階段交出的產(chǎn)品必須經(jīng)過驗證。,1.4.2 快速原型模型 優(yōu)點:不帶反饋環(huán),基本上是線性順序進行。,1.4.3 增量模型,優(yōu)點:能較短時間內(nèi)提交可完成部分工作的產(chǎn)品;可以使用戶有充裕的時間學習和適應(yīng)新產(chǎn)品。,一種風險更大的增量模型:,1.4.4 螺旋模型 可把它看作在每個階段之前都增加風險分析的快速原型模型。,1.4.5 噴泉模型,典型的面向?qū)ο筌浖_發(fā)過程模型之一。,1.4.6 Rational 統(tǒng)一過程,1. RUP軟件開發(fā)經(jīng)驗 (1)迭代式開發(fā) (2)管理需求 (3)使用基于構(gòu)件的體系結(jié)構(gòu) (4)可視化建模 (5)貫穿于開發(fā)過程的軟件質(zhì)量驗證 (6)控制軟件變更,1.4.7 敏捷過程與極限編程,1.敏捷過程 具有高效、快速響應(yīng)變化的開發(fā)過程。 (1)個體和交互勝過過程和工具; (2)可以工作的軟件勝過面面俱到的文檔; (3)客戶合作勝過合同談判; (4)響應(yīng)變化勝過遵循計劃。 2.極限編程 敏捷過程中最著名的一種,指把好的開發(fā)實踐運用到極致,多應(yīng)用于軟件需求模糊的場合。,1.4.8 微軟過程,1.微軟過程準則 2.微軟軟件生命周期 (1)規(guī)劃階段 (2)設(shè)計階段 (3)開發(fā)階段 (4)穩(wěn)定階段 (5)發(fā)布階段 3.微軟過程模型,問題定義就是要確定為用戶建立什么樣的軟件系統(tǒng),軟件叫什么樣的名稱等等?!皢栴}”是指軟件最基本的問題,如: 軟件的總體目標什么? 有什么用途? 為那些用戶設(shè)計?,1.5 問題定義階段,問題定義報告的內(nèi)容包括: 1)軟件項目標題; 2)軟件目標; 3)軟件用戶對象; 4)軟件規(guī)模。,問題定義是軟件生命周期中時間最短的階段,一般都比較簡單,因此在實際開發(fā)中它是最容易被忽視的一個階段。 這一階段工作主要由系統(tǒng)分析員來完成,系統(tǒng)分析員要盡可能從較高的角度概括軟件所要做的工作,而不用寫明問題的實現(xiàn)細節(jié)。,第2章:可行性研究,可行性研究就是要回答“所定義的問題有可行的解決辦法嗎?”。 可行性研究的目的是:用最小的代價在盡可能短的時間內(nèi)確定問題是否有解,以及是否值得去解。,2.1 可行性研究的任務(wù),可行性研究所需的時間取決于工程的規(guī)模,所需要的成本要占工程總成本的5%10%。,可行性研究的內(nèi)容: 1)技術(shù)可行性 技術(shù)可行性要分析各種技術(shù)因素,例如: 使用現(xiàn)有的技術(shù)能否實現(xiàn)這個系統(tǒng)? 是否有勝任開發(fā)該項目的熟練技術(shù)人員? 能否按期得到開發(fā)該項目所需的軟件、硬件資源?,2)經(jīng)濟可行性 對經(jīng)濟合理性進行評價,所要考慮的問題是: 這個系統(tǒng)的經(jīng)濟效益能否超過它的開發(fā)成本? 這就需要對項目進行價格/利益分析,即“投入/產(chǎn)出”分析。 由于利益分析取決于軟件系統(tǒng)的特點,因此在軟件開發(fā)之前,很難對新系統(tǒng)產(chǎn)生的效益作出精確的定量描述,所以往往采用一些估算方法。,3)操作可行性 操作可行性評價系統(tǒng)運行后會引起的各方面變化,如:對組織機構(gòu)管理模式、用戶工作環(huán)境等產(chǎn)生的影響。,4)社會可行性 社會可行性主要討論法律方面和使用方面的可行性。 例如,被開發(fā)軟件的權(quán)利歸屬問題、軟件所使用的技術(shù)是否會造成侵權(quán)等問題。,2.2 可行性研究的步驟,1)復查系統(tǒng)規(guī)模和目標; 2)研究目前正在使用的系統(tǒng); 3)導出新系統(tǒng)的高層邏輯模型(數(shù)據(jù)流圖、數(shù)據(jù)字典); 4)重新定義問題;,5)導出和評價供選擇的解法(物理解決方案); 6)推薦行動方案; 7)草擬開發(fā)計劃; 8)書寫文檔提交審查。,2.2 可行性研究的步驟,2.3 系統(tǒng)流程圖 (描繪物理系統(tǒng)的工具),2.3.1 符號,2.3.2 例子,2.4 數(shù)據(jù)流圖(描繪數(shù)據(jù)在系統(tǒng)中流動的邏輯過程),2.4.1 符號,注意: “處理”可表示:單個程序、一系列程序、程序的一個模塊、人工處理過程等等; “數(shù)據(jù)存儲”可表示:一個文件、文件的一部分、數(shù)據(jù)庫記錄等等; 數(shù)據(jù)流圖忽略出錯處理、打開文件、關(guān)閉文件。,2.4.2 繪制數(shù)據(jù)流圖的例子,2.4.2 繪制數(shù)據(jù)流圖的例子,倉庫 管理員,采購員,定貨系統(tǒng),事務(wù),定貨報表,圖2.5 定貨系統(tǒng)的基本系統(tǒng)模型,2.4.2 繪制數(shù)據(jù)流圖的例子,庫存清單,倉庫 管理員,采購員,事務(wù),定貨報表,圖2.6 定貨系統(tǒng)的功能級數(shù)據(jù)流圖,定貨信息,定貨信息,組成該例子的數(shù)據(jù)流圖的元素,上述數(shù)據(jù)流圖所描述的功能夠詳細了嗎?,2.4.2 繪制數(shù)據(jù)流圖的例子,1)為數(shù)據(jù)流(或數(shù)據(jù)存儲)命名 A名字應(yīng)該代表整個數(shù)據(jù)流(或數(shù)據(jù)存儲)的內(nèi)容; B不要使用空洞的、缺乏具體含義的名字(如“數(shù)據(jù)”、“輸入”);,2.4.3 命名,C如果為某個數(shù)據(jù)流(或數(shù)據(jù)存儲)起名字時遇到困難,則很可能是因為對數(shù)據(jù)流圖的分解不恰當造成的,應(yīng)該試試重新分解數(shù)據(jù)流圖;,2)為處理命名 A通常先為數(shù)據(jù)流命名,然后再為與之相關(guān)聯(lián)的處理命名; B名字應(yīng)該反映整個處理的功能; C應(yīng)該盡量避免空洞籠統(tǒng)的動詞做名字,如“處理”、“加工”;,D通常用一個動詞命名,如果必須用兩個動詞才能描述整個處理的功能,則可能要把這個處理分解成兩個處理更恰當; E如果在為某個處理命名時遇到困難,則很可能是發(fā)現(xiàn)了分解不當?shù)那闆r,應(yīng)考慮重新分解。,通常,為“數(shù)據(jù)源點/終點”命名時,采用它們在問題域中習慣使用的名字(如“倉庫管理員”、“采購員”)。,1)利用它作為交流信息的工具; 2)作為軟件分析和設(shè)計的工具。,2.4.4 數(shù)據(jù)流圖的用途,2.4.4 數(shù)據(jù)流圖的用途,圖2.8 對應(yīng)的物理實現(xiàn)硬件方案,2.4.4 數(shù)據(jù)流圖的用途,圖2.9 對應(yīng)的物理實現(xiàn)硬件方案,數(shù)據(jù)字典:對數(shù)據(jù)流圖中包含的所有元素的定義的集合; 可行性研究階段,數(shù)據(jù)流圖與數(shù)據(jù)字典共同構(gòu)成系統(tǒng)的邏輯模型。,2.5 數(shù)據(jù)字典,2.5.1 數(shù)據(jù)字典的內(nèi)容 數(shù)據(jù)字典應(yīng)該對下列元素進行定義: 1)數(shù)據(jù)流; 2)數(shù)據(jù)元素(數(shù)據(jù)流分量); 3)數(shù)據(jù)存儲; 4)處理。,1)數(shù)據(jù)元素字典定義 其定義的基本內(nèi)容有: A數(shù)據(jù)元素編號、名稱及其含義; B數(shù)據(jù)類型和長度; C合理取值; D其他內(nèi)容,如它與其它數(shù)據(jù)的邏輯關(guān)系等。,2.5.2 定義數(shù)據(jù)的方法,數(shù)據(jù)元素字典定義實例:,2)數(shù)據(jù)流字典定義 其定義的基本內(nèi)容有: A數(shù)據(jù)流編號及名稱; B數(shù)據(jù)流來源; C數(shù)據(jù)流去處; D數(shù)據(jù)流的組成; E流通量; F峰值。,數(shù)據(jù)流字典定義實例:,3)數(shù)據(jù)存儲字典定義 其定義的基本內(nèi)容有: A數(shù)據(jù)存儲編號及名稱; B數(shù)據(jù)存儲的組成; C其它要求。,4)數(shù)據(jù)處理字典定義 其定義的基本內(nèi)容有: A數(shù)據(jù)處理編號及名稱; B簡單描述; C輸入/輸出; D功能描述; E有關(guān)數(shù)據(jù)存儲。,數(shù)據(jù)處理字典定義實例:,5)組成數(shù)據(jù)項的表示方法 = 表示“等價于”或“定義為” + 表示“與” 與 | 表示“或” 表示重復 ( ) 表示可選項 通訊錄=通訊地址 通訊地址=姓名+郵編+省|直轄市|自治區(qū)+市|縣+街道+門牌號+(電話),1. 作為分析階段的重要工具; 2. 數(shù)據(jù)元素的控制信息非常有用; 3. 有助于開發(fā)數(shù)據(jù)庫。,2.5.3 數(shù)據(jù)字典的用途,實現(xiàn)數(shù)據(jù)字典: 1)程序處理; 2)卡片式人工書寫;,2.5.4 數(shù)據(jù)字典的實現(xiàn),2.6 成本/效益分析,1)代碼行技術(shù) 軟件成本 = 每行代碼的平均成本估計的源代碼總行數(shù),2.6.1 成本估計,2)任務(wù)分解技術(shù) 軟件開發(fā)項目分解為若干個相對獨立的任務(wù),分別估計每個單獨任務(wù)的成本: 單獨任務(wù)成本 = 任務(wù)所需人力估計值每人每月平均工資; 軟件開發(fā)項目總成本估計 = 各個單獨任務(wù)成本估計值之和。,常用的辦法是按開發(fā)階段劃分任務(wù),典型環(huán)境下各個開發(fā)階段需要使用的人力百分比大致如下:,3)自動估計成本技術(shù) 采用自動估計成本的軟件工具估計。,1)Putnam 模型 1978年P(guān)utnam提出的,一種動態(tài)多變量模型:,軟件開發(fā)成本估算的經(jīng)驗模型:,Ck為技術(shù)狀態(tài)常數(shù),它反映“妨礙開發(fā)進展的限制”,取值因開發(fā)環(huán)境而異,見下表:,2)COCOMO模型(constructive cost model) 這是由TRW公司開發(fā),Boehm提出的結(jié)構(gòu)化成本估算模型,是一種精確的、易于使用的成本估算方法。 基本COCOMO模型估算工作量和進度的公式如下: 工 作 量: MM = r(KDSI)c (人月) 開發(fā)時間: TDKV = a(MM)b (月) DSI:源指令條數(shù),不包括注釋,1KDSI = 1000DSI MM:開發(fā)工作量(以人月計),1MM = 19 人日 = 152 人時 =1/12 人年 經(jīng)驗常數(shù) r, c, a, b 取決于項目的總體類型,COCOMO模型中,考慮開發(fā)環(huán)境,軟件開發(fā)項目的類型可以分為3種: 1)組織型(organic) 相對較小、較簡單的軟件項目。開發(fā)人員對開發(fā)目標理解比較充分,與軟件系統(tǒng)相關(guān)的工作經(jīng)驗豐富,對軟件的使用環(huán)境很熟悉,受硬件的約束較小,程序的規(guī)模不是很大(50000行),2)嵌入型(embedded) 要求在緊密聯(lián)系的硬件、軟件和操作的限制條件下運行,通常與某種復雜的硬件設(shè)備緊密結(jié)合在一起。對接口,數(shù)據(jù)結(jié)構(gòu),算法的要求高。軟件規(guī)模任意。 如大而復雜的事務(wù)處理系統(tǒng),大型/超大型操作系統(tǒng),航天用控制系統(tǒng),大型指揮系統(tǒng)等。,3)半獨立型(semidetached) 介于上述兩種軟件之間。規(guī)模和復雜度都屬于中等或更高。最大可達30萬行。,COCOMO模型按其詳細程度可以分為三級: 1)基本COCOMO模型 是一個靜態(tài)單變量模型,它用一個以已估算出來的原代碼行數(shù)(LOC)為自變量的經(jīng)驗函數(shù)計算軟件開發(fā)工作量。,基本COCOMO模型 通過統(tǒng)計63個歷史項目的歷史數(shù)據(jù),得到如下計算公式:,2)中級COCOMO模型 在基本COCOMO模型的基礎(chǔ)上,再用涉及產(chǎn)品、硬件、人員、項目等方面的影響因素調(diào)整工作量的估算。 3)詳細COCOMO模型 包括中級COCOMO模型的所有特性,但更進一步考慮了軟件工程中每一步驟(如分析、設(shè)計)的影響。,1)貨幣的時間價值 假設(shè)年利率為i,如果現(xiàn)在存入P元錢,則n年以后可以得到的錢數(shù)為: 反之,如果n年后能收入F元錢,那么這些錢現(xiàn)在的價值是:,2.6.2 成本/效益分析,例:修改一個已有的庫存管理系統(tǒng),估計需要5000元,系統(tǒng)修改后使用5年,每年可節(jié)省2500元。請進行成本/效益分析。,表1:將來的收入折算成現(xiàn)在值,2)投資回收期 第一、第二年回收:4225元 第三年用于回收投資要: ( 5000 - 4225 ) / 1779 = 0.44年 總的投資回收期 = 2.44年,3)純收入 9011.94 - 5000 = 4011.94 (元),4)投資回收率 其中:P是現(xiàn)在的投資額; Fi是第i年年底的效益(i=1,2,3,n); n是系統(tǒng)的使用壽命(一般假設(shè)n=5); j是投資回收率。 上述修改系統(tǒng)的工程的投資回收率是41%-42%,第2章小結(jié), 可行性分析報告 說明該軟件開發(fā)項目的實現(xiàn)在技術(shù)上、經(jīng)濟上和社會因素上的可行性,評述為了合理地達到開發(fā)目標可供選擇的各種可能實施方案,說明并論證所選定實施方案的理由。 項目開發(fā)計劃 為軟件項目實施方案制訂出具體計劃,應(yīng)該包括各部分工作的負責人員、開發(fā)的進度、開發(fā)經(jīng)費的預算、所需的硬件及軟件資源等。,第3章:需求分析,3.1.1 確定對系統(tǒng)的綜合要求 1功能需求 2性能需求 如:相應(yīng)時間(速度)、主存容量、磁盤容量、安全性、等。,3.1 需求分析的任務(wù),3. 可靠性和可用性需求 4. 出錯處理需求 系統(tǒng)發(fā)現(xiàn)錯誤時采取的行動,主要在系統(tǒng)關(guān)鍵部分設(shè)置。 5. 接口需求 用戶接口、硬件接口、軟件接口、通信接口、等。 6. 約束 精度、工具和語言、設(shè)計約束、硬件約束、標準,等。 7. 逆向需求 8. 將來可能提出的要求,3.1.3 導出系統(tǒng)的邏輯模型 包括完善的數(shù)據(jù)流圖、實體聯(lián)系圖、狀態(tài)轉(zhuǎn)換圖、數(shù)據(jù)字典、主要的處理算法(IPO圖)等。,3.1.2 分析系統(tǒng)的數(shù)據(jù)要求 通過建立數(shù)據(jù)模型來分析,如數(shù)據(jù)字典、層次方框圖、Warnier圖,并將數(shù)據(jù)結(jié)構(gòu)規(guī)范化。,3.1.4 修正系統(tǒng)開發(fā)計劃 修訂前期制定的開發(fā)進度計劃、等。,3.2 與用戶溝通獲取需求的方法,3.2.1 訪談,正式訪談:系統(tǒng)分析員提出事先準備好的問題。 非正式訪談:提出一些用戶可以自由回答的開放性問題,鼓勵被訪者說出自己的想法。 需要訪問大量人員時,利用調(diào)查表訪問較佳。,3.2.2 面向數(shù)據(jù)流自頂向下求精,借助數(shù)據(jù)流圖、數(shù)據(jù)字典、IPO圖等,細化、完善詳細的數(shù)據(jù)流圖,等到各處理環(huán)節(jié)對應(yīng)的功能。,例:,分析銷售趨勢,統(tǒng)計功能,3.2.3 簡易的應(yīng)用規(guī)格說明技術(shù),面向團隊的需求收集法: (用戶與開發(fā)者配合) 1)初步訪談; 2)開發(fā)者和用戶分別寫出“產(chǎn)品需求”; 3)開會討論,各自展示需求列表; 4)得出一致意見,為需求列表制定小型規(guī)格說明; 5)根據(jù)會議成果,起草完整的軟件需求規(guī)格說明。,3.2.4 快速建立軟件原型,快速建立能演示目標系統(tǒng)主要功能的程序。 (1)第四代技術(shù) (2)可重用的軟件構(gòu)件 (3)形式化規(guī)格說明和原型環(huán)境,3.3 分析建模與規(guī)格說明,3.3.1 分析建模 為了開發(fā)復雜的系統(tǒng),應(yīng)從不同角度(模型)抽象出目標系統(tǒng)的特性(數(shù)據(jù)模型、功能模型、行為模型)。 1)實體聯(lián)系圖:建立數(shù)據(jù)模型,描述數(shù)據(jù)對象及數(shù)據(jù)對象之間的關(guān)系; 2)數(shù)據(jù)流圖:建立功能模型的基礎(chǔ); 3)狀態(tài)轉(zhuǎn)換圖:描繪系統(tǒng)的狀態(tài)和狀態(tài)間轉(zhuǎn)換的方式。,3.3.2 軟件需求規(guī)格說明,3.4 實體聯(lián)系圖,數(shù)據(jù)對象可以是外部實體、事物、行為、事件、角色、單位、地點、結(jié)構(gòu)等。,3.4.1 數(shù)據(jù)對象,3.4.2 屬性 屬性定義了數(shù)據(jù)對象的性質(zhì)。,屬性,3.4.3 聯(lián)系 (1)一對一聯(lián)系(1:1) (2)一對多聯(lián)系(1:N) (3)多對多聯(lián)系(M:N) 在ER圖中,用菱形框表示聯(lián)系。,聯(lián)系,例子:,通常用范式定義消除數(shù)據(jù)冗余的程度。 1)第一范式 2)第二范式 3)第三范式,3.5 數(shù)據(jù)規(guī)范化,3.6 狀態(tài)轉(zhuǎn)換圖,3.6.1 狀態(tài) 狀態(tài)是任何可以被觀察到的系統(tǒng)行為模式,一個狀態(tài)代表系統(tǒng)的一種行為模式。 3.6.2 事件 事件是某個特定時刻發(fā)生的事情,它是引起系統(tǒng)做動作或狀態(tài)轉(zhuǎn)換的控制信息。,3.6.3 符號,3.6.4 例子,3.7 其他圖形工具,層次方框圖用樹形結(jié)構(gòu)的一系列多層次的矩形框描繪數(shù)據(jù)的層次結(jié)構(gòu)。,3.7.1 層次方框圖,Warnier圖也用樹形結(jié)構(gòu)描繪信息,但是這種圖形工具比層次方框圖提供了更豐富的描繪手段。,3.7.2 Warnier圖,IPO圖是輸入/處理/輸出圖。,3.7.3 IPO圖,3.8 驗證軟件需求,1)一致性 2)完整性 3)現(xiàn)實性 4)有效性,3.8.1 驗證軟件需求的正確性,1)驗證需求的一致性 2)驗證需求的現(xiàn)實性 3)驗證需求的完整性和有效性,3.8.2 驗證軟件需求的方法,用于需求分析的軟件應(yīng)該滿足下列要求: 1)必須有形式化的語法 2)使用這個軟件工具能夠?qū)С鲈敿毜奈臋n 3)必須提供分析規(guī)格說明書的不一致性和冗余性的手段 4)使用這個軟件工具后,應(yīng)該能夠改進通信狀況,3.8.3 用于需求分析的軟件工具,RSL(需求陳述語言):信息集ASSMPASCAL模擬程序 PSL/PSA(問題陳述語言/問題陳述分析程序)系統(tǒng),第3章小結(jié), 軟件需求說明書(軟件規(guī)格說明書) 對所開發(fā)軟件的功能、性能、用戶界面及運行環(huán)境等作出詳細的說明。 它是在用戶與開發(fā)人員雙方對軟件需求取得共同理解并達成協(xié)議的條件下編寫的,也是實施開發(fā)工作的基礎(chǔ)。該說明書應(yīng)給出數(shù)據(jù)邏輯和數(shù)據(jù)采集的各項要求,為生成和維護系統(tǒng)數(shù)據(jù)文件做好準備。,第4章:形式化說明技術(shù),1.非形式化方法:自然語言描述 2.半形式化方法:數(shù)據(jù)流圖或?qū)嶓w聯(lián)系圖 3.形式化方法:基于數(shù)學技術(shù)描述,4.1 概述,4.1.1 非形式化方法的缺點 自然語言書寫的系統(tǒng)規(guī)格說明書可能存在: 1)矛盾; 2)二義性; 如:“操作員標識由操作員姓名和密碼組成,密碼由6位數(shù)字構(gòu)成,當操作員登陸系統(tǒng)時它被存儲在注冊文件中?!?3)含糊性; 4)不完整性; 5)抽象層次混亂。,4.1.2 形式化方法的優(yōu)點 (1)數(shù)學是理想的建模工具,適合于表示系統(tǒng)狀態(tài)和描述系統(tǒng)需求; (2)用數(shù)學表達的需求可在不同開發(fā)階段平滑過渡。,4.1.3 應(yīng)用形式化方法的準則 (1)選擇合適的形式化方法; (2)需要形式化,但不能過渡形式化,不能放棄傳統(tǒng)的需求表達方法; (3)應(yīng)該有形式化方法的專家提供指導。,4.2 有窮狀態(tài)機法(FSM),4.2.1 概念,鎖的三個位置:1、2、3; 轉(zhuǎn)盤可向左(L)或右(R); 鎖密碼:1L、3R、2L,一個有窮狀態(tài)機包括5部分: 1)狀態(tài)集J:保險箱鎖定,A,B,保險箱解鎖,報警 2)輸入集K:1L,1R,2L,2R,3L,3R 3)轉(zhuǎn)換函數(shù)T,如表4.1 4)初始狀態(tài)S:保險箱鎖定 5)終態(tài)集F:保險箱解鎖,報警 更形式化的術(shù)語: 一個有窮狀態(tài)機可表示一個為5元組(J,K,T,S,F),狀態(tài)轉(zhuǎn)換形式: 當前狀態(tài)【菜單】事件【所選擇的項】下個狀態(tài) 加入謂詞集P,把系統(tǒng)擴展成一個6元組后: 當前狀態(tài)【菜單】事件【所選擇的項】謂詞下個狀態(tài),計算機系統(tǒng)中每個菜單驅(qū)動的用戶界面都是一個有窮狀態(tài)機的實現(xiàn)。,定義狀態(tài): (1)M(d,e,f):電梯e正沿d方向移動,即將到達第f層樓。 (2)S(d,e,f):電梯e停在f層樓,將朝d方向移動(未關(guān)門)。 (3)W(e,f):電梯e在f層等待(已關(guān)門)。 (4)DC(e,f):電梯e在樓層f關(guān)上門。 (5)ST(e,f):電梯e靠近f層時觸發(fā)傳感器,電梯控制器決定在當前樓層是否停下。 (6)RL:電梯按鈕或樓層按鈕被按下進入打開狀態(tài),4.2.2 例子:電梯的狀態(tài)轉(zhuǎn)換,電梯狀態(tài)轉(zhuǎn)換規(guī)則:S(U,e,f)+DC(e,f)=M(U,e,f+1); S(D,e,f)+DC(e,f)=M(D,e,f-1); S(N,e,f)+DC(e,f)=W(e,f),4.2.3 評價 有窮狀態(tài)機描述規(guī)格說明: 當前狀態(tài)事件謂詞=下個狀態(tài) 易于書寫、驗證、轉(zhuǎn)變成設(shè)計或程序代碼。,有窮狀態(tài)機方法比數(shù)據(jù)流圖技術(shù)更精確,一樣易于理解。但不能處理定時需求。,4.3 Petri網(wǎng),4.3.1 概念,Petri網(wǎng)包含4種元素: 1)一組位置P,上例 PP1,P2,P3,P4 2)一組轉(zhuǎn)換T,上例 Tt1,t2 3)輸入函數(shù)I,上例 I(t1)=P2,P4 I(t2)=P2 4)輸出函數(shù)O,上例O(t1)=P1 O(t2)=P3,P3 更形式化的Petri網(wǎng)結(jié)構(gòu),是一個4元組(P,T,I,O),權(quán)標向量(1,2,0,1),權(quán)標向量(2,1,0,0),權(quán)標向量(2,0,2,0),更形式化地: 標記 M:P0,1,2, Petri網(wǎng)成為一個5元組(P,T,I,O,M),對Petri網(wǎng)的一個重要擴充是加入禁止線:,4.3.2 例子 1. 電梯按鈕,EBf 電梯中樓層 f 的按鈕;Fg 樓層g;Ff 樓層 f。,2. 樓層按鈕,FBfu 第 f 樓層向上按鈕; FBfd 第 f 樓層向下按鈕;,小結(jié) 基于數(shù)學的形式化說明技術(shù),目前還沒有在軟件產(chǎn)業(yè)界廣泛應(yīng)用; 應(yīng)該把形式化方法與傳統(tǒng)方法有機結(jié)合。,第5章:總體設(shè)計,5.1 設(shè)計過程,1.設(shè)想供選擇的方案,2.選擇合理的方案 對每個合理的方案要提供: A系統(tǒng)流程圖 B組成系統(tǒng)的物理元素清單 C成本/效益分析 D實現(xiàn)這個系統(tǒng)的進度計劃,3.推薦最佳方案 4.功能分解 5.設(shè)計軟件結(jié)構(gòu) 6.數(shù)據(jù)庫設(shè)計 A模式設(shè)計 B子模式設(shè)計 C完整性和安全性設(shè)計 D優(yōu)化,7.制定測試計劃 8.書寫文檔 A系統(tǒng)說明 B用戶手冊 C測試計劃 D詳細的實現(xiàn)計劃 E數(shù)據(jù)庫設(shè)計結(jié)果 9.審查和復審,5.2 設(shè)計原理,如果一個大型程序僅由一個模塊組成,很難被人理解。 設(shè)函數(shù)C(x)定義問題x的復雜程度,函數(shù)E(x)定義解決問題x需要的工作量(時間)。對于兩個問題P1和P2,如果: C(P1)C(P2) 那么 E(P1)E(P2) 根據(jù)解決問題的經(jīng)驗,有一個規(guī)律是: C(P1+P2)C(P1)+C(P2) 于是有 E(P1+P2)E(P1)+E(P2),5.2.1 模塊化,5.2.2 抽象,5.2.3 逐步求精,模塊的獨立性很重要,因為: 1)有效的模塊化的軟件比較容易開發(fā)出來; 2)獨立的模塊比較容易測試和維護。,5.2.4 信息隱蔽和局部化,5.2.5 模塊獨立,一、耦合,耦合:指軟件結(jié)構(gòu)內(nèi)不同模塊彼此之間相互依賴(連接)的緊密程度。,模塊獨立程度可以由兩個定性標準度量:耦合與內(nèi)聚。,模塊的偶合分四類: 1)數(shù)據(jù)耦合 兩個模塊之間只是通過參數(shù)交換信息,而且交換的信息僅僅是數(shù)據(jù)。 數(shù)據(jù)耦合是最低程度的耦合。,2)控制耦合 兩個模塊之間所交換的信息包含控制信息。 控制耦合是中等程度的耦合。,圖中模塊A的內(nèi)部處理程序判斷是執(zhí)行C還是執(zhí)行D,要取決于模塊B傳來的信息狀態(tài)(Status)。,3)公用耦合 兩個或多個模塊通過一個公共區(qū)相互作用時的耦合。 公共區(qū)可以是:全程數(shù)據(jù)區(qū)、共享通信區(qū)、內(nèi)存公共覆蓋區(qū)、任何介質(zhì)上的文件、物理設(shè)備等。 軟件結(jié)構(gòu)中存在大量的公用耦合時會給診斷錯誤帶來困難。,圖中存在公用耦合,假設(shè)模塊A、C、E都存取全程數(shù)據(jù)區(qū)(如公用一個磁盤文件)中的一個數(shù)據(jù)項。 如果A模塊讀取該項數(shù)據(jù),然后調(diào)用C模塊對該項重新計算,并進行數(shù)據(jù)更新。,如果此時C模塊錯誤地更新了該項數(shù)據(jù),在往下的處理中模塊E讀該數(shù)據(jù)項時出現(xiàn)錯誤。 表面上看,問題由模塊E產(chǎn)生,實際上由模塊C引起。,4)內(nèi)容耦合 一個模塊與另一個模塊的內(nèi)容直接發(fā)生聯(lián)系。 內(nèi)容耦合對維護會帶來嚴重的困難。,程序中如果一個模塊直接把程序轉(zhuǎn)移到另一個模塊中,或一個模塊使用另一個模塊內(nèi)部的數(shù)據(jù),都會產(chǎn)生內(nèi)容耦合。內(nèi)容耦合是最高程度的耦合,應(yīng)該避免采用。,軟件設(shè)計應(yīng)追求盡可能松散耦合,避免強耦合,這樣模塊間的聯(lián)系就越小,模塊的獨立性就越強,對模塊的測試、維護就越容易。 因此建議:盡量使用數(shù)據(jù)耦合,少用控制耦合,限制公用耦合,完全不用內(nèi)容偶合。,二、內(nèi)聚,內(nèi)聚:一個模塊內(nèi)部各個元素彼此結(jié)合的緊密程度。 它是衡量一個模塊內(nèi)部組成部分間整體統(tǒng)一性的度量。 常見的內(nèi)聚有七類。,1)功能內(nèi)聚(Functional Cohesion) 如果一個模塊內(nèi)所有處理元素完成一個,而且僅完成一個功能,則稱為功能內(nèi)聚。 功能內(nèi)聚是最高程度的內(nèi)聚。但在軟件結(jié)構(gòu)中,并不是每個模塊都能設(shè)計成一個功能內(nèi)聚模塊。,2)順序內(nèi)聚(Sequential Cohesion) 如果一個模塊內(nèi)處理元素和同一個功能密切相關(guān),而且這些處理元素必須順序執(zhí)行,則稱為順序內(nèi)聚。,如圖,一個求一元二次方程根的模塊由三個處理元素組成,該模塊中存在順序內(nèi)聚。 通常,順序內(nèi)聚中一個處理元素的輸出是另一個處理元素的輸入。,3)通信內(nèi)聚(Communicational Cohesion) 如果一個模塊中所有處理元素都使用同一個輸入數(shù)據(jù)和(或)產(chǎn)生同一個輸出數(shù)據(jù),稱為通信內(nèi)聚。,如圖,模塊A的處理單元將根據(jù)同一個數(shù)據(jù)文件FILE的數(shù)據(jù)產(chǎn)生不同的表格,因此它存在通信內(nèi)聚。 通信內(nèi)聚有時也稱為數(shù)據(jù)內(nèi)聚。,4)過程內(nèi)聚(Procedural Cohesion) 如果一個模塊內(nèi)的處理元素是相關(guān)的,而且必須以特定的次序執(zhí)行,稱為過程內(nèi)聚。 過程內(nèi)聚與順序內(nèi)聚的區(qū)別是: 順序內(nèi)聚中是數(shù)據(jù)流從一個處理單元流到另一個處理單元,而過程內(nèi)聚是控制流從一個動作流向另一個動作。,5)時間內(nèi)聚(Temporal Cohesion) 如果一個模塊包含的任務(wù)必須在同一段時間內(nèi)執(zhí)行,稱為時間內(nèi)聚。也稱為瞬時內(nèi)聚。,例如,完成各種初始化工作的模塊,或者處理故障的模塊都存在時間內(nèi)聚。 如圖,在“緊急故障處理模塊”中,“關(guān)閉文件”、“報警”、“保留現(xiàn)場”等任務(wù)都必須無中斷地同時處理。,6)邏輯內(nèi)聚(Logical Cohesion) 如果模塊完成的任務(wù)在邏輯上屬于相同或相似的一類,稱為邏輯內(nèi)聚。,如圖,A、B、C模塊合并成ABC模塊之后,ABC模塊就是邏輯內(nèi)聚模塊。,對邏輯內(nèi)聚模塊的調(diào)用,常常需要有一個功能開關(guān),由上層調(diào)用模塊向它發(fā)出一個控制信號,在多個關(guān)聯(lián)性功能中選擇執(zhí)行某一個功能。 這種內(nèi)聚較差,增加了模塊之間的聯(lián)系,不易修改。,7)偶然內(nèi)聚(Coincidental Cohesion) 如果一個模塊由完成若干毫無關(guān)系的功能處理元素偶然組合在一起的,就叫偶然內(nèi)聚。,偶然內(nèi)聚是最差的一種內(nèi)聚。 常犯這種錯誤的一種情況是:有時在寫完程序后,發(fā)現(xiàn)一組語句在多處出現(xiàn),于是為了節(jié)省空間而將這些語句作為一個模塊設(shè)計,就出現(xiàn)偶然內(nèi)聚。,如圖,模塊A、B、C出現(xiàn)公共代碼段W,于是將W獨立成一個模塊,而W中這些語句并沒有任何聯(lián)系。 如果在測試中發(fā)現(xiàn)模塊A不需要做“X=Y+Z”,而應(yīng)該做“X=Y*Z”,此時對W的維護就很困難了。,軟件設(shè)計中應(yīng)該:力求做到高內(nèi)聚,盡量少用中內(nèi)聚,不用低內(nèi)聚。,5.3 啟發(fā)式規(guī)則,1. 改進軟件結(jié)構(gòu)提高模塊獨立性 2.模塊規(guī)模應(yīng)該適中,3. 深度、寬度、扇出和扇入都應(yīng)適當 深度:軟件結(jié)構(gòu)中控制的層數(shù); 寬度:軟件結(jié)構(gòu)內(nèi)同一個層次上的模塊總數(shù)的最大值; 扇出:一個模塊直接控制(調(diào)用)其它模塊的數(shù)目; 扇入:一個模塊被其它模塊調(diào)用的數(shù)目。,對扇出、扇入過大的改進:,4. 模塊的作用域應(yīng)該在控制域之內(nèi),作用域:受該模塊內(nèi)一個判定影響的所有模塊的集合。 控制域:模塊本身以及所有從屬于它的模塊的集合。,如:QUAD-ROOT(TBL,X) 求一元二次方程的根的模塊,其中TBL,X都為數(shù)組,分別代表方程的系數(shù)和方程的根。 應(yīng)該使接口更簡單,如: QUAD-ROOT(A,B,C,ROOT1,ROOT2) A、B、C是方程的系數(shù),ROOT1,ROOT2是方程的根。,5. 力爭降低模塊接口的復雜度,6.設(shè)計單入口、單出口的模塊,7.模塊功能應(yīng)該可以預測,5.4 圖形工具 5.4.1 層次圖和HIPO圖,HIPO圖是:“層次圖輸入/處理/輸出圖”,5.4.2 結(jié)構(gòu)圖,5.5 面向數(shù)據(jù)流的設(shè)計方法,面向數(shù)據(jù)流設(shè)計(Data Flow-Oriented Design,DFOD)是與數(shù)據(jù)流分析(DFA)對應(yīng)的結(jié)構(gòu)化軟件設(shè)計技術(shù)。 面向數(shù)據(jù)流的設(shè)計將得到以數(shù)據(jù)流圖為基礎(chǔ)的軟件模塊結(jié)構(gòu)圖。,數(shù)據(jù)流可以分為兩種類型: 1)變換型數(shù)據(jù)流 2)事務(wù)型數(shù)據(jù)流,5.5.1 變換流與事務(wù)流,一、變換流 具有較明確的輸入、變換(或稱主加工)和輸出界面的數(shù)據(jù)流圖稱為變換型數(shù)據(jù)流圖。 如圖所示,該變換中心可以理解為數(shù)據(jù)的加工和處理程序。,事務(wù)型數(shù)據(jù)流圖中存在一個事務(wù)中心(也就是數(shù)據(jù)處理、加工中心),它將輸入分離成若干個發(fā)散的數(shù)據(jù)流,形成許多活動路徑,并根據(jù)輸入值選擇其中一條路徑。,二、事務(wù)流,通常,一個實際系統(tǒng)的數(shù)據(jù)流圖是變換型和事務(wù)型兩種類型的混合體。 如圖所示,中間的子塊屬事務(wù)型數(shù)據(jù)流,如果把中間子塊視為一個處理整體的話,整個程序?qū)僮儞Q型程序。,面向數(shù)據(jù)流設(shè)計軟件結(jié)構(gòu)的基本步驟有七步: 1)復審并精化數(shù)據(jù)流圖; 2)確定數(shù)據(jù)處理流圖的類型; 3)確定變換中心或事務(wù)中心;,5.5.2 面向數(shù)據(jù)流設(shè)計的步驟,4)將數(shù)據(jù)流圖映射成軟件模塊結(jié)構(gòu)圖,設(shè)計出該數(shù)據(jù)流圖對應(yīng)的第一層模塊結(jié)構(gòu); 5)基于數(shù)據(jù)流圖逐步分解,設(shè)計下層模塊; 6)運用模塊設(shè)計和優(yōu)化準則優(yōu)化軟件結(jié)構(gòu); 7)描述模塊的接口。,變換設(shè)計就是從變換型數(shù)據(jù)流圖映射出軟件模塊結(jié)構(gòu)的過程,也稱以變換為中心的設(shè)計。,5.5.3 變換設(shè)計,變換設(shè)計的基本方法有兩步: 1)分解第一層模塊結(jié)構(gòu) 就是把整個變換分解成輸入控制模塊Ci、輸出控制模塊Co和變換中心控制模塊Ct,由主控模塊控制。,2)分別設(shè)計輸入、輸出和處理的下層模塊結(jié)構(gòu) 方法是: 從變換中心邊界向兩側(cè)移動,分別把輸入通路和輸出通路的每個處理映射成輸入控制模塊Ci和輸出控制模塊Co的下屬模塊。 變換中心的下層模塊,是把每個處理映射成變換中心控制模塊Ct的一個直接下屬模塊。,事務(wù)設(shè)計就是從事務(wù)型數(shù)據(jù)流圖映射出軟件模塊結(jié)構(gòu)的過程,也稱為以事務(wù)為中心的設(shè)計。,5.5.4 事務(wù)設(shè)計,事務(wù)設(shè)計的基本方法有兩步: 1)建立主控模塊、接收輸入類型分析模塊和事務(wù)調(diào)度模塊;,2)分別設(shè)計輸入類型分析模塊和調(diào)度模塊的下層模塊結(jié)構(gòu)。 方法是:將輸出的每條通路作為調(diào)度模塊的一個判斷分支,而輸入類型分析模塊的下層模塊與變換設(shè)計類似。,第5章小結(jié), 概要設(shè)計說明書 該說明書是概要實際階段的工作成果,它應(yīng)說明功能分配、模塊劃分、程序的總體結(jié)構(gòu)、輸入輸出以及接口設(shè)計、運行設(shè)計、數(shù)據(jù)結(jié)構(gòu)設(shè)計和出錯處理設(shè)計等,為詳細設(shè)計提供基礎(chǔ)。,第6章:詳細設(shè)計,目標:確定如何具體實現(xiàn)所要求的系統(tǒng)。 不是具體編寫程序,而是設(shè)計程序的“藍圖”。 詳細設(shè)計的結(jié)果決定最終程序代碼的質(zhì)量。,E.W.Dijkstra 最早提出結(jié)構(gòu)程序設(shè)計:程序質(zhì)量與程序中包含的Goto語句的數(shù)量成反比(1965)。 1966 ,Bohm, Jacopini ,證明了只用“順序”、“選擇”、“循環(huán)”控制結(jié)構(gòu)就能實現(xiàn)任何單入口單出口程序。,6.1 結(jié)構(gòu)程序設(shè)計,理論上,最基本的控制結(jié)構(gòu)只有兩種:順序、循環(huán)結(jié)構(gòu)(選擇結(jié)構(gòu)可由其兩者構(gòu)造)。 學界認識到,不是簡單去掉Goto語句的問題,而是要創(chuàng)立一種新的程序設(shè)計方法。 結(jié)構(gòu)化程序設(shè)計(IBM率先成功運用)。,結(jié)構(gòu)程序設(shè)計: 一種設(shè)計程序的技術(shù),它采用自頂向下逐步求精的設(shè)計方法和單入口單出口的控制結(jié)構(gòu)。,使用結(jié)構(gòu)程序設(shè)計技術(shù)的好處: 1)提高軟件開發(fā)工程的成功率和生產(chǎn)率; 2)系統(tǒng)有清晰的層次結(jié)構(gòu),容易閱讀理解; 3)單入口單出口的控制結(jié)構(gòu),容易診斷糾正; 4)模塊化可以使得軟件可以重用; 5)程序邏輯結(jié)構(gòu)清晰,有利于程序正確性證明。,經(jīng)典的結(jié)構(gòu)程序設(shè)計:只允許使用順序、IF_THEN_ELSE選擇和DO_WHILE循環(huán);,擴展的結(jié)構(gòu)程序設(shè)計:除了三種基本控制結(jié)構(gòu),還使用DO_CASE和DO_UNTIL循環(huán);,修正的結(jié)構(gòu)程序設(shè)計:除了三種基本控制結(jié)構(gòu)和兩種擴充結(jié)構(gòu),還使用BREAK等結(jié)構(gòu)。,流程圖通常由三種結(jié)點組成: 1)函數(shù)結(jié)點 如果一個結(jié)點有一個入口線和一個出口線,則稱為函數(shù)結(jié)點。,由于函數(shù)結(jié)點一般對應(yīng)于賦值語句,所以 F 也表示了這一個結(jié)點對應(yīng)的函數(shù)關(guān)系。,6.1.1 結(jié)構(gòu)化程序 6.1.1.1 控制結(jié)構(gòu),2)謂詞結(jié)點 如果一個結(jié)點有一個入口線和兩個出口線,而且它不改變程序的數(shù)據(jù)項的值,則稱為謂詞結(jié)點。,P是一個謂詞,根據(jù)P的邏輯值(T或F),結(jié)點有不同的出口。,3)匯點 如果一個結(jié)點有兩個或多個入口線和一個出口線,而且它不執(zhí)行任何運算,則稱為匯點 。,1)順序結(jié)構(gòu):相當于“A、B”,2. 三種基本控制結(jié)構(gòu),2)選擇結(jié)構(gòu) 相當于“If exp then A else B endif ”,3)循環(huán)結(jié)構(gòu):相當于“While exp do A”,1)多分支結(jié)構(gòu) 相當于“Case I of I=1:C1; I=2:C2; I=3:C3; ; I=n:Cn”,3. 擴充兩種控制結(jié)構(gòu),2)UNTIL循環(huán)結(jié)構(gòu) 相當于“Repeat A Until exp”,6.1.1.2 正規(guī)程序 定義1:一個流程圖程序如果滿足下面兩個條件,稱為正規(guī)程序: 1)具有一個入口線和一個出口線; 2)對每一個結(jié)點,都有一條從入口線到出口線的通路通過該結(jié)點。,由于正規(guī)程序有一個入口線和一個出口線,因而一個正規(guī)程序總可以抽象為一個函數(shù)結(jié)點。,定義2:如果一個正規(guī)程序的某個部分仍然是正規(guī)程序,那么稱它為該正規(guī)程序的正規(guī)子程序。,先給出一個概念:封閉結(jié)構(gòu) 定義3:流程圖中,兩個結(jié)點之間所有沒有重復結(jié)點的通路組成的結(jié)構(gòu)稱為封閉結(jié)構(gòu)。,6.1.1.3 基本程序,如圖:封閉結(jié)構(gòu)為 a - b1 - b2 - b3 ; c1 - c2 ; d1 - d2 - d3 ; e - f ,1)不包括多于一個結(jié)點的正規(guī)子程序,即它是一種不可再分解的正規(guī)程序;(程序自身不可視為正規(guī)子程序) 2)如果存在封閉結(jié)構(gòu),封閉結(jié)構(gòu)都是正規(guī)程序。,6.1.1.3 基本程序,定義4:一個正規(guī)程序,如果滿足以下兩個條件,則稱之為基本程序:,基本程序形式有多種,前面提到的三種基本控制結(jié)構(gòu)(順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu))和兩個擴充控制結(jié)構(gòu)(多分支結(jié)構(gòu)、UNTIL循環(huán)結(jié)構(gòu))都是基本程序。,定義5: 用以構(gòu)造程序的基本程序的集合稱為基集合。 如:順序,if-then-else,while do 順序,if-then-else,repeat-until 都是基集合。,定義6:如果一個基本程序的函數(shù)結(jié)點用另一個基本函數(shù)程序替換,產(chǎn)生的新的正規(guī)程序稱為復合程序。,循環(huán)結(jié)構(gòu)的A函數(shù)結(jié)點用另一循環(huán)結(jié)構(gòu)代替,即嵌套循環(huán),就產(chǎn)生了復合程序。,由于復合程序是由一些基本程序組成,因此,無論從總體上看或是從每個組成部分看,都滿足“一個入口,一個出口”的原則,這樣的程序就是通常說的好結(jié)構(gòu)程序,或者結(jié)構(gòu)化程序。,定義7:由基本程序的一個固定的基集合構(gòu)造出的復合程序,稱為結(jié)構(gòu)化程序。,結(jié)構(gòu)化定理:任一正規(guī)程序都可以函數(shù)等價于一個由基集合順序,If-else-then,While-do產(chǎn)生的結(jié)構(gòu)化程序。 實際上,只要能證明可以將任一正規(guī)程序轉(zhuǎn)換成等價的結(jié)構(gòu)化程序就可以證明這個結(jié)構(gòu)化定理。,6.1.2 結(jié)構(gòu)化定理,證明:(分三步進行結(jié)構(gòu)化程序的轉(zhuǎn)換) 步驟一:從程序入口處開始給程序的函數(shù)結(jié)點和謂詞結(jié)點編號:1,2,3,n,同時,將每個函數(shù)和謂詞結(jié)點的出口線用它后面的結(jié)點的號碼進行編號,如果出口線后面沒有結(jié)點,也就是說該結(jié)點的出口線與程序的出口線相連時,出口線編號為0。,步驟二:對原程序中每一個編號為i, 出口線編號為j的函數(shù)結(jié)點H,構(gòu)造一個新的序列程序Gi,如圖:,類似地,對于每個編號為i,出口線分別為j和k的謂詞結(jié)點,構(gòu)造一個新的選擇程序Gi,如圖:,步驟三:利用已經(jīng)得到的一些Gi程序(i=1,2,3,n),按下圖的形式構(gòu)造一個While-do循環(huán)。,圖中的循環(huán)體是一個對L從1到n的嵌套選擇(if-then-else)程序,轉(zhuǎn)換后的程序與原程序是等價的,是由基集合順序、選擇、循環(huán) 所復合成的結(jié)構(gòu)化程序。,這種方法并不是唯一的把程序轉(zhuǎn)變?yōu)榻Y(jié)構(gòu)化程序的方法,所得的程序也不一定是最好的。 它的目的是為了證明結(jié)構(gòu)化定理。,例1:把圖示的非結(jié)構(gòu)化程序轉(zhuǎn)換成結(jié)構(gòu)化程序(用結(jié)構(gòu)化定理證明過程提供的方法轉(zhuǎn)換),6.1.3 非結(jié)構(gòu)化程序到結(jié)構(gòu)化程序的轉(zhuǎn)換,1)進行結(jié)點及其出口線的編號;,2)將圖中的四個結(jié)點構(gòu)造新的程序G1、G2、G3、G4;,3)利用得到的G1、G2、G3、G4按介紹的方法構(gòu)造一個While-do循環(huán),最終結(jié)果如圖:,6.2 人機界面設(shè)計,6.2.1 設(shè)計問題 1. 系統(tǒng)響應(yīng)時間; 2. 用戶幫助; 3. 出錯信息處理; 4. 命令交互,6.2.2 設(shè)計過程 6.2.3 人機界面設(shè)計指南 1. 一般交互指南; 2. 信息顯示指南; 3. 數(shù)據(jù)輸入指南。,6.3 過程設(shè)計的工具,6.3.1 程序流程圖,程序流程圖:是一種描述程序的控制結(jié)構(gòu)流程和指令執(zhí)行情況的有向圖。 歷史悠久、使用廣泛、直觀描繪控制流程、便于初學者掌握。,ASP檢索程序流程圖:,2)程序流程圖中用箭頭代表控制流,因此程序員不受任何約束,可以完全不顧結(jié)構(gòu)程序設(shè)計的精神,隨意轉(zhuǎn)移控制。 3)程序流程圖不易表示數(shù)據(jù)結(jié)構(gòu)。,程序流程圖的缺點: 1)程序流程圖本質(zhì)上不是逐步求精的好工具,它誘使程序員過早地考慮程序的控制流程,而不去考慮程序的全局結(jié)構(gòu)。,6.3.2 盒圖(N-S圖),盒圖的特點有: 1)功能域明確,可以從盒圖上一眼就看出來; 2)不可能任意轉(zhuǎn)移控制; 3)很容易確定局部和全程數(shù)據(jù)的作用域; 4)很容易表現(xiàn)嵌套關(guān)系,也可以表示模塊的層次結(jié)構(gòu)。,盒圖例子,PAD(Problem Analysis Diagram)是問題分析圖。 日立公司發(fā)明和推廣(1973)。,6.3.3 PAD圖,例子:,PAD圖的優(yōu)點: 1)使用表示結(jié)構(gòu)化控制結(jié)構(gòu)的PAD符號所設(shè)計出來的程序必然是結(jié)構(gòu)化程序; 2)PAD圖所描繪的程序結(jié)構(gòu)十分清晰。 圖中最左面的豎線是程序的主線,即第一層結(jié)構(gòu)。隨著程序?qū)哟蔚脑黾?,PAD圖逐漸向右延伸,每增加一個層次,圖形向右擴展一條豎線。PAD圖中豎線的總條數(shù)就是程序的層次數(shù);,3)用PAD圖表現(xiàn)程序,通俗易懂,程序從圖中最左豎線上端的結(jié)點開始執(zhí)行,自上而下,從左向右順序執(zhí)行,遍歷所有結(jié)點;,4)容易將PAD圖轉(zhuǎn)換成高級語言源程序,這種轉(zhuǎn)換可以用軟件工具自動完成; 5)可用于表示程序邏輯,也可用于描繪數(shù)據(jù)結(jié)構(gòu); 6)PAD圖的符號支持自頂向下、逐步求精的方法。,判定表由四部分組成: 左上部列出所有條件 左下部是所有可能做的動作 右上部表示各種條件組合 右下部是和每種條件組合相對應(yīng)的動作,6.3.4 判定表,6.3.5 判定樹 判定樹是判定表的變種。,PDL也稱為偽碼。 如:if I0 then 執(zhí)行訂單數(shù)據(jù)輸入模塊 else 報告出錯信息 end if,6.3.6 過程設(shè)計語言(PDL),PDL的優(yōu)點: 1)可以作為注釋直接插在源程序中間; 2)可以使用普通的正文編輯程序或文字處理系統(tǒng)來完成PDL的書寫和編輯工作; 3)現(xiàn)在已經(jīng)有一些自動處理程序可以自動地把PDL生成程序代碼。,PDL的缺點:不如圖形工具形象直觀。,6.4 面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計方法,1)順序結(jié)構(gòu),6.4.1 Jackson圖,2)選擇結(jié)構(gòu),3)重復結(jié)構(gòu),6.4.2 改進的Jackson圖,Jackson方法的目標是: 得出對程序處理過程的詳細描述。,6.4.3 Jackson方法,Jackson結(jié)構(gòu)程序設(shè)計方法由五個步驟組成: 1)分析并確定輸入數(shù)據(jù)和輸出數(shù)據(jù)的邏輯結(jié)構(gòu),并用Jackson圖描繪這些數(shù)據(jù)結(jié)構(gòu); 2)找出輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中有對應(yīng)關(guān)系的數(shù)據(jù)單元;,3)用三條規(guī)則從描繪數(shù)據(jù)結(jié)構(gòu)的Jackson圖導出描繪程序結(jié)構(gòu)的Jackson圖: A為每對有對應(yīng)關(guān)系的數(shù)據(jù)單元,按照它們在數(shù)據(jù)結(jié)構(gòu)圖中的層次在程序結(jié)構(gòu)圖的相應(yīng)層次畫一個處理框;,B根據(jù)輸入數(shù)據(jù)結(jié)構(gòu)中剩余的每個數(shù)據(jù)單元所處的層次,在程序結(jié)構(gòu)圖的相應(yīng)層次分別為它們畫上對應(yīng)的處理框; C根據(jù)輸出數(shù)據(jù)結(jié)構(gòu)中剩余的每個數(shù)據(jù)單元所處的層次,在程序結(jié)構(gòu)圖的相應(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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論