データフロー図

**データフロー図**（データフローず、Data Flow Diagram、**DFD**）は、情報システムのデータの「流れ; flow」をグラフィカルに表現する図である。システム設計段階の初期に描かれることが多い。データフロー図はデータ処理の可視化にも使われる（構造化設計）。

DFDはシステムの入力と出力がどんな情報なのかを示し、データがどこから来てどこに行くのか、どこに格納されるのかを示す。処理のタイミングや逐次的な処理を示すものではない（その用途にはフローチャートなどがある）。一方で、データフローの図というのは依存関係を示すものであるから、互いに影響するような関係にない処理は並列に行えるというような、並行性は表現される。

## 概要
一般に設計者は最初にシステムとシステム外部とのやり取りをコンテキストレベルのDFDで描く。その後コンテキストレベルのDFDを「詳細化」してシステムの細部をモデル化していく。

構造化設計を開発したが、Martin と Estrin の "data flow graph" モデルに基づいてデータフロー図を提案したのが始まりである。

データフロー図(DFD)はSSADMの3つの基本的な図の1つである。プロジェクトの出資者やエンドユーザーは、システム開発の全段階で概要説明を受け、相談をする必要がある。データフロー図を使えば、システムがどう実装され、何をどのように実行するのかをユーザーが眼で見ることができる。従来システムのデータフロー図と新システムのデータフロー図を描いて比較すれば、どこが効率化されているかが即座にわかる。データフロー図があれば、エンドユーザーは自分たちが具体的にどういうデータをどこで入力するのかを思い描くことができるようになる。

データフロー図の記法には Yourdon & Coad の記法と Gane & Sarson の記法があり、プロセス、データストア、データフロー、外部実体といった要素の見た目が異なる。

## 構成要素
データフロー図はプロセス、データストア、ビジネス上（または他のシステム）の外部実体、およびそれらを結ぶデータフローから構成される。

none|thumb|478px|データフロー図の例
right|thumb|データフロー図の記法

データフロー図の4つの構成要素は次の通り:

* **プロセス**（円または角を丸めた多角形で表される）
** 入力データを処理して何らかの加工を加え、結果となるデータを出力するもの。
* **データストア**（2本の平行線で表されるが、それを垂直な線で繋いだ形にすることもある）
** データの保管場所を表現したもの。DFD では処理タイミングに関する前提は全く記述しない。従ってデータストアに年度決算用のデータを蓄えるために一年以上に渡ってデータが蓄積されることもある。
* **外部実体**/**ターミネータ**/**情報源**/**情報出口**（四角形または楕円で表される）
** モデル化されるシステム外部に存在するものである。ターミネータとは外部の情報源や外部への情報の出力先を意味する。システム設計では、ターミネータが具体的に何をどのようにするのかは考慮しない。
* **データフロー**（矢印線で表される）
** 他の部品間のデータの移動経路を描いたもの。

1つのDFDに描かれる部品数は10個以内にすべきである。ある処理が10個以上の部品で構成される場合、複数の部品をひとつにまとめた概要レベルのDFDと、まとめた部分を描いた詳細レベルのDFDに分割する。各部品には番号を振る。例えば、トップレベルのDFD に部品 1, 2, 3, 4, 5 があったとき、部品 3 に関するDFD にある部品には 3.1, 3.2, 3.3, 3.4 といった番号を振る。さらに、部品 3.2 の DFD にある部品には 3.2.1, 3.2.2 といった番号を振る。

## 複製
外部実体やデータストアは明確化のために複製して描く（つまり同じものを複数回描く）ことがある。ただし、プロセスは複製できない。複製された外部実体にはアスタリスク(*)を右下に付し、複製されたデータストアには二重線を左端に付す。

## データフロー図作成法
### トップダウン法
# システム設計者はコンテキストレベルのDFDを作成する。それは1つのプロセスで表されたシステムとシステム外の環境（ターミネータ群）とのやり取り（データフロー）を表したものである。
# 次にシステムを詳細化した DFD を描く。これには複数のプロセス、データストア、それらをつなぐデータフローが描かれる。
# さらに各プロセスを詳細化してサブプロセス群に分割した図を描く。
この手法では、各プロセスが簡単にコード化できる程度になるまで、以上の詳細化の工程を繰り返していく。

### イベント分割法
この手法はエドワード・ヨードンの"Just Enough Structured Analysis"、chapter 19 で示されたものである。

# 全イベントのリストを作成する。
# 各イベントに対応したプロセスを作る。
# 各プロセスを他のプロセスやデータストアと接続し、イベントについて十分な情報が得られるようにする。
# 各プロセスのイベントに対する反応は、そのプロセスから出て行くデータフローによってモデル化される。

## ルール
DFDの作成には下記のルールが有る。
*プロセスには最低１つずつ、入力と出力のデータフローと結ばれている必要がある。
*プロセスは、データに何らかの変更を加え出力しなければならない。 
*データストアには最低１つのデータフローと結ばれている必要がある。
*外部実体は、最低１つのデータフローと結ばれている必要がある。
*データフローは最低１つのプロセスと結ばれている必要がある。

## ツール
* Dia - オープンソースの図描画ツール。DFDもサポートしている。
* Dynamic Draw - フリーソフトの図描画ツール。DFD用のテンプレートもテンプレートライブラリに有る。
* Microsoft Visio - Windows 向け図描画ツール。DFDの基本的な部分をサポート（DFDが描けるが、データフローは記録できない）。
* Enterprise Architect - UMLモデリングツール。DFDもアドインでかける。
* astah* - UMLモデリングツール。有償版ではDFDもサポートしている。
* iEdit - フリーソフトの描画機能付きアウトラインプロセッサ。DFDもシェイプファイル導入により描ける。
* GitMind - オンラインフリーで利用可能なマインドマップツール。データフロー図が書ける。直接に利用できるテンプレートも提供している。

## 脚注

## 参考文献
* トム・デマルコ、『構造化分析とシステム仕様』、日経BP出版センター、1994年 
* 'Structured Analysis and System Specification'. Tom DeMarco. Yourdon, Inc., Englewood Cliffs, New Jersey, 1978.
*
* Scot W. Ambler. The Object Primer 3rd Edition Agile Model Driven Development with UML 2

## 関連項目

* データフロー（Data Flow）
* パイプ
* アクティビティ図
* 機能モデル
* IDEF0
* アローダイアグラム
* ガントチャート

* Work Breakdown Structure （WBS）- プロジェクト管理における作業項目の細分化・洗い出しを行うための手法

## 外部リンク
*データフロー図(DFD)の概要 アジャイルモデリング(AM)公式サイト
*Structured Analysis Wiki
*Article "Data Flow Diagrams (DFD)" by Vicki L. Sauter
*Article "How to draw data flow diagrams" courtesy of Smartdraw
*Chapter "Dataflow Diagrams" by Ed Yourdon
*Case study "Current physical dataflow diagram for Acme Fashion Supplies" ..and accompanying elementary process descriptions