トップページ

ツールによるレガシープログラムの構造解析および「見える化(可視化)」について

 

現状の問題点

 

  • ある大企業が自社のシステムを調べたところ、膨大なプログラムの内、実際に利用されているのは4割にすぎず、残りの6割は全く使われていなかった。それらの幽霊プログラムがハードウエアなどのリソースを無駄使いしている。
  • プログラムを1行直すだけでも2か月かかる場合もある。
  • 大手金融機関の場合、COBOLアプリケーションの保守業務だけに年間500億円以上の費用をかける。スパゲッティ化したプログラムゆえの手間で膨大な金を浪費している。

あまりに長期間にわたり属人的な保守を続けてきた結果、コードがスパゲッティ化し、僅かな変更であっても影響の及ぶ範囲を容易に特定できないからだ。さらに保守作業は完全に属人化しており、担当者でないと怖くて触れないという状況になっている。

(日経コンピュータ)

 

ソリューションの提案

 

  • 仕様書のないスパゲッティ化したプログラムを解析して、プログラムの設計書(解析用汎用記述シート)およびDatatree(データ成立関連図)を作成する。(自動化ツールを開発済み)
     @データ間の関連を明示する。
     A潜在バグを発見する。
     B利用されないプログラムの実行箇所を発見する。 

その結果、プログラム内容が可視化され、潜在バグの可能性を発見し、使われていない幽霊プログラムを発見することが出来、仕様の追加・修正が簡単にできるようになる。

 

レガシープログラムの「見える化(可視化)」機能

 

銀行の基幹システムなど大型計算機用に作成されたプログラム群は、その規模、信頼性から現在も多数運用されていますが、開発当初(時によっては数十年前)やその後の機能変更に伴うドキュメント不足、現在主流のプログラム開発言語とは異なっているなどの課題から保守工数増や技術者不足が深刻となっています。これらのことはレガシーと呼ばれているシステムのみならず、状況によっては、つい1年前に開発したプログラムでも起こりうる状況が見受けられます。

また経産省が2018年に発表したDX(デジタルトランスフォーメーション)レポートにおいても、これらのプログラムが将来引き起こすであろう課題として ITシステム「2025年の崖」克服とDXの本格的な展開
 http://www.meti.go.jp/shingikai/mono_info_service/
digital_transformation/20180907_report.html

でも危機感をもって捉えられています。

 

この解決策として、当社では「既存プログラムが分からなければ対策もたてられない」ことを念頭に、

 

@ プログラム構造を可視化 ==> Datatree(データ成立関連図)の自動作成 

A @を利用した、バグの可能性を指摘する機能 

B 使われていない可能性のあるプログラム個所を指摘する機能
 を構築しました。

 

レガシープログラムの動きを捉えるDatatree(データ成立関連図)

「データツリー」とは?

 

プログラム可視化機能ではデータツリーを作成します。データツリーとは、一見するとフローチャートに似ていますが、データ領域の成立(計算)関係に注目した「家系図」のような図です。

データツリーの特徴について説明致します。イメージ図をご覧下さい。

 

 

一見するとフローチャートの方がすっきりしているようですが・・・

 

例えば

A=X-Y

という命令を比べてみて下さい。フローチャートでは

 

と記載されています。

この命令で利用している変数「X」と「Y」は何処で作成されているかを調べるにはプログラマーが流れを辿っていくことになります。この例では近くにありますが、状況によっては延々と探すことになります。

 

一方、データツリーでは

と記載されています。

矢印をたどれば、作成されたデータの存在する命令がダイレクトに分かります。

同時に「IF文」で条件分岐されている事も分かります。

実際の利用場面では、データ(領域)単位で上方、下方へのデータ成立の過程が追えるようにしてありますので、必要なデータ(領域)だけを対象として追うことも出来ますし、その結果のツリーを印刷することも可能です。

 

さらに、JCL(CL)や関数(サブルーチン)も一体的に解析しますので、ファイルを跨がった成立過程も追うことができます。

 

 

帳票の値がおかしいが・・・どうも帳票印刷プログラムでは計算していない・・・
・・・どこで計算しているのだ・・・

といった悩みが解決できます。

 

図 レガシープログラム解析に必須なDatatree(データ成立関連図)例

 

▲画像をクリックで拡大

 

レガシープログラムに内在するバグの可能性を指摘

Datatree(データ成立関連図)を作成する過程において、バグの可能性が内在されているプログラムでは、出力変数から上流にさかのぼる過程で流れが途切れ、データが繋がらない個所が発生することがあります。

 

図 バグが内在するレガシープログラムのDatatree(データ成立関連図) 例

 

▲画像をクリックで拡大

 

 

Datatree(データ成立関連図)では変数が途切れた個所が赤く明示され、この個所はバグの可能性があることを示しています。

これは簡単な事例ですが、大きなプログラムになると、特に関数間の引数の引き渡しなどでミスが発生しやすく、これらの確認のための大きな力になると想定しています 。

 

 

不要なプログラムコード(幽霊プログラム)を検出

稼働中のレガシープログラム内で実際には使われていない不要なプログラムソースコードが半分以上を占める現場も少なくないと聞きます。使われていないプログラムが大量に存在することがプログラムをメンテナンスするときの障害になっているとのことです。

 

Datatree(データ成立関連図)では、出力に関連するすべての変数(データ)から上流に変数をさかのぼり、関連する変数を塗りつぶすことが可能です。この結果、出力変数に関連しない変数は塗りつぶしが行われないことになります。結果的に不要なプログラム部分の候補を明示することが可能となります。

 

▲画像をクリックで拡大