SHOEISHA iD

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

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

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

プログラムをマクロ(大域的)に分析する

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

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

データの作り方

 マトリックスはExcelのピボットテーブル(図1)を利用すると簡単に作成できます。難しいのは元になる情報を作成することです。

 マトリックスを作るためにはプログラムとRDBのテーブルの呼び出し関係を調べる必要があります。正規表現やコンパイラーなどで使われるパーサーと言う技術を使って関係を調べます(これらの技術はこの記事の範囲を超えるので興味のある方は正規表現やパーサーを調べてください)。

 プログラムとデータの関係はCRUDを意識して洗い出するとより有効な分析が出来ます。InsertはCreateに対応し、SelectはReadに対応します。SQL文までうまく解析できればCRUDとの紐付けが可能になります。

 次にプログラムとデータは「システムの地図」で洗い出したパッケージを使って分類します。データはパッケージに分類しているのでデータに対応するパッケージを付加します。

 プログラムをパッケージに関係づけるためには、プログラムが管理されているフォルダーもしくはプログラムファイル名を利用します。当然プログラムが管理されているフォルダーとパッケージは直接の関係はないので、そのまま簡単に対応することはありません。しかし、通常プログラムの管理単位も何かしらの業務の構成に基づいているので、おおよその対応関係はつきます。この対応については個々のプログラムを調べて決めるわけにいかない(時間がかかり効率が悪い)ので、保守担当者へのヒアリングが頼りになります。そこで「このフォルダー内のプログラムはXX機能に関わるものが入っている」という情報や、「プログラムファイル名の先頭が”JC”で始まるものは”受注”に関わる」というような情報をもとにプログラムをパッケージに紐付けます。

図3 プログラムをパッケージにまとめる
図3 プログラムをパッケージにまとめる

 この時厳密さにこだわると作業が止まります。多少不正確でもざっくりと分類します。重要なのは個々の正確性ではなく、マクロに見たときの有効性です。一つのプログラムが複数の機能を持ち、分類に困った場合は主となる機能のパッケージに含めます。

 これらの結果を1つのつながり毎に一行(図4「プログラムとデータの関係を示す情報」参照)として作成します。そして作成したデータをExcelのピボットテーブルを使ってマトリックスに展開します。

 以下に分析用データの作成手順を示します。

手順1:ソースプログラムのフォルダーを分類
  • フォルダーにパッケージを割り当てる
  • 上記フォルダー配下のプログラムとパッケージを結びつける

Or

  • プログラムファイル名の任意の部分をパッケージに結びつける
手順2:パッケージ配下のデータを対応付ける
  • 「システムの地図」で分類したデータをパッケージに結びつける
手順3:プログラムの解析
  • プログラムをパースしてプログラムとデータの関係を求める
  • 関係はSQL分を解析してCRUDで識別する
手順4:ファイルの作成
  • 手順3で見つかった関係毎に1行の情報を作る
  • プログラムとデータに手順1と2で結びつけたパッケージを付加する
手順5:作成したファイルをExcelに読み込む
  • 読み込んだファイルはExcelのピボットテーブルを使ってマトリックスにする

 プログラムやテーブルの数は数百を超えるようになると、ピボットテーブルが大きくなり すぎて管理できなくなります。そのような時はパッケージを階層化して大中小の分類に分けて管理します。こうすることで大規模なシステムであっても、数枚のマトリックスで管理できるようになります。作成する情報のイメージを図4に示します。

図4 プログラムとデータの関係を示す情報
図4 プログラムとデータの関係を示す情報

 プログラムの解析は、分析対象のシステムがデータアクセスを標準化していれば可能ですが、データアクセスの方法がばらばらの場合はこの方式が使えない可能性があります。また、保守担当者がプログラムのソースフォルダーの分類を理解していない場合もこの方法は使えません。そして、プログラム解析にはそれなりにコストがかかるので、小中規模のシステムには向きません。大規模なシステムの場合にのみ効果があります。

データの見方

 マトリックスの縦にパッケージ別のプログラムを並べます。横にはパッケージ別のデータを並べます(縦横が逆になってもかまいません)。表中に表示される数字はプログラムとテーブルが関係する元情報の行数が入ります。この数字が0の場合はパッケージ間に関係がないということであり、数字が表示された場合はその数だけ関係を持つことになります。セルをダブルクリックすると対応する情報が表示されます。

図5 詳細な関連を調べる
図5 詳細な関連を調べる

 縦横のパッケージは同じものを使うので、表示される数字が対角線に並ぶとパッケージ内に閉じた関係と見ることができ、凝集度の高い構成になっていることが分かります。逆に対角線ではなく、バラバラに数字が表示される場合はパッケージ間に不必要に依存関係があると考えられます。

 このときCRUDの関係を使うと、もう1段深い分析を行えます。パッケージ間をまたぐ関係が参照(Read)であれば、関係する量が多くても問題になりませんが、パッケージをまたがる関係がCreate、Update、Deleteの場合は関係が「密」過ぎる可能性があります。

 セルの数字をダブルクリックすると、1件1件の情報までたどることが出来ます。パッケージ間の関係として不適切な関係が確認できたときは、そのつながりを確認することで、業務の特殊性やシステムのいびつな点が把握できます。

 このようにパッケージの役割から、相互の関係のあり方を探ることで、システムの特性をより深く理解することができます。

次のページ
既存システムの段階的な再構築に向けて

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6774 2012/11/01 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング