




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