軟件工程(完整教程)_第1頁
軟件工程(完整教程)_第2頁
軟件工程(完整教程)_第3頁
軟件工程(完整教程)_第4頁
軟件工程(完整教程)_第5頁
已閱讀5頁,還剩700頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

軟件工程(SoftwareEngineering)軟件工程(完整教程)第1章:軟件工程學概述1.1軟件危機60年代中期以前:通用硬件相當普遍,軟件卻是為某個具體的應用而編寫的。60年代中到70年代中:軟件作坊。軟件工程(完整教程)

軟件危機:計算機軟件的開發(fā)和維護過程中所遇到的一系列嚴重問題。(正常、不正常運行軟件都具有這種問題)1.1.1軟件危機的介紹軟件工程(完整教程)1)對軟件開發(fā)成本和進度的估計常常很不準確;2)用戶對完成的軟件系統(tǒng)不滿意的現(xiàn)象經常發(fā)生;3)軟件產品的質量往往靠不??;軟件危機的典型表現(xiàn):軟件工程(完整教程)4)軟件常常是不可維護的;5)軟件通常沒有適當?shù)奈臋n資料;6)軟件成本在計算機系統(tǒng)總成本中所占的比例逐年上升;7)軟件開發(fā)生產率提高的速度跟不上計算機應用的發(fā)展趨勢。軟件工程(完整教程)1.1.2產生軟件危機的原因1)軟件本身特點造成;2)軟件開發(fā)與維護的方法不正確。主要表現(xiàn):(a)忽視軟件需求分析;(b)認為軟件開發(fā)就是寫程序并使之運行;(c)輕視軟件維護;軟件工程(完整教程)

在軟件開發(fā)的不同階段進行修改需要付出的代價很不相同:高中低早期中期后期軟件開發(fā)時期代價引入同一修改的代價隨時間變化的趨勢軟件工程(完整教程)1)推廣使用在實踐中總結出來的開發(fā)軟件的成功技術和方法,并研究探索更有效的技術和方法;2)開發(fā)和使用更好的軟件工具;3)良好的組織管理措施。

1.1.3解決軟件危機的途徑軟件工程(完整教程)

為了解決軟件危機產生的問題,軟件工程與方法學逐漸形成,然后出現(xiàn)了兩個相互相承又各有側重的學科:

1)軟件工程學:主要應用工程的方法和技術研究軟件開發(fā)與維護的方法、工具和管理的一門交叉學科。

2)程序設計方法學:主要應用數(shù)學的方法研究程序的性質以及程序設計的理論和方法的學科。

軟件工程(完整教程)1.2軟件工程1.2.1軟件工程的介紹1968年NATO會議:軟件工程就是為了經濟地獲得可靠的且能在實際機器上有效地運行的軟件,而建立和使用完善的工程原理。1993年IEEE:軟件工程是(1)把系統(tǒng)的、規(guī)范的、可度量的途徑應用于軟件開發(fā)、運行和維護過程;(2)研究(1)中提到的途徑。軟件工程(完整教程)1.軟件工程關注于大型程序的構造;2.軟件工程的中心課題是控制復雜性;3.軟件經常變化;4.開發(fā)軟件的效率非常重要;5.和諧地合作是軟件開發(fā)的關鍵;6.軟件必須有效地支持它的用戶;7.在軟件工程領域中是由具有一種文化背景的人替具有另一種文化背景的人創(chuàng)造產品。軟件工程的本質特性:軟件工程(完整教程)1.2.2軟件工程的基本原理1.用分階段的生命周期計劃嚴格管理;2.堅持進行階段評審;3.實行嚴格的產品控制;4.采用現(xiàn)代程序設計技術;5.結果能清楚地審查;6.開發(fā)小組的人員應該少而精;7.承認不斷改進軟件工程實踐的必要性。軟件工程(完整教程)1.2.3軟件工程方法學

通常把在軟件生命周期全過程中使用的一整套技術方法的集合稱為方法學(Methodology),也稱為范型(Paradigm)。軟件工程方法學的3要素:方法、工具和過程軟件工程(完整教程)1.傳統(tǒng)方法學也稱為生命周期方法學或結構化范型。結構化方法(StructureMethod)有:1)結構化設計方法(SD);2)結構化分析方法(SA);

3)結構化分析與設計技術(SADT)4)JACKSON方法5)WARNIER方法軟件工程(完整教程)2.面向對象方法學把數(shù)據(jù)和對數(shù)據(jù)的操作緊密結合起來的方法,模擬人類認識世界解決問題的方法和過程。

面向對象的方法=對象(屬性與服務的封裝)+分類+繼承+通過消息的通訊軟件工程(完整教程)1)適用于實時事物處理系統(tǒng)的有限狀態(tài)機方法(FSM);2)適用于并發(fā)軟件系統(tǒng)的PETRI網方法;3)以數(shù)學概念和理論為基礎的形式化方法,如

SDC公司的形式化開發(fā)方法FDM:(FormalDevelopmentMethodology)IBM公司的維也納開發(fā)方法VDM:

(ViennaDevelopmentMethod)3.其他開發(fā)方法

軟件工程(完整教程)1.3軟件生命周期軟件生命周期:指軟件從提出到最終被淘汰的這個存在期。軟件工程(完整教程)軟件生命周期組成:1)軟件定義;A.問題定義B.可行性研究C.需求分析2)軟件開發(fā);D.總體設計E.詳細設計F.編碼和單元測試G.綜合測試3)運行維護。軟件工程(完整教程)1.問題定義;

2.可行性研究;

3.需求分析;

4.總體設計(概要設計);

5.詳細設計;

6.編碼與單元測試;

7.綜合測試;

8.維護。軟件生命周期各個階段:軟件工程(完整教程)1.4軟件過程軟件過程:為了獲得高質量軟件所需要完成的一系列任務的框架,它規(guī)定了完成各項任務的工作步驟。軟件過程(ISO9000):使用資源將輸入轉化為輸出的活動所構成的系統(tǒng)。輸入:如軟件需求輸出:如軟件產品軟件工程(完整教程)1.4.1瀑布模型1.階段間具有順序性和依賴性2.推遲實現(xiàn)的觀點3.質量保證的觀點軟件工程(完整教程)優(yōu)點:采用規(guī)范的方法;嚴格規(guī)定每個階段提交的文檔;要求每個階段交出的產品必須經過驗證。軟件工程(完整教程)1.4.2快速原型模型優(yōu)點:不帶反饋環(huán),基本上是線性順序進行。軟件工程(完整教程)1.4.3增量模型優(yōu)點:能較短時間內提交可完成部分工作的產品;可以使用戶有充裕的時間學習和適應新產品。軟件工程(完整教程)一種風險更大的增量模型:軟件工程(完整教程)1.4.4螺旋模型可把它看作在每個階段之前都增加風險分析的快速原型模型。軟件工程(完整教程)軟件工程(完整教程)1.4.5噴泉模型典型的面向對象軟件開發(fā)過程模型之一。軟件工程(完整教程)1.4.6Rational統(tǒng)一過程1.RUP軟件開發(fā)經驗(1)迭代式開發(fā)(2)管理需求(3)使用基于構件的體系結構(4)可視化建模(5)貫穿于開發(fā)過程的軟件質量驗證(6)控制軟件變更軟件工程(完整教程)1.4.7敏捷過程與極限編程1.敏捷過程具有高效、快速響應變化的開發(fā)過程。(1)個體和交互勝過過程和工具;(2)可以工作的軟件勝過面面俱到的文檔;(3)客戶合作勝過合同談判;(4)響應變化勝過遵循計劃。2.極限編程敏捷過程中最著名的一種,指把好的開發(fā)實踐運用到極致,多應用于軟件需求模糊的場合。軟件工程(完整教程)1.4.8微軟過程1.微軟過程準則2.微軟軟件生命周期(1)規(guī)劃階段(2)設計階段(3)開發(fā)階段(4)穩(wěn)定階段(5)發(fā)布階段3.微軟過程模型軟件工程(完整教程)

問題定義就是要確定為用戶建立什么樣的軟件系統(tǒng),軟件叫什么樣的名稱等等?!皢栴}”是指軟件最基本的問題,如:

軟件的總體目標什么?有什么用途?

為那些用戶設計?

1.5問題定義階段軟件工程(完整教程)問題定義報告的內容包括:

1)軟件項目標題;

2)軟件目標;

3)軟件用戶對象;

4)軟件規(guī)模。軟件工程(完整教程)

問題定義是軟件生命周期中時間最短的階段,一般都比較簡單,因此在實際開發(fā)中它是最容易被忽視的一個階段。這一階段工作主要由系統(tǒng)分析員來完成,系統(tǒng)分析員要盡可能從較高的角度概括軟件所要做的工作,而不用寫明問題的實現(xiàn)細節(jié)。

軟件工程(完整教程)第2章:可行性研究

可行性研究就是要回答“所定義的問題有可行的解決辦法嗎?”??尚行匝芯康哪康氖牵河米钚〉拇鷥r在盡可能短的時間內確定問題是否有解,以及是否值得去解。2.1可行性研究的任務軟件工程(完整教程)

可行性研究所需的時間取決于工程的規(guī)模,所需要的成本要占工程總成本的5%~10%。軟件工程(完整教程)可行性研究的內容:1)技術可行性技術可行性要分析各種技術因素,例如:使用現(xiàn)有的技術能否實現(xiàn)這個系統(tǒng)?是否有勝任開發(fā)該項目的熟練技術人員?能否按期得到開發(fā)該項目所需的軟件、硬件資源?軟件工程(完整教程)2)經濟可行性對經濟合理性進行評價,所要考慮的問題是:

這個系統(tǒng)的經濟效益能否超過它的開發(fā)成本?這就需要對項目進行價格/利益分析,即“投入/產出”分析。由于利益分析取決于軟件系統(tǒng)的特點,因此在軟件開發(fā)之前,很難對新系統(tǒng)產生的效益作出精確的定量描述,所以往往采用一些估算方法。軟件工程(完整教程)3)操作可行性操作可行性評價系統(tǒng)運行后會引起的各方面變化,如:對組織機構管理模式、用戶工作環(huán)境等產生的影響。軟件工程(完整教程)4)社會可行性社會可行性主要討論法律方面和使用方面的可行性。例如,被開發(fā)軟件的權利歸屬問題、軟件所使用的技術是否會造成侵權等問題。軟件工程(完整教程)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符號

符號名稱說明處理如:程序,處理機,人工加工輸入/輸出連接換頁連接數(shù)據(jù)流表示輸入或輸出同一頁上圖的連接不同頁上圖的連接指明數(shù)據(jù)流動方向圖2.1基本符號軟件工程(完整教程)符號名稱說明穿孔卡片文檔磁帶聯(lián)機存儲磁盤磁鼓顯示人工輸入人工操作輔助操作通信鏈路穿孔卡片輸入/輸出,或穿孔卡片文件打印輸出,或打印終端輸入數(shù)據(jù)磁帶輸入/輸出,或表示磁帶文件任何種類磁盤存儲,如磁盤、磁鼓等磁盤輸入/輸出,或磁盤上文件、數(shù)據(jù)庫磁鼓輸入/輸出,或磁鼓上文件、數(shù)據(jù)庫顯示器部件人工輸入數(shù)據(jù),如填寫表格人工完成的處理使用輔助設備進行的脫機操作通過遠程通信線路傳送數(shù)據(jù)圖2.2系統(tǒng)符號軟件工程(完整教程)2.3.2例子

事務庫存清單程序報告生成程序定貨信息定貨報告庫存清單主文件圖2.3庫存清單系統(tǒng)的系統(tǒng)流程圖軟件工程(完整教程)2.4數(shù)據(jù)流圖(描繪數(shù)據(jù)在系統(tǒng)中流動的邏輯過程)2.4.1符號

或或或數(shù)據(jù)源點或終點變換數(shù)據(jù)的處理數(shù)據(jù)存儲數(shù)據(jù)流圖2.4基本符號的含義軟件工程(完整教程)TABC*TABC*附加符號TABC+TABC+軟件工程(完整教程)注意:“處理”可表示:單個程序、一系列程序、程序的一個模塊、人工處理過程等等;“數(shù)據(jù)存儲”可表示:一個文件、文件的一部分、數(shù)據(jù)庫記錄等等;數(shù)據(jù)流圖忽略出錯處理、打開文件、關閉文件。軟件工程(完整教程)2.4.2繪制數(shù)據(jù)流圖的例子

事務庫存清單程序報告生成程序定貨信息定貨報告庫存清單主文件圖2.3庫存清單系統(tǒng)的系統(tǒng)流程圖軟件工程(完整教程)2.4.2繪制數(shù)據(jù)流圖的例子

倉庫管理員采購員定貨系統(tǒng)事務定貨報表圖2.5定貨系統(tǒng)的基本系統(tǒng)模型軟件工程(完整教程)2.4.2繪制數(shù)據(jù)流圖的例子庫存清單倉庫管理員采購員事務定貨報表圖2.6定貨系統(tǒng)的功能級數(shù)據(jù)流圖處理事務1產生報表2D1庫存清單D2定貨信息定貨信息定貨信息軟件工程(完整教程)組成該例子的數(shù)據(jù)流圖的元素源點/終點處理

采購員倉庫管理員

產生報表處理事務數(shù)據(jù)流數(shù)據(jù)存儲

訂貨報表零件編號零件名稱訂貨數(shù)量目前價格主要供應商次要供應商事務零件編號事務類型數(shù)量

訂貨信息(見訂貨報表)庫存清單零件編號庫存量庫存量臨界值軟件工程(完整教程)

上述數(shù)據(jù)流圖所描述的功能夠詳細了嗎?軟件工程(完整教程)2.4.2繪制數(shù)據(jù)流圖的例子倉庫管理員采購員事務定貨報表圖2.7定貨系統(tǒng)進一步分解后的數(shù)據(jù)流圖更新庫存清單1.2產生報表2D1庫存清單D2定貨信息接收事務1.1處理定貨1.3庫存清單定貨信息定貨信息軟件工程(完整教程)1)為數(shù)據(jù)流(或數(shù)據(jù)存儲)命名A.名字應該代表整個數(shù)據(jù)流(或數(shù)據(jù)存儲)的內容;B.不要使用空洞的、缺乏具體含義的名字(如“數(shù)據(jù)”、“輸入”);2.4.3命名軟件工程(完整教程)C.如果為某個數(shù)據(jù)流(或數(shù)據(jù)存儲)起名字時遇到困難,則很可能是因為對數(shù)據(jù)流圖的分解不恰當造成的,應該試試重新分解數(shù)據(jù)流圖;

軟件工程(完整教程)2)為處理命名A.通常先為數(shù)據(jù)流命名,然后再為與之相關聯(lián)的處理命名;B.名字應該反映整個處理的功能;C.應該盡量避免空洞籠統(tǒng)的動詞做名字,如“處理”、“加工”;軟件工程(完整教程)D.通常用一個動詞命名,如果必須用兩個動詞才能描述整個處理的功能,則可能要把這個處理分解成兩個處理更恰當;E.如果在為某個處理命名時遇到困難,則很可能是發(fā)現(xiàn)了分解不當?shù)那闆r,應考慮重新分解。軟件工程(完整教程)通常,為“數(shù)據(jù)源點/終點”命名時,采用它們在問題域中習慣使用的名字(如“倉庫管理員”、“采購員”)。軟件工程(完整教程)1)利用它作為交流信息的工具;2)作為軟件分析和設計的工具。2.4.4數(shù)據(jù)流圖的用途

軟件工程(完整教程)2.4.4數(shù)據(jù)流圖的用途倉庫管理員采購員事務定貨報表圖2.8這種自動化邊界建議以聯(lián)機方式更新庫存清單更新庫存清單1.2產生報表2D1庫存清單D2定貨信息接收事務1.1處理定貨1.3庫存清單定貨信息定貨信息軟件工程(完整教程)圖2.8對應的物理實現(xiàn)硬件方案軟件工程(完整教程)2.4.4數(shù)據(jù)流圖的用途

倉庫管理員采購員事務定貨報表圖2.9這種自動化邊界暗示以批量方式更新庫存清單更新庫存清單1.2產生報表2D1庫存清單D2定貨信息接收事務1.1處理定貨1.3庫存清單定貨信息定貨信息D3事務軟件工程(完整教程)圖2.9對應的物理實現(xiàn)硬件方案軟件工程(完整教程)

數(shù)據(jù)字典:對數(shù)據(jù)流圖中包含的所有元素的定義的集合;可行性研究階段,數(shù)據(jù)流圖與數(shù)據(jù)字典共同構成系統(tǒng)的邏輯模型。2.5數(shù)據(jù)字典

軟件工程(完整教程)2.5.1數(shù)據(jù)字典的內容數(shù)據(jù)字典應該對下列元素進行定義:

1)數(shù)據(jù)流;

2)數(shù)據(jù)元素(數(shù)據(jù)流分量);

3)數(shù)據(jù)存儲;

4)處理。

軟件工程(完整教程)1)數(shù)據(jù)元素字典定義其定義的基本內容有:A.數(shù)據(jù)元素編號、名稱及其含義;B.數(shù)據(jù)類型和長度;C.合理取值;D.其他內容,如它與其它數(shù)據(jù)的邏輯關系等。2.5.2定義數(shù)據(jù)的方法軟件工程(完整教程)數(shù)據(jù)元素字典定義實例:數(shù)據(jù)元素編號:DC001數(shù)據(jù)元素名稱:考試成績別名:成績、分數(shù)簡述:學生考試成績,分五個等級類型/長度:兩個字節(jié),字符類型取值/含義:優(yōu)[90-100]良[80-89]中[70-79]及格[60-69]不及格[0-59]有關數(shù)據(jù)項或結構:學生成績檔案有關處理邏輯:計算成績

圖2.10數(shù)據(jù)元素字典定義軟件工程(完整教程)2)數(shù)據(jù)流字典定義其定義的基本內容有:A.數(shù)據(jù)流編號及名稱;B.數(shù)據(jù)流來源;C.數(shù)據(jù)流去處;D.數(shù)據(jù)流的組成;E.流通量;F.峰值。軟件工程(完整教程)數(shù)據(jù)流字典定義實例:數(shù)據(jù)流編號:DF001數(shù)據(jù)流名稱:訂票單簡述:訂票時填寫的訂票單數(shù)據(jù)流來源:外部實體“乘客”數(shù)據(jù)流去處:處理邏輯“預訂機票”數(shù)據(jù)流組成:訂單編號日期乘客號航班號狀態(tài)訂單失效日期流通量:每天300份高峰值流通量:每天早上9:00,約160份圖2.11數(shù)據(jù)流字典定義軟件工程(完整教程)3)數(shù)據(jù)存儲字典定義其定義的基本內容有:A.數(shù)據(jù)存儲編號及名稱;B.數(shù)據(jù)存儲的組成;C.其它要求。軟件工程(完整教程)4)數(shù)據(jù)處理字典定義其定義的基本內容有:A.數(shù)據(jù)處理編號及名稱;B.簡單描述;C.輸入/輸出;D.功能描述;E.有關數(shù)據(jù)存儲。軟件工程(完整教程)數(shù)據(jù)處理字典定義實例:數(shù)據(jù)處理編號:DP001數(shù)據(jù)處理名稱:編輯訂票簡述:接收從終端錄入的訂票單,檢驗是否正確輸入:乘客訂單,來源:外部實體“乘客”輸出:1.合格訂單,去處:處理邏輯“確定訂票”2.不及格訂單,去處:外部實體“乘客”功能描述:……(略)圖2.12數(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ù)

2.6.1成本估計軟件工程(完整教程)2)任務分解技術

軟件開發(fā)項目分解為若干個相對獨立的任務,分別估計每個單獨任務的成本:

單獨任務成本=任務所需人力估計值×每人每月平均工資;

軟件開發(fā)項目總成本估計=各個單獨任務成本估計值之和。軟件工程(完整教程)

常用的辦法是按開發(fā)階段劃分任務,典型環(huán)境下各個開發(fā)階段需要使用的人力百分比大致如下:任務人力(%)可行性研究需求分析設計編碼與單元測試綜合測試總計510252040100軟件工程(完整教程)3)自動估計成本技術采用自動估計成本的軟件工具估計。

軟件工程(完整教程)1)Putnam模型1978年Putnam提出的,一種動態(tài)多變量模型:軟件開發(fā)成本估算的經驗模型:軟件工程(完整教程)Ck為技術狀態(tài)常數(shù),它反映“妨礙開發(fā)進展的限制”,取值因開發(fā)環(huán)境而異,見下表:Ck的典型值開發(fā)環(huán)境開發(fā)環(huán)境舉例2000差沒有系統(tǒng)的開發(fā)方法,缺乏文檔和復審8000好有合適的系統(tǒng)的開發(fā)方法,有充分的文檔和復審11000優(yōu)有自動的開發(fā)工具和技術軟件工程(完整教程)2)COCOMO模型(constructivecostmodel)

這是由TRW公司開發(fā),Boehm提出的結構化成本估算模型,是一種精確的、易于使用的成本估算方法。基本COCOMO模型估算工作量和進度的公式如下:

工作量:

MM=r×(KDSI)c

(人月)

開發(fā)時間:

TDKV=a×(MM)b

(月)DSI:源指令條數(shù),不包括注釋,1KDSI=1000DSIMM:開發(fā)工作量(以人月計),1MM=19人日=152人時=1/12人年

經驗常數(shù)r,c,a,b取決于項目的總體類型軟件工程(完整教程)COCOMO模型中,考慮開發(fā)環(huán)境,軟件開發(fā)項目的類型可以分為3種:1)組織型(organic)相對較小、較簡單的軟件項目。開發(fā)人員對開發(fā)目標理解比較充分,與軟件系統(tǒng)相關的工作經驗豐富,對軟件的使用環(huán)境很熟悉,受硬件的約束較小,程序的規(guī)模不是很大(<50000行)軟件工程(完整教程)2)嵌入型(embedded)要求在緊密聯(lián)系的硬件、軟件和操作的限制條件下運行,通常與某種復雜的硬件設備緊密結合在一起。對接口,數(shù)據(jù)結構,算法的要求高。軟件規(guī)模任意。如大而復雜的事務處理系統(tǒng),大型/超大型操作系統(tǒng),航天用控制系統(tǒng),大型指揮系統(tǒng)等。軟件工程(完整教程)3)半獨立型(semidetached)介于上述兩種軟件之間。規(guī)模和復雜度都屬于中等或更高。最大可達30萬行。軟件工程(完整教程)COCOMO模型按其詳細程度可以分為三級:1)基本COCOMO模型是一個靜態(tài)單變量模型,它用一個以已估算出來的原代碼行數(shù)(LOC)為自變量的經驗函數(shù)計算軟件開發(fā)工作量。軟件工程(完整教程)基本COCOMO模型通過統(tǒng)計63個歷史項目的歷史數(shù)據(jù),得到如下計算公式:總體類型工作量所需開發(fā)時間組織型MM=2.4×(KDSI)1.05TDKV=2.5×(MM)0.38半獨立型MM=3.0×(KDSI)1.12TDKV=2.5×(MM)0.35嵌入型MM=3.0×(KDSI)1.20TDKV=2.5×(MM)0.32軟件工程(完整教程)2)中級COCOMO模型在基本COCOMO模型的基礎上,再用涉及產品、硬件、人員、項目等方面的影響因素調整工作量的估算。3)詳細COCOMO模型包括中級COCOMO模型的所有特性,但更進一步考慮了軟件工程中每一步驟(如分析、設計)的影響。軟件工程(完整教程)1)貨幣的時間價值

假設年利率為i,如果現(xiàn)在存入P元錢,則n年以后可以得到的錢數(shù)為:

反之,如果n年后能收入F元錢,那么這些錢現(xiàn)在的價值是:2.6.2成本/效益分析軟件工程(完整教程)例:修改一個已有的庫存管理系統(tǒng),估計需要5000元,系統(tǒng)修改后使用5年,每年可節(jié)省2500元。請進行成本/效益分析。軟件工程(完整教程)表1:將來的收入折算成現(xiàn)在值

年將來值(元)(1+0.12)n現(xiàn)在值(元)累計的現(xiàn)在值(元)125001.122232.142232.14225001.251992.984225.12325001.401779.456004.57425001.571588.807593.37525001.761418.579011.94軟件工程(完整教程)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)的使用壽命(一般假設n=5);

j是投資回收率。上述修改系統(tǒng)的工程的投資回收率是41%-42%軟件工程(完整教程)第2章小結

可行性分析報告說明該軟件開發(fā)項目的實現(xiàn)在技術上、經濟上和社會因素上的可行性,評述為了合理地達到開發(fā)目標可供選擇的各種可能實施方案,說明并論證所選定實施方案的理由。

項目開發(fā)計劃為軟件項目實施方案制訂出具體計劃,應該包括各部分工作的負責人員、開發(fā)的進度、開發(fā)經費的預算、所需的硬件及軟件資源等。軟件工程(完整教程)第3章:需求分析3.1.1確定對系統(tǒng)的綜合要求

1.功能需求2.性能需求如:相應時間(速度)、主存容量、磁盤容量、安全性、等。3.1需求分析的任務軟件工程(完整教程)3.可靠性和可用性需求4.出錯處理需求系統(tǒng)發(fā)現(xiàn)錯誤時采取的行動,主要在系統(tǒng)關鍵部分設置。5.接口需求用戶接口、硬件接口、軟件接口、通信接口、等。6.約束精度、工具和語言、設計約束、硬件約束、標準,等。7.逆向需求8.將來可能提出的要求軟件工程(完整教程)3.1.3導出系統(tǒng)的邏輯模型包括完善的數(shù)據(jù)流圖、實體-聯(lián)系圖、狀態(tài)轉換圖、數(shù)據(jù)字典、主要的處理算法(IPO圖)等。3.1.2分析系統(tǒng)的數(shù)據(jù)要求通過建立數(shù)據(jù)模型來分析,如數(shù)據(jù)字典、層次方框圖、Warnier圖,并將數(shù)據(jù)結構規(guī)范化。3.1.4修正系統(tǒng)開發(fā)計劃修訂前期制定的開發(fā)進度計劃、等。軟件工程(完整教程)3.2與用戶溝通獲取需求的方法3.2.1訪談正式訪談:系統(tǒng)分析員提出事先準備好的問題。非正式訪談:提出一些用戶可以自由回答的開放性問題,鼓勵被訪者說出自己的想法。需要訪問大量人員時,利用調查表訪問較佳。軟件工程(完整教程)3.2.2面向數(shù)據(jù)流自頂向下求精分析追蹤數(shù)據(jù)流圖用戶復查細化數(shù)據(jù)流圖有補充修正無補充修正需要分解不需分解圖3.1需求分析基本過程借助數(shù)據(jù)流圖、數(shù)據(jù)字典、IPO圖等,細化、完善詳細的數(shù)據(jù)流圖,等到各處理環(huán)節(jié)對應的功能。軟件工程(完整教程)倉庫管理員采購員事務定貨報表定貨系統(tǒng)數(shù)據(jù)流圖更新庫存清單1.2產生報表2D1庫存清單D2定貨信息接收事務1.1處理定貨1.3庫存清單定貨信息定貨信息例:分析銷售趨勢統(tǒng)計功能軟件工程(完整教程)3.2.3簡易的應用規(guī)格說明技術面向團隊的需求收集法:(用戶與開發(fā)者配合)1)初步訪談;2)開發(fā)者和用戶分別寫出“產品需求”;3)開會討論,各自展示需求列表;4)得出一致意見,為需求列表制定小型規(guī)格說明;5)根據(jù)會議成果,起草完整的軟件需求規(guī)格說明。軟件工程(完整教程)3.2.4快速建立軟件原型

快速建立能演示目標系統(tǒng)主要功能的程序。(1)第四代技術(2)可重用的軟件構件(3)形式化規(guī)格說明和原型環(huán)境軟件工程(完整教程)3.3分析建模與規(guī)格說明3.3.1分析建模為了開發(fā)復雜的系統(tǒng),應從不同角度(模型)抽象出目標系統(tǒng)的特性(數(shù)據(jù)模型、功能模型、行為模型)。1)實體聯(lián)系圖:建立數(shù)據(jù)模型,描述數(shù)據(jù)對象及數(shù)據(jù)對象之間的關系;2)數(shù)據(jù)流圖:建立功能模型的基礎;3)狀態(tài)轉換圖:描繪系統(tǒng)的狀態(tài)和狀態(tài)間轉換的方式。3.3.2軟件需求規(guī)格說明軟件工程(完整教程)3.4實體-聯(lián)系圖

數(shù)據(jù)對象可以是外部實體、事物、行為、事件、角色、單位、地點、結構等。數(shù)據(jù)對象3.4.1數(shù)據(jù)對象軟件工程(完整教程)3.4.2屬性屬性定義了數(shù)據(jù)對象的性質。屬性軟件工程(完整教程)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)系軟件工程(完整教程)教師學生課程學號姓名系年級職務性別職稱性別姓名教工號教學成績學分學時課名課程號圖3.2某校教學管理ER圖MN1N例子:軟件工程(完整教程)通常用范式定義消除數(shù)據(jù)冗余的程度。

1)第一范式

2)第二范式

3)第三范式3.5數(shù)據(jù)規(guī)范化軟件工程(完整教程)3.6狀態(tài)轉換圖3.6.1狀態(tài)狀態(tài)是任何可以被觀察到的系統(tǒng)行為模式,一個狀態(tài)代表系統(tǒng)的一種行為模式。3.6.2事件事件是某個特定時刻發(fā)生的事情,它是引起系統(tǒng)做動作或狀態(tài)轉換的控制信息。軟件工程(完整教程)3.6.3符號軟件工程(完整教程)3.6.4例子軟件工程(完整教程)3.7其他圖形工具

層次方框圖用樹形結構的一系列多層次的矩形框描繪數(shù)據(jù)的層次結構。

產品硬件軟件服務處理機存儲器外部設備系統(tǒng)軟件應用軟件軟件服務硬件維修培訓編譯程序軟件工具操作系統(tǒng)圖3.5層次方框圖的一個例子3.7.1層次方框圖軟件工程(完整教程)Warnier圖也用樹形結構描繪信息,但是這種圖形工具比層次方框圖提供了更豐富的描繪手段。

軟件產品軟件工具編輯程序(P3)應用軟件編譯程序(P2)操作系統(tǒng)(P1)系統(tǒng)軟件測試驅動程序(P4)設計輔助工具(P5)⊕圖3.4Warnier圖的一個例子3.7.2Warnier圖軟件工程(完整教程)IPO圖是輸入/處理/輸出圖。舊的主文件事務文件1.校驗主記錄2.校驗事務記錄3.更新主記錄有效的主記錄有效的事務記錄更新后的主文件輸入處理輸出圖3.7IPO圖的一個例子3.7.3IPO圖軟件工程(完整教程)IPO表系統(tǒng):模塊:編號:作者:日期:被調用:調用:輸入:輸出:處理:局部數(shù)據(jù)元素:注釋:圖3.8改進的IPO圖的形式軟件工程(完整教程)3.8驗證軟件需求1)一致性2)完整性3)現(xiàn)實性4)有效性3.8.1驗證軟件需求的正確性軟件工程(完整教程)1)驗證需求的一致性2)驗證需求的現(xiàn)實性3)驗證需求的完整性和有效性

3.8.2驗證軟件需求的方法軟件工程(完整教程)用于需求分析的軟件應該滿足下列要求:

1)必須有形式化的語法

2)使用這個軟件工具能夠導出詳細的文檔

3)必須提供分析規(guī)格說明書的不一致性和冗余性的手段

4)使用這個軟件工具后,應該能夠改進通信狀況3.8.3用于需求分析的軟件工具軟件工程(完整教程)

RSL(需求陳述語言):信息集ASSMPASCAL模擬程序

PSL/PSA(問題陳述語言/問題陳述分析程序)系統(tǒng)

軟件工程(完整教程)第3章小結

軟件需求說明書(軟件規(guī)格說明書)

對所開發(fā)軟件的功能、性能、用戶界面及運行環(huán)境等作出詳細的說明。它是在用戶與開發(fā)人員雙方對軟件需求取得共同理解并達成協(xié)議的條件下編寫的,也是實施開發(fā)工作的基礎。該說明書應給出數(shù)據(jù)邏輯和數(shù)據(jù)采集的各項要求,為生成和維護系統(tǒng)數(shù)據(jù)文件做好準備。軟件工程(完整教程)第4章:形式化說明技術1.非形式化方法:自然語言描述2.半形式化方法:數(shù)據(jù)流圖或實體-聯(lián)系圖3.形式化方法:基于數(shù)學技術描述軟件工程(完整教程)4.1概述4.1.1非形式化方法的缺點自然語言書寫的系統(tǒng)規(guī)格說明書可能存在:1)矛盾;2)二義性;如:“操作員標識由操作員姓名和密碼組成,密碼由6位數(shù)字構成,當操作員登陸系統(tǒng)時它被存儲在注冊文件中。”3)含糊性;4)不完整性;5)抽象層次混亂。軟件工程(完整教程)4.1.2形式化方法的優(yōu)點(1)數(shù)學是理想的建模工具,適合于表示系統(tǒng)狀態(tài)和描述系統(tǒng)需求;(2)用數(shù)學表達的需求可在不同開發(fā)階段平滑過渡。4.1.3應用形式化方法的準則(1)選擇合適的形式化方法;(2)需要形式化,但不能過渡形式化,不能放棄傳統(tǒng)的需求表達方法;(3)應該有形式化方法的專家提供指導。軟件工程(完整教程)4.2有窮狀態(tài)機法(FSM)4.2.1概念鎖的三個位置:1、2、3;轉盤可向左(L)或右(R);鎖密碼:1L、3R、2L軟件工程(完整教程)軟件工程(完整教程)一個有窮狀態(tài)機包括5部分:

1)狀態(tài)集J:{保險箱鎖定,A,B,保險箱解鎖,報警}2)輸入集K:{1L,1R,2L,2R,3L,3R}3)轉換函數(shù)T,如表4.14)初始狀態(tài)S:保險箱鎖定5)終態(tài)集F:{保險箱解鎖,報警}更形式化的術語:一個有窮狀態(tài)機可表示一個為5元組(J,K,T,S,F)軟件工程(完整教程)狀態(tài)轉換形式:當前狀態(tài)【菜單】+事件【所選擇的項】=>下個狀態(tài)加入謂詞集P,把系統(tǒng)擴展成一個6元組后:當前狀態(tài)【菜單】+事件【所選擇的項】+謂詞=>下個狀態(tài)計算機系統(tǒng)中每個菜單驅動的用戶界面都是一個有窮狀態(tài)機的實現(xiàn)。軟件工程(完整教程)定義狀態(tài):(1)M(d,e,f):電梯e正沿d方向移動,即將到達第f層樓。(2)S(d,e,f):電梯e停在f層樓,將朝d方向移動(未關門)。(3)W(e,f):電梯e在f層等待(已關門)。(4)DC(e,f):電梯e在樓層f關上門。(5)ST(e,f):電梯e靠近f層時觸發(fā)傳感器,電梯控制器決定在當前樓層是否停下。(6)RL:電梯按鈕或樓層按鈕被按下進入打開狀態(tài)4.2.2例子:電梯的狀態(tài)轉換軟件工程(完整教程)電梯狀態(tài)轉換規(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)易于書寫、驗證、轉變成設計或程序代碼。有窮狀態(tài)機方法比數(shù)據(jù)流圖技術更精確,一樣易于理解。但不能處理定時需求。軟件工程(完整教程)4.3Petri網4.3.1概念軟件工程(完整教程)Petri網包含4種元素:1)一組位置P,上例P={P1,P2,P3,P4}2)一組轉換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網結構,是一個4元組(P,T,I,O)軟件工程(完整教程)權標向量(1,2,0,1)軟件工程(完整教程)權標向量(2,1,0,0)軟件工程(完整教程)權標向量(2,0,2,0)軟件工程(完整教程)更形式化地:標記M:P->{0,1,2,…}Petri網成為一個5元組(P,T,I,O,M)軟件工程(完整教程)對Petri網的一個重要擴充是加入禁止線:軟件工程(完整教程)4.3.2例子1.電梯按鈕EBf

電梯中樓層f的按鈕;Fg

樓層g;Ff

樓層f。軟件工程(完整教程)2.樓層按鈕FBfu

第f樓層向上按鈕;FBfd

第f樓層向下按鈕;軟件工程(完整教程)小結基于數(shù)學的形式化說明技術,目前還沒有在軟件產業(yè)界廣泛應用;應該把形式化方法與傳統(tǒng)方法有機結合。軟件工程(完整教程)第5章:總體設計5.1設計過程1.設想供選擇的方案

2.選擇合理的方案對每個合理的方案要提供:

A.系統(tǒng)流程圖

B.組成系統(tǒng)的物理元素清單

C.成本/效益分析

D.實現(xiàn)這個系統(tǒng)的進度計劃軟件工程(完整教程)3.推薦最佳方案4.功能分解5.設計軟件結構6.數(shù)據(jù)庫設計A.模式設計B.子模式設計C.完整性和安全性設計D.優(yōu)化軟件工程(完整教程)7.制定測試計劃8.書寫文檔A.系統(tǒng)說明B.用戶手冊C.測試計劃D.詳細的實現(xiàn)計劃E.數(shù)據(jù)庫設計結果9.審查和復審

軟件工程(完整教程)5.2設計原理如果一個大型程序僅由一個模塊組成,很難被人理解。設函數(shù)C(x)定義問題x的復雜程度,函數(shù)E(x)定義解決問題x需要的工作量(時間)。對于兩個問題P1和P2,如果:C(P1)>C(P2)那么E(P1)>E(P2)根據(jù)解決問題的經驗,有一個規(guī)律是:C(P1+P2)>C(P1)+C(P2)于是有E(P1+P2)>E(P1)+E(P2)

5.2.1模塊化軟件工程(完整教程)模塊數(shù)目接口成本成本/模塊軟件總成本M最小成本區(qū)成本圖5.1模塊化與軟件成本軟件工程(完整教程)5.2.2抽象

5.2.3逐步求精模塊的獨立性很重要,因為:1)有效的模塊化的軟件比較容易開發(fā)出來;2)獨立的模塊比較容易測試和維護。5.2.4信息隱蔽和局部化5.2.5模塊獨立軟件工程(完整教程)一、耦合

耦合:指軟件結構內不同模塊彼此之間相互依賴(連接)的緊密程度。模塊獨立程度可以由兩個定性標準度量:耦合與內聚。軟件工程(完整教程)模塊的偶合分四類:1)數(shù)據(jù)耦合兩個模塊之間只是通過參數(shù)交換信息,而且交換的信息僅僅是數(shù)據(jù)。數(shù)據(jù)耦合是最低程度的耦合。AB數(shù)據(jù)(1)數(shù)據(jù)耦合軟件工程(完整教程)2)控制耦合兩個模塊之間所交換的信息包含控制信息??刂岂詈鲜侵械瘸潭鹊鸟詈?。圖中模塊A的內部處理程序判斷是執(zhí)行C還是執(zhí)行D,要取決于模塊B傳來的信息狀態(tài)(Status)。BACD(2)控制耦合astatus軟件工程(完整教程)3)公用耦合兩個或多個模塊通過一個公共區(qū)相互作用時的耦合。公共區(qū)可以是:全程數(shù)據(jù)區(qū)、共享通信區(qū)、內存公共覆蓋區(qū)、任何介質上的文件、物理設備等。軟件結構中存在大量的公用耦合時會給診斷錯誤帶來困難。

軟件工程(完整教程)圖中存在公用耦合,假設模塊A、C、E都存取全程數(shù)據(jù)區(qū)(如公用一個磁盤文件)中的一個數(shù)據(jù)項。如果A模塊讀取該項數(shù)據(jù),然后調用C模塊對該項重新計算,并進行數(shù)據(jù)更新。ABCDE全程數(shù)據(jù)區(qū)(3)公用耦合軟件工程(完整教程)如果此時C模塊錯誤地更新了該項數(shù)據(jù),在往下的處理中模塊E讀該數(shù)據(jù)項時出現(xiàn)錯誤。表面上看,問題由模塊E產生,實際上由模塊C引起。ABCDE全程數(shù)據(jù)區(qū)(3)公用耦合軟件工程(完整教程)4)內容耦合

一個模塊與另一個模塊的內容直接發(fā)生聯(lián)系。內容耦合對維護會帶來嚴重的困難。

模塊A…LAB:MOVE1…模塊B…GOTOLAB…內容耦合(4)內容耦合程序中如果一個模塊直接把程序轉移到另一個模塊中,或一個模塊使用另一個模塊內部的數(shù)據(jù),都會產生內容耦合。內容耦合是最高程度的耦合,應該避免采用。軟件工程(完整教程)

軟件設計應追求盡可能松散耦合,避免強耦合,這樣模塊間的聯(lián)系就越小,模塊的獨立性就越強,對模塊的測試、維護就越容易。因此建議:盡量使用數(shù)據(jù)耦合,少用控制耦合,限制公用耦合,完全不用內容偶合。

軟件工程(完整教程)二、內聚

內聚:一個模塊內部各個元素彼此結合的緊密程度。它是衡量一個模塊內部組成部分間整體統(tǒng)一性的度量。常見的內聚有七類。軟件工程(完整教程)1)功能內聚(FunctionalCohesion)如果一個模塊內所有處理元素完成一個,而且僅完成一個功能,則稱為功能內聚。功能內聚是最高程度的內聚。但在軟件結構中,并不是每個模塊都能設計成一個功能內聚模塊。軟件工程(完整教程)2)順序內聚(SequentialCohesion)如果一個模塊內處理元素和同一個功能密切相關,而且這些處理元素必須順序執(zhí)行,則稱為順序內聚。

軟件工程(完整教程)

如圖,一個求一元二次方程根的模塊由三個處理元素組成,該模塊中存在順序內聚。通常,順序內聚中一個處理元素的輸出是另一個處理元素的輸入。

求一元二次方程根模塊1.輸入方程系數(shù)2.求解3.打印方程的解順序內聚示例軟件工程(完整教程)3)通信內聚(CommunicationalCohesion)如果一個模塊中所有處理元素都使用同一個輸入數(shù)據(jù)和(或)產生同一個輸出數(shù)據(jù),稱為通信內聚。

軟件工程(完整教程)如圖,模塊A的處理單元將根據(jù)同一個數(shù)據(jù)文件FILE的數(shù)據(jù)產生不同的表格,因此它存在通信內聚。通信內聚有時也稱為數(shù)據(jù)內聚。A從文件FILE中讀出數(shù)據(jù)1.由數(shù)據(jù)產生報表A2.由數(shù)據(jù)產生報表B通信內聚示例軟件工程(完整教程)4)過程內聚(ProceduralCohesion)如果一個模塊內的處理元素是相關的,而且必須以特定的次序執(zhí)行,稱為過程內聚。過程內聚與順序內聚的區(qū)別是:順序內聚中是數(shù)據(jù)流從一個處理單元流到另一個處理單元,而過程內聚是控制流從一個動作流向另一個動作。

軟件工程(完整教程)5)時間內聚(TemporalCohesion)如果一個模塊包含的任務必須在同一段時間內執(zhí)行,稱為時間內聚。也稱為瞬時內聚。軟件工程(完整教程)

例如,完成各種初始化工作的模塊,或者處理故障的模塊都存在時間內聚。如圖,在“緊急故障處理模塊”中,“關閉文件”、“報警”、“保留現(xiàn)場”等任務都必須無中斷地同時處理。緊急故障處理模塊1.關閉文件2.報警3.保留現(xiàn)場時間內聚示例軟件工程(完整教程)6)邏輯內聚(LogicalCohesion)如果模塊完成的任務在邏輯上屬于相同或相似的一類,稱為邏輯內聚。軟件工程(完整教程)如圖,A、B、C模塊合并成ABC模塊之后,ABC模塊就是邏輯內聚模塊。XYZABCXYZABC合并邏輯內聚示例軟件工程(完整教程)對邏輯內聚模塊的調用,常常需要有一個功能開關,由上層調用模塊向它發(fā)出一個控制信號,在多個關聯(lián)性功能中選擇執(zhí)行某一個功能。這種內聚較差,增加了模塊之間的聯(lián)系,不易修改。軟件工程(完整教程)7)偶然內聚(CoincidentalCohesion)如果一個模塊由完成若干毫無關系的功能處理元素偶然組合在一起的,就叫偶然內聚。軟件工程(完整教程)

偶然內聚是最差的一種內聚。常犯這種錯誤的一種情況是:有時在寫完程序后,發(fā)現(xiàn)一組語句在多處出現(xiàn),于是為了節(jié)省空間而將這些語句作為一個模塊設計,就出現(xiàn)偶然內聚。軟件工程(完整教程)如圖,模塊A、B、C出現(xiàn)公共代碼段W,于是將W獨立成一個模塊,而W中這些語句并沒有任何聯(lián)系。如果在測試中發(fā)現(xiàn)模塊A不需要做“X=Y+Z”,而應該做“X=Y*Z”,此時對W的維護就很困難了。ABCW模塊X=Y+ZGETCARDIFI=5THENE=0…偶然內聚示例軟件工程(完整教程)

軟件設計中應該:力求做到高內聚,盡量少用中內聚,不用低內聚。

軟件工程(完整教程)5.3啟發(fā)式規(guī)則1.改進軟件結構提高模塊獨立性2.模塊規(guī)模應該適中3.深度、寬度、扇出和扇入都應適當

深度:軟件結構中控制的層數(shù);

寬度:軟件結構內同一個層次上的模塊總數(shù)的最大值;

扇出:一個模塊直接控制(調用)其它模塊的數(shù)目;

扇入:一個模塊被其它模塊調用的數(shù)目。

正文加工系統(tǒng)輸入輸出編輯加標題存儲檢索編目錄格式化添加刪除插入修改合并列表軟件工程(完整教程)對扇出、扇入過大的改進:

(a)對扇入過大的改進(b)對扇出過大的改進軟件工程(完整教程)4.模塊的作用域應該在控制域之內

MAGBCEDF圖5.2模塊的作用域和控制域作用域:受該模塊內一個判定影響的所有模塊的集合??刂朴颍耗K本身以及所有從屬于它的模塊的集合。軟件工程(完整教程)如:QUAD-ROOT(TBL,X)求一元二次方程的根的模塊,其中TBL,X都為數(shù)組,分別代表方程的系數(shù)和方程的根。應該使接口更簡單,如:

QUAD-ROOT(A,B,C,ROOT1,ROOT2)A、B、C是方程的系數(shù),ROOT1,ROOT2是方程的根。5.力爭降低模塊接口的復雜度軟件工程(完整教程)6.設計單入口、單出口的模塊7.模塊功能應該可以預測軟件工程(完整教程)5.4圖形工具5.4.1層次圖和HIPO圖

正文加工系統(tǒng)輸入輸出編輯加標題存儲檢索編目錄格式化添加刪除插入修改合并列表圖5.3正文加工系統(tǒng)的層次圖軟件工程(完整教程)正文加工系統(tǒng)輸入1.0輸出2.0編輯3.0加標題4.0存儲5.0檢索6.0編目錄7.0格式化8.0添加3.1刪除3.2插入3.3修改3.4合并3.5列表3.6圖5.4帶編號的層次圖(H圖)HIPO圖是:“層次圖+輸入/處理/輸出圖”軟件工程(完整教程)5.4.2結構圖產生最佳解得到好輸入計算最佳解輸出結果讀輸入編輯輸入結果格式化顯示結果圖4.5結構圖的例子—產生最佳解的一般結構軟件工程(完整教程)MAB圖5.6判定為真時調用A,為假時調用BMABC圖5.7模塊M循環(huán)調用模塊A、B、C軟件工程(完整教程)5.5面向數(shù)據(jù)流的設計方法面向數(shù)據(jù)流設計(DataFlow-OrientedDesign,DFOD)是與數(shù)據(jù)流分析(DFA)對應的結構化軟件設計技術。面向數(shù)據(jù)流的設計將得到以數(shù)據(jù)流圖為基礎的軟件模塊結構圖。

軟件工程(完整教程)數(shù)據(jù)流可以分為兩種類型:

1)變換型數(shù)據(jù)流

2)事務型數(shù)據(jù)流

5.5.1變換流與事務流軟件工程(完整教程)一、變換流

具有較明確的輸入、變換(或稱主加工)和輸出界面的數(shù)據(jù)流圖稱為變換型數(shù)據(jù)流圖。如圖所示,該變換中心可以理解為數(shù)據(jù)的加工和處理程序。

讀入原始數(shù)據(jù)校驗原始數(shù)據(jù)計算最優(yōu)結果編輯打印最優(yōu)結果輸入變換中心輸出軟件工程(完整教程)

事務型數(shù)據(jù)流圖中存在一個事務中心(也就是數(shù)據(jù)處理、加工中心),它將輸入分離成若干個發(fā)散的數(shù)據(jù)流,形成許多活動路徑,并根據(jù)輸入值選擇其中一條路徑。要求類別處理分房處理調房處理退房處理住房要求事務中心活動路徑二、事務流軟件工程(完整教程)

通常,一個實際系統(tǒng)的數(shù)據(jù)流圖是變換型和事務型兩種類型的混合體。如圖所示,中間的子塊屬事務型數(shù)據(jù)流,如果把中間子塊視為一個處理整體的話,整個程序屬變換型程序。

A(事務型,A為事務中心)變換中心輸入輸出混合型數(shù)據(jù)流圖軟件工程(完整教程)面向數(shù)據(jù)流設計軟件結構的基本步驟有七步:

1)復審并精化數(shù)據(jù)流圖;

2)確定數(shù)據(jù)處理流圖的類型;

3)確定變換中心或事務中心;5.5.2面向數(shù)據(jù)流設計的步驟軟件工程(完整教程)4)將數(shù)據(jù)流圖映射成軟件模塊結構圖,設計出該數(shù)據(jù)流圖對應的第一層模塊結構;5)基于數(shù)據(jù)流圖逐步分解,設計下層模塊;6)運用模塊設計和優(yōu)化準則優(yōu)化軟件結構;7)描述模塊的接口。軟件工程(完整教程)復查、精化數(shù)據(jù)流圖類型找出事務中心找出變換中心映射成事務結構映射成變換結構優(yōu)化軟件模塊結構導出模塊結構復查不滿意變換事務變換設計事務設計面向數(shù)據(jù)流的設計步驟軟件工程(完整教程)

變換設計就是從變換型數(shù)據(jù)流圖映射出軟件模塊結構的過程,也稱以變換為中心的設計。

5.5.3變換設計軟件工程(完整教程)變換設計的基本方法有兩步:1)分解第一層模塊結構

就是把整個變換分解成輸入控制模塊Ci、輸出控制模塊Co和變換中心控制模塊Ct,由主控模塊控制。主控模塊輸出控制模塊Co變換中心控制模塊Ct輸入控制模塊Ci軟件工程(完整教程)2)分別設計輸入、輸出和處理的下層模塊結構方法是:

從變換中心邊界向兩側移動,分別把輸入通路和輸出通路的每個處理映射成輸入控制模塊Ci和輸出控制模塊Co的下屬模塊。變換中心的下層模塊,是把每個處理映射成變換中心控制模塊Ct的一個直接下屬模塊。軟件工程(完整教程)ABCDFEGHIJK變換中心輸入輸出主控模塊輸出控制模塊Co變換中心控制模塊Ct輸入控制模塊CiDCBAEFGIHJK軟件工程(完整教程)

事務設計就是從事務型數(shù)據(jù)流圖映射出軟件模塊結構的過程,也稱為以事務為中心的設計。5.5.4事務設計軟件工程(完整教程)事務設計的基本方法有兩步:

1)建立主控模塊、接收輸入類型分析模塊和事務調度模塊;主模塊調度輸入類型分析軟件工程(完整教程)2)分別設計輸入類型分析模塊和調度模塊的下層模塊結構。方法是:將輸出的每條通路作為調度模塊的一個判斷分支,而輸入類型分析模塊的下層模塊與變換設計類似。

軟件工程(完整教程)I2I3I1TCA1B1C1A2B2C2事務中心主模塊調度輸入類型分析I1I3I2A1A2B1B2C1C2軟件工程(完整教程)第5章小結

概要設計說明書該說明書是概要實際階段的工作成果,它應說明功能分配、模塊劃分、程序的總體結構、輸入輸出以及接口設計、運行設計、數(shù)據(jù)結構設計和出錯處理設計等,為詳細設計提供基礎。軟件工程(完整教程)第6章:詳細設計目標:確定如何具體實現(xiàn)所要求的系統(tǒng)。不是具體編寫程序,而是設計程序的“藍圖”。詳細設計的結果決定最終程序代碼的質量。軟件工程(完整教程)E.W.Dijkstra最早提出結構程序設計:程序質量與程序中包含的Goto語句的數(shù)量成反比(1965)。1966,Bohm,Jacopini,證明了只用“順序”、“選擇”、“循環(huán)”控制結構就能實現(xiàn)任何單入口單出口程序。6.1結構程序設計軟件工程(完整教程)理論上,最基本的控制結構只有兩種:順序、循環(huán)結構(選擇結構可由其兩者構造)。

學界認識到,不是簡單去掉Goto語句的問題,而是要創(chuàng)立一種新的程序設計方法。

——結構化程序設計(IBM率先成功運用)。軟件工程(完整教程)結構程序設計:一種設計程序的技術,它采用自頂向下逐步求精的設計方法和單入口單出口的控制結構。

軟件工程(完整教程)使用結構程序設計技術的好處:1)提高軟件開發(fā)工程的成功率和生產率;2)系統(tǒng)有清晰的層次結構,容易閱讀理解;3)單入口單出口的控制結構,容易診斷糾正;4)模塊化可以使得軟件可以重用;5)程序邏輯結構清晰,有利于程序正確性證明。軟件工程(完整教程)經典的結構程序設計:只允許使用順序、IF_THEN_ELSE選擇和DO_WHILE循環(huán);擴展的結構程序設計:除了三種基本控制結構,還使用DO_CASE和DO_UNTIL循環(huán);修正的結構程序設計:除了三種基本控制結構和兩種擴充結構,還使用BREAK等結構。軟件工程(完整教程)流程圖通常由三種結點組成:1)函數(shù)結點如果一個結點有一個入口線和一個出口線,則稱為函數(shù)結點。由于函數(shù)結點一般對應于賦值語句,所以F也表示了這一個結點對應的函數(shù)關系。F函數(shù)結點6.1.1結構化程序6.1.1.1控制結構軟件工程(完整教程)2)謂詞結點如果一個結點有一個入口線和兩個出口線,而且它不改變程序的數(shù)據(jù)項的值,則稱為謂詞結點。P是一個謂詞,根據(jù)P的邏輯值(T或F),結點有不同的出口。P謂詞結點軟件工程(完整教程)3)匯點如果一個結點有兩個或多個入口線和一個出口線,而且它不執(zhí)行任何運算,則稱為匯點。匯點匯點的簡略表示軟件工程(完整教程)1)順序結構:相當于“A、B”2.三種基本控制結構AB(a)順序結構軟件工程(完整教程)2)選擇結構相當于“IfexpthenAelseBendif”ABexp(b)選擇結構軟件工程(完整教程)3)循環(huán)結構:相當于“WhileexpdoA”A(c)循環(huán)結構exp軟件工程(完整教程)1)多分支結構相當于“CaseIofI=1:C1;I=2:C2;I=3:C3;…;I=n:Cn”3.擴充兩種控制結構

CnC3C1C2(d)多分支結構I=?…軟件工程(完整教程)2)UNTIL循環(huán)結構相當于“RepeatAUntilexp”A(e)UNTIL循環(huán)exp軟件工程(完整教程)6.1.1.2正規(guī)程序定義1:一個流程圖程序如果滿足下面兩個條件,稱為正規(guī)程序:

1)具有一個入口線和一個出口線;

2)對每一個結點,都有一條從入口線到出口線的通路通過該結點。

軟件工程(完整教程)

由于正規(guī)程序有一個入口線和一個出口線,因而一個正規(guī)程序總可以抽象為一個函數(shù)結點。F函數(shù)結點軟件工程(完整教程)定義2:如果一個正規(guī)程序的某個部分仍然是正規(guī)程序,那么稱它為該正規(guī)程序的正規(guī)子程序。

軟件工程(完整教程)先給出一個概念:封閉結構定義3:流程圖中,兩個結點之間所有沒有重復結點的通路組成的結構稱為封閉結構。6.1.1.3基本程序

軟件工程(完整教程)如圖:封閉結構為{a-[b1-b2-b3;c1-c2;d1-d2-d3;e]-f}ab1b2b3c2c1d1d2d3ef軟件工程(完整教程)1)不包括多于一個結點的正規(guī)子程序,即它是一種不可再分解的正規(guī)程序;(程序自身不可視為正規(guī)子程序)

2)如果存在封閉結構,封閉結構都是正規(guī)程序。

6.1.1.3基本程序定義4:一個正規(guī)程序,如果滿足以下兩個條件,則稱之為基本程序:軟件工程(完整教程)基本程序形式有多種,前面提到的三種基本控制結構(順序結構、選擇結構、循環(huán)結構)和兩個擴充控制結構(多分支結構、UNTIL循環(huán)結構)都是基本程序。軟件工程(完整教程)定義5:用以構造程序的基本程序的集合稱為基集合。如:{順序,if-then-else,whiledo}

{順序,if-then-else,repeat-until}

都是基集合。軟件工程(完整教程)定義6:如果一個基本程序的函數(shù)結點用另一個基本函數(shù)程序替換,產生的新的正規(guī)程序稱為復合程序。A復合程序expBexpA:循環(huán)結構的A函數(shù)結點用另一循環(huán)結構代替,即嵌套循環(huán),就產生了復合程序。軟件工程(完整教程)

由于復合程序是由一些基本程序組成,因此,無論從總體上看或是從每個組成部分看,都滿足“一個入口,一個出口”的原則,這樣的程序就是通常說的好結構程序,或者結構化程序。

軟件工程(完整教程)定義7:由基本程序的一個固定的基集合構造出的復合程序,稱為結構化程序。軟件工程(完整教程)結構化定理:任一正規(guī)程序都可以函數(shù)等價于一個由基集合{順序,If-else-then,While-do}產生的結構化程序。實際上,只要能證明可以將任一正規(guī)程序轉換成等價的結構化程序就可以證明這個結構化定理。6.1.2結構化定理軟件工程(完整教程)證明:(分三步進行結構化程序的轉換)步驟一:從程序入口處開始給程序的函數(shù)結點和謂詞結點編號:1,2,3,…,n,同時,將每個函數(shù)和謂詞結點的出口線用它后面的結點的號碼進行編號,如果出口線后面沒有結點,也就是說該結點的出口線與程序的出口線相連時,出口線編號為0。軟件工程(完整教程)步驟二:對原程序中每一個編號為i,出口線編號為j的函數(shù)結點H,構造一個新的序列程序Gi,如圖:HGi=HL:=jiij軟件工程(完整教程)類似地,對于每個編號為i,出口線分別為j和k的謂詞結點,構造一個新的選擇程序Gi,如圖:PjkiGi=PiL:=jL:=k軟件工程(完整教程)步驟三:利用已經得到的一些Gi程序(i=1,2,3,…,n),按下圖的形式構造一個While-do循環(huán)。圖中的循環(huán)體是一個對L從1到n的嵌套選擇(if-then-else)程序,轉換后的程序與原程序是等價的,是由基集合{順序、選擇、循環(huán)}所復合成的結構化程序。L:=1L>0L=1L=nL=2GnL:=0G2G1……TTTTFFFF軟件工程(完整教程)

這種方法并不是唯一的把程序轉變?yōu)榻Y構化程序的方法,所得的程序也不一定是最好的。它的目的是為了證明結構化定理。軟件工程(完整教程)例1:把圖示的非結構化程序轉換成結構化程序(用結構化定理證明過程提供的方法轉換)

6.1.3非結構化程序到結構化程序的轉換P1P2AB非結構化程序例圖軟件工程(完整教程)1)進行結點及其出口線的編號;

1340202341P1P2AB非結構化程序例圖軟件工程(完整教程)P1321G1=P11L:=3L:=22)將圖中的四個結點構造新的程序G1、G2、G3、G4;軟件工程(完整教程)BG2=BL:=0220軟件工程(完整教程)P2403G3=P23L:=4L:=0軟件工程(完整教程)AG4=AL:=1441軟件工程(完整教程)3)利用得到的G1、G2、G3、G4按介紹的方法構造一個While-do循環(huán),最終結果如圖:L:=1L>0L=1L=4L=2L:=0P1L:=3L:=2BL:=0L=3P2L:=4L:=0AL:=1轉化后的結構化程序圖FFFFFTTTTT軟件工程(完整教程)6.2人機界面設計6.2.1設計問題

1.系統(tǒng)響應時間;

2.用戶幫助;

3.出錯信息處理;

4.命令交互軟件工程(完整教程)6.2.2設計過程6.2.3人機界面設計指南

1.一般交互指南;

2.信息顯示指南;

3.數(shù)據(jù)輸入指南。軟件工程(完整教程)6.3過程設計的工具6.3.1程序流程圖

程序流程圖:是一種描述程序的控制結構流程和指令執(zhí)行情況的有向圖。歷史悠久、使用廣泛、直觀描繪控制流程、便于初學者掌握。軟件工程(完整教程)ASP檢索程序流程圖:開始加載Include文件定義記數(shù)變量、作物變量創(chuàng)建數(shù)據(jù)庫鏈接對象、記錄集對象打開數(shù)據(jù)庫用客戶提交的值對作物變量賦值SQL查詢語句賦值通過記錄集對象打開SQL語句設定的記錄記錄集末端?記數(shù)變量加1,輸出記錄字段值及圖像轉跳下一記錄關閉數(shù)據(jù)庫鏈接對象、記錄集對象,并釋放資源輸出記錄數(shù)和提示結束YN軟件工程(完整教程)2)程序流程圖中用箭頭代表控制流,因此程序員不受任何約束,可以完全不顧結構程序設計的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論