1、前言
軟件工程中規定,軟件生命週期由軟件定義、軟件開發和運行維護(也稱爲軟件維護)3個時期組成,每個時期又進一步劃分爲若干個階段。程序員
-
軟件定義時期包括問題定義、可行性研究、需求分析三個階段。web
-
軟件開發時期包括整體設計、詳細設計、編碼和單元測試、綜合測試四個階段。數據庫
-
軟件維護時期只包括軟件維護這一個階段。編程
本文旨在說明在軟件生命週期不一樣階段的各類圖的含義與使用。微信
2、可行性研究
2.1 系統流程圖
系統流程圖是歸納地描繪物理系統的傳統工具。它的基本思想是用圖形符號以黑盒子形式描繪組成系統的每一個部件(程序、文檔、數據庫、人工過程等)。系統流程圖表達的數據在系統各部件之間流動的狀況,而不是對數據進行加工處理的控制過程,所以儘管系統流程圖的某些符號和程序流程圖的符號形式相同,可是它倒是物理數據流圖而不是程序流程圖。數據結構
符號
當以歸納的方式抽象的描繪一個實際系統時,僅僅使用圖2.1中列出的基本符號就足夠了。當須要更具體地描繪一個物理系統時還須要使用圖2.2中列出的系統符號,利用這些符號能夠把一個廣義的輸入輸出操做具體化爲讀寫存儲在特殊設備上的文件(或數據庫),把抽象處理具體化爲特定的程序或手工操做等。編輯器
用法
例子
分層
面對複雜的系統時,一個比較好的方法是分層次地描繪這個系統。首先用一張高層次的系統流程圖描繪系統整體概貌,代表系統的關鍵功能。而後分別把每一個關鍵功能擴展到適當的詳細程度,畫在單獨的一頁紙上。這種分層次的描繪方法便於閱讀者按從抽象到具體的過程逐步深刻地瞭解一個複雜的系統。ide
2.2 數據流圖
數據流圖(DFD)是一種圖形化技術,它描繪信息流和數據從輸入移動到輸出的過程當中所經受的變換。在數據流圖中沒有任何具體的物理部件,它只是描繪數據在軟件中流動和被處理的邏輯過程。數據流圖是系統邏輯功能的圖形表示,即便不是專業的計算機技術人員也容易理解它,所以是分析員與用戶之間極好的通訊工具。此外,設計數據流圖時只須要考慮系統必須完成的基本邏輯功能,徹底不須要考慮樣具體的實現這些功能,因此它也是從此進行軟件設計的很好的出發點。工具
符號
例子
3、需求分析
3.1 實體-聯繫圖
爲了把用戶的數據要求清楚、準確地描述出來,系統分析員一般創建一個概念性的數據模型(也稱爲信息模型)。概念性數據模型是一種面向問題的數據模型,是按照用戶的觀點對數據創建的模型。它描述了從用戶角度看到的數據,它反映了用戶的現實環境,並且與在軟件系統中的實現方法無關。數據模型中包含 3 種相互關聯的信息:數據對象、數據對象的屬性及數據對象彼此間相互鏈接的關係。單元測試
一般,使用實體-聯繫圖(entity-relationship diagram)來創建數據模型。能夠把實體-聯繫圖簡稱爲 ER 圖,相應地可把用 ER 圖描繪的數據模型稱爲 ER 模型。
符號
ER 圖中包含了實體、關係和屬性 3 種基本成分,一般用矩形框表明實體,用鏈接相關實體的菱形框表示關係,用橢圓形或圓角矩形表示實體(或關係)的屬性,並用直線把實體(或關係)與其屬性鏈接起來。
例子
3.2 狀態轉換圖
在需求分析過程當中應該創建起軟件系統的行爲模型。狀態轉換圖(簡稱爲狀態圖)經過描繪系統的狀態及引發系統狀態轉換的事件,來表示系統的行爲。此外,狀態圖還指明瞭做爲特定事件的結果系統將作哪些動做(例如,處理數據)。
狀態
狀態是任何能夠被觀察到的系統行爲模式,一個狀態表明系統的一種行爲模式。狀態規定了系統對事件的響應方式。系統對事件的響應,既能夠是作一個(或一系列)動做,也能夠是僅僅改變系統自己的狀態,還能夠是既改變狀態又作動做。
在狀態圖中定義的狀態主要有:初態(即初始狀態)、終態(即最終狀態)和中間狀態。在一張狀態圖中只能有一個初態,而終態則能夠有 0 至多個。
狀態圖既能夠表示系統循環運行過程,也能夠表示系統單程生命期。當描繪循環運行過程時,一般並不關心循環是怎樣啓動的。當描繪單程生命期時,須要標明初始狀態(系統啓動時進入初始狀態)和最終狀態(系統運行結束時到達最終狀態)。
事件
事件是在某個特定時刻發生的事情,它是對引發系統作動做或(和)從一個狀態轉換到另外一個狀態的外界事件的抽象。例如,內部時鐘代表某個規定的時間段已通過去,用戶移動或單擊鼠標等都是事件。簡而言之,事件就是引發系統作動做或(和)轉換狀態的控制信息。
符號
在狀態圖中,初態用實心圓表示,終態用一對同心圓(內圓爲實心圓)表示。中間狀態用圓角矩形表示,能夠用兩條水平橫線把它分紅上、中、下 3 個部分。上面部分爲狀態的名稱,這部分是必須有的;中間部分爲狀態變量的名字和值,這部分是可選的;下面部分是活動表,這部分也是可選的。
活動表的語法格式以下:
事件名(參數表)/ 動做表達式
其中,「事件名」能夠是任何事件的名稱。在活動表中常用下述 3 種標準事件:entry,exit 和 do。entry 事件指定進入該狀態的動做,exit 事件指定退出該狀態的動做,而 do 事件則指定在該狀態下的動做。須要時能夠爲事件指定參數表。活動表中的動做表達式描述應作的具體動做。
狀態圖中兩個狀態之間帶箭頭的連線稱爲狀態轉換,箭頭指明瞭轉換方向。狀態變遷一般是由事件觸發的,在這種狀況下應在表示狀態轉換的箭頭線上標出觸發轉換的事件表達式;若是在箭頭線上未標明事件,則表示在源狀態的內部活動執行完以後自動觸發轉換。
事件表達式的語法以下:
事件說明[守衛條件] / 動做表達式
其中,事件說明的語法爲:事件名(參數表)。
守衛條件是一個布爾表達式。若是同時使用事件說明和守衛條件,則當且僅當事件發生且布爾表達式爲真時,狀態轉換才發生。若是隻有守衛條件沒有事件說明,則只要守衛條件爲真,狀態轉換就發生。
動做表達式是一個過程表達式,當狀態轉換開始時執行該表達式。
圖 3.3 給出了狀態圖中使用的主要符號。
例子
3.3 層次方框圖
層次方框圖用樹形結構的一系列多層次的矩形框描繪數據的層次結構。樹形結構的頂層是一個單獨的矩形框,它表明完整的數據結構,下面的各層矩形框表明這個數據的子集,最底層的各個框表明組成這個數據的實際數據元素(不能再分割的元素)。
例子
3.4 Warnier圖
法國計算機科學家 Warnier 提出了表示信息層次結構的另一種圖形工具— Warnier 圖。和層次方框圖相似,Warnier 圖也用樹形結構描繪信息,可是這種圖形工具比層次方框圖提供了更豐富的描繪手段。
用 Warnier 圖能夠代表信息的邏輯組織,也就是說,它能夠指出一類信息或一個信息元素是重複出現的,也能夠表示特定信息在某一類信息中是有條件地出現的。由於重複和條件約束是說明軟件處理過程的基礎,因此很容易把 Warnier 圖轉變成軟件設計的工具。
例子
圖中花括號用來區分數據結構的層次,在一個花括號內的全部名字都屬於同一類信息;異 或符號(⊕)代表一類信息或一個數據元素在必定條件下才出現,並且在這個符號上、下方 的兩個名字所表明的數據只能出現一個;在一個名字下面(或右邊)的圓括號中的數字指明瞭這個名字表明的信息類(或元素)在這個數據結構中重複出現的次數。(例如 P1 種、 P2 種)
3.5 IPO圖
IPO 圖是輸入、處理、輸出圖的簡稱,它是由美國 IBM 公司發展完善起來的一種圖形工具,可以方便地描繪輸入數據、對數據的處理和輸出數據之間的關係。
IPO 圖使用的基本符號既少又簡單,所以很容易學會使用這種圖形工具。它的基本形式是在左邊的框中列出有關的輸入數據,在中間的框內列出主要的處理,在右邊的框內列出產生的輸出數據。處理框中列出處理的次序暗示了執行的順序,可是用這些基本符號還不足以精確描述執行處理的詳細狀況。在IPO圖中還用相似向量符號的粗大箭頭清楚地指出數據通訊的狀況。
例子
4、整體設計
4.1 層次圖
層次圖用來描繪軟件的層次結構。層次圖中的一個矩形框表明一個模塊,方框間的連線表示調用關係而不像層次方框圖那樣表示組成關係。
例子
4.2 HIPO圖
HIPO 圖是美國 IBM 公司發明的「層次圖加輸入/處理/輸出圖」的英文縮寫。爲了能使 HIPO 圖具備可追蹤性,在 H 圖(層次圖)裏除了最頂層的方框以外,每一個方框都加了編號。
例子
4.3 結構圖
Yourdon 提出的結構圖是進行軟件結構設計的另外一個有力工具。結構圖和層次圖相似,也是描繪軟件結構的圖形工具,圖中一個方框表明一個模塊,框內註明模塊的名字或主要功能;方框之間的箭頭(或直線)表示模塊的調用關係。
在結構圖中一般還用帶註釋的箭頭表示模塊調用過程當中來回傳遞的信息。若是但願進一步標明傳遞的信息是數據仍是控制信息,則能夠利用註釋箭頭尾部的形狀來區分:尾部是空心圓表示傳遞的是數據,實心圓表示傳遞的是控制信息。
例子
5、詳細設計
5.1 程序流程圖
程序流程圖又稱爲程序框圖,它是歷史最悠久、使用最普遍的描述過程設計的方法,然而它也是用得最混亂的一種方法。
從20世紀40年代末到70年代中期,程序流程圖一直是軟件設計的主要工具。它的主要優勢是對控制流程的描繪很直觀,便於初學者掌握。因爲程序流程圖歷史悠久,爲最普遍的人所熟悉,儘管它有種種缺點,許多人建議中止使用它,但至今仍在普遍使用着。不過總的趨勢是愈來愈多的人再也不使用程序流程圖了。
程序流程圖的主要缺點以下。
-
程序流程圖本質上不是逐步求精的好工具,它誘使程序員過早地考慮程序的控制流程,而不去考慮程序的全局結構。 -
程序流程圖中用箭頭表明控制流,所以程序員不受任何約束,能夠徹底不顧結構程序設計的精神,隨意轉移控制。 -
程序流程圖不易表示數據結構。
符號
例子
5.2 盒圖
出於要有一種不容許違背結構程序設計精神的圖形工具的考慮,Nassi 和 Shneiderman 提出了盒圖,又稱爲 N-S 圖。它有下述特色。
-
功能域(即,一個特定控制結構的做用域)明確,能夠從盒圖上一眼就看出來。 -
不可能任意轉移控制。 -
很容易肯定局部和全程數據的做用域。 -
很容易表現嵌套關係,也能夠表示模塊的層次結構。
符號
5.3 PAD 圖
PAD 圖是問題分析圖(problem analysis diagram)的英文縮寫,自 1973年由日本日立公司發明之後,已獲得必定程度的推廣。它用二維樹形結構的圖來表示程序的控制流,將這種圖翻譯成程序代碼比較容易。
符號
優勢
PAD圖的主要優勢以下:
-
使用表示結構化控制結構的 PAD 符號所設計出來的程序必然是結構化程序。 -
PAD 圖所描繪的程序結構十分清晰。圖中最左面的豎線是程序的主線,即第一層結構。隨着程序層次的增長,PAD 圖逐漸向右延伸,每增長一個層次,圖形向右擴展一條豎線。PAD 圖中豎線的總條數就是程序的層次數。 -
用 PAD 圖表現程序邏輯,易讀、易懂、易記。PAD圖是二維樹形結構的圖形,程序從圖中最左豎線上端的結點開始執行,自上而下,從左向右順序執行,遍歷全部結點。 -
容易將 PAD 圖轉換成高級語言源程序,這種轉換可用軟件工具自動完成,從而可省去人工編碼的工做,有利於提升軟件可靠性和軟件生產率。 -
便可用於表示程序邏輯,也可用於描繪數據結構。 -
PAD 圖的符號支持自頂向下、逐步求精方法的使用。開始時設計者能夠定義一個抽象的程序,隨着設計工做的深刻而使用 def 符號逐步增長細節,直至完成詳細設計。
例子
5.4 斷定表
斷定表可以清晰地表示覆雜的條件組合與應作的動做之間的對應關係。
斷定表由 4 部分組成,左上部分列出全部條件,左下部是全部可能作的動做,右上部是表示各類條件組合的一個矩陣,右下部是和每種條件組合相對應的動做。斷定表右半部的每一列實質上是一條規則,規定了與特定的條件組合相對應的動做。
例子
5.5 斷定樹
斷定表雖然能清晰地表示覆雜的條件組合與應作的動做之間的對應關係,但其含義卻不是一眼就能看出來的。
斷定樹是斷定表的變種,它也能清晰地表示覆雜的條件組合與應作的動做之間的對應關係.
例子
6、後記
本文簡要描述了軟件工程中常常用到的一些圖,其實還有不少圖沒有介紹到,好比UML(標準圖、類圖)等,感興趣的小夥伴能夠自行學習。
做者:薛勤,互聯網從業者,編程愛好者。
本文首發自公衆號:代碼藝術(ID:onblog)未經許可,不可轉載
本文分享自微信公衆號 - 代碼藝術(onblog)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。