結構化分析

前言

結構化分析,是由資料流程圖開始,由上到下按資料流的處理程序,進行功能拆解,以邏輯概念的方式,達成並涵蓋所有的使用者需求。 本文的目的,便是介紹結構化分析過程中,可採用的各種表示方法,以及其運用方式與注意事項。

邱奕南,2009/8/12

資料流程圖(Data Flow Diagram,簡稱DFD)

資料流程圖,為結構化分析中最主要的圖形工具,以下為其最基本的圖例:

各圖形的意義為:

  1. 帶有箭頭的線:表示資料流。
  2. 圓形:表示資料處理。
  3. 方形:表示外界人物或系統。
  4. 雙線區:表示資料儲存體(亦可畫成圓角方形或兩側曲線方形)。

以下為資料流程圖實際運用的另一個例子:

以下為利用資料流程圖分析系統的過程:

  1. 最上層DFD(第0層)只有一個資料處理功能,用以表示整個系統與外界的資料流關係。但在系統未分析前,並不容易確認整個系統與外界的關係,故在實際處理時,多從第一層的子系統關係開始,往下展開以包含所有使用者需求,再往上集結而得到整個系統與外界的關係。
  2. 太複雜的資料處理功能,應針對該功能繼續進行分解,展開下一層的DFD。
  3. 資料處理功能是否需要繼續分解展開,由系統分析師依經驗決定,不宜過細,但也不可複雜到難以進行設計的工作。程式撰寫與系統設計的經驗,會有助於此一判斷。
  4. 在展開資料處理功能時,應同時製作需求回溯表,確認所有需求皆已為DFD所涵蓋。
  5. 將DFD的資料流定義與最底層的資料處理功能,撰寫成資料詞典。
  6. 將資料詞典中,意義與內容完全相同,但用詞不同的資料流名稱統一,並修正原DFD(也可不統一,但必須在資料詞典中標示資料流同義詞)。
  7. 將資料詞典中,相同輸出入資料與處理的功能合併,並修正原DFD。

以下則是在展開資料流程圖時的應注意事項:

  1. 每個DFD的資料處理功能數不宜過多,一般建議在9個以下,過份複雜的DFD會讓人不易理解與閱讀。
  2. 所有使用的名稱,包括資料流、資料處理等,都必須是有意義的,儘量挑選簡潔且可望詞生義的詞彙。
  3. 所有的資料處理功能,都必須確認輸入資料可完全轉成輸出資料,且沒有用不著的輸入資料。
  4. 各資料處理功能,應給予唯一編號做為識別,並可表示上下層的父子關係。例如對2.1的資料處理功能進行展開,則下層的資料處理功能應標示為2.1.1、2.1.2等。
  5. 資料處理功能展開時,應特別注意輸出入資料流是否完全對應。一旦某個DFD有所修改,均必須檢驗與上層的輸出入資料流是否符合。
  6. 最後必須確認整個DFD圖的資料流都是正確的,而各資料處理功能都是可行的。

資料詞典(Data Dictionary,簡稱DD)

資料詞典是用來定義與描述資料流程圖中出現的名稱,包括資料流、檔案、資料項、資料處理等。

(一)資料流定義

資料流的定義,皆使用資料描述記號描述。這些記號包括:

  1. =表前者由後者所組成。
  2. +表And。
  3. [ ]表多選一,項目間用|隔開。
  4. ( )表可有可無。
  5. x{ }y表重複出現x~y次,無x時表0,無y時表無限。
  6. * *表註解。

例如:

個人資料 = 姓名 + 性別 + 1{連絡電話} + (傳真電話) * 這是註解 *
性別 = [男 | 女]

(二)檔案定義

一般除非是特定格式的重要檔案才需要描述,否則皆交由系統設計師在設計時再依資料結構與演算法決定。以下為檔案定義應有的內容格式:

  1. 檔案名稱
  2. 組成:使用資料描述記號描述。
  3. 組織:描述檔案的存取方式及其資料架構。

(三)資料項定義

用以定義出現在資料流或檔案定義裡,具有特殊值域意義或限制的資料組成項目。一般的資料項,應交由系統設計師來決定其形態、結構與值域。以下為資料項定義應有的內容格式:

  1. 資料項名稱
  2. 值域及意義:描述各種值和它的意義。

(四)資料處理描述

描述資料流程圖裡各資料處理功能。以下為資料處理描述應有的內容格式:

  1. 資料處理功能的編號與名稱
  2. 輸入:應處理的輸入資料。
  3. 輸出:處理後應輸出的資料。
  4. 處理描述:描述應進行的資料處理、特殊的要求與限制。可使用結構化語言、決策圖(Decision Table)、決策樹(Decistion Tree)等工具描述。以能清楚描述應做的工作為原則,至於如何做的細節係在系統設計時才考量。

結構化語言,也稱為虛擬碼(Pseudo Code),是以自然語言做為描述的工具,但以結構化程式語言進行組織。亦即利用下列結構來組織自然語言:

  1. 循序(Sequence)
  2. 決策(Decision):if-then-else、switch-case。
  3. 重複(Repetition):for-loop、while-do、repeat-until。

以下則為決策表的一例:

條件一 Y Y Y N N N
條件二 L M H L M H
動作一 Y Y N ? ? N
動作二 N Y N ? N N

決策樹和決策表相似,只是改用圖形的方式呈現而已。

資料流程圖的擴充

傳統的資料流程圖,並無法表示即時系統或控制系統的功能與行為,故有學者便提出了一些擴充資料流程圖形來達到此一需求。以下便是一個基本例子:

各圖形的意義為:

  1. 帶有雙箭頭的線:表示即時性的連續資料流。
  2. 帶有箭頭的虛線:表示控制訊號或事件。
  3. 虛線圓形:表示控制程序。

資料處理的時間次序

資料流程圖中並未指明各資料處理的先後次序,故當需要表示資料處理的執行次序或條件時,便必須採用其他圖形來輔助。

(一)流程圖(Flow Chart)

流程圖是最常用也最容易被理解的執行次序表示法,以下為其基本圖例:

各圖形的意義為:

  1. 圓角扁方形:表示開始或結束。
  2. 方形:表示處理程序。
  3. 菱形:表示條件判斷。
  4. 箭頭:表示執行流程的先後次序,可附加條件結果。

(二)控制流程圖(Control Flow Diagram,簡稱CFD)

與流程圖獨立於資料流程圖之外不同,控制流程圖是基於資料流程圖的結果來標示控制流。也就是複製一份資料流程圖,然後將其中的資料流全數改成控制流(線形亦需變更為虛線)。 由於會有執行次序問題者,皆是資料處理有多個輸出資料流的情況,故只需針對這些輸出資料流,分別標上相對應的控制條件即可。 由於CFD與DFD有相同的圖形結構,故比流程圖更適合用來表示資料處理的次序。

(三)狀態轉移圖(State Transition Diagram,簡稱STD)

狀態轉移圖雖可用來定義資料處理的時間次序,但更常被用來定義系統的行為模式。首先定義出系統的各種狀態與應處理事務,再針對各狀態定義出各種事件,以及處理該事件的事務與最後應移轉的狀態。以下為一個簡單的列印系統STD例子:

狀態轉移圖也可用狀態轉移表的形式來表示。

實體關係圖(Entity-Relationship Diagram,簡稱ERD)

當系統有資料庫存取的需求時,多以下列步驟進行資料物件的關聯定義:

  1. 概念塑模(系統分析):以實體關係圖來表示實體/物件間的關係。
  2. 邏輯塑模(概要設計):從實體關係圖的項目關係,正規化成為資料庫關聯圖。
  3. 實體塑模(細步設計):定義資料庫關聯圖裡各資料項的名稱、形態與索引,成為實際的資料表。

實體關係圖主要用來表示真實世界裡各事物(實體或物件)間的關係,其資訊的來源必須基於需求規格書,並與資料詞典相互配合。以下為其基本圖例:

各圖形的意義為:

  1. 方形:表示實體。雙線方形表示弱實體,亦即必須依附其他實體才能存在的實體,例如學生家長必須有學生才會有此一實體。
  2. 菱形:表示關係。雙線菱形表示弱實體與實體間的關係。
  3. 連接菱形的關係線:單線表示部份參與(可有可無該關係),雙線表示完全參與(即每個實體至少要參與一個該關係)。必須標示出1:1、1:N、M:N的數量對應關係。
  4. 連接方形的橢圓:表示實體的屬性,雙線橢圓表示多重屬性值(即該屬性值有多個),虛線橢圓表示推導屬性(即該屬性可由其他屬性推導而來,例如星座可由生日推導而得)。
  5. 連接菱形的橢圓:表示因關係所產生的屬性,畫法同前。
  6. 橢圓(屬性)名稱:加底線的為鍵值(用以表示該實體的唯一值)。

以下則為一個應用例子:

對於太過複雜的ERD圖,為了方便閱讀,多會省略代表物件屬性的橢圓,而在方形實體物件裡或其他地方,直接以資料描述記號方式表示。例如前例中的課程屬性,便可寫成:

課程編號 + 上課時間 + 上課老師 + {選修學生}

需求回溯表

需求回溯表的目的有二,一是確認分析結果涵蓋全部的需求,一是在需求或功能變更時,可以得知會影響到那些功能或需求。需求回溯表的形式可有兩種:

  1. 正向回溯表:以需求為主,表列該需求由那些功能所完成。
  2. 反向回溯表:以功能為主,表列該功能會影響到那些需求。

以正向回溯表為例:

SR4.1.1: SF1.3.2.1.1, SF1.3.2.1.2

表示需求SR4.1.1是由資料處理功能SF1.3.2.1.1與SF1.3.2.1.2所完成。

參考文獻

  1. 軟體工程實務專家作法,第四版,Roger S. Pressman原著,金子葳等人譯,儒林,1998
  2. Structured Analysis and System Specification, Tom DeMarco, 儒林, 1979
  3. 結構化分析,三版,宋麗麗、曹延傑編著,資策會,1988
  4. Modern Structured Analysis, Edward Yourdon, Prentice-Hall, 1989
  5. 系統開發-分析、設計與製作,Alan L. Eliason原著,林淑芬譯,碁峰,1991
  6. Software Engineering for Information Systems, Donald C. McDermid, 1990
  7. Elements of Systems Analysis for Business Data Processing, Marvin Gore, John Stubbe, 1979