データフロー図(DFD)の書き方|レベル分けの考え方と記号
システムの資料にDFDが出てきたものの、フローチャートとの違いが分からない。あるいは自分で描こうとして、どこまで細かく分ければよいか迷う。DFDは記号が4つしかない単純な図ですが、レベル分けという独特の考え方があります。この記事では、記号の意味とレベル分けの原則を整理します。
DFDとは|データの流れを示す図
DFD(Data Flow Diagram、データフロー図)は、システムの中をデータがどう流れるかを表した図です。どこからデータが入り、何によって加工され、どこに保管され、どこへ出ていくかを示します。
フローチャートとの決定的な違いは、時間の概念がないことです。フローチャートが「次に何をするか」という順序を表すのに対し、DFDは「データがどこへ動くか」という関係だけを表します。分岐や繰り返しは描きません。
何のために使うのか
主な用途は、システムの全体像を関係者で共有することです。特に、既存のシステムを刷新するときや、複数のシステムをつなぐときに効果があります。
「この情報はどこから来ているのか」「なぜ2箇所で同じデータを持っているのか」といった疑問は、DFDを描くと見えてきます。データの重複や、誰も使っていない出力に気づく機会にもなります。
4つの記号
DFDの構成要素は4つだけです。記号の形は流儀によって多少違いますが、意味は共通しています。
プロセス(円または角丸四角)
データに何らかの加工を加える処理を表します。「受注を登録する」「請求金額を計算する」といった、動詞で終わる形で書きます。
重要な原則が1つあります。プロセスには必ず入力と出力の両方があることです。入力だけで出力がないプロセス、出力だけで入力がないプロセスは、描き間違いです。
データストア(平行な2本線)
データが保管される場所です。データベースのテーブル、ファイル、紙の台帳などが該当します。上下を線で挟んだ形か、右端の開いた長方形で描きます。
データストアは自分では何もしません。プロセスが書き込み、プロセスが読み出すだけです。データストアから直接別のデータストアへ矢印を引くことはできません。
外部エンティティ(四角)
システムの外側にいて、データをやり取りする相手です。顧客、取引先、他部署、外部サービスなどが入ります。
ここを決めることが、実はDFDを描く上で最も重要な判断になります。どこまでを自分たちのシステムとみなすかが、図の範囲を決めるからです。
データフロー(矢印)
データが動く向きを表します。矢印の上には、何のデータが流れているかを必ず書きます。「注文データ」「顧客情報」「在庫数」といった名詞です。
名前のない矢印は、DFDでは意味を持ちません。何が流れているか書けない矢印は、そもそも必要ない可能性があります。
レベル分けの考え方
DFDの特徴であり、最も分かりにくい部分です。1枚の図にすべてを詰め込まず、粗い図から細かい図へと段階的に展開していきます。
コンテキストダイアグラム
最も粗い、1枚目の図です。システム全体を1つのプロセスとして描き、その周りに外部エンティティを配置します。
この図で示すのは、システムの境界だけです。誰とデータをやり取りするのか、何が入って何が出ていくのか。データストアは描きません。
単純すぎて省略したくなりますが、ここを飛ばすと範囲が曖昧なまま細部に入ることになります。
レベル0
コンテキストダイアグラムの中身を開いた図です。1つだったプロセスを、主要な機能に分解します。ここで初めてデータストアが登場します。
プロセスの数は、5から7個程度が目安です。10を超えると読みにくくなり、3以下だと分解の意味が薄くなります。
レベル1以降
レベル0の各プロセスを、さらに開いた図です。プロセス番号1を開いた図がレベル1の図となり、必要ならさらにレベル2へと進みます。
どこまで展開するかの基準は、それ以上分解しても意味がなくなったところです。実務では、レベル1か2で止まることがほとんどです。
バランスの原則
レベル分けで最も重要な決まりごとです。上位の図と下位の図で、出入りするデータが一致していなければなりません。
具体的には、レベル0のプロセス1に3本の矢印が出入りしているなら、それを開いたレベル1の図でも、外側との矢印は同じ3本でなければなりません。
下位の図を描いているうちに新しいデータのやり取りが必要だと気づくことがあります。そのときは、上位の図も直してください。片方だけ直した状態が、DFDが信用されなくなる典型的な原因です。
作成手順
- 外部エンティティを決める:誰とデータをやり取りするか。ここがシステムの境界になります
- 出入りするデータを書き出す:各相手から何が来て、何を返すかを名詞で並べます
- コンテキストダイアグラムを描く:ここまでを1枚にまとめます
- 主要な機能に分解する:5から7個のプロセスに分け、データストアを配置します
- :全プロセスを均等に展開する必要はありません