データの流れに着目してシステムの処理を表す図。
DFD(Data Flow Diagram=データフロー図)とは、データの流れに着目してシステムの処理を表す図のことです。「どこからどんなデータが来て、どう加工され、どこへ出ていくか」を矢印と記号だけで描きます。
身近な例で考えると、工場の生産ラインに似ています。材料(データ)が運ばれてきて、各工程(処理)で加工され、製品(結果)になって出荷される。その「モノの流れ」を「データの流れ」に置き換えたものがDFDです。
上のツールで▶ボタンを押すと、通販サイトの注文受付を題材に、記号を1つずつ置いてデータフローをつなぎ、1枚のDFDが完成していく流れを確認できます。
DFDで使う記号は、たった4種類だけです。これさえ覚えれば読み書きできます。
・外部実体(四角形):システムの外側でデータをやり取りする相手。顧客や他システムなど
・プロセス(円):データを加工・変換する処理。動詞で名前を付ける
・データストア(上下を線で挟んだ形):データをためておく場所。データベースやファイル
・データフロー(矢印):データの流れ。何が流れるかを矢印に書く
記法にはDeMarco系(プロセスが円)とGane & Sarson系(プロセスが角丸四角)がありますが、要素の意味は同じです。図の記号が少し違っても、表すものは「外部実体・処理・蓄積・流れ」の4つです。
DFDは次の順番で描くと迷いません。まず登場人物を置いてから、流れをつなぐイメージです。
・① 外部実体を置く:システムと関わる相手(顧客・倉庫など)を四角形で配置
・② プロセスを置く:システムが行う処理を円で配置し、番号と動詞名を付ける
・③ データストアを置く:ためておくデータを置く
・④ データフローでつなぐ:入力→処理→蓄積→出力の順に矢印を引き、データ名を書く
大事なルールは、外部実体どうし・データストアどうしを直接つながないこと。データは必ずプロセスを通って加工されます。また最初は全体を1つの円で表すコンテキストダイアグラムを描き、それを段階的に詳しく分解(階層化)していくのが基本です。上のツールで①〜④の順に組み上がる様子を確認してみてください。
DFDとフローチャートは、どちらも「システムの処理を図で表す」ものですが、着目する点がまったく違います。
・DFD(データフロー図):「データが何処から来て何処へ行くか」(データの流れ)を表す。プログラムの内部ではなくシステム全体の構造を俯瞰するために使う
・フローチャート:「プログラムの実行手順・分岐・繰り返し(制御の流れ)」を表す。ひし形の分岐(Yes/No)やループを描く
なぜ2種類あるのか。システムを設計するには、まず「どんなデータがどう流れるか」という全体像を把握する必要があります(DFDの出番)。その後、各処理を「どの順番でどう実行するか」を細かく決めます(フローチャートの出番)。つまりDFDは「何をするか」の全体像、フローチャートは「どう実行するか」の詳細と役割が分かれているのです。
DFDには大事な接続ルールがあります。それは「外部実体どうし」「データストアどうし」「外部実体とデータストアを直接」つなぐことは禁止、という点です。データは必ずプロセス(処理)を通って流れなければなりません。
なぜプロセスを必ず通るのか。DFDは「システムが行う処理(加工)を図で表す」ためのものです。データが外部から来てそのままデータベースに入るだけなら、そこに処理は存在しません。処理のないシステムはシステムと呼べないからです。
・外部実体同士を直接つなぐ:システムが関与しないやり取りになってしまう(システム外の話)
・データストア同士を直接つなぐ:データが処理されずに移動するだけで、どんな変換が行われたか不明になる
・外部実体からストアに直接つなぐ:入力データがそのまま格納されることになり、入力チェックや変換といった処理が消えてしまう
身近な例で考えると、お客さんが勝手に在庫棚に商品を入れるのが禁止なのと同じです。必ず「受付カウンター(プロセス)」を通って、スタッフが中身を確認してから棚に入れます。このルールを覚えておくと、DFDを読み書きするときに接続の正しさを判断できます。