要するにデータフロー図のことです。
システムでやり取りされるデータに注目して、
そのデータがどこから来て、どうなって、どこにでていくのか、を表現する図のことです。
この図を使うことで、データ処理の流れを明確に示すことができます。
例えば、既存システムと新システムの比較とか、
新しい処理ロジックを考える時に処理の効率化を視覚的に捉えることもできますよね。
以下、コピペ中心ですが、詳細です。
要素
- 外部実体/ターミネータ/情報源/情報出口
- モデル化されるシステム外部に存在するものである。
ターミネータとは外部の情報源や外部への情報の出力先を意味する。
システム設計では、ターミネータが具体的に何をどのようにするのかは考慮しない。 - プロセス
- 入力データを処理して何らかの加工を加え、結果となるデータを出力するもの。
- データフロー
- 他の部品間のデータの移動経路を描いたもの。
- データストア
- データの保管場所を表現したもの。
DFD では処理タイミングに関する前提は全く記述しない。
従ってデータストアに年度決算用のデータを蓄えるために
一年以上に渡ってデータが蓄積されることもある。
ルール
- プロセスには最低1つずつ、入力と出力のデータフローと結ばれている必要がある。
- プロセスは、データに何らかの変更を加え出力しなければならない。
- データストアには最低1つのデータフローと結ばれている必要がある。
- 外部実体は、最低1つののデータフローと結ばれている必要がある。
- データフローは最低1つのプロセスと結ばれている必要がある。
シーケンス
各部品には番号を振る。
例えば、トップレベルの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を描く。
これには複数のプロセス、データストア、それらをつなぐデータフローが描かれる。 - さらに各プロセスをさらに詳細化してサブプロセス群に分割した図を描く。
- この手法では、各プロセスが簡単にコード化できる程度になるまで、
以上の詳細化の工程を繰り返していく。
イベント分割
- 詳細なDFDを作成する。
-
- 全イベントのリストを作成する。
- 各イベントに対応したプロセスを作る。
- 各プロセスを他のプロセスやデータストアと接続し、
イベントについて十分な情報が得られるようにする。 - 各プロセスのイベントに対する反応は、
そのプロセスから出て行くデータフローによってモデル化される。
口語訳
要するにシステム外のものが外部実体。
システム内の動作がプロセス。
データを置いておく所がデータストア。
それらを結ぶのがデータフローということです。
で、それらの要素を使って図を描くわけなんですけど、
入出力ないものや入出力が明確でないものをなくす為のルール、
順番とか関連がわからないようにする為のシーケンス、ということですね。
大抵のシステムではひとつのDFDに全ての処理を記載しようとすると
当然のことながら黒板ひとつくらい(もっと?)の大きさになるので
DFDを分割する方法がとられます。
それがトップダウンとかイベント分割とか言われる方法ということでしょうか。
例
そういうことでDFDの具体例。
Operatorがデータを入力して、
入力されたデータがDBに格納されるまでの流れを考えてみます。
トップレベルは、すごく単純ですね。
![]()
上の図の使いまわしですけど、
プロセス「データ格納」にシーケンス番号があるところが大切です。
でもまぁ、システムは大抵そんな単純なものじゃなくって
格納するデータを加工する必要があったりするわけです。
DBのマスタから対応する情報を持ってきてとかいうあれですね。
じゃあそんな感じでプロセス「データ格納」のサブプロセスのDFDを書いてみます。
![]()
シーケンス番号に子番号を振って遷移がわかるようにするわけです。
大分実装のイメージには近づきましたけど、まだまだ概念レベルのお話ですね。
実装を考えるなら、さらにマスタデータとは具体的に何かとか
データ変換を行うロジックを書いたりとか、さらにサブプロセスを作っていく必要があります。
概念から実装へトップダウンで作っていくのがトップダウン。
あんな場合とこんな場合とで場合わけして作っていくのがイベント分割。
(イベント分割はしたことないので、わからないわけですが^^;)
概念を理解する上でも、そしてその概念を実装に近づける上でも
そして何より相手に分ってもらう為にと、なかなかに使い道は広そうですね。
以上、DFD事始めでした。