JP2018025852A - プログラム分析方法、プログラム分析装置および分析プログラム - Google Patents
プログラム分析方法、プログラム分析装置および分析プログラム Download PDFInfo
- Publication number
- JP2018025852A JP2018025852A JP2016155457A JP2016155457A JP2018025852A JP 2018025852 A JP2018025852 A JP 2018025852A JP 2016155457 A JP2016155457 A JP 2016155457A JP 2016155457 A JP2016155457 A JP 2016155457A JP 2018025852 A JP2018025852 A JP 2018025852A
- Authority
- JP
- Japan
- Prior art keywords
- program
- file
- programs
- types
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】プログラム修正の効率化に資する情報を提供する。【解決手段】記憶部11は、同一のファイルにアクセスする複数のプログラムを含むプログラム資産13を記憶する。演算部12は、プログラム資産13からそれぞれがファイルに格納されるデータの構造を示すデータ構造定義文14a,14b,14c,14d,14e,14fを抽出する。演算部12は、データ構造定義文14a,14b,14c,14d,14e,14fの間の比較に基づいてそれらデータ構造定義文をタイプ15a,15b,15cに分類し、タイプ15a,15b,15cそれぞれについて当該タイプに属するデータ構造定義文を使用するプログラムの数をカウントする。演算部12は、タイプ15a,15b,15cの間のプログラムの数の分布を示す分布情報16を出力する。【選択図】図1
Description
本発明はプログラム分析方法、プログラム分析装置および分析プログラムに関する。
情報処理システムで使用されるプログラムは、長期間の運用に伴って拡張や変更が繰り返されることが多い。その結果として、プログラムの記述方法に一貫性がなくなることや、実質的に同じ内容の命令文が様々なプログラムに重複して記述されることがあり、当該プログラムの保守性が低下してしまうことがある。保守性の低いプログラムを使用し続けると、プログラムの可読性が低いために保守作業量が増大し、保守コストが大きくなってしまう。そこで、保守性が低くなったプログラムの構造を見直して再設計し、保守コストが小さくなるようにプログラムを修正することがある。
プログラムの保守性が低くなる状況の1つとして、複数のプログラムが同一のファイルにアクセスする状況が挙げられる。ファイルにアクセスするプログラムには、当該ファイルから読み込むデータまたは当該ファイルに書き込むデータの構造を示すデータ構造定義文が記述されることがある。データ構造定義文では、例えば、1以上のデータ項目の項目名やデータ型が定義される。ここで、同じファイルにアクセスする複数のプログラムに、実質的に同じ内容のデータ構造定義文が記述されることが生じ得る。これら複数のプログラムのデータ構造定義文は、データ項目の項目名などが統一されていないために、互いに若干異なることがある。この状況では、ファイルに格納するデータの構造を変えようとすると各プログラムに応じた変更を行うことになり、プログラムの保守性が低くなる。
そこで、例えば、データ項目名の統一を支援するソフトウェア標準化方法が提案されている。提案のソフトウェア標準化方法では、同じファイルにアクセスする複数のプログラムに定義されたデータ項目名を抽出し、抽出したデータ項目名を列挙した画面を表示する。列挙されたデータ項目名を参考にしてユーザに標準データ項目名を入力させ、プログラム中のデータ項目名を標準データ項目名に自動的に置換する。
また、例えば、標準化装置が提案されている。提案の標準化装置は、同じファイルにアクセスする複数のプログラムに定義されたデータ項目名を抽出し、抽出したデータ項目名を列挙した画面を表示する。標準化装置は、列挙されたデータ項目名の中からユーザに標準データ項目名を選択させる。標準化装置は、ユーザが選択した標準データ項目名を元のプログラムとは異なる外部ファイルに保存し、プログラムに含まれるデータ構造定義文を削除し、当該外部ファイルを参照するようにプログラムを修正する。
また、例えば、プログラム修正支援装置が提案されている。提案のプログラム修正支援装置は、プログラムに定義されたデータ項目毎に、当該プログラムのロジック中で使用されている回数をカウントし、使用回数が多いデータ項目を検討候補としてユーザに提示する。また、例えば、リエンジニアリング支援装置が提案されている。提案のリエンジニアリング支援装置は、プログラムを分析し、プログラムで使用されるデータ項目それぞれについて、データ項目名などの定義が外部ファイルに記載されている割合などの各種指標値を算出する。リエンジニアリング支援装置は、算出した指標値を所定の業界標準値と比較することで、プログラムの修正に要する日数や資金を見積もる。
しかし、上記特許文献1,2に記載の技術においてユーザに提供される情報は、現在プログラムで使用されている複数通りのデータ項目名のみである。このため、プログラム修正の効率化に資する情報を提供するという点で改善の余地がある。
例えば、現在使用されている複数通りのデータ項目名の中から標準データ項目名を選択する場合において、何れを標準データ項目名として選択すればよいかの判断に役立つ何らかの情報が提供されることが好ましい。また、例えば、限られた時間で保守性改善効果の大きいプログラム修正を行いたい場合において、何れのデータ項目名を優先的に検討すればよいかの判断に役立つ何らかの情報が提供されることが好ましい。
1つの側面では、本発明は、プログラム修正の効率化に資する情報を提供できるプログラム分析方法、プログラム分析装置および分析プログラムを提供することを目的とする。
1つの態様では、コンピュータが実行するプログラム分析方法が提供される。同一のファイルにアクセスする複数のプログラムを含むプログラム資産から、それぞれがファイルに格納されるデータの構造を示す複数のデータ構造定義文を抽出する。複数のデータ構造定義文の間の比較に基づいて複数のデータ構造定義文を複数のタイプに分類し、複数のタイプそれぞれについて複数のプログラムのうち当該タイプに属するデータ構造定義文を使用するプログラムの数をカウントする。複数のタイプの間のプログラムの数の分布を示す分布情報を出力する。
また、1つの態様では、記憶部と演算部とを有するプログラム分析装置が提供される。また、1つの態様では、コンピュータに実行させる分析プログラムが提供される。
1つの側面では、プログラム修正の効率化に資する情報を提供できる。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態のプログラム分析装置の例を示す図である。
第1の実施の形態のプログラム分析装置10は、既存のプログラム資産の保守性を向上させて情報処理システムの保守コストを低下させるときに使用される。プログラム分析装置10は、既存のプログラム資産を分析し、プログラム資産の修正作業を支援する。プログラム分析装置10は、ユーザが操作するクライアント装置でもよいし、クライアント装置からネットワーク経由でアクセスされるサーバ装置でもよい。
第1の実施の形態のプログラム分析装置10は、既存のプログラム資産の保守性を向上させて情報処理システムの保守コストを低下させるときに使用される。プログラム分析装置10は、既存のプログラム資産を分析し、プログラム資産の修正作業を支援する。プログラム分析装置10は、ユーザが操作するクライアント装置でもよいし、クライアント装置からネットワーク経由でアクセスされるサーバ装置でもよい。
プログラム分析装置10は、記憶部11および演算部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。演算部12は、例えば、CPU(Central Processing Unit)やDSP(Digital Signal Processor)などのプロセッサである。ただし、演算部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサは、RAMなどのメモリ(記憶部11でもよい)に記憶されたプログラムを実行する。プログラムには、分析プログラムが含まれる。複数のプロセッサの集合(マルチプロセッサ)を「プロセッサ」と呼ぶこともある。
記憶部11は、プログラム資産13を記憶する。プログラム資産13は、同一のファイルにアクセスする複数のプログラムを含む。これら複数のプログラムの一部または全部は、当該同一のファイルからデータを読み出すプログラムであってもよい。また、これら複数のプログラムの一部または全部は、当該同一のファイルにデータを書き込むプログラムであってもよい。プログラム資産13に含まれるプログラムは、例えば、COBOLなどのプログラミング言語によって記述されたソースプログラムである。
複数のプログラムそれぞれは、例えば、ファイルに格納されるデータ(読み出すデータまたは書き込むデータ)の構造を示すデータ構造定義文を含む。ただし、これら複数のプログラムの一部は、データ構造定義を記載した外部ファイルを参照するものであってもよい。データ構造定義を記載した外部ファイルをプログラムから参照することは、例えば、COPY文やinclude文などを用いて行うことができる。プログラム資産13は、このような外部ファイルを含んでもよい。データ構造定義文は、例えば、ファイルに格納されるデータに含まれる1以上のデータ項目を識別するための1以上のデータ項目名と、当該1以上のデータ項目に対応する1以上のデータ型とを含む。
プログラム資産13の中には、同一のファイルに対して異なるデータ構造定義文を使用するプログラムが混在している。これは、例えば、プログラム資産13の拡張や変更を繰り返す過程で、プログラム間でデータ項目名が統一されなかったことにより生じ得る。また、これは、例えば、処理ロジックを記述する都合上、既存のプログラムで使用しているデータ型とは異なるデータ型を用いて新たなプログラムを作成したことにより生じ得る。また、これは、例えば、2以上のデータ項目の集合を集団項目とみなし、集団項目に対して独自の集団項目名を定義したことにより生じ得る。
演算部12は、記憶部11に記憶されたプログラム資産13を分析し、同一のファイルに対する異なるデータ構造定義文の使用状況を可視化する。演算部12は、プログラム資産13から、同一のファイルに格納されるデータの構造を示す複数のデータ構造定義文を抽出する。例えば、演算部12は、プログラム資産13から、図1に示すデータ構造定義文14a,14b,14c,14d,14e,14fを抽出する。
データ構造定義文14a,14b,14c,14d,14e,14fは、例えば、互いに異なるプログラムに記述されていたデータ構造定義文である。データ構造定義文14a,14d,14fは、データ項目名が「key−item」でありデータ型が「X(10)」であることを示している。データ構造定義文14b,14eは、データ項目名が「key−item」でありデータ型が「N(5)」であることを示している。データ構造定義文14cは、データ項目名が「item−01」でありデータ型が「X(10)」であることを示している。ここで、「X(10)」は半角10文字を表し、「N(5)」は全角5文字を表しており、両者は同じデータ長を示している。
演算部12は、抽出した複数のデータ構造定義文の間の比較に基づいて、複数のデータ構造定義文を複数のタイプに分類する。例えば、演算部12は、異なるデータ型を使用するデータ構造定義文を異なるタイプに分類する。また、例えば、演算部12は、異なるデータ項目名を使用するデータ構造定義文を原則として異なるタイプに分類する。ただし、演算部12は、データ項目名の一部分(例えば、接頭辞)のみ異なるデータ構造定義文など、類似するデータ項目名を使用するデータ構造定義文を同じタイプに分類してもよい。
上記のデータ構造定義文14a,14b,14c,14d,14e,14fは、例えば、タイプ15a,15b,15cに分類される。すなわち、データ構造定義文14a,14d,14fはタイプ15aに分類される。データ構造定義文14b,14eはデータ型がタイプ15aと異なるため、タイプ15bに分類される。データ構造定義文14cはデータ項目名がタイプ15a,15bと異なるため、タイプ15cに分類される。
演算部12は、複数のタイプそれぞれについて、当該タイプに属するデータ構造定義文を使用するプログラムの数をカウントする。上記のタイプ15aのプログラム数は3、タイプ15bのプログラム数は2、タイプ15cのプログラム数は1である。
そして、演算部12は、複数のタイプの間のプログラム数の分布を示す分布情報16を出力する。例えば、演算部12は、プログラム分析装置10に接続されたディスプレイに分布情報16を表示させる。また、例えば、演算部12は、他の装置に分布情報16を送信する。分布情報16は、複数のタイプそれぞれのプログラム数を示すグラフ(例えば、積み上げ棒グラフ)であってもよい。また、分布情報16は、複数のタイプの間のプログラム数の比を示すグラフ(例えば、円グラフ)であってもよい。演算部12は、分布情報16と併せて、各タイプに属するデータ構造定義文を出力してもよい。
第1の実施の形態のプログラム分析装置10によれば、プログラム資産13から同一のファイルに対する複数のデータ構造定義文が抽出され、抽出された複数のデータ構造定義文が比較されて複数のタイプに分類される。そして、複数のタイプそれぞれについて当該タイプに属するデータ構造定義文を使用するプログラムの数がカウントされ、複数のタイプの間のプログラム数の分布を示す分布情報16が出力される。
これにより、同一のファイルに対する複数のデータ構造定義文の使用状況を可視化することができ、プログラム資産13の修正の効率化に資する情報を提供することができる。例えば、複数のデータ構造定義文を集約する(例えば、データ項目名を統一する)にあたり、複数のタイプのうち最もプログラム数の多いタイプを標準データ構造定義文として選択することで、修正作業を効率化することができる。また、例えば、プログラム数の多いタイプを優先的に修正対象として検討することで、限られた時間の中で保守性改善効果の大きい修正作業を優先的に行うことが可能となる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、プログラム分析装置のハードウェア例を示すブロック図である。
次に、第2の実施の形態を説明する。
図2は、プログラム分析装置のハードウェア例を示すブロック図である。
プログラム分析装置100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107は、バス108に接続されている。なお、プログラム分析装置100は、第1の実施の形態のプログラム分析装置10に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。CPU101は、第1の実施の形態の演算部12に対応する。
CPU101は、プログラムの命令を実行する演算回路を含むプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを備えてもよく、プログラム分析装置100は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合(マルチプロセッサ)を「プロセッサ」と呼んでもよい。
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、プログラム分析装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。プログラムには、分析プログラムが含まれる。なお、プログラム分析装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部104は、CPU101からの命令に従って、プログラム分析装置100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ(PDP:Plasma Display Panel)、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなどを用いることができる。
入力信号処理部105は、プログラム分析装置100に接続された入力デバイス112から入力信号を取得し、CPU101に出力する。入力デバイス112としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、プログラム分析装置100に、複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は、可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
通信インタフェース107は、ネットワーク114に接続され、ネットワーク114を介して他の装置と通信を行うインタフェースである。通信インタフェース107は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
次に、ファイルにアクセスするソースプログラムの記述方法について説明する。
図3は、第1のレコード定義方法の例を示す図である。
ソースプログラム131は、プログラミング言語としてCOBOLを用いて記述されたソースプログラム(ソースコード)の例である。ソースプログラム131は、見出し部(IDENTIFICATION DIVISON)、環境部(ENVIRONMENT DIVISION)、データ部(DATA DIVISION)および手続き部(PROCEDURE DIVISION)を含む。
図3は、第1のレコード定義方法の例を示す図である。
ソースプログラム131は、プログラミング言語としてCOBOLを用いて記述されたソースプログラム(ソースコード)の例である。ソースプログラム131は、見出し部(IDENTIFICATION DIVISON)、環境部(ENVIRONMENT DIVISION)、データ部(DATA DIVISION)および手続き部(PROCEDURE DIVISION)を含む。
見出し部には、プログラム名が記述される。ソースプログラム131のプログラム名は「PROGRAM1」である。環境部には、アクセスするファイルの論理ファイル名と中間ファイル名との対応関係が記述される。論理ファイル名と中間ファイル名は何れも、ファイルシステムが使用する物理的なファイル名(実ファイル名)とは異なる仮想的なファイル名である。論理ファイル名は、データ部で使用されるファイル名である。中間ファイル名は、後述するジョブ制御言語(JCL:Job Control Language)プログラムで使用されるファイル名である。ソースプログラム131がアクセスするファイルの論理ファイル名は「人事−REC」、中間ファイル名は「FILE1」である。
データ部には、論理ファイル名と対応付けて、論理ファイル名が示すファイルに格納されるデータの構造を示すレコード定義が記述される。第2の実施の形態のレコード定義は、第1の実施の形態のデータ構造定義文に対応する。レコード定義は、ファイルに格納されるデータに含まれる1以上のレコード(データ項目)を示す。1つのレコードに対して、1つのデータ項目名と1つのデータ型とが定義される。ただし、処理ロジックを記述するのに好適な場合、2以上のレコードの集合に対し集団項目名が付与されることがある。
ソースプログラム131には、論理ファイル名「人事−REC」に対して、(従業員コード,X(5))、(所属コード,X(3))、(氏名,N(10))というレコード定義が記述されている。データ型であるX(5)は5文字の半角文字列を表し、X(3)は3文字の半角文字列を表し、N(10)は10文字の全角文字列を表している。
手続き部には、データ部で定義されたレコード定義を利用した処理ロジックが記述される。手続き部には、論理ファイル名が示すファイルからデータを読み出す処理ロジックが記述されることがある。その場合、データ項目名を変数名として用いて、ファイルから読み出したデータを参照することができる。また、手続き部には、論理ファイル名が示すファイルにデータを書き込む処理ロジックが記述されることがある。その場合、データ項目名を変数名として用いて、ファイルに書き込むデータを生成することができる。
図4は、第2のレコード定義方法の例を示す図である。
ソースプログラム132は、図3のソースプログラム131と同様に、プログラミング言語としてCOBOLを用いて記述されたソースプログラムの例である。ソースプログラム132の環境部には、ソースプログラム131と同様に、論理ファイル名「人事−REC」と中間ファイル名「FILE1」が記述されている。すなわち、ソースプログラム132は、ソースプログラム131と同じファイルにアクセスすることがある。
ソースプログラム132は、図3のソースプログラム131と同様に、プログラミング言語としてCOBOLを用いて記述されたソースプログラムの例である。ソースプログラム132の環境部には、ソースプログラム131と同様に、論理ファイル名「人事−REC」と中間ファイル名「FILE1」が記述されている。すなわち、ソースプログラム132は、ソースプログラム131と同じファイルにアクセスすることがある。
ただし、ソースプログラム131と異なり、ソースプログラム132のデータ部にはレコード定義が直接記述されていない。その代わりに、ソースプログラム132のデータ部には、レコード定義ファイル133を参照するCOPY文が記述されている。COPY文は、参照先のレコード定義ファイルに記述されたレコード定義を取り込む命令文である。ソースプログラム132は、ファイル名が「人事RECファイル」であるレコード定義ファイル133のレコード定義をデータ部に取り込んでいる。
レコード定義ファイル133は、ソースプログラムから分離されたレコード定義用の外部ファイルである。レコード定義ファイル133には、ソースプログラム131のデータ部と同様に、(従業員コード,X(5))、(所属コード,X(3))、(氏名,N(10))というレコード定義が記述されている。レコード定義ファイル133のレコード定義をソースプログラム132のデータ部に取り込むことで、論理ファイル名「人事−REC」が示すファイルのデータにソースプログラム132からアクセスすることができる。
レコード定義ファイル133はソースプログラム132から分離されているため、複数のソースプログラムがレコード定義ファイル133を共有することも可能である。なお、上記のCOPY文とレコード定義ファイル133を利用したレコード定義の方法は、C言語のinclude文とヘッダファイルを利用することによっても実現できる。
ここで、情報処理システムを長期間運用していると、情報処理システム上で使用されるプログラム資産の拡張や変更が繰り返されることがある。その結果として、同一のファイルに対して、図3のような埋め込み形式のレコード定義を利用するソースプログラムと図4のような外部参照形式のレコード定義を利用するソースプログラムとが、プログラム資産の中に混在することがある。また、レコード定義の記述方法が統一されず、ソースプログラムやレコード定義ファイルによってレコード定義が異なることがある。
同一のファイルに対して異なるレコード定義が存在する原因として、例えば、不注意により既存のデータ項目名と異なるデータ項目名を使用して新しいソースプログラムを作成してしまったことが考えられる。この場合、事後的にデータ項目名を統一することが可能であることが多い。一方、原因として、例えば、処理ロジックを記述する都合上、既存のソースプログラムが使用していない新たな集団項目名を定義した場合や、意図的に既存のレコード定義とは異なるデータ型を使用した場合も考えられる。この場合、処理ロジックが変わらないようにレコード定義を事後的に統一することが難しいことがある。
同一のファイルについてのレコード定義が様々なソースプログラムに重複して記述されている場合、プログラム資産の保守性が低下して以降の保守コストが増大する。また、同一のファイルについて複数のタイプのレコード定義が存在する場合にも、プログラム資産の保守性が低下して以降の保守コストが増大する。そこで、理想的には、1つのファイルについて1つのレコード定義ファイルを作成し、当該ファイルにアクセスするソースプログラムは全て当該レコード定義ファイルを参照するようにすることが好ましい。
ただし、上記のように、同一のファイルについてのレコード定義を機械的に統一することが難しい場合がある。そこで、プログラム資産の保守性を向上させるために、情報処理システムのユーザやエンジニアなどがソースプログラムを見直し、統一することが可能な範囲でレコード定義を修正することがある。第2の実施の形態のプログラム分析装置100は、そのようなレコード定義の修正作業を支援する。具体的には、プログラム分析装置100は、複数のタイプのレコード定義の使用状況を可視化する。
以下、プログラム分析装置100による可視化方法を説明する。まず、ソースプログラムからアクセスされるファイルの物理的同一性を判定する方法について説明する。
図5は、JCLファイルの例を示す図である。
図5は、JCLファイルの例を示す図である。
JCLファイル134は、1以上のソースプログラムを所定の順序で起動させるジョブを制御するためのJCLプログラムを記述したバッチファイルである。JCLファイル134のファイル名は「JCL01」である。プログラム分析装置100は、JCLファイル134を用いて、論理ファイル名から実ファイル名を特定する。
JCLファイル134には、複数のジョブステップが定義される。各ジョブステップについて、JCLファイル134には、ジョブ名と、起動されるソースプログラムのプログラム名が記述される。図5のJCLファイル134には、ジョブ名「JOB1」とプログラム名「PROGRAM1」が記述されている。また、各ジョブステップについて、JCLファイル134には、中間ファイル名と実ファイル名との対応関係が記述される。図5のJCLファイル134には、中間ファイル名「FILE1」が実ファイル名「FILE1.DAT1」に対応することが記述されている。同様に、中間ファイル名「FILE2」が実ファイル名「FILE2.DAT2」に対応し、中間ファイル名「FILE3」が実ファイル名「FILE3.DAT3」に対応することが記述されている。
なお、JCLファイル134には、データの使用方法を示すパラメータが記述されることがある。「NEW」はそのジョブステップでデータを新規に生成することを示す。「OLD」はそのジョブステップの前から存在するデータを排他的に読み出すことを示す。「SHR」はそのジョブステップの前から存在するデータを共有で読み出すことを示す。
図6は、ファイル参照テーブルの例を示す図である。
プログラム分析装置100は、1以上のソースプログラムと1以上のJCLファイルとを分析してファイル参照テーブル135を生成する。ファイル参照テーブル135は、プログラム名、中間ファイル名、論理ファイル名、レコード定義ファイル名、JCLファイル名、ジョブ名および実ファイル名の項目を有する。
プログラム分析装置100は、1以上のソースプログラムと1以上のJCLファイルとを分析してファイル参照テーブル135を生成する。ファイル参照テーブル135は、プログラム名、中間ファイル名、論理ファイル名、レコード定義ファイル名、JCLファイル名、ジョブ名および実ファイル名の項目を有する。
プログラム名の項目には、ソースプログラムやJCLファイルから抽出されたプログラム名が登録される。中間ファイル名の項目には、ソースプログラムやJCLファイルから抽出された中間ファイル名が登録される。論理ファイル名の項目には、ソースプログラムから抽出された論理ファイル名が登録される。レコード定義ファイル名の項目には、ソースプログラムから抽出されたレコード定義ファイル名が登録される。ただし、レコード定義が直接埋め込まれているソースコードについては、レコード定義ファイル名の項目は空欄となる。JCLファイル名の項目には、JCLファイルのファイル名が登録される。ジョブ名の項目には、JCLファイルから抽出されたジョブ名が登録される。実ファイル名の項目には、JCLファイルから抽出された実ファイル名が登録される。
プログラム分析装置100は、1以上のソースプログラムそれぞれについて、見出し部からプログラム名を抽出し、環境部から中間ファイル名と論理ファイル名を抽出する。また、プログラム分析装置100は、抽出した論理ファイル名についてのCOPY文がデータ部に記述されている場合、COPY文に含まれるレコード定義ファイル名を抽出する。プログラム分析装置100は、抽出したプログラム名と中間ファイル名と論理ファイル名とレコード定義ファイル名を対応付けてファイル参照テーブル135に登録する。
例えば、プログラム分析装置100は、ソースプログラム131から、プログラム名「PROGRAM1」、中間ファイル名「FILE1」および論理ファイル名「人事−REC」を抽出して登録する。レコード定義がソースプログラム131に直接埋め込まれているため、レコード定義ファイル名の項目は空欄になる。また、例えば、プログラム分析装置100は、ソースプログラム132から、プログラム名「PROGRAM2」、中間ファイル名「FILE1」、論理ファイル名「人事−REC」およびレコード定義ファイル名「人事RECファイル」を抽出して登録する。
また、プログラム分析装置100は、1以上のJCLファイルそれぞれについて、JCLファイル名、ジョブ名、プログラム名、中間ファイル名および実ファイル名を抽出する。プログラム分析装置100は、ファイル参照テーブル135から、抽出したプログラム名と中間ファイル名を含む情報を検索し、検索した情報と対応付けて、抽出したJCLファイル名とジョブ名と実ファイル名をファイル参照テーブル135に登録する。
例えば、プログラム分析装置100は、JCLファイル134から、JCLファイル名「JCL01」、ジョブ名「JOB1」、プログラム名「PROGRAM1」、中間ファイル名「FILE1」および実ファイル名「FILE1.DAT1」を抽出する。プログラム分析装置100は、ファイル参照テーブル135から、プログラム名「PROGRAM1」と中間ファイル名「FILE1」に対応する行を検索する。プログラム分析装置100は、ファイル参照テーブル135の検索した行に、JCLファイル名「JCL01」、ジョブ名「JOB1」および実ファイル名「FILE1.DAT1」を登録する。
これにより、プログラム名とレコード定義ファイル名と実ファイル名を紐付けることができる。すなわち、複数のソースプログラムそれぞれがデータアクセスに用いる物理的なファイルと、参照するレコード定義ファイルとを特定できる。
次に、プログラム資産に含まれるレコード定義のタイプ分類について説明する。
図7は、レコード定義のタイプ分類例を示す図である。
レコード定義141〜145は、同一のファイルについての異なるレコード定義であり、例えば、異なるソースプログラムに記述されたものである。
図7は、レコード定義のタイプ分類例を示す図である。
レコード定義141〜145は、同一のファイルについての異なるレコード定義であり、例えば、異なるソースプログラムに記述されたものである。
レコード定義141に記述された「XXX−KEY」、「XXX−FLG」は集団項目名である。レコード定義141に記述された「XXX−PGM−ID」、「XXX−SEQ−NO」、「XXX−TANMATSU−KBN」はデータ項目名である。また、レコード定義141に記述された「XXX−FLG−1」、「XXX−FLG−2」、「XXX−FLG−3」、「XXX−FLG−4」、「XXX−FLG−5」はデータ項目名である。また、レコード定義141に記述された「XXX−SITE−MEI」、「XXX−SITE−MEI−RYAKUSHO」、「FILLER」はデータ項目名である。レコード定義141に記述された「X(07)」、「9(02)」、「X(01)」、「N(15)」、「N(07)」、「X(21)」はデータ型である。
データ項目名に含まれる「XXX−」は接頭辞である。2つのデータ項目名の同一性を判断するにあたり、プログラム分析装置100は、接頭辞を匿名化する(接頭辞の違いを無視する)ことがある。データ項目名の接頭辞は論理ファイル名と関連していることがある。例えば、論理ファイル名が「U01−REC」であるファイルについてのデータ項目名が「U01−AAA」のように定義されることがある。この場合、データ項目名の先頭に付加されている「U01−」を接頭辞とみなすことができる。
レコード定義142は、データ項目名「XXX−SITE−MEI」に対応するデータ型が「X(30)」である点でレコード定義141と異なる。また、レコード定義142は、データ項目名「XXX−SITE−MEI−RYAKUSHO」に対応するデータ型が「X(14)」である点でレコード定義141と異なる。よって、レコード定義141が第1のタイプに属するとすると、レコード定義142は第2のタイプに属する。
レコード定義143は、「XXX−SITE−MEI−RYAKUSHO」が集団項目名であり、「XXX−SITE−MEI−RYAKU−KJ」がデータ項目名である点でレコード定義141と異なる。レコード定義143は、レコード定義141,142の何れとも異なっている。よって、レコード定義143は第3のタイプに属する。
図8は、レコード定義のタイプ分類例を示す図(続き)である。
レコード定義144は、レコード定義141のデータ項目名「XXX−FLG」が「XXX−SHORI−FLG」に変更されている点でレコード定義141と異なる。また、レコード定義144は、レコード定義141のデータ項目名「FILLER」が「XXX−FILLER」に変更されている点でレコード定義141と異なる。レコード定義144は、レコード定義141〜143の何れとも異なっている。よって、レコード定義144は第4のタイプに属する。なお、接頭辞を匿名化する場合、「FILLER」と「XXX−FILLER」とが実質的に同じであると判断されてもよい。
レコード定義144は、レコード定義141のデータ項目名「XXX−FLG」が「XXX−SHORI−FLG」に変更されている点でレコード定義141と異なる。また、レコード定義144は、レコード定義141のデータ項目名「FILLER」が「XXX−FILLER」に変更されている点でレコード定義141と異なる。レコード定義144は、レコード定義141〜143の何れとも異なっている。よって、レコード定義144は第4のタイプに属する。なお、接頭辞を匿名化する場合、「FILLER」と「XXX−FILLER」とが実質的に同じであると判断されてもよい。
レコード定義145は、データ項目名「XXX−SITE−MEI」に対応するデータ型が「X(30)」である点でレコード定義141と異なる。また、レコード定義145は、データ項目名「XXX−SITE−MEI−RYAKUSHO」に対応するデータ型が「X(14)」である点でレコード定義141と異なる。また、レコード定義145は、レコード定義141のデータ項目名「FILLER」が「XXX−FILLER」に変更されている点でレコード定義141と異なる。上記のデータ型の差異は、レコード定義142と同様である。また、上記のデータ項目名の差異は、レコード定義144と同様である。しかし、レコード定義145は、全体としてレコード定義141〜144の何れとも異なっている。よって、レコード定義145は第5のタイプに属する。このように、レコード定義141〜145は互いに異なるタイプに属することになる。
図9は、タイプ分類テーブルの例を示す図である。
プログラム分析装置100は、上記のようにして分類した複数のタイプの使用状況を可視化するにあたり、タイプ分類テーブル136を生成する。
プログラム分析装置100は、上記のようにして分類した複数のタイプの使用状況を可視化するにあたり、タイプ分類テーブル136を生成する。
プログラム分析装置100は、レコード定義のタイプ毎に、当該タイプに属するレコード定義を使用するソースプログラムの数をカウントする。複数のソースプログラムが共通のレコード定義ファイルをCOPY文によって参照している場合、COPY文1つにつきカウントが+1される。また、プログラム分析装置100は、タイプ毎に共通のレコード定義ファイルを作成してソースプログラムに直接記述されたレコード定義を全て外部参照形式に変換した場合の削減率を試算する。削減率は、現在のプログラム資産に含まれるソースプログラムの総ステップ数(例えば、総行数)に対する、変換により減少するソースプログラムのステップ数(例えば、減少行数)の割合である。
削減率は実ファイル毎に算出される。多数のソースプログラムに埋め込み形式で記述されているタイプが存在する実ファイルは、削減率が大きくなりやすい。一方、既に1つまたは少数のレコード定義ファイルを参照する外部参照形式に統一されているタイプが存在する実ファイルは、削減率が小さくなりやすい。また、少数のソースプログラムでしか使用されていないタイプが存在する実ファイルは、削減率が小さくなりやすい。
ここで、接頭辞を匿名化してデータ項目名同士を比較した場合(接頭辞を無視した場合)、接頭辞を無視しない場合よりもタイプ数が少なくなる。この場合、接頭辞のみ異なるレコード定義の記述を統一することができれば、接頭辞を無視しない場合よりも削減率が大きくなる。そこで、プログラム分析装置100は、接頭辞を無視しない場合と接頭辞を無視した場合の両方についてプログラム数や削減率を算出することが好ましい。
タイプ分類テーブル136は、実ファイル名、プログラム数、削減率、接頭辞無視のプログラム数および接頭辞無視の削減率の項目を有する。実ファイル名の項目には、ソースプログラムからアクセスされる物理的なファイルの実ファイル名が登録される。プログラム数の項目には、接頭辞を無視せずにレコード定義をタイプ分類したときの複数のタイプのソースプログラム数が列挙される。実ファイル名とプログラム名の関係は、ファイル参照テーブル135を用いて特定することができる。
削減率の項目には、接頭辞を無視しないことで得られた複数のタイプそれぞれを外部参照形式に変換した場合の削減率が登録される。接頭辞無視のプログラム数の項目には、接頭辞を無視してレコード定義をタイプ分類したときの複数のタイプのソースプログラム数が列挙される。接頭辞を無視したときのタイプ数は、接頭辞を無視しないときのタイプ数以下となる。接頭辞無視の削減率の項目には、接頭辞を無視することで得られた複数のタイプそれぞれを外部参照形式に変換した場合の削減率が登録される。接頭辞を無視したときの削減率は、接頭辞を無視しないときの削減率以上となる。
プログラム分析装置100は、生成したタイプ分類テーブル136に基づいて可視化画面をディスプレイ111に表示する。次に、可視化画面の例を説明する。
図10は、レコード定義分布の第1の可視化例を示す図である。
図10は、レコード定義分布の第1の可視化例を示す図である。
可視化画面151はディスプレイ111に表示される。可視化画面151は、実ファイル名が「ファイルA」であるファイルについての複数のタイプの使用状況を示す。可視化画面151の左側の円グラフは、接頭辞を無視しない場合の複数のタイプの間のプログラム数の比を示している。可視化画面151の右側の円グラフは、接頭辞を無視した場合の複数のタイプの間のプログラム数の比を示している。
円グラフを用いることで、あるファイルについて最も多く使用されているレコード定義のタイプを把握することが容易となる。ユーザは、例えば、最も多く使用されているタイプを標準レコード定義として選択し、当該ファイルのレコード定義を標準レコード定義に統一することを検討することが考えられる。また、円グラフを用いることで、標準レコード定義以外のタイプがどの程度使用されているか把握することが容易となる。これにより、ユーザは、例えば、当該ファイルのレコード定義を修正することによるプログラム資産の保守性向上効果を見積もることが可能となる。プログラム分析装置100は、ユーザ入力に応じて、異なるファイルについての円グラフを表示してもよい。
図11は、レコード定義分布の第2の可視化例を示す図である。
可視化画面152はディスプレイ111に表示される。可視化画面152は、複数のファイルについての複数のタイプの使用状況を示す。可視化画面152では、各ファイルについての複数のタイプのプログラム数が積み上げ棒グラフによって表されている。図11の例は、接頭辞を無視した場合のプログラム数を示す。プログラム分析装置100は、ユーザ入力に応じて、接頭辞を無視した場合のグラフと無視しない場合のグラフを切り替えて表示してもよい。積み上げ棒グラフを用いることで、図10の場合と同様に、あるファイルについて最も多く使用されているレコード定義のタイプを把握することが容易となる。また、積み上げ棒グラフを用いることで、標準レコード定義以外のタイプがどの程度使用されているか把握することが容易となる。
可視化画面152はディスプレイ111に表示される。可視化画面152は、複数のファイルについての複数のタイプの使用状況を示す。可視化画面152では、各ファイルについての複数のタイプのプログラム数が積み上げ棒グラフによって表されている。図11の例は、接頭辞を無視した場合のプログラム数を示す。プログラム分析装置100は、ユーザ入力に応じて、接頭辞を無視した場合のグラフと無視しない場合のグラフを切り替えて表示してもよい。積み上げ棒グラフを用いることで、図10の場合と同様に、あるファイルについて最も多く使用されているレコード定義のタイプを把握することが容易となる。また、積み上げ棒グラフを用いることで、標準レコード定義以外のタイプがどの程度使用されているか把握することが容易となる。
図12は、プログラム修正効果の可視化例を示す図である。
可視化画面153はディスプレイ111に表示される。可視化画面153は、複数の実ファイル名それぞれについて、接頭辞を無視せずに試算した削減率と接頭辞を無視して試算した削減率とを表形式で表している。可視化画面153によれば、ソースプログラムのレコード定義を外部参照形式に変換することによる効果を定量的に表現できる。図12では、削減率が1%以上になる場合を強調表示している。
可視化画面153はディスプレイ111に表示される。可視化画面153は、複数の実ファイル名それぞれについて、接頭辞を無視せずに試算した削減率と接頭辞を無視して試算した削減率とを表形式で表している。可視化画面153によれば、ソースプログラムのレコード定義を外部参照形式に変換することによる効果を定量的に表現できる。図12では、削減率が1%以上になる場合を強調表示している。
次に、プログラム分析装置100の機能について説明する。
図13は、プログラム分析装置の機能例を示すブロック図である。
プログラム分析装置100は、JCLファイル記憶部121、ソースプログラム記憶部122、ファイル参照テーブル記憶部123およびタイプ分類テーブル記憶部124を有する。また、プログラム分析装置100は、JCLファイル分析部125、ソースプログラム分析部126、タイプ判定部127および表示制御部128を有する。
図13は、プログラム分析装置の機能例を示すブロック図である。
プログラム分析装置100は、JCLファイル記憶部121、ソースプログラム記憶部122、ファイル参照テーブル記憶部123およびタイプ分類テーブル記憶部124を有する。また、プログラム分析装置100は、JCLファイル分析部125、ソースプログラム分析部126、タイプ判定部127および表示制御部128を有する。
JCLファイル記憶部121、ソースプログラム記憶部122、ファイル参照テーブル記憶部123およびタイプ分類テーブル記憶部124は、例えば、RAM102またはHDD103の記憶領域を用いて実装される。JCLファイル分析部125、ソースプログラム分析部126、タイプ判定部127および表示制御部128は、例えば、CPU101が実行するプログラムモジュールを用いて実装される。
JCLファイル記憶部121は、JCLファイル134のような1以上のJCLファイルを記憶する。プログラム分析装置100は、JCLファイル記憶部121に記憶されるJCLファイルを他の装置から受信してもよい。また、プログラム分析装置100は、JCLファイルを記録媒体113から読み出してもよい。
ソースプログラム記憶部122は、ソースプログラム131,132のような1以上のソースプログラムを記憶する。また、ソースプログラム記憶部122は、ソースプログラムから参照される1以上のレコード定義ファイルを記憶する。プログラム分析装置100は、ソースプログラム記憶部122に記憶されるソースプログラムやレコード定義ファイルを他の装置から受信してもよい。また、プログラム分析装置100は、ソースプログラムやレコード定義ファイルを記録媒体113から読み出してもよい。
ファイル参照テーブル記憶部123は、ファイル参照テーブル135を記憶する。タイプ分類テーブル記憶部124は、タイプ分類テーブル136を記憶する。
JCLファイル分析部125は、JCLファイル記憶部121に記憶されたJCLファイルを分析し、JCLファイル名、ジョブ名、プログラム名、中間ファイル名および実ファイル名を抽出する。JCLファイル分析部125は、ファイル参照テーブル記憶部123に記憶されたファイル参照テーブル135に、プログラム名および中間ファイル名と対応付けて、JCLファイル名、ジョブ名および実ファイル名を登録する。
JCLファイル分析部125は、JCLファイル記憶部121に記憶されたJCLファイルを分析し、JCLファイル名、ジョブ名、プログラム名、中間ファイル名および実ファイル名を抽出する。JCLファイル分析部125は、ファイル参照テーブル記憶部123に記憶されたファイル参照テーブル135に、プログラム名および中間ファイル名と対応付けて、JCLファイル名、ジョブ名および実ファイル名を登録する。
ソースプログラム分析部126は、ソースプログラム記憶部122に記憶されたソースプログラムを分析し、プログラム名、中間ファイル名、論理ファイル名およびレコード定義ファイル名を抽出する。ソースプログラム分析部126は、ファイル参照テーブル記憶部123に記憶されたファイル参照テーブル135に、プログラム名、中間ファイル名、論理ファイル名およびレコード定義ファイル名を登録する。
タイプ判定部127は、ファイル参照テーブル記憶部123に記憶されたファイル参照テーブル135を参照して、ソースプログラム記憶部122に記憶されたソースプログラムやレコード定義ファイルからレコード定義を抽出する。タイプ判定部127は、同一のファイルに対するレコード定義を相互に比較して複数のタイプに分類する。
タイプ判定部127は、接頭辞を無視しない場合と接頭辞を無視した場合それぞれについて、複数のタイプそれぞれに属するレコード定義を使用するソースプログラムの数をカウントする。タイプ判定部127は、タイプ分類テーブル記憶部124に記憶されたタイプ分類テーブル136に、接頭辞を無視しない場合のプログラム数と接頭辞を無視した場合のプログラム数を登録する。また、タイプ判定部127は、タイプ毎に1つのレコード定義ファイルを生成するシミュレーションを行い、接頭辞を無視しない場合と接頭辞を無視した場合それぞれについて削減率を試算する。タイプ判定部127は、タイプ分類テーブル記憶部124に記憶されたタイプ分類テーブル136に、接頭辞を無視しない場合の削減率と接頭辞を無視した場合の削減率を登録する。
表示制御部128は、タイプ分類テーブル記憶部124に記憶されたタイプ分類テーブル136に基づいて、可視化画面151〜153のような可視化画面を生成する。表示制御部128は、生成した可視化画面をディスプレイ111に表示させる。表示制御部128は、ユーザからの入力に応じて、表示する可視化画面を切り替えてもよい。なお、プログラム分析装置100は、タイプ分類テーブル136の情報またはそれに基づいて生成された可視化情報(グラフなど)を他の装置に送信してもよい。また、プログラム分析装置100は、タイプ分類テーブル136の情報またはそれに基づいて生成された可視化情報を、ディスプレイ111以外の出力デバイス(プリンタなど)に出力してもよい。
図14は、プログラム分析の手順例を示すフローチャートである。
(S10)ソースプログラム分析部126は、ソースプログラムを1つ選択する。
(S11)ソースプログラム分析部126は、選択したソースプログラムの見出し部からプログラム名を抽出する。また、ソースプログラム分析部126は、選択したソースプログラムの環境部から中間ファイル名と論理ファイル名を抽出する。
(S10)ソースプログラム分析部126は、ソースプログラムを1つ選択する。
(S11)ソースプログラム分析部126は、選択したソースプログラムの見出し部からプログラム名を抽出する。また、ソースプログラム分析部126は、選択したソースプログラムの環境部から中間ファイル名と論理ファイル名を抽出する。
(S12)ソースプログラム分析部126は、選択したソースプログラムのデータ部から、ステップS11で抽出した論理ファイル名についての記述を取得する。そして、ソースプログラム分析部126は、当該論理ファイル名についての記述が、当該ソースプログラム外のレコード定義ファイルを参照するものであるか、すなわち、レコード定義を取り込むCOPY文であるか判断する。COPY文である場合はステップS13に処理が進み、COPY文でない場合はステップS14に処理が進む。
(S13)ソースプログラム分析部126は、選択したソースプログラムのデータ部から、論理ファイル名と当該論理ファイル名に対応付けられたレコード定義ファイル名を抽出する。そして、ステップS15に処理が進む。
(S14)ソースプログラム分析部126は、選択したソースプログラムのデータ部から論理ファイル名を抽出する。そして、ステップS15に処理が進む。
(S15)ソースプログラム分析部126は、ファイル参照テーブル135に、抽出したプログラム名、中間ファイル名、論理ファイル名およびレコード定義ファイル名を対応付けて登録する。ただし、レコード定義ファイル名が抽出されなかった場合(ステップS13を実行しなかった場合)には、レコード定義ファイル名の項目は空欄となる。
(S15)ソースプログラム分析部126は、ファイル参照テーブル135に、抽出したプログラム名、中間ファイル名、論理ファイル名およびレコード定義ファイル名を対応付けて登録する。ただし、レコード定義ファイル名が抽出されなかった場合(ステップS13を実行しなかった場合)には、レコード定義ファイル名の項目は空欄となる。
(S16)ソースプログラム分析部126は、未選択の残りのソースプログラムが存在するか判断する。残りのソースプログラムがある場合はステップS10に処理が進み、残りのソースプログラムがない場合はステップS17に処理が進む。
(S17)JCLファイル分析部125は、JCLファイルに記述されたジョブステップを1つ選択する。1つのジョブステップは、1つのソースプログラムの実行を示す。
(S18)JCLファイル分析部125は、選択したジョブステップが記述されたJCLファイルのJCLファイル名を取得する。また、JCLファイル分析部125は、選択したジョブステップの記述から、ジョブ名、起動するソースプログラムのプログラム名、使用するファイルの1以上の中間ファイル名および1以上の実ファイル名を抽出する。
(S18)JCLファイル分析部125は、選択したジョブステップが記述されたJCLファイルのJCLファイル名を取得する。また、JCLファイル分析部125は、選択したジョブステップの記述から、ジョブ名、起動するソースプログラムのプログラム名、使用するファイルの1以上の中間ファイル名および1以上の実ファイル名を抽出する。
(S19)JCLファイル分析部125は、ステップS18で抽出したプログラム名と中間ファイル名の組が、ファイル参照テーブル135に登録されているか判断する。プログラム名と中間ファイル名の組が登録されている場合はステップS20に処理が進み、登録されていない場合はステップS21に処理が進む。
(S20)JCLファイル分析部125は、抽出したプログラム名および中間ファイル名と対応付けて、ステップS18で抽出したJCLファイル名、ジョブ名および実ファイル名をファイル参照テーブル135に登録する。
(S21)JCLファイル分析部125は、未選択の残りのジョブステップが存在するか判断する。残りのジョブステップがある場合はステップS17に処理が進み、残りのジョブステップがない場合はステップS22に処理が進む。
図15は、プログラム分析の手順例を示すフローチャート(続き)である。
(S22)タイプ判定部127は、ファイル参照テーブル135に登録された情報を実ファイル名でソートし、同じ実ファイル名の情報を纏める。
(S22)タイプ判定部127は、ファイル参照テーブル135に登録された情報を実ファイル名でソートし、同じ実ファイル名の情報を纏める。
(S23)タイプ判定部127は、実ファイル名を1つ選択する。
(S24)タイプ判定部127は、選択した実ファイル名が示すファイルについてのレコード定義を、ソースプログラム記憶部122に記憶されたソースプログラムやレコード定義ファイルから全て抽出する。すなわち、タイプ判定部127は、ファイル参照テーブル135から、選択した実ファイル名を含む情報を抽出する。タイプ判定部127は、レコード定義ファイル名が登録されていない情報に対しては、ソースプログラムからレコード定義を抽出する。一方、タイプ判定部127は、レコード定義ファイル名が登録されている情報に対しては、レコード定義ファイルからレコード定義を抽出する。
(S24)タイプ判定部127は、選択した実ファイル名が示すファイルについてのレコード定義を、ソースプログラム記憶部122に記憶されたソースプログラムやレコード定義ファイルから全て抽出する。すなわち、タイプ判定部127は、ファイル参照テーブル135から、選択した実ファイル名を含む情報を抽出する。タイプ判定部127は、レコード定義ファイル名が登録されていない情報に対しては、ソースプログラムからレコード定義を抽出する。一方、タイプ判定部127は、レコード定義ファイル名が登録されている情報に対しては、レコード定義ファイルからレコード定義を抽出する。
(S25)タイプ判定部127は、ステップS24で抽出した複数のレコード定義を比較して、それら複数のレコード定義を複数のタイプに分類する。ここでは、タイプ判定部127は、データ項目名の接頭辞を匿名化せずにレコード定義を比較する。よって、同じタイプに属するレコード定義は、データ項目名とデータ型が完全に一致している。
(S26)タイプ判定部127は、ステップS25で得られた複数のタイプそれぞれについて、当該タイプに属するレコード定義を使用するソースプログラムの数をカウントする。埋め込み形式のソースプログラムについては、当該タイプに属するレコード定義がデータ部に記述されているソースプログラム1つにつき、カウントが+1される。外部参照形式のソースプログラムについては、当該タイプに属するレコード定義を記述したレコード定義ファイルを参照するソースプログラム1つにつき、カウントが+1される。タイプ判定部127は、複数のタイプのプログラム数をタイプ分類テーブル136に登録する。
(S27)タイプ判定部127は、現在のプログラム資産に含まれるソースプログラムおよびレコード定義ファイルの総行数を算出する。
(S28)タイプ判定部127は、タイプ毎にレコード定義を外部化すること、すなわち、タイプ毎に1つのレコード定義ファイルを生成して全てのソースプログラムを外部参照形式に変換するシミュレーションを行う。そして、タイプ判定部127は、レコード定義の外部化により減少する行数を試算する。なお、レコード定義の外部化によりソースプログラムの行数が減少する一方、新たに生成したレコード定義ファイルの行数だけ増加することがある。ここで試算される行数は、両者の差分である実質的な減少行数である。
(S28)タイプ判定部127は、タイプ毎にレコード定義を外部化すること、すなわち、タイプ毎に1つのレコード定義ファイルを生成して全てのソースプログラムを外部参照形式に変換するシミュレーションを行う。そして、タイプ判定部127は、レコード定義の外部化により減少する行数を試算する。なお、レコード定義の外部化によりソースプログラムの行数が減少する一方、新たに生成したレコード定義ファイルの行数だけ増加することがある。ここで試算される行数は、両者の差分である実質的な減少行数である。
(S29)タイプ判定部127は、ステップS28で試算した減少行数をステップS27で算出した総行数で割った削減率を算出する。タイプ判定部127は、選択した実ファイル名と対応付けて、算出した削減率をタイプ分類テーブル136に登録する。
(S30)タイプ判定部127は、ステップS24で抽出したレコード定義に含まれるデータ項目名から接頭辞の部分を判断し、接頭辞を匿名化する。タイプ判定部127は、データ項目名に含まれる接頭辞を特殊な文字または文字列に置換してもよい。また、タイプ判定部127は、データ項目名から接頭辞を削除してもよい。
(S31)タイプ判定部127は、ステップS30で接頭辞を匿名化したレコード定義を用いて、ステップS25〜S29と同様の処理を行う。これにより、接頭辞の違いを無視した場合の複数のタイプが得られ、複数のタイプそれぞれのプログラム数が算出される。また、接頭辞の違いを無視した場合の削減率が算出される。タイプ判定部127は、算出したプログラム数と削減率をタイプ分類テーブル136に登録する。
(S32)タイプ判定部127は、未選択の残りの実ファイル名が存在するか判断する。残りの実ファイル名がある場合はステップS23に処理が進み、残りの実ファイル名がない場合はステップS33に処理が進む。
(S33)表示制御部128は、タイプ分類テーブル136に基づいて可視化画面を生成し、ディスプレイ111に可視化画面を表示させる。例えば、表示制御部128は、1以上の実ファイル名について、複数のタイプの間のプログラム数の比を算出し、可視化画面151のような円グラフを表示させる。また、例えば、表示制御部128は、1以上の実ファイル名について、可視化画面152のような積み上げ棒グラフを表示させる。また、例えば、表示制御部128は、可視化画面153のような削減率を表示させる。
第2の実施の形態のプログラム分析装置100によれば、ソースプログラムとJCLファイルを分析することで、データが格納された物理的なファイルとソースプログラムとが紐付けられる。この紐付けに基づいて、同一のファイルに対する複数のレコード定義が抽出され、複数のレコード定義の間の比較に基づいてそれら複数のレコード定義が複数のタイプに分類される。そして、複数のタイプそれぞれについてソースプログラムの数がカウントされ、複数のタイプの間のプログラム数の分布が表示される。
これにより、同一のファイルに対する複数のレコード定義の使用状況を可視化することができる。よって、レコード定義の記述方法を統一する修正作業や、レコード定義の記述をソースプログラムからレコード定義ファイルに移動する修正作業を効率化できる。例えば、レコード定義で使用するデータ項目名を統一するにあたり、複数のタイプのうち最もプログラム数の多いタイプのデータ項目名を標準データ項目名として選択することで、修正作業を効率化することができる。また、例えば、プログラム数の多いタイプのレコード定義を修正対象として優先的に検討することで、限られた時間の中で保守性改善効果の大きい修正作業を優先的に行うことが可能となる。また、削減率の大きいファイルについて優先的に修正作業を行うことで、大きな保守性改善効果を得ることができる。
10 プログラム分析装置
11 記憶部
12 演算部
13 プログラム資産
14a,14b,14c,14d,14e,14f データ構造定義文
15a,15b,15c タイプ
16 分布情報
11 記憶部
12 演算部
13 プログラム資産
14a,14b,14c,14d,14e,14f データ構造定義文
15a,15b,15c タイプ
16 分布情報
Claims (6)
- コンピュータが実行するプログラム分析方法であって、
同一のファイルにアクセスする複数のプログラムを含むプログラム資産から、それぞれが前記ファイルに格納されるデータの構造を示す複数のデータ構造定義文を抽出し、
前記複数のデータ構造定義文の間の比較に基づいて前記複数のデータ構造定義文を複数のタイプに分類し、前記複数のタイプそれぞれについて前記複数のプログラムのうち当該タイプに属するデータ構造定義文を使用するプログラムの数をカウントし、
前記複数のタイプの間の前記プログラムの数の分布を示す分布情報を出力する、
プログラム分析方法。 - 前記複数のデータ構造定義文それぞれは、前記ファイルに格納されるデータに含まれる1以上のデータ項目に対応する1以上のデータ型を示し、
異なるデータ型を使用するデータ構造定義文は異なるタイプに分類される、
請求項1記載のプログラム分析方法。 - 前記分布情報は、前記複数のタイプそれぞれの前記プログラムの数を示す第1のグラフ、および、前記複数のタイプの間の前記プログラムの数の比を示す第2のグラフの少なくとも一方を含む、
請求項1記載のプログラム分析方法。 - 更に、タイプ毎に当該タイプに属するデータ構造定義文を前記複数のプログラムから分離して共通ファイルに集約した場合に生じる前記プログラム資産の規模の変化を算出し、前記規模の変化を示す修正効果情報を出力する、
請求項1記載のプログラム分析方法。 - 同一のファイルにアクセスする複数のプログラムを含むプログラム資産を記憶する記憶部と、
前記プログラム資産からそれぞれが前記ファイルに格納されるデータの構造を示す複数のデータ構造定義文を抽出し、前記複数のデータ構造定義文の間の比較に基づいて前記複数のデータ構造定義文を複数のタイプに分類し、前記複数のタイプそれぞれについて前記複数のプログラムのうち当該タイプに属するデータ構造定義文を使用するプログラムの数をカウントし、前記複数のタイプの間の前記プログラムの数の分布を示す分布情報を出力する演算部と、
を有するプログラム分析装置。 - コンピュータに、
同一のファイルにアクセスする複数のプログラムを含むプログラム資産から、それぞれが前記ファイルに格納されるデータの構造を示す複数のデータ構造定義文を抽出し、
前記複数のデータ構造定義文の間の比較に基づいて前記複数のデータ構造定義文を複数のタイプに分類し、前記複数のタイプそれぞれについて前記複数のプログラムのうち当該タイプに属するデータ構造定義文を使用するプログラムの数をカウントし、
前記複数のタイプの間の前記プログラムの数の分布を示す分布情報を出力する、
処理を実行させる分析プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016155457A JP2018025852A (ja) | 2016-08-08 | 2016-08-08 | プログラム分析方法、プログラム分析装置および分析プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016155457A JP2018025852A (ja) | 2016-08-08 | 2016-08-08 | プログラム分析方法、プログラム分析装置および分析プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2018025852A true JP2018025852A (ja) | 2018-02-15 |
Family
ID=61193863
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016155457A Pending JP2018025852A (ja) | 2016-08-08 | 2016-08-08 | プログラム分析方法、プログラム分析装置および分析プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2018025852A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021053373A1 (en) * | 2019-09-19 | 2021-03-25 | Aplas Pty Ltd | Method and system for indexing and mapping software assets of business |
-
2016
- 2016-08-08 JP JP2016155457A patent/JP2018025852A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021053373A1 (en) * | 2019-09-19 | 2021-03-25 | Aplas Pty Ltd | Method and system for indexing and mapping software assets of business |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10776569B2 (en) | Generation of annotated computerized visualizations with explanations for areas of interest | |
CN112036736A (zh) | 一种工作流创建方法及装置 | |
JP7054051B2 (ja) | ソフトウェアロボット定義情報生成システム、ソフトウェアロボット定義情報生成方法、及びプログラム | |
US20080295007A1 (en) | Data Visualization | |
US20150052157A1 (en) | Data transfer content selection | |
US20210326366A1 (en) | Generation of lineage data subset based upon business role | |
JP2017045080A (ja) | 業務フロー仕様再生方法 | |
US10678864B2 (en) | Analysis model preparing system, programming apparatus, and analysis model preparing method | |
US8392892B2 (en) | Method and apparatus for analyzing application | |
JP2019219848A (ja) | ソースコード解析方法およびソースコード解析装置 | |
JP2014123249A (ja) | 情報処理装置、プログラム、及び情報処理方法 | |
US10296496B2 (en) | Data editing device and data editing method | |
JP2018025852A (ja) | プログラム分析方法、プログラム分析装置および分析プログラム | |
JP6966289B2 (ja) | 情報分析装置、プログラム及び方法 | |
US20070179922A1 (en) | Apparatus and method for forecasting control chart data | |
CN106844218B (zh) | 一种基于演化切片的演化影响集预测方法 | |
US20060230080A1 (en) | Apparatus for tracking work process and computer product | |
US10114916B1 (en) | Method and system to accelerate visualization of waveform data | |
JP2019101829A (ja) | ソフトウェア部品管理システム、計算機および方法 | |
JP7082284B2 (ja) | 分析支援方法および分析支援プログラム | |
JP2018028776A (ja) | ソフトウェア資産管理装置、ソフトウェア資産管理方法、および、ソフトウェア資産管理プログラム | |
JP2016126532A (ja) | 算出プログラム、情報処理装置、および算出方法 | |
JP2020101898A (ja) | 設計図作成支援方法、設計図作成支援装置、及び設計図作成支援プログラム | |
US20230401056A1 (en) | Interactive code visualization system | |
JP2014164336A (ja) | モデル分析装置及びモデル分析方法及びモデル分析プログラム |