『软件工程9』结构化系统分析——解决软件“做什么”问题
結構化系統分析——解決軟件“做什么”問題
- 一、系統分析的任務和過程
- 1、系統分析的任務
- 2、系統分析的過程
- (1)問題識別
- (2)分析與綜合
- (3)編制文檔
- (4)系統分析評審
- 二、結構化分析方法
- 1、結構化分析方法是什么?
- 2、結構化分析方法使用的工具
- (1)數據流圖 (Data Flow Diagram, DFD)
- (2)數據字典 (Data Flow Diagram, DFD)
- (3)結構化英語 (Data Flow Diagram, DFD)
- (4)判定表 (Data Flow Diagram, DFD)
- (5)判定樹 (Data Flow Diagram, DFD)
- 三、動態分析方法
- 1、為什么需要系統動態分析方法?
- 2、最常用的動態分析方法
- (1)狀態遷移圖
- (2)時序圖
- 四、寫在最后
我們都知道軟件是什么,但有時候會止步于軟件要“做什么”的問題。在下面這篇文章中,我們將從結構化系統分析的角度出發,來解決軟件“做什么”的問題。
一、系統分析的任務和過程
1、系統分析的任務
借助當前系統的邏輯模型,去導出目標系統的邏輯模型,解決目標系統“做什么”的問題。
2、系統分析的過程
系統分析的過程包含以下四個步驟:
- 問題識別
- 分析與綜合
- 編制文檔
- 系統分析評審
接下來將對這四個步驟進行一一講解。
(1)問題識別
1) 從系統的角度來理解軟件并評審軟件范圍是否恰當。
2) 確定軟件的需求,即提出這些需求應實現的條件,和這些需求應達到的標準。
軟件的需求包括:
- 功能需求(最重要,功能是一切需求的根本)
- 性能需求
- 環境需求
- 可靠性需求
- 資源使用需求
- 成本消耗需求
- 開發進度需求
- 用戶界面需求
- 安全保密需求(經常會被遺漏的需求)
3) 建立通信路徑。建立和分析所需要的通信路徑,以保證能順利地對問題進行分析。
(2)分析與綜合
1) 逐步細化軟件功能,找出系統各元素間的聯系、接口特性和設計上的約束,分析是否滿足功能要求,是否合理。
2) 剔除不合理部分,增加其需要部分。最終綜合成系統的解決方案,給出目標系統的詳細邏輯模型。(核心:建立邏輯模型)
3)常用的分析方法
- 面向數據流的結構化分析方法 (SA)
- 面向數據結構的 Jackson 方法 (JSD)
- 面向數據結構的結構化數據系統開發方法 (DSSD)
- 面向對象的分析方法 (OOA) 等
(3)編制文檔
- 軟件需求說明書;
- 數據要求說明書;
- 初步的用戶手冊;
- 修改、完善與確定軟件開發實施計劃。
(4)系統分析評審
系統分析的評審內容主要有以下內容:
-
系統定義的目標是否與用戶的要求一致;
-
系統需求分析階段提供的文檔資料是否齊全;
-
文檔中的所有描述是否完整、清晰、準確反映用戶要求;
-
與所有其它系統成分的重要接口是否都已經描述;
-
被開發項目的數據流與數據結構是否足夠;
-
所有圖表是否清楚,在不補充說明時能否理解;
-
主要功能是否已包括在規定的軟件范圍之內,是否都已充分說明;
-
設計的約束條件或限制條件是否符合實際;
-
開發的技術風險是什么;
-
是否考慮過軟件需求的其它方案;
-
是否考慮過將來可能會提出的軟件需求;
-
是否詳細制定了檢驗標準,它們能否對系統定義是否成功進行確認;
-
……
二、結構化分析方法
1、結構化分析方法是什么?
- 結構化分析方法是一種面向數據流進行需求分析的方法;
- 適用于數據處理類型 (MIS) 軟件的需求分析;
- 用抽象模型的概念,按照軟件內部數據傳遞、變換的關系,自頂向下逐層分解,直到滿足所有功能要求為止。(自頂向下逐層分解是結構化分析的基本思路)
2、結構化分析方法使用的工具
結構化分析所使用的工具主要有五種:
- 數據流圖 (DFD)
- 數據字典 (DD)
- 結構化英語 (Structured English)
- 判定表 (Decision Table)
- 判定樹 (Decision Tree)
接下來將對這五種工具進行一一介紹。
(1)數據流圖 (Data Flow Diagram, DFD)
1)作用
- 數據流圖是組織中信息運動的抽象,是信息系統邏輯模型的主要形式,是分析人員與用戶進行交流的有效手段,也是系統設計的依據之一。
- 簡單來說,數據流圖是用一種圖形及與圖形相關的注釋來表示系統的邏輯功能。
2)主要圖形元素
數據流圖主要圖形元素為以下四種。圓圈代表數據加工,矩形代表外部實體,箭頭代表數據流,“椅子”形狀圖形代表數據存儲文件。
了解完數據流圖的主要圖形元素,再來了解這四種主要圖形元素常用的三種符號。
講到這里,相信大家都對數據流圖的主要圖形元素有了一定的了解,那么我們繼續來對這四個元素的含義做個歸納。
- 外部項(外部實體): 外部項在數據流圖中表示所描述系統的數據來源和去處的各種實體或工作環節。系統開發不能改變這些外部項本身的結構和固有屬性。
- 加工(數據加工): 又稱數據處理邏輯,描述系統對信息進行處理的邏輯功能。
- 數據存儲: 邏輯意義上的數據存儲環節,即系統信息處理功能所需要的、不考慮存儲物理介質和技術手段的數據存儲環節。
- 數據流: 與所描述系統信息處理功能有關的各類信息的載體,是各加工環節進行處理和輸出的數據集合。
介紹完具體的主要圖形元素,我們還要思考一個問題:這些圖形要怎么連接才是合理的?是不是只有有隨意一個圖形出現就可以了?那結果自然是否定的。這就引出了我們應該要注意的一個問題:數據流圖的規范。 具體內容如下:
DFD中允許的數據流:
①實體 -> 加工;②加工 -> 實體;③加工 -> 加工;④加工 -> 存儲;⑤存儲 -> 加工。
DFD中不允許的數據流:
①實體 -> 實體;②實體 -> 存儲;③存儲 -> 實體;④存儲 -> 存儲。
總結: 所有的數據流都要有加工,任意一個沒有經過加工的數據流都是不規范的。
注意: 所有數據流信息都要標注,除了加工與存儲相連時傳遞的信息剛好是數據存儲的內容(可省略),其它一律不可以。
3)數據流圖的層次結構
- 為了表達數據處理過程的數據加工情況,需要采用層次結構的數據流圖。
- 按照系統的層次結構進行逐步分解,以分層的數據流圖反映這種結構關系,能清楚地表達和容易理解系統。
- 在多層數據流圖中,頂層流圖僅包含一個加工,它代表被開發的系統。它的輸入流是該系統的輸入數據,輸出流是系統所輸出的數據。除頂層數據流圖外,其他數據流圖從零開始編號。
- 中間層流圖則表示對其上層父圖的細化。它的每一加工可能繼續細化,形成子圖。
- 底層流圖是指其加工不需再做分解的數據流圖,它處在最底層。
4)檢查和修改數據流圖的原則
- 數據流圖上所有圖形符號只限于上述四種基本圖形元素。
- 數據流圖的主圖必須包括上述四種基本元素,缺一不可。
- 數據流圖的主圖上的數據流必須封閉在外部實體之間。
- 每個加工至少有一個輸入數據流和一個輸出數據流,而且所有的數據流都要經過加工。
- 在數據流圖中,需按照層次給加工框編號,編號表明該加工所處層次及上下層的親子關系;有一種特殊情況就是,頂層圖的加工可以不用加編號。
- 當數據流圖只有一個加工時,可以不考慮存儲,但當數據流圖有多個加工時,一定要考慮存儲。
- 規定任何一個數據流子圖必須與它上一層的一個加工對應,兩者的輸入數據流和輸出數據流必須一致,即父圖與子圖的平衡。
- 圖上每個元素都必須有名字。
- 數據流圖中不可夾帶控制流。
5)錯誤實例
我們來看幾個錯誤實例。
錯誤原因: 布局不夠合理,實體應該在四周,加工在中間。
錯誤原因: 數據流圖畫的像數據流程圖。
錯誤原因: 數據流沒有標注,加工項沒有編號。
錯誤原因: 加工項出現名詞。
錯誤原因: 加工項只有輸入沒有輸出。
錯誤原因: 沒有數據存儲。
錯誤原因: 實體與數據存儲相連,所有的實體和存儲都必須經過加工。
6)數據流圖的局限性
只能給出系統邏輯功能的一個總框架,缺乏詳細、具體的內容。
7)案例分析
關于數據流圖的案例分析放在下一篇文章中,大家可以根據自身需求進行查看。
(2)數據字典 (Data Flow Diagram, DFD)
1)作用
數據字典對數據流圖中的各種成分起注解、說明作用,給這些成分賦以實際的內容。
數據字典與數據流圖配合,能清楚地表達數據處理的要求。
條目:數據流、數據元素、數據存儲、數據加工、外部實體
2)條目
數據字典有五個條目,即數據流圖 DFD 的四要素 + 數據元素,分別是 數據流 、 數據元素 、 數據存儲 、 數據加工 、 外部實體 。
具體圖例如下:
條目一:數據流
條目二:數據元素
條目三:數據存儲
條目四:數據加工
條目五:外部項
3)數據結構的符號描述
| = | 被定義為 | x=a |
| + | 與 | x=a+b |
| […,…]或[…|…] | 或 | x = [a , b],x = [a|b] |
| { … }或 m{…}n | 重復 | x = {a}, x = 3{a}8 |
| (…) | 可選 | x = (a) |
| “…” | 基本數據元素 | x = “a” |
| … | 連結符 | x = 1…9 |
4)案例分析
關于數據字典的案例分析放在下一篇文章中,大家可以根據自身需求進行查看。下面將結構化英語。
在講結構化英語之前,我們需要先來了解一個知識點。
對于數據流圖的每一個基本加工,都必須要有一個基本加工邏輯說明,那么基本加工邏輯說明是什么呢?基本加工邏輯說明是用來描述基本加工如何把 輸入數據流 變換為 輸出數據流 的加工規則。且用于寫基本加工邏輯說明的工具主要有 結構化英語 、 判定表 和 判定樹 ,所以說 結構化英語 是一個用來寫基本加工邏輯說明的工具。
了解完這個知識點后,我們開始來看結構化英語是什么吧!
(3)結構化英語 (Data Flow Diagram, DFD)
1)結構化英語是什么
- 結構化英語就是一種基本加工邏輯說明的方法。
- 結構化英語是一種介于自然語言和形式化語言之間的語言。
- 語言的正文用基本控制結構進行分割,加工中的操作用自然語言短語來表示。
2)結構化英語的詞匯表構成
- 英語命令動詞;
- 數據詞典中定義的名字;
- 有限的自定義詞;
- 邏輯關系詞 IF_THEN_ELSE 、CASE_OF 、WHILE_DO 、REPEAT_UNTIL 等組成。
3)常見基本控制結構
- 順序結構;
- 重復結構while_do 或 repeat_until 結構;
- 判定結構:if_then_else 或 case_of 結構。
4)案例:商店業務處理系統中”檢查發貨單“
if 發貨單金額超過$500 thenif 欠款超過了60天 then在償還欠款前不予批準else //(欠款未超期)發批準書,發貨單 else //(發貨單金額未超過$500)if 欠款超過60天 then發批準書,發貨單及賒欠報告else //(欠款未超期)發批準書,發貨單(4)判定表 (Data Flow Diagram, DFD)
1)使用條件
如果數據流圖的加工需要依賴于多個邏輯條件的取值,使用判定表來描述比較合適。
2)圖例
3)案例剖析
案例一:檢查發貨單
大家可以看到,在上圖中,左上角的地方是條件,也稱為條件樁。而因為條件引發的操作/動作,即左下角部分,稱為動作樁。
有了條件樁和動作樁以后,它們有一一對應的數據。條件樁對應條件項,動作樁對應動作項,即右上角和右下角部分。
案例二:旅游預訂票系統“計算折扣量”
同樣的,與依據案例一的例子同樣判斷。上面是條件樁和條件項,下面是動作樁和動作項。
(5)判定樹 (Data Flow Diagram, DFD)
1)使用條件
判定樹也是用來表達加工邏輯的一種工具,有時侯它比判定表更直觀。
2)案例剖析
同樣,我們依據判定表的兩個例子來做成判定樹。
案例一:檢查發貨單
案例二:旅游預訂票系統“計算折扣量”
從上面兩張圖中可以看到,判定樹相較于判定表來說會更加直觀。
三、動態分析方法
1、為什么需要系統動態分析方法?
-
系統的需求規格說明通常是用自然語言來敘述的,但是用自然語言描述往往會出現歧義性。
-
因此,為了直觀地分析系統的動作,從特定的視角出發去描述系統的行為,需要采用動態分析的方法。
2、最常用的動態分析方法
(1)狀態遷移圖
1)狀態遷移圖是什么?
狀態遷移圖,即 State Transition Diagram,縮寫為 STD 。狀態遷移圖是描述系統的狀態如何使外部的信號進行推移的一種圖形表示。
2)狀態遷移圖的表示方式
- 圓圈 ○ 表示可得到的系統狀態。
- 箭頭 → 表示從一種狀態向另一種狀態的遷移。
3)案例剖析:CPU進程的狀態遷移
假設某個系統當前有多個狀態申請占用CPU運行的進程, 其中CPU所分配進程的狀態遷移如下。
由上圖可分析出狀態遷移圖,狀態遷移表以及相對應的狀態,如下圖所示。
4)狀態遷移圖的優點
-
狀態之間的關系能夠直觀地被捕捉到。
-
由于狀態遷移圖的單純性,能夠機械地分析許多情況,可很容易地建立分析工具。
(2)時序圖
1)時序圖是什么?
時序圖 (Sequence Diagram) ,又名序列圖、循序圖,是一種 UML 交互圖。它通過描述對象之間發送消息的時間順序來顯示多個對象之間的動態協作。
2)案例剖析:功能事件
在下圖中, 對于事件 e , 功能1~功能3 的處理時間總計為 (T1+T2+T3) ,其中功能間切換時間為 0 。
3)案例剖析:進程間的通信流
在下圖中,采用擴充時序圖可表示進程間的通信流,用于分析幾個事件的交錯現象。 C1 與 C2 ,R1 與 R2 是交錯的。因此,可以做如下分析:“ HOST1 在等待 C1 的回答時(即 R1 期間),要能接收從 HOST2 發出的命令 C2 。”
四、寫在最后
對于軟件工程中的結構化系統分析來說,主要解決軟件“做什么”的問題。特別是關于數據流圖和數據字典的內容較多,學完要多消化總結。同時我也將在下一篇文章講解關于數據流圖與數據字典的一些案例分析。
關于軟件工程的結構化系統分析就講到這里啦!如有需要了解軟件工程相關的其他內容,可到『軟件工程』欄目進行查看學習~
如有不理解或有誤的地方也歡迎評論區評論或私信我交流~
- 關注公眾號 星期一研究室 ,不定期分享學習干貨,學習路上不迷路~
- 如果這篇文章對你有用,記得點個贊加個關注再走哦~
總結
以上是生活随笔為你收集整理的『软件工程9』结构化系统分析——解决软件“做什么”问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于前端性能优化问题,认识网页加载过程和
- 下一篇: 12306高铁票如何选座位 让你想坐哪就