ソフトウェアとシステムの可視化手法とツール

 24.05.2025, 24.05.2025 -  Old-David-Wang

ソフトウェアとシステムの可視化手法とツール

概要

図は、ソフトウェアおよびビジネス分野の複雑なシステムを理解し、伝達し、分析するための重要なツールです。この文書は既存の資料を総合的に活用し、フローチャートデータフロー図ビジネスプロセスモデルソフトウェアアーキテクチャ図エンティティ関係図、およびUML図などの異なる種類の図を概説しています。さらに、制御フローグラフデータフロー解析制御依存グラフプログラム依存グラフなど、ソフトウェア工学で使用される特定の図と分析手法について掘り下げ、プログラムスライシングエイリアス解析などの分野での応用例を重点的に紹介しています。本稿の議論は提供された原文資料に完全に依拠しており、これらの異なる表現方法の特性、構成要素、および用途を明確にすることを目的としています。

ツールリスト

グラフィック/モデルタイプのツールリスト(オープンソース状況を含む)

以下は、さまざまな図表タイプとツールです。

1. ビジネスプロセスモデル (Business Process Models)
ツール名称 オープンソース状況(上記資料に基づく)
BPMN (手法/記号) 該当せず(記号)
Open ModelSphere はい
Software Ideas Modeler いいえ
PowerDesigner いいえ
UModel いいえ
Modelio (BPMN2) はい
2. データフロー図 (DFD) (Data Flow Diagrams)
ツール名称 オープンソース状況(上記資料に基づく)
Astah 不明
Software Ideas Modeler いいえ
Dia はい
Diagrams.net (draw.io) はい
UMLアクティビティ図 (代替として利用可能)
ツール名称 オープンソース状況(上記資料に基づく)
(特定のツールなし) 該当せず(図の種類)
フローチャート (Flowcharts)
ツール名称 オープンソース状況(上記資料に基づく)
Astah 不明
Software Ideas Modeler いいえ
Diagrams.net (draw.io) はい
mermaid はい
excalidraw はい
Inkscape はい
PowerPoint いいえ
Matplotlib はい (Python ライブラリ)
Adobe Illustrator いいえ
Dia はい
OmniGraffle いいえ
yEd いいえ
TikZ はい (LaTeX パッケージ)
Drakon-chart 未指定
ソフトウェアアーキテクチャ図 (Software Architecture Diagrams)
備考 オープンソース状況(上記資料に基づく)
特定のツールは記載されていません 関連する図の種類と、以下の汎用描画ツールを参照してください
エンティティ関係図 (ERD) (Entity Relationship Diagrams)
ツール名称 オープンソース状況(上記資料に基づく)
Lucidchart いいえ
Astah 不明
Open ModelSphere はい
Software Ideas Modeler いいえ
ERROL (クエリ言語) 該当せず(言語)
統一モデリング言語 (UML) 図 (Unified Modeling Language Diagrams)
ツール名称 オープンソース状況(上記資料に基づく)
ArgoUML はい (アーカイブ済み)
Astah 不明
ATL はい (Eclipse M2M プロジェクト)
Together いいえ
BOUML 不明
Cacoo 不明
clang-uml はい (GitHubリンクから推測)
Dia はい
Diagrams.net はい
Eclipse UML2 Tools はい (Eclipse プロジェクト)
Enterprise Architect いいえ
Gliffy 不明
JetUML はい (GitHubリンクから推測)
Lucidchart いいえ
MagicDraw いいえ
Microsoft Visio いいえ
Modelio はい
MyEclipse 不明
NClass はい (GitHubリンクから推測)
NetBeans はい (NetBeans IDEの一部)
Open ModelSphere はい
Papyrus はい (Eclipse プロジェクト)
PlantUML はい
PowerDesigner いいえ
PragmaDev Studio いいえ
Prosa UML Modeller 不明
Rational Rose XDE いいえ
Rational Software Architect いいえ
Rational Software Modeler いいえ
Rational System Architect いいえ
Reactive Blocks はい (Eclipse プロジェクト)
Rhapsody いいえ
Software Ideas Modeler いいえ
StarUML いいえ
Umbrello UML Modeller はい (KDE プロジェクト)
UML Designer はい (Eclipse プロジェクト)
UMLet はい
UModel いいえ
UmpleClass はい (GitHubリンクから推測)
WhiteStarUML はい (StarUMLのフォーク)
yEd いいえ
システムモデリング言語 (SysML) 図 (Systems Modeling Language Diagrams)
ツール名称 オープンソース状況(上記資料に基づく)
Enterprise Architect いいえ
Modelio はい
Rhapsody いいえ
Software Ideas Modeler いいえ
UModel いいえ
汎用データモデル (General Data Models)
ツール名称 オープンソース状況(上記資料に基づく)
Open ModelSphere はい
PowerDesigner いいえ
UModel いいえ
その他の言及された図の種類 (Other Mentioned Diagram Types)
脅威モデル (Thread Models)
備考 オープンソース状況(上記資料に基づく)
特定のツールは記載されていません -
ペトリネット (Petri Nets)
備考 オープンソース状況(上記資料に基づく)
特定のツールは記載されていません -
プログラムネットワーク図 (Program Network Charts)
備考 オープンソース状況(上記資料に基づく)
特定のツールは記載されていません -
システムリソース図 (System Resources Charts)
備考 オープンソース状況(上記資料に基づく)
特定のツールは記載されていません -
汎用描画ツール (General Diagramming Tools)
ツール名称 オープンソース状況(上記資料に基づく)
diagrams.net (draw.io) はい
mermaid はい
excalidraw はい
Inkscape はい
PowerPoint いいえ
Matplotlib はい (Python ライブラリ)
Adobe Illustrator いいえ
Dia はい
OmniGraffle いいえ
yEd いいえ
TikZ はい (LaTeX パッケージ)
Excel いいえ

記事

1. はじめに

視覚的表現、または図は、複雑なシステムをより理解しやすい形に抽象化するために不可欠であり、ビジネス責任者からソフトウェアエンジニアまで、さまざまな関係者間のコミュニケーションを促進します。異なる図は異なる目的に役立ち、ワークフロー、データフロー、構造、制御フローなど、システムのさまざまな側面に焦点を当てています。 本稿では、提供された資料に基づき、一連の図と分析手法を探求し、それらの独特の特性と応用について説明します。


2. ビジネスおよびシステムモデリングの図の種類

ビジネスおよび技術的な背景において、プロセス、データ、およびシステム構造をモデル化するために、さまざまな種類の図が使用されます。

2.1. フローチャート (Flowcharts)

フローチャートは、ワークフローまたはプロセスを視覚的に表現したものです。これは、タスクを解決するための段階的なアプローチを概説するアルゴリズムの図的表現とも定義できます。フローチャートは、さまざまな種類のボックスを使用してステップを表し、接続する矢印で順序を示します。この図的表現は、与えられた問題の解決モデルを説明するのに役立ち、プロセスやプログラムの分析、設計、文書化、管理に使用されます。

フローチャートの標準記号は、1960年代に米国国家規格協会(ANSI)によって開発され、1970年に国際標準化機構(ISO)によって採用されました。現在の標準はISO 58074です。

  • フローチャートは通常、上から下、左から右に流れます。
  • 主要な記号には、操作の順序を示すフロー線(矢印付きの線)が含まれます。
  • 終端記号(スタジアム形、楕円形、または角丸長方形)は、プログラムまたはサブルーチンの開始と終了を示し、通常「開始」または「終了」などの語句を含みます。
  • プロセスは長方形で表され、データ値、形式、または位置を変更する一連の操作を表します。
  • 判定はひし形で、プログラムが取る2つのパスのいずれかを決定する条件操作(通常はYes/Noの質問)を示します。
  • 入出力は平行四辺形で表され、データの入出力を示します。
  • 注釈(破線または実線で対応する記号に接続された開いた長方形)は追加情報を提供します。
  • 事前定義プロセス(二重縦罫線のある長方形)は、別の場所で定義されている名前付きプロセスを示します。
  • 同ページコネクタページ間コネクタ(小さな円と本塁板形の五角形)は、長い線の代わりに使用されたり、他のページに接続するために使用されます。
  • データファイル/データベース(円筒形)、文書、手動操作、手動入力、準備/初期化にも他の記号が使用されます。
  • フローチャートは、並列処理を示す水平線または棒グラフを使用して、同時操作の開始または終了を示すこともできます。

フローチャートは通常、ある種の制御フローに焦点を当てます。それらはしばしば他の種類の図を補完します。石川馨は、フローチャートを品質管理の7つの基本ツールの1つとして特定しました。UMLでは、アクティビティ図がフローチャートの一種です。 フローチャートの他の名称には、プロセス図フロー図機能フロー図プロセス地図プロセスチャート機能プロセスチャートビジネスプロセスモデルプロセスモデルプロセスフロー図ワークフロー図ビジネスフロー図などがあります。システムフローチャート、プログラムフローチャート、意思決定フローチャート、論理フローチャート、システムフローチャート、製品フローチャート、プロセスフローチャートなど、さまざまなフローチャートの分類が存在します。


2.2. データフロー図 (DFD)

データフロー図 (DFD) は、構造化分析、データモデリング、および脅威モデリングにおけるツールです。1970年代中頃の構造化分析および設計技術(SADT)に起源を持ち、トム・デマルコやエドワード・ヨーダンらによって普及しました。詳細な記述が多く含まれるビジネスプロセスモデルとは対照的に、DFDはデータの動きに焦点を当てることができ、「アクターがデータを入力する。アプリケーションがデータを受け取る。アクターがデータを閲覧する」といったように、プロセス描写を簡素化します。

DFDは、プロセスフロー格納場所(データストア)、**外部エンティティ(ターミネーター)**の4つの主要な構成要素で構成されます。

  • プロセス(機能、変換)は、システム内で入力を出力に変換する部分です。通常、円、楕円、長方形、または角丸長方形で表され、その性質を表す名前が付けられます。
  • データフロー(フロー、データストリーム)は、情報の伝達(時には物質も)を矢印で示します。理想的には、1種類の情報のみを伝達します。フローはプロセス、格納場所、および外部エンティティを接続します。
  • 格納場所(データストア、データストレージ、ファイル、データベース)は、後で使用するためにデータを保存するために使用されます。通常、2本の水平線で表され、その名前は複数形の名詞であることが多いです。格納場所は、データファイル、文書フォルダ、またはファイルキャビネットを表すことができ、その表現は実装に依存しません。格納場所へのフローは通常、データ入力/更新を示し、格納場所からのフローは通常、読み取りを示します。
  • 外部エンティティ(ターミネーター)は、システムと通信するがシステムの外部に位置する外部エンティティです。組織、人々、機関、部署、または別のシステムである場合があります。

DFD作成のルールには、エンティティ名を理解しやすく、一般的だが具体的であるようにすることが含まれます。プロセスは参照しやすいように番号を付ける必要があります。明確にするために、DFDには6〜9のプロセスを含めることが推奨され、最低3つは必要ですが、コンテキスト図(システム全体をすべての外部エンティティと対話する単一のプロセスとして表現するもの)は例外です。プロセスをより詳細な表現に洗練するために、別のDFDを使用することができます。DFDは逆のペトリネットと見なすことができます。UMLでは、アクティビティ図がしばしばDFDの役割を引き継ぎます。


2.3. ビジネスプロセスモデル (BPM)

ビジネスプロセスモデル (BPM) は、運用上のビジネスプロセスを記述し、詳細な記述を多く含む場合があります。データフローに焦点を当てるデータフロー図とは異なり、BPMはビジネスプロセスのステップと流れを描写することを目的としています。活動がステップであるかどうかを検証する手法の1つは、名詞-動詞の名称(例:「ライセンスを検証する」)を使用し、それを逆転させても(「ライセンスが検証された」)意味があり、変換が存在することを確認することです。BPMNなど、いくつかのモデリング手法が存在します。関係者が明確に理解できるように、シンプルなスイムレーン図などの記号が使用されます。


2.4. ソフトウェアアーキテクチャ図 (Software Architecture Diagram)

ソフトウェアアーキテクチャ図とは何でしょうか? これは、システムの構造を視覚的に表現したもので、青写真のように、システムのコンポーネント、それらの間の相互作用、および関係を示します。ソフトウェアアーキテクチャ図は、複雑なシステムを簡素化し、ソフトウェアエンジニア、CEO、CIOなど、さまざまな関係者間のコミュニケーションを改善するための強力なツールです。複雑な構造を理解しやすい視覚的なものに分解することで、技術チームとビジネス関係者の調整を助けます。

ソフトウェアアーキテクチャ図の作成には、サーバー、データベース、マイクロサービス、APIなどの主要なシステムコンポーネントをリストアップし、重要な要素を見落とさないようにすることが含まれます。次に、データフロー、依存関係、および外部システムを考慮して、これらのコンポーネントがどのように相互作用するかを定義します。抽象化のレベルは、図の目的に合わせるべきです。

  • 概念レベル (Conceptual):主要なシステム要素とその広範な関係を強調し、ビジネス関係者に適しています。
  • 論理レベル (Logical):コンポーネント間の機能と接続に焦点を当て、アーキテクトに役立ちます。
  • 物理レベル (Physical):ハードウェア、ネットワーク構成、およびデプロイの詳細を詳細に記述し、エンジニア向けです。

目的と重要性:ソフトウェアアーキテクチャ図は、複雑なシステムを簡素化するのに非常に役立ちます。これは、技術チームとCEOやCIOなどのビジネス関係者との間の橋渡しとなり、技術的な背景に関係なく、誰もが複雑なシステムを理解するのを助けます。これにより、コラボレーションが強化され、意思決定がサポートされ、エラーが減少し、プロジェクトの効率が向上します。


2.5. エンティティ関係図 (ERD)

エンティティ関係図 (ERD) は、エンティティ間の関係を視覚化するために使用され、通常はデータベース設計のコンテキストで用いられます。主要な概念には以下が含まれます。

  • エンティティタイプ (Entity type):「学生」など、情報を格納できる情報またはオブジェクトのカテゴリ。
  • エンティティセット (Entity set):「今日授業に出席している学生」など、特定の時点における特定の種類のエンティティのすべて。インスタンスは、セット内の特定の人物または車両です。
  • エンティティカテゴリ (Entity categories):エンティティは、それ自身の属性のみで定義される強エンティティ、それ自身の属性のみでは定義できない弱エンティティ、またはエンティティセット内のエンティティを関連付ける関連エンティティに分類されます。
  • エンティティキー (Entity keys):エンティティを一意に識別する属性です。タイプには、スーパーキー(1つまたは複数の属性が1つのエンティティを定義する)、候補キー(最小スーパーキー)、主キー(選択された候補キー)、外部キー(エンティティ間の関係を識別する)が含まれます。
  • 関係 (Relationship):エンティティがどのように相互作用または関連するかを記述し、通常は動詞と見なされます(例:学生がコースを登録する)。関係は通常、ひし形または接続線上のラベルで表されます。再帰的関係は、同じエンティティが関係に複数回関与することを指します。
  • 属性 (Attributes):エンティティ(形容詞のように「2年生の学生」など)または関係(副詞のように「デジタル方式で」など)の特性を記述します。

Chen、Crow’s Foot/Martin/Information Engineering、Bachman、IDEF1X、Barkerなど、いくつかのERD表現スタイルが存在します。ERモデルとデータモデルは、さまざまな詳細レベルで描画できます。概念レベル(最高レベル、最も少ない詳細、全体的な範囲を示す)、論理レベル(より詳細、操作/トランザクションエンティティを定義、技術に依存しない)、物理レベル(データベース実装のための特定の技術詳細)。これらのレベルは、DFDなどの他の図の種類で使用されるレベルと類似していますが、ソフトウェアエンジニアリングにおける三層スキーマアーキテクチャとは異なります。


2.6. 統一モデリング言語 (UML) 図

統一モデリング言語 (UML) は、ソフトウェア開発で使用される標準的な概念モデリング表記法です。これには、多くの異なる種類の図が含まれます。UMLのアクティビティ図はフローチャートの一種です。UML図は技術文書に利用できます。ユースケース図は、要件を明確にし、問題を検出し、システム設計を簡素化するのに役立つUML図の一種です。UML図は、構造図(クラス図、コンポーネント図、複合構造図、配置図、オブジェクト図、パッケージ図、プロファイル図)、振る舞い図(アクティビティ図、ステートマシン図、ユースケース図)、および相互作用図(コミュニケーション図、シーケンス図、相互作用概要図、タイミング図)に分類されます。UML図の作成をサポートする多くのソフトウェアツールが存在します。SysMLは関連するが異なるモデリング言語として言及されています。


3. ソフトウェア分析のための図と技術

汎用的なシステムモデリングに加え、ソフトウェア工学では、プログラムコードを理解し分析するために、特定のグラフィック表現と分析技術が使用されます。

3.1. 制御フローグラフ (CFG)

制御フローグラフ (CFG) は有向グラフであり、各ノードは基本ブロックを表し、各エッジは基本ブロック間の制御フローを表します。基本ブロックとは、制御フローが先頭から入り、末尾で出る連続したステートメントのシーケンスであり、末尾以外では分岐がありません。リーダー(プログラムの最初のステートメント、gotoステートメントのターゲット、gotoステートメントの直後のステートメント)を識別することによって基本ブロックが構築されます。各基本ブロックはリーダーで始まり、次のリーダーまたはプログラムの終わりまで後続のステートメントを含みます。基本ブロックはステートメントの最大シーケンスであることができますが、ソースコード分析では、通常、各ステートメントが基本ブロックと見なされます。エッジは制御フローを表し、条件付き転送(while、if-else、switchなど)は「T」または「F」とマークされます。ノードは、エッジに基づいて後続ノードと先行ノードを持つことができます。明確にするために、制御フローがマージされる場所に「結合」ノードを挿入できます。switchステートメントは、複数のマークされた出力エッジを持つ1つのノードで表現でき、各case値に1つずつ対応します。実行不可能な構造化ステートメント(endやelseなど)は通常、ノードとして含まれません。


3.2. データフロー解析

データフロー解析は、変数の参照を定義(変数が値を取得するとき)または使用(変数の値が取得されるとき)に分類します。使用はさらに、計算に影響を与える計算使用 (c-uses) と、制御フローに影響を与える述語使用 (p-uses) に分類されます。

重要な概念は到達可能定義 (reaching definitions) です。これは、特定のプログラム点に到達する可能性のあるパスに沿って存在し、同じ変数の他の定義によって「殺されていない」定義です。 データフロー解析アルゴリズムは、各プログラムノードに対して以下の集合を計算します。

  • GEN集合 (GEN set):ノード内で生成される定義。
  • KILL集合 (KILL set):ノードの入口に到達した場合に殺される定義。
  • IN集合 (IN set):ノードの前の点に到達する定義。これは、その直接の先行ノードのOUT集合の和集合です。
  • OUT集合 (OUT set):ノードの後の点に到達する定義。これには、ノード内で生成された定義、または入口に到達しノード内で殺されなかった定義 ($GEN \cup (IN - KILL)$) が含まれます。

アルゴリズムReachingDefsは、安定するまでIN集合とOUT集合を繰り返し計算し、本質的に、定義が殺されずに可能な限り遠くまで伝播するように、可能なすべてのプログラム実行をシミュレートします。この解析は、到達可能使用、利用可能式、生存変数などの他の問題を解決するために使用できます。


3.3. 定義-使用ペア (Definition-Use Pairs) およびデータ依存グラフ (Data Dependence Graphs)

変数 $v$ の定義-使用ペア (DU pair) とは、ステートメント $D$ が $v$ を定義し、ステートメント $U$ が $v$ を使用し、CFGにおいて $D$ から $U$ へのパスが存在し、そのパス上で $v$ が再定義されていない(def-clearパス)ような順序対 $(D, U)$ のことです。これらのペアはデータ相互作用を表し、$U$ における計算が $D$ における計算のデータに依存することをフロー依存 (flow dependence) と呼びます。ノード内の上向き公開使用 (upwards exposed use) とは、ノードの入口に到達する定義が到達できる使用を指します。

データ依存グラフ (DDG) を使用してデータ依存関係をグラフィカルに表現できます。ここではノードが定義/使用位置を表し、エッジが依存関係を表します。また、CFGにデータ依存エッジを追加することもできます。各DUペア $(D, U)$ について、エッジ $(D, U)$ を追加します。


3.4. プログラムパス (Program Paths)

CFGにおけるパスは、エッジで接続されたノードのシーケンスです。完全パスは、入口ノードから出口ノードへのパスです。実行不可能パス (infeasible path) は、条件文のために、いかなるプログラム入力によっても実行できないパスです。du-pathは、定義ノードと使用ノード(変数に対して)を接続するパスであり、そのパスがその変数に対してdef-clearです。


3.5. 制御依存グラフ (CDG)

制御依存グラフ (CDG) は、制御依存関係を表すもので、各ノードは共通の制御依存関係を持つステートメントまたはコード領域を表します。CDGの構築には、開始/終了ノードでCFGを拡張し、後続ドミネータ木を構築することが含まれます。CDGには、ステートメントノード(円形)と述語ノード(角丸ボックス)が含まれ、述語ノードからはラベル付きエッジが伸びています。領域ノード(六角形)を追加して、領域内のステートメントの制御依存関係をまとめることができます。


3.6. プログラム依存グラフ (PDG)

プログラム依存グラフ (PDG) は、制御依存情報とデータ依存情報を結合したものです。データ依存エッジが追加されたCFGと見なすことができます。PDGノードはプログラムステートメント、述語、または領域に対応します。エッジは制御依存(ラベル付き)とデータ依存を表します。


3.7. プログラムスライシング (Slicing)

プログラムスライシングは、もともとデバッグのために使用され、特定のプログラム点における変数の値に影響を与える可能性のあるステートメントと述語を抽出します。スライスは、関心のある点から逆方向に走査し、制御依存とデータ依存の前駆を通じて到達可能なすべてのノードを含めることで、PDGを使用して計算できます。動的スライス (dynamic slice) は特定の実行パスを考慮し、静的スライスを走査されたノードに限定します。前方スライス (forward slice) は、ある点での変数の値によって影響を受けるステートメントと述語を識別し、直接的な依存関係の推移閉包によって計算されます。


3.8. エイリアス解析 (Alias Analysis)

エイリアス解析は、与えられたプログラム点において、異なる名前(変数やポインタの逆参照など)が同じメモリ位置を指す状況を識別します。これは、ポインタを含む言語において特に重要です。結果は通常、ポイントツーセット (points-to sets) を使用して表現され、ポインタが参照する可能性のある固定位置変数(非ポインタ変数)を示します。エイリアス解析は、間接的なメモリ変更によって引き起こされる副作用を明らかにするのに役立ちます。ポイントツー情報は通常MAY情報であり、実行パスに応じて、実行中に真である可能性があることを意味します。

従来の定義-使用解析 (DUA) は、ポインタによって複雑になります。この問題に対処するため、変数参照は4つのタイプに分類されます。DDEF(確定的定義)、PDEF(ポインタによる可能性のある定義)、DUSE(確定的使用)、PUSE(ポインタによる可能性のある使用)。データフローアルゴリズムは、DUペアを識別する際に確定的および可能性のある定義/使用を考慮するように調整されますが、確定的定義のみが他の定義を殺すと見なされます。逆参照ポインタ $(*p)$ は、$*p$ の確定的定義(およびそのエイリアスの可能性のある定義)と、ポインタ変数 $p$ 自体の確定的使用と見なすことができます。


4. 図作成ツール

これらの図を作成するために利用できるソフトウェアツールは多数あります。資料には、draw.io (app.diagrams.net)、TikZ (LaTeX用)、Mermaid、Excalidraw、Ipe、Inkscape、Dia、Omnigraffle、Powerpoint、Matplotlib、Adobe Illustrator、Figma、PlantUML、Lucidchart、Visio、Miroなどのツールが言及されています。これらのツールの多くは、本稿で議論されている図の種類を含む、複数の種類の図の作成をサポートしています。


5. 結論

本資料は、ビジネスおよびソフトウェア開発で使用されるさまざまな図を示しています。上位レベルのビジネスプロセスモデルやソフトウェアアーキテクチャビューから、詳細なプログラム制御フローグラフや依存関係分析に至るまで、各図の種類は独自の視点を提供し、特定の分析またはコミュニケーションの目的に貢献します。これらの異なる図の種類とその関連技術を理解することは、効果的なシステム設計、開発、および分析にとって不可欠です。