システム分析やプロセスモデリングに取り組む際、データフローダイアグラム(DFD)ほど混乱を招く概念は少ない。ソフトウェア工学、ビジネス分析、アーキテクチャの分野で定番のツールである。しかし、長年にわたりその本質について誤解が根強く残っている。多くの実務者がDFDをフローチャートと誤認したり、論理の流れを記録していると信じている。このような誤解は、不完全なシステム設計や混乱を招く文書、開発の遅延を引き起こす可能性がある。
このガイドは不要な情報を排除する。データフローダイアグラムに関する最も根強い誤解を検証し、技術的な事実を明確にし、正確なモデリングのための堅実なフレームワークを提供する。新しいアプリケーションの設計中でも、既存のシステムの監査中でも、これらの図の真実を理解することは成功の鍵となる。

最も広く信じられている誤解は、データフローダイアグラムが単に装飾されたフローチャートであるというものだ。見た目は似ているが、目的や記法は根本的に異なる。両者を混同すると、システムが『どのように考えているか』を記述するモデルになり、『どのデータがどこへ移動するか』を記述するモデルとはならない。どのようにシステムがどのように考えているかを記述するのではなく、何がデータがどこへ移動するかを記述する。
複雑な決定木をDFDで表現しようとすると、明確さを失う。DFDは実行順序を示すように設計されていない。データの依存関係を示すように設計されている。あるプロセスが別のプロセスより前に発生する可能性はあるが、DFDではデータフローが正確であれば順序は重要ではない。この違いは、非同期システムや分散アーキテクチャをマッピングする際、極めて重要である。
もう一つの一般的な誤りは、DFDがプロセスの内部論理を説明していると仮定することだ。プロセスバブル(円)を見た際、ステークホルダーが「ここでは何が起こっているのか?」と尋ねることがある。DFDはこの問いに答えられない。
DFDにおけるプロセスはブラックボックスである。入力データフローを受け取り、出力データフローを生成する。内部のアルゴリズム、条件文、ビジネスルールは表現されない。これは制限ではなく、特徴である。これにより、分析者はコードレベルの詳細に巻き込まれることなく、システム全体を高レベルで把握できる。
論理を図に無理に押し込むと、ごちゃごちゃになる。データの移動が見えにくくなり、それが主な目的である。論理を示したい場合は、フローチャートやシーケンス図を使うべきだ。DFDはデータのためのものとして、専用に使用すべきである。
読者はしばしばDFDを見て、要素の位置が順序を示していると誤解する。左にあるプロセスが右にあるプロセスより先に起こると考えてしまうことがある。これは誤りである。
DFDはシステムの構造を静的な表現したものであり、タイムラインではない。以下のことを示さない:
この静的な性質が、DFDが要件収集に優れている理由である。時間的制約を課さずに、データ要件の範囲を明確に定義できる。リアルタイムシステムとバッチ処理システムは、動作のタイミングがまったく異なるにもかかわらず、まったく同じDFDを持つことがある。
データフローダイアグラムを極めて詳細にする誘惑がある。すべての取引やデータポイントを含む単一の図が優れていると考える人もいる。しかし実際には、読みにくく意味の通らない「スパゲッティ図」になってしまう。
原則として分解が鍵である。まず、コンテキスト図(レベル0)から始める。これはシステムを外部エンティティと相互作用する一つのプロセスとして示す。その後、そのプロセスをレベル1、レベル2と順に分解していく。各レベルで、関心のある特定領域に詳細を追加する。
すべてのレベルを一つのビューに押し込むと、全体像を見失う。良いモデルは、必要な場所で具体的な詳細と高レベルの概要のバランスを取る。複雑さは密度ではなく、階層構造によって管理すべきである。
現代のインターフェースはしばしばデータフローを混乱させる。ステークホルダーは図の中にスクリーン、ボタン、ユーザーの操作を表示したいと思う。ユーザーの操作は重要だが、それはDFDではなく、ユースケース図やワイヤーフレームに属する。
DFDはピクセルではなくデータを追跡する。ボタンのクリックはプロセスをトリガーするイベントである。DFDが注目するのはそのプロセスに渡されるデータ(例:「ログイン資格情報」)であり、視覚的なボタンそのものではない。UI要素をデータフローダイアグラムに混ぜ込むと、システム内の情報の流れという本質から注意力が逸れてしまう。
これらの誤解を解くには、基本構成要素を理解する必要がある。標準的なDFDは4つの主要な要素で構成される。ここでの混乱が、上記の誤解を生み出している。
| 要素 | 形状 | 機能 | 一般的な誤解 |
|---|---|---|---|
| 外部エンティティ | 長方形 | システム外のデータの発信元または受信先 | システム内にデータベースがあると考えている |
| プロセス | 円または角丸ボックス | 入力データを出力データに変換する | 論理やコードを示していると考えている |
| データストア | 開かれた長方形 | データが静止している場所 | ファイルフォルダだけを表していると考えている |
| データフロー | 矢印 | 要素間のデータの移動 | 制御信号を表していると考えている |
神話以上の、モデルの整合性を損なう実際の誤りがあります。このチェックリストを使って、あなたの作業を検証してください。
DFDの誤解による最も実感しやすい結果の一つは、劣悪なデータベース設計である。DFDをフローチャートとして扱うと、プロセスの順序に基づいてテーブルを設計してしまう可能性がある。
DFDが正確である場合、データストアがデータベーススキーマの設計図となる。データの流れはテーブル間の関係を示している。データストア要素を無視すると、必要なデータ移動をサポートできないデータベースを作ってしまうリスクがある。たとえば、DFDに「顧客注文」の流れが「在庫在庫」ストアに流れていると示されている場合、データベースはこれらのエンティティをリンクしなければならない。DFDが不明瞭な場合、外部キーが欠落しているか、誤って定義されている可能性がある。
さらに、DFDが論理を示さないことを理解することで、プロセスステップに基づいてデータベースを過剰に正規化するのを防ぐことができる。正規化は取引の順序ではなく、データの依存関係に基づくべきである。この違いは、開発サイクルの後半で何時間もリファクタリングを避けることができる。
では、これらの罠に陥ることなく、どのように進むべきか?信頼性の高いデータフローダイアグラムを構築するための構造化されたアプローチに従おう。
システムの境界外でそれとやり取りするすべての人やものリストアップする。これにはユーザー、他のシステム、規制機関が含まれる。内部部署を含めるのは、それが別個のシステムとして機能する場合に限る。
レベル0の図を作成する。システム全体を中央に1つのプロセスとして配置する。外部エンティティとこのプロセスを結ぶ線を描く。線には交換される主なデータ(例:「依頼書」、「支払い領収書」)をラベルとして付ける。
中心プロセスを主要なサブプロセスに分解する。これらはシステムの主要な機能(例:「注文処理」、「在庫更新」、「レポート生成」)でなければならない。コンテキスト図でシステムに入力されるすべてのデータが、このレベルのどこかで入力されていることを確認する。
情報が保存される場所を特定する。プロセス間を流れても保存されないデータは単なる流れである。永続化される場合はストアである。これらのストアを関連するプロセスに接続する。
これは最も重要な技術的ステップである。親プロセスの入力と出力は、その子プロセスの入力と出力の合計と一致しなければならない。データフローがレベル0プロセスに入力される場合、レベル1の分解図にも現れなければならない。もし消えてしまうなら、論理的な誤りがある。
なぜこれが重要なのか?DFDを誤解すると、美しい図面を描くこと以上のコストが発生する。それはプロジェクトの納品に現実的な影響を与える。
DFDの原則——データに注目し、論理を無視し、階層を尊重する——に従うことで、これらのリスクを軽減できる。モデルはビジネスと技術チーム間の契約となる。
データフローダイアグラムを習得するには、自制心が必要である。一度にすべてを示したくなる衝動に抵抗しなければならない。図は現実そのものではなく、表現であることを受け入れなければならない。データの移動と論理の流れの明確な区別が求められる。
誤解を剥ぎ取ったとき、DFDは強力なツールとなる。要件を明確にし、論理の穴を露呈させ、コミュニケーションの橋渡しとなる。美しい図を描くことではない。システム内を流れている情報が、記録され、安全で、効率的であることを保証することにある。
現在のモデルをよく見直してください。論理を示すべきところにデータを示しているでしょうか?順序と依存関係を混同していないでしょうか?1つの図に多すぎるレベルを押し込めていませんか?これらの誤解を正すことで、システム分析の質は大きく向上します。データに注目してください。シンプルを心がけましょう。必要に応じて分解してください。そして常にフローのバランスを保つようにしてください。
結局のところ、良いDFDとは、誰もがマニュアルなしで読み、理解できるものである。それが真の成功の基準です。