歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類(lèi) > PPT文檔下載  

北京交通大學(xué)軟件工程(完整ppt教程).ppt

  • 資源ID:5365544       資源大小:2.99MB        全文頁(yè)數(shù):705頁(yè)
  • 資源格式: PPT        下載積分:19.9積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要19.9積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類(lèi)文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

北京交通大學(xué)軟件工程(完整ppt教程).ppt

軟件工程 SoftwareEngineering 第1章 軟件工程學(xué)概述 1 1軟件危機(jī)60年代中期以前 通用硬件相當(dāng)普遍 軟件卻是為某個(gè)具體的應(yīng)用而編寫(xiě)的 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ā)就是寫(xiě)程序并使之運(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ù)的方法 工具和管理的一門(mén)交叉學(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)化方法 StructureMethod 有 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)的方法 模擬人類(lèi)認(rèn)識(shí)世界解決問(wèn)題的方法和過(guò)程 面向?qū)ο蟮姆椒?對(duì)象 屬性與服務(wù)的封裝 分類(lèi) 繼承 通過(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 FormalDevelopmentMethodology IBM公司的維也納開(kāi)發(fā)方法VDM ViennaDevelopmentMethod 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 6Rational統(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)分析員要盡可能從較高的角度概括軟件所要做的工作 而不用寫(xiě)明問(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ū)寫(xiě)文檔提交審查 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) 注意 處理 可表示 單個(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ù)類(lèi)型和長(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ū) 市 縣 街道 門(mén)牌號(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ū)寫(xiě) 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模型 constructivecostmodel 這是由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 1000DSIMM 開(kāi)發(fā)工作量 以人月計(jì) 1MM 19人日 152人時(shí) 1 12人年經(jīng)驗(yàn)常數(shù)r c a b取決于項(xiàng)目的總體類(lèi)型 COCOMO模型中 考慮開(kāi)發(fā)環(huán)境 軟件開(kāi)發(fā)項(xiàng)目的類(lèi)型可以分為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元錢(qián) 則n年以后可以得到的錢(qián)數(shù)為 反之 如果n年后能收入F元錢(qián) 那么這些錢(qián)現(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í)間 速度 主存容量 磁盤(pán)容量 安全性 等 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)的功能 例 分析銷(xiāo)售趨勢(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ā)者和用戶分別寫(xiě)出 產(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 2Warnier圖 IPO圖是輸入 處理 輸出圖 3 7 3IPO圖 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ǔ)言 信息集 ASSM PASCAL模擬程序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é)議的條件下編寫(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ū)寫(xiě)的系統(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)盤(pá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 14 初始狀態(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)門(mén) 3 W e f 電梯e在f層等待 已關(guān)門(mén) 4 DC e f 電梯e在樓層f關(guān)上門(mé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ū)寫(xiě) 驗(yàn)證 轉(zhuǎn)變成設(shè)計(jì)或程序代碼 有窮狀態(tài)機(jī)方法比數(shù)據(jù)流圖技術(shù)更精確 一樣易于理解 但不能處理定時(shí)需求 4 3Petri網(wǎng) 4 3 1概念 Petri網(wǎng)包含4種元素 1 一組位置P 上例P P1 P2 P3 P4 2 一組轉(zhuǎn)換T 上例T t1 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 P 0 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ū)寫(xiě)文檔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)聚 模塊的偶合分四類(lè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è)磁盤(pán)文件 中的一個(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)聚有七類(lèi) 1 功能內(nèi)聚 FunctionalCohesion 如果一個(gè)模塊內(nèi)所有處理元素完成一個(gè) 而且僅完成一個(gè)功能 則稱為功能內(nèi)聚 功能內(nèi)聚是最高程度的內(nèi)聚 但在軟件結(jié)構(gòu)中 并不是每個(gè)模塊都能設(shè)計(jì)成一個(gè)功能內(nèi)聚模塊 2 順序內(nèi)聚 SequentialCohesion 如果一個(gè)模塊內(nèi)處理元素和同一個(gè)功能密切相關(guān) 而且這些處理元素必須順序執(zhí)行 則稱為順序內(nèi)聚 如圖 一個(gè)求一元二次方程根的模塊由三個(gè)處理元素組成 該模塊中存在順序內(nèi)聚 通常 順序內(nèi)聚中一個(gè)處理元素的輸出是另一個(gè)處理元素的輸入 3 通信內(nèi)聚 CommunicationalCohesion 如果一個(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)聚 ProceduralCohesion 如果一個(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)聚 TemporalCohesion 如果一個(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)聚 LogicalCohesion 如果模塊完成的任務(wù)在邏輯上屬于相同或相似的一類(lèi) 稱為邏輯內(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)聚 CoincidentalCohesion 如果一個(gè)模塊由完成若干毫無(wú)關(guān)系的功能處理元素偶然組合在一起的 就叫偶然內(nèi)聚 偶然內(nèi)聚是最差的一種內(nèi)聚 常犯這種錯(cuò)誤的一種情況是 有時(shí)在寫(xiě)完程序后 發(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ì) DataFlow OrientedDesign 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ù)流可以分為兩種類(lèi)型 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ù)型兩種類(lèi)型的混合體 如圖所示 中間的子塊屬事務(wù)型數(shù)據(jù)流 如果把中間子塊視為一個(gè)處理整體的話 整個(gè)程序?qū)僮儞Q型程序 面向數(shù)據(jù)流設(shè)計(jì)軟件結(jié)構(gòu)的基本步驟有七步 1 復(fù)審并精化數(shù)據(jù)流圖 2 確定數(shù)據(jù)處理流圖的類(lèi)型 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 建立主控模塊 接收輸入類(lèi)型分析模塊和事務(wù)調(diào)度模塊 2 分別設(shè)計(jì)輸入類(lèi)型分析模塊和調(diào)度模塊的下層模塊結(jié)構(gòu) 方法是 將輸出的每條通路作為調(diào)度模塊的一個(gè)判斷分支 而輸入類(lèi)型分析模塊的下層模塊與變換設(shè)計(jì)類(lèi)似 第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) 不是具體編寫(xiě)程序 而是設(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)于 IfexpthenAelseBendif 3 循環(huán)結(jié)構(gòu) 相當(dāng)于 WhileexpdoA 1 多分支結(jié)構(gòu)相當(dāng)于 CaseIofI 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)于 RepeatAUntilexp 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 whiledo 順序 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 如圖 類(lèi)似地 對(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 ProblemAnalysisDiagram 是問(wèn)題分析圖 日立公司發(fā)明和推廣 1973 6 3 3PAD圖 例子 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也稱為偽碼 如 ifI 0then執(zhí)行訂單數(shù)據(jù)輸入模塊else報(bào)告出錯(cuò)信息endif 6 3 6過(guò)程設(shè)計(jì)語(yǔ)言 PDL PDL的優(yōu)點(diǎn) 1 可以作為注釋直接插在源程序中間 2 可以使用普通的正文編輯程序或文字處理系統(tǒng)來(lái)完成PDL的書(shū)寫(xiě)和編輯工作 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 1Jackson圖 2 選擇結(jié)構(gòu) 3 重復(fù)結(jié)構(gòu) 6 4 2改進(jìn)的Jackson圖 Jackson方法的目標(biāo)是 得出對(duì)程序處理過(guò)程的詳細(xì)描述 6 4 3Jackson方法 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 列出所有操作和條件 包括分支條件和循環(huán)結(jié)束條件 并且把它們分配到程序結(jié)構(gòu)圖的適當(dāng)位置 5 用偽碼表示程序 順序結(jié)構(gòu) AseqBCDAend 與三種基本結(jié)構(gòu)對(duì)應(yīng)的偽碼是 選擇結(jié)構(gòu)Aselectcond1BAorcond2CAorcond3DAend 重復(fù)結(jié)構(gòu)Aiteruntil 或while condBAend 例 一個(gè)正文文件由若干記錄組成 每個(gè)記錄是一個(gè)字符串 如 Record1 Howmanystagesarethereinthetraditionalsoftwaredevelopmentmodel Record2 Afterenteringtheroom walktothepersonsittingnearesttoyouandgreethim herwitha highfive Record3 Whatareencapsulatedintoanobject Record4 Whatdiagramisthefollowingdiagram Simplydescribethemeaningofit 要求 1 設(shè)計(jì)程序統(tǒng)計(jì)每個(gè)記錄中空格字符的個(gè)數(shù) 輸出數(shù)據(jù)的格式是 每讀入一個(gè)記錄 字符串 之后 另起一行打印出這個(gè)字符串及其空格數(shù) 2 最后打印出文件中空格的總個(gè)數(shù) 分析輸入 輸出數(shù)據(jù)結(jié)構(gòu) 用Jackson圖描繪 并找出兩者對(duì)應(yīng)的數(shù)據(jù)單元 導(dǎo)出描繪程序結(jié)構(gòu)的Jackson圖 1 停止 2 打開(kāi)文件 3 關(guān)閉文件 4 印出字符串 5 印出空格數(shù)目 6 印出空格總數(shù) 7 sum sum 1 8 totalsum totalsum sum 9 讀入字符串 10 sum 0 11 totalsum 0 12 pointer 1 13 pointer pointer 1I 1 文件結(jié)束I 2 字符串結(jié)束S 3 字符是空格 列出所有操作和條件 6 5程序復(fù)雜度的定量度量 定量度量程序復(fù)雜度的作用 1 可估算軟件中錯(cuò)誤的數(shù)量及軟件開(kāi)發(fā)工作量 2 度量的結(jié)果可用來(lái)比較不同設(shè)計(jì)或不同算法的優(yōu)劣 3 程序的復(fù)雜度可作為模塊規(guī)模的限度 1 流圖 退化 的程序流程圖 僅描繪程序的控制流程 不表現(xiàn)對(duì)數(shù)據(jù)的具體操作及循環(huán) 選擇的條件 6 5 1McCabe方法 一個(gè)圓代表一條或多條語(yǔ)句 一個(gè)順序結(jié)構(gòu)可以合并成一個(gè)結(jié)點(diǎn) 匯點(diǎn)也是結(jié)點(diǎn) 一個(gè)順序處理框序列和一個(gè)判斷框可映射成一個(gè)結(jié)點(diǎn) 復(fù)合條件 包含了一個(gè)或多個(gè)布爾運(yùn)算符 OR AND NOR等 應(yīng)把復(fù)合條件分解為簡(jiǎn)單條件 每個(gè)條件對(duì)應(yīng)一個(gè)結(jié)點(diǎn) 2 計(jì)算環(huán)形復(fù)雜度的方法1 環(huán)形復(fù)雜度V G 等于流圖中的區(qū)域數(shù) 2 環(huán)形復(fù)雜度V G E N 2 其中E是流圖中邊的條數(shù) N是結(jié)點(diǎn)數(shù) 3 環(huán)形復(fù)雜度V G P 1 其中P為流圖中判定結(jié)點(diǎn)的數(shù)目 例 計(jì)算下列程序圖的程序復(fù)雜度 解 方法一 程序圖把平面分為4個(gè)區(qū)域 程序復(fù)雜度V G 4 方法二 邊的條數(shù)E 11 結(jié)點(diǎn)數(shù)N 9 程序復(fù)雜度V G E N 2 4 方法三 判定結(jié)點(diǎn)為1 2 4點(diǎn) 數(shù)目為P 3個(gè) 所以V G P 1 4 3 環(huán)形復(fù)雜度的用途對(duì)測(cè)試難度的一種定量度量 也能對(duì)軟件最終的可靠性給出某種預(yù)測(cè) 實(shí)踐表明 模塊規(guī)模以V G 10為宜 根據(jù)程序中運(yùn)算符和操作數(shù)的總數(shù)來(lái)度量程序復(fù)雜度 N N1 N2其中 N定義為程序長(zhǎng)度 N1為程序中運(yùn)算符出現(xiàn)的總次數(shù) N2為操作數(shù)出現(xiàn)的總次數(shù) 6 5 2Halstead方法 Halstead給出預(yù)測(cè)程序長(zhǎng)度的公式為 H n1log2n1 n2log2n2其中 H定義為程序預(yù)測(cè)長(zhǎng)度 n1為程序中使用的不同運(yùn)算符 包括關(guān)鍵字 的個(gè)數(shù) n2為程序中使用的不同操作數(shù) 變量和常量 的個(gè)數(shù) 多次驗(yàn)證都表明 程序的預(yù)測(cè)長(zhǎng)度H和實(shí)際程序長(zhǎng)度N非常接近 Halstead還給出了預(yù)測(cè)程序中包含錯(cuò)誤的個(gè)數(shù)的公式 E Nlog2 n1 n2 3000 第6章小結(jié) 詳細(xì)設(shè)計(jì)說(shuō)明書(shū)著重描述每一模塊是怎樣實(shí)現(xiàn)的 包括實(shí)現(xiàn)算法 邏輯流程等 第7章 實(shí)現(xiàn) 編碼和測(cè)試統(tǒng)稱為實(shí)現(xiàn) 編碼 把軟件設(shè)計(jì)結(jié)果翻譯成程序 測(cè)試 檢測(cè)程序并改正錯(cuò)誤的過(guò)程 計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言基本上可以分為兩大類(lèi) 1 匯編語(yǔ)言 2 高級(jí)語(yǔ)言 7 1編碼 7 1 1選擇程序設(shè)計(jì)語(yǔ)言 從應(yīng)用特點(diǎn)看 高級(jí)語(yǔ)言可分為 1 基礎(chǔ)語(yǔ)言如BASIC FORTRAN COBOL ALGOL等2 結(jié)構(gòu)化語(yǔ)言如ALGOL PL 1 PASCAL C ADA等3 專用語(yǔ)言如APL BLISS FORTH LISP PROLOG等 選擇一種編程語(yǔ)言的理論標(biāo)準(zhǔn) 1 有理想的模塊化機(jī)制 2 可讀性好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu) 3 便于調(diào)試和提高軟件可靠性 4 編譯程序發(fā)現(xiàn)程序錯(cuò)誤的能力強(qiáng) 5 有良好的獨(dú)立編譯機(jī)制 選擇語(yǔ)言時(shí)除了考慮理論上的標(biāo)準(zhǔn) 還必須同時(shí)考慮主要的實(shí)用標(biāo)準(zhǔn) 1 系統(tǒng)用戶要求 2 可以使用的編譯程序 3 可以得到的軟件工具 4 工程規(guī)模 5 程序員知識(shí) 6 軟件可移植性要求 7 軟件的應(yīng)用領(lǐng)域 1 程序內(nèi)部的文檔選取含義鮮明的名字 如果使用縮寫(xiě) 縮寫(xiě)規(guī)則要一致 并給每個(gè)名字加注釋 通常在每個(gè)模塊開(kāi)始處要有一段注釋 描述模塊功能 算法 接口特點(diǎn)等 程序清單布局應(yīng)利用適當(dāng)?shù)碾A梯形式 使程序的層次結(jié)構(gòu)清晰明顯 7 1 2寫(xiě)程序的風(fēng)格 2 數(shù)據(jù)說(shuō)明數(shù)據(jù)說(shuō)明的次序應(yīng)該標(biāo)準(zhǔn)化 如按數(shù)據(jù)類(lèi)型確定說(shuō)明的次序 多個(gè)變量名在一個(gè)語(yǔ)句中說(shuō)明時(shí) 應(yīng)該按字母順序排列這些變量 如果設(shè)計(jì)時(shí)使用了復(fù)雜的數(shù)據(jù)結(jié)構(gòu) 應(yīng)該用注釋說(shuō)明實(shí)現(xiàn)該數(shù)據(jù)結(jié)構(gòu)的方法和特點(diǎn) 3 語(yǔ)句構(gòu)造4 輸入 輸出5 效率A 程序運(yùn)行時(shí)間B 存儲(chǔ)器效率C 輸入 輸出效率 程序設(shè)計(jì)工具實(shí)例 VisualC 運(yùn)用VisualC 開(kāi)發(fā)工具需要掌握 C 語(yǔ)言特點(diǎn) 語(yǔ)法 Windows編程基礎(chǔ) MFC相關(guān)知識(shí) VisualC 集成開(kāi)發(fā)工具環(huán)境的使用 一 C 語(yǔ)言特點(diǎn) 語(yǔ)法 C 語(yǔ)言是在C語(yǔ)言的基礎(chǔ)是擴(kuò)展而成的 兩種語(yǔ)言的基本語(yǔ)法和語(yǔ)義是相同 C 中加入了面向?qū)ο蟪绦蛟O(shè)計(jì) OOP 的特征 封裝性 通過(guò) 類(lèi) 把屬性和函數(shù)組合在一起 繼承性 派生類(lèi)可從先前定義的基類(lèi)中繼承函數(shù)和屬性 多態(tài)性 一個(gè)函數(shù)名 由不同的對(duì)象解釋執(zhí)行 可得到不同的執(zhí)行效果 二 Windows編程基礎(chǔ) API API是Windows應(yīng)用程序編程接口 API是一個(gè)程序內(nèi) 或一組相關(guān)程序內(nèi) 的一組函數(shù)調(diào)用 程序員用它創(chuàng)建其他程序 程序員不必知道函數(shù)內(nèi)部 只要知道API的函數(shù)原型及返回值 API的函數(shù)原型及返回值形式可由相關(guān)的技術(shù)規(guī)范資料獲得 現(xiàn)在的Win32API中 核心部分依靠三個(gè)主要組件提供Windows的大部分函數(shù) 這三個(gè)組件分別是 USER32 DLL GDI32 DLL KERNEL32 DLL Windows消息機(jī)制 1 基于消息的事件驅(qū)動(dòng)消息可以是由硬件發(fā)來(lái)的 存于系統(tǒng)隊(duì)列 也可以由Windows系統(tǒng)和應(yīng)用程序發(fā)來(lái) 存于程序隊(duì)列中 每一個(gè)Windows程序在不停的捕捉各種消息 并進(jìn)行處理 每個(gè)窗口都必須有一個(gè)窗口函數(shù) 來(lái)負(fù)責(zé)消息的判斷與處理 2 窗口函數(shù)對(duì)消息的處理窗口函數(shù)是一個(gè)回調(diào)函數(shù) 可以處理收到的消息 在程序中不需要用戶顯式調(diào)用 該窗口函數(shù)的形式通常為 WndProc 每個(gè)窗口類(lèi)必須在初始化時(shí)指定一個(gè)窗口函數(shù) 三 MFC MFC 即Microsoft基本類(lèi) 該類(lèi)庫(kù)封裝了SDK 軟件開(kāi)發(fā)工具包 結(jié)構(gòu) 功能及應(yīng)用程序框架內(nèi)部技術(shù) 它提供了許多可以重用的類(lèi) 使得Windows程序員避免了許多重復(fù)性工作 四 VisualC 集成開(kāi)發(fā)工具環(huán)境1 開(kāi)發(fā)工具的使用 2 掌握Win32程序開(kāi)發(fā)流程 一個(gè)win32程序由兩大塊組成 程序代碼 用戶接口資源 用戶接口資源 菜單 對(duì)話框 圖標(biāo) 光標(biāo)等 這些資源的實(shí)際內(nèi)容 二進(jìn)制代碼 由各種工具產(chǎn)生 并以各種擴(kuò)展名的文件存在 資源描述文件 rc 中對(duì)用戶接口資源進(jìn)行描述 RC編輯器 RC exe 根據(jù)該資源描述文件 rc 將所有用戶接口資源集中構(gòu)造一個(gè) RES文件 RES文件與程序代碼結(jié)合起來(lái) 構(gòu)成一個(gè)Win

注意事項(xiàng)

本文(北京交通大學(xué)軟件工程(完整ppt教程).ppt)為本站會(huì)員(xt****7)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!