SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

連載記事

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CodeZine BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。

書籍に関する記事を見る

'); googletag.cmd.push(function() { googletag.pubads().addEventListener('slotRenderEnded', function(e) { var ad_id = e.slot.getSlotElementId(); if (ad_id == 'div-gpt-ad-1659428980688-0') { var ad = $('#'+ad_id).find('iframe'); if ($(ad).width() == 728) { var ww = $(window).width(); ww = ww*0.90; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/728+","+ww/728+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/728+","+ww/728+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/728+","+ww/728+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/728+","+ww/728+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(90*ww/728)+"px;width:"+728+"px;}", 0 ); } else { if ($(window).width() < 340) { var ww = $(window).width(); ww = ww*0.875; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/320+","+ww/320+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/320+","+ww/320+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/320+","+ww/320+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/320+","+ww/320+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(180*ww/320)+"px;width:"+320+"px;}", 0 ); } } } }); }); } else { document.write('
'); document.write('
'); }
モデルベースの手法でコストをかけずに既存システムを分析する

UMLを使った既存システムの分析

モデルベースの手法でコストをかけずに既存システムを分析する(3)


  • X ポスト
  • このエントリーをはてなブックマークに追加

 本連載はこれまで、システムの地図を作るための基本的な考え方と調査分析方法を説明してきました。今回から2回にわたり、具体的なまとめ方を紹介していきます。まずは、UMLを拡張する方法です。既存システムの分析は調べたことを整理するのではなく、調べたことを分析しシステムの機能と役割を明確にすることが目的です。システムを限られた記号(UMLアイコン)を使い、記述パターンに沿って組み立てることで、スムーズにシステムの形を明らかにします。

  • X ポスト
  • このエントリーをはてなブックマークに追加

UMLで表現する

分析のためのモデリング

 今回紹介する表現方法は、分析の手法として活用するものです。つまり「調べる⇒分析する⇒結果を記述する」という流れではなく、「調べる⇒記述する⇒分析する」というサイクルを前提にしています。限られたアイコンを使い、パターンに従って記述することが分析につながります。個々の要素をつなげる、分類するという行為を繰り返すことが、対象を深く知ることになるのです。ポイントは、間違っていてもいいので、とにかく記述することです。間違いは気づいたときに直せばいいのです。

 以下に表現方法を紹介しますが、結果を整理するのではなく「書きながら考える」ということを意識しながら使ってください。そうすると、少数の記号と決まったパターンで表現することの価値を実感できると思います。

表現方法

 システムの地図は6種類のデータと2つのモデルで表現します。

  • 誰に:  「アクター」、「外部システム」
  • 何を行い: 「画面・帳票」、「外部システムとの入出力」、「機能」、「データ」
  • 何のために:「ステートマシン図」、用語集、(「概念モデル」、「ドメインモデル」)

 「何を行い」の部分を7種類のアイコン(図1)で表現します。これらを組み合わせてシステム全体を表します。進め方は第2話の図3にもとづいて行います。

図1 使用するアイコン
図1 使用するアイコン

 最初は「材料を集める」ことから始めます。入出力情報となる画面、帳票、イベント、イベントデータとデータ(RDB、ファイル)を調べ、その結果をUMLツールに登録します。

 注意が必要なのは名前の付け方です。第1話の図4で、洗い出す情報は実体につなげるという説明をしました。実体というのはそのシステムで管理されている単位を指し、後でドキュメントやプログラムを調べるときの入口になるものです。画面・帳票、イベント、イベントデータ、データにつける名前はその管理されている名前を付けます。その名前が体系だった番号(K123123...)などで管理されている場合は分かりやすい名前を一緒に付けることも大事です。

 画面と帳票、イベントデータはクラスアイコンで表現し、各々の項目を洗い出したときはクラスの属性として表現します。

 イベントアイコンは外部のシステムとの入出力を表現するために使い、システムアイコンは関係する外部のシステムを表しています。イベントを外部システムとつなげることでイベントの帰属がわかります。

 データはクラスアイコンで表現し、テーブルのカラムはクラスの属性として表現します。ファイルはデータの入出力などに使用するものを表し、一時ファイルは対象外とします。この限られたアイコンで表現することでシステムの様々な実現手段に惑わされることなくシステムを表現できるようになります。

アイコンのつなぎ方を決める

 システムを表現するためにアイコンのつなぎ方をパターン化(図2)します。業務系のシステムは入出力がデータを介して相互に関係(第2話の図1参照)を持ちます。システムの地図はその相互の関係を示したものです。

 基本は入出力(画面・帳票、イベント、イベントデータ)とデータを、機能を介してつなげます。画面・帳票、イベント、データは洗い出したものをそのままアイコンとして記述します、実際のモデリングの作業は、それらの入出力とデータを機能でつなぐ作業が中心になります。この時の機能は論理的なものでプログラムではありません。あくまでもシステムの入出力となる画面・帳票、イベントとデータを論理的な機能でつなぐことで整理された形にまとめ上げます。

 画面の処理を例にとると画面のイベントが機能を呼び出し、データを操作します。同様に外部システムとのイベントも機能につながりデータを操作します。データを中心に機能、入出力とつなげて関係性を把握することで、システムの全体像が見えてきます。

 画面と機能の間にイベントを置くのは、システムの入出力をイベントとして統一的に扱うためです。

 通常画面や外部システムとのやりとりには相互に関係があり、その関係を整理することで、システムで管理する業務上の手続きが見えてきます。それを整理したものが手続きのルールになります。その記述方法としてステートマシン図(図3)を使います。

図3 構造と手続きのルール
図3 構造と手続きのルール

 「定周期イベント」というのは特定の時間に起動するようなイベントを表します。起動タイミングが時間に起因するものは全て定周期イベントとして扱います。

 機能をプログラムと対応させないのが、今回紹介している手法の特徴です。対象となるプログラムは混沌としており、そのままでは有益な情報になりません。そこで「現実とつながりながら現実の混沌に影響されずに整理する」(第1話で説明)ことが重要になります。入出力とデータは実際のシステムの情報を使いながら、機能は論理的に抽出し、整理された物として表現します。実際のプログラムと切り離して、本来の機能を洗い出すことで、システムを分かりやすく表現できるようになります。

図2 記述パターン
図2 記述パターン

ビジネスルールの表現

 上記の作業でシステムの全体像は見えてきましたが、システムを支配しているルールは見えていません。システムが扱う情報構造や振る舞いはビジネスルールとして扱い、第2話で説明したように3種類に分けて整理します。

手続きにともなうルール

 仕事を進めるために現場の人は状態を認識しています。例えばある受注に対して「在庫引き当て待ち」「出荷待ち」など受注の状態を管理しています。これらの状態の遷移をルール化したものが手続きに伴うルール化です。表現方法としてUMLのステートマシン図を使います。

 業務上の状態は現場担当者が使っている言葉や画面上の項目などに現れます。担当者が関心を寄せていることに着目すると状態が見えてきます。画面上「XXX中」のような表示があれば状態を識別している可能性があります。画面・帳票の調査やヒアリングの中で状態として認識できるものが出てきたときはステートマシン図に記述し整理します。

 次にイベントを状態変化の遷移に結びつけます。状態を変えるのはイベントが起点になると考えるからです(第2話の図5参照)。

 ビジネス上で認識されている状態と入出力をつなげることで、ビジネスと各画面や外部システムとの関わりを理解でき、システムの動きを把握できるようになります。同時に遷移に対応するイベントがない場合は、調査が足りていないことがわかります。

構造にともなうルール

 データの構造を調べると自ずと構造に起因する制約が見えてきます。RDBの場合について説明します。まずはテーブルの主キーを調べることで、どの単位でデータがユニークになるかを把握できます。

 次に、テーブル間の関係を整理します。テーブルAを外部参照するテーブルBがある場合はテーブルAとBは1対1もしくは1対多の可能性があります。多重度はスキーマ情報だけでは判断できませんが、重要なテーブルであれば保守担当者にヒアリングすることで1対1か1対多かを知ることができます。主にデータ間の多重度に焦点を当てて構造的な制約を整理します。データ間の制約を元に画面上で対象データの扱いを調べることで、制約がそのままルールになるか否かを判断出来ます。

 手続きのルールで洗い出した状態はデータの関係もしくは値として実現されると考えます。この考えを手がかりに状態とデータの関係を調べることで、システムの振る舞いに応じたデータの使われ方が見えてきます。このように入出力とデータの関係を、状態を使って整理することで、データの変化を分析できます。

条件付けられるルール

 表形式や用語としてまとめられるのがこのルールです。これらのルールは図的な表現ではなく、表形計算ツールを使い一覧形式で管理します。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
バリエーションに対応する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
モデルベースの手法でコストをかけずに既存システムを分析する連載記事一覧

もっと読む

この記事の著者

神崎 善司(カンザキ ゼンジ)

(株)バリューソース代表大手SIerにおいて大小10システム以上のプロジェクトリーダを勤め、20年ほど前に独立。2002年から5年間(株)豆蔵での社員も兼任しながら要件定義などの上流工程のコンサルティングを行う。2008年に要件定義手法「リレーションシップ駆動要件分析(RDRA)」を開発し現在はその...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6640 2012/07/31 12:33
" ); }

おすすめ

アクセスランキング

  1. 1
    GenAI、「生成AI大賞2024」の各賞を発表。グランプリは名古屋鉄道が受賞 NEW
  2. 2
    管理職の24.1%、今後管理職を「続けたくない」と回答。理由は「責任やストレス」が最多に
  3. 3
    Photoshop案件の平均年収は616万円。複業・副業の求人マッチング「SOKUDAN」掲載データから明らかに NEW
  4. 4
    経営とエンジニアリングをつなぐ鍵?──開発生産性×技術投資コストのダッシュボード設計 NEW
  5. 5
    JavaScriptに関する年次調査「State of JavaScript 2024」の結果が発表 NEW
  1. 6
    「イテレータ」 ~マンガでプログラミング用語解説 NEW
  2. 7
    GitHub CopilotとGitHub Models、OpenAIの最新AIモデル「OpenAI o1」が利用できるように NEW
  3. 8
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  4. 9
    フロントエンドの定番ライブラリ「React 19」の新機能を紹介──アクションによる非同期処理の進化
  5. 10
    UiPath、レポート「AIと自動化に関するトレンド 2025」を発表 NEW

アクセスランキング

  1. 1
    GenAI、「生成AI大賞2024」の各賞を発表。グランプリは名古屋鉄道が受賞 NEW
  2. 2
    管理職の24.1%、今後管理職を「続けたくない」と回答。理由は「責任やストレス」が最多に
  3. 3
    Photoshop案件の平均年収は616万円。複業・副業の求人マッチング「SOKUDAN」掲載データから明らかに NEW
  4. 4
    経営とエンジニアリングをつなぐ鍵?──開発生産性×技術投資コストのダッシュボード設計 NEW
  5. 5
    JavaScriptに関する年次調査「State of JavaScript 2024」の結果が発表 NEW
  6. 6
    「イテレータ」 ~マンガでプログラミング用語解説 NEW
  7. 7
    GitHub CopilotとGitHub Models、OpenAIの最新AIモデル「OpenAI o1」が利用できるように NEW
  8. 8
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  9. 9
    フロントエンドの定番ライブラリ「React 19」の新機能を紹介──アクションによる非同期処理の進化
  10. 10
    UiPath、レポート「AIと自動化に関するトレンド 2025」を発表 NEW
  1. 1
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  2. 2
    「CUDA」 ~マンガでプログラミング用語解説
  3. 3
    ITエンジニア本大賞2025、投票締切直前! みんなで選んだ歴代の大賞本を振り返って一挙紹介
  4. 4
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  5. 5
    2024年12月に開催される注目のITエンジニア向けカンファレンス5選
  6. 6
    日本在住の英語を話すソフトウェア開発者、年収の中央値は950万円に
  7. 7
    VSCodeをドキュメント作成に活用――テキストエディタ、Markdownエディタの設定と拡張機能を解説
  8. 8
    管理職の24.1%、今後管理職を「続けたくない」と回答。理由は「責任やストレス」が最多に
  9. 9
    2024年の提示年収が高いプログラミング言語は? paiza調査によるランキングが発表
  10. 10
    エンジニアの成長をブーストさせる! 2025年に向けて注目したいコミュニティ──技術・マネジメント・プロダクト開発まで

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

メールバックナンバー

アクセスランキング

  1. 1
    GenAI、「生成AI大賞2024」の各賞を発表。グランプリは名古屋鉄道が受賞 NEW
  2. 2
    管理職の24.1%、今後管理職を「続けたくない」と回答。理由は「責任やストレス」が最多に
  3. 3
    Photoshop案件の平均年収は616万円。複業・副業の求人マッチング「SOKUDAN」掲載データから明らかに NEW
  4. 4
    経営とエンジニアリングをつなぐ鍵?──開発生産性×技術投資コストのダッシュボード設計 NEW
  5. 5
    JavaScriptに関する年次調査「State of JavaScript 2024」の結果が発表 NEW
  1. 6
    「イテレータ」 ~マンガでプログラミング用語解説 NEW
  2. 7
    GitHub CopilotとGitHub Models、OpenAIの最新AIモデル「OpenAI o1」が利用できるように NEW
  3. 8
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  4. 9
    フロントエンドの定番ライブラリ「React 19」の新機能を紹介──アクションによる非同期処理の進化
  5. 10
    UiPath、レポート「AIと自動化に関するトレンド 2025」を発表 NEW

アクセスランキング

  1. 1
    GenAI、「生成AI大賞2024」の各賞を発表。グランプリは名古屋鉄道が受賞 NEW
  2. 2
    管理職の24.1%、今後管理職を「続けたくない」と回答。理由は「責任やストレス」が最多に
  3. 3
    Photoshop案件の平均年収は616万円。複業・副業の求人マッチング「SOKUDAN」掲載データから明らかに NEW
  4. 4
    経営とエンジニアリングをつなぐ鍵?──開発生産性×技術投資コストのダッシュボード設計 NEW
  5. 5
    JavaScriptに関する年次調査「State of JavaScript 2024」の結果が発表 NEW
  6. 6
    「イテレータ」 ~マンガでプログラミング用語解説 NEW
  7. 7
    GitHub CopilotとGitHub Models、OpenAIの最新AIモデル「OpenAI o1」が利用できるように NEW
  8. 8
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  9. 9
    フロントエンドの定番ライブラリ「React 19」の新機能を紹介──アクションによる非同期処理の進化
  10. 10
    UiPath、レポート「AIと自動化に関するトレンド 2025」を発表 NEW
  1. 1
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  2. 2
    「CUDA」 ~マンガでプログラミング用語解説
  3. 3
    ITエンジニア本大賞2025、投票締切直前! みんなで選んだ歴代の大賞本を振り返って一挙紹介
  4. 4
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  5. 5
    2024年12月に開催される注目のITエンジニア向けカンファレンス5選
  6. 6
    日本在住の英語を話すソフトウェア開発者、年収の中央値は950万円に
  7. 7
    VSCodeをドキュメント作成に活用――テキストエディタ、Markdownエディタの設定と拡張機能を解説
  8. 8
    管理職の24.1%、今後管理職を「続けたくない」と回答。理由は「責任やストレス」が最多に
  9. 9
    2024年の提示年収が高いプログラミング言語は? paiza調査によるランキングが発表
  10. 10
    エンジニアの成長をブーストさせる! 2025年に向けて注目したいコミュニティ──技術・マネジメント・プロダクト開発まで