以下に図面を参照して、本発明にかかる生成プログラム、生成方法および情報処理装置の実施の形態を詳細に説明する。
(実施の形態)
図1は、実施の形態にかかる生成方法の一実施例を示す説明図である。図1において、情報処理装置101は、システム内のアクセス関係のある構成要素の組み合わせに対応する箇所がマーキングされたアクセス一覧表を生成するコンピュータである。具体的には、アクセス一覧表は、縦軸または横軸のいずれか一方にプログラムの識別情報を並べ、他方にデータの識別情報を並べた表形式の情報である。
プログラムは、システムの構成要素となるプログラムであり、例えば、システムの各種機能を実現するソフトウェアである。データは、システムの構成要素となるデータであり、例えば、プログラムからアクセスされるテーブルやファイルなどである。システムは、例えば、工場系システムのように、構成管理が要求される大規模なシステムである。
ここで、システムの改修を行うにあたり、改修にともなう影響範囲を特定して、適宜対策を施さなければ、トラブルを引き起こすおそれがある。例えば、システムのデータベースに項目変更等の変更をかけるときは、その変更箇所にアクセスしているプログラムを変更する必要がある。すなわち、システムの改修を行うにあたり、システムのどのような構成要素に影響を与えるのかを把握することは重要である。
システムの機能改修にともなう影響範囲の特定には、CRUD一覧が用いられることが多い。CRUDは、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)という、データベースに対する操作を示す文字列の頭文字を並べたものである。すなわち、CRUD一覧は、各種プログラムから各種テーブル等に対してどのような操作が行われるのかを示した表である。
ところが、システムの機能改修が日々行われる中で、人手によりCRUD一覧を最新の状態に保つには工数がかかる。このため、システムの機能改修を行うにあたり、CRUD一覧の更新作業が行われないことも多い。すなわち、前回までの機能改修にともなう変更がCRUD一覧に正しく反映されている保証はなく、改修者にとって、それを情報源として影響範囲を判断するにはリスクが高いのが現状である。
そこで、本実施の形態では、アクセス関係のあるプログラムとデータとの組み合わせに対応する箇所がマーキングされたアクセス一覧表を自動生成することで、システムの構成要素であるプログラムとデータとのアクセス関係の特定を容易にする生成方法について説明する。以下、情報処理装置101の処理例について説明する。
(1)情報処理装置101は、システムの構成要素であるプログラムとデータとを特定する構成要素情報を取得する。構成要素情報は、例えば、システムの構成要素であるプログラムの識別情報をリスト化した情報と、システムの構成要素であるデータの識別情報をリスト化した情報とを含む。プログラムの識別情報は、例えば、プログラムIDやプログラム名である。データの識別情報は、データIDやデータ名である。
図1の例では、構成要素情報110が取得された場合を想定する。構成要素情報110は、システムの構成要素であるプログラムのプログラム名(プログラム1,2,3)をリスト化した情報と、システムの構成要素であるデータのデータ名(データA,B,C,D,E)をリスト化した情報とを含む。
(2)情報処理装置101は、取得した構成要素情報に基づいて、縦軸または横軸のいずれか一方にプログラムの識別情報を並べ、他方にデータの識別情報を並べた表形式のアクセス一覧表を生成する。すなわち、情報処理装置101は、縦方向の項目として各プログラム(または、各データ)の識別情報を設定し、横方向の項目として各データ(または、各プログラム)の識別情報を設定したマトリクス表を生成する。
図1の例では、構成要素情報110に基づいて、アクセス一覧表120が生成された場合を想定する。アクセス一覧表120は、縦軸にプログラムのプログラム名(プログラム1,2,3)を並べ、横軸にデータのデータ名(データA,B,C,D,E)を並べた表形式の情報である。ただし、この時点では、アクセス一覧表120における各プログラム名と各データ名との組み合わせに対応する箇所は「空欄」である。
(3)情報処理装置101は、システムの構成要素である各プログラムについて、各プログラムのソースコードに基づいて、システムの構成要素であるデータのうち、各プログラムからアクセスされるデータを特定する。データへのアクセスは、例えば、データの生成、更新、読み出し、削除などの操作に応じたアクセスである。
具体的には、例えば、情報処理装置101は、各プログラムのソースコードを解析して、データにアクセスする際の操作種別を示す文字列を検索し、当該文字列に対応するシステムの構成要素であるデータの識別情報を示す文字列を特定する。操作種別を示す文字列としては、例えば、「INSERT」、「UPDATE」、「SELECT」、「DELETE」などが挙げられる。これにより、各プログラムからアクセスされるデータを特定することができる。
図1の例では、プログラム1からアクセスされるデータAが特定され、プログラム2からアクセスされるデータA,Bが特定され、プログラム3からアクセスされるデータCが特定された場合を想定する。各プログラム1〜3のソースコードは、例えば、構成要素情報110に含まれていてもよく、また、構成要素情報110とは別に取得されることにしてもよい。
なお、上記(2)および(3)の処理を実行する順序は逆であってもよい。すなわち、上記(3)の処理は、上記(2)の処理よりも前に行われてもよい。
(4)情報処理装置101は、生成したアクセス一覧表における、各プログラムと、特定したデータとの組み合わせに対応する箇所にマーキングする。ここで、マーキングするとは、例えば、プログラムとデータとの組み合わせに対応する箇所(セル)に、文字、記号、図形、模様などを設定することである。
図1の例では、アクセス一覧表120において、プログラム1とデータAとの組み合わせに対応するセル121に○印が設定されている。また、プログラム2とデータAとの組み合わせに対応するセル122に○印が設定され、プログラム2とデータBとの組み合わせに対応するセル123に○印が設定されている。また、プログラム3とデータCとの組み合わせに対応するセル124に○印が設定されている。
このように、情報処理装置101によれば、システムの構成要素であるプログラムと当該プログラムからアクセスされるデータとの組み合わせに対応する箇所にマーキングを施したアクセス一覧表を生成することができる。これにより、システムの構成要素であるプログラムとデータとのアクセス関係の特定を容易にすることができる。
すなわち、プログラムのソースコードからアクセス対象のデータを洗い出してアクセス一覧表に自動で反映することができるため、システムの構成要素であるプログラムとデータとのアクセス関係の特定にかかる作業負荷を削減することができる。このため、日々機能改修が行われるようなシステムにおいても、アクセス一覧表が陳腐化するのを防いで、使用する側(例えば、改修者)のリスクを排除することができる。
図1の例では、ユーザは、アクセス一覧表120を参照することで、プログラム1からデータAにアクセスし、プログラム2からデータA,Bにアクセスし、プログラム3からデータCにアクセスすることを直感的に把握することができる。これにより、システムの改修を行うにあたり、改修にともなう影響範囲を特定しやすくなる。例えば、データAを変更するときには、ユーザは、プログラム1,2の変更が必要である可能性が高いことがわかる。
また、各データに対する実際のアクセス状況を把握できれば、不正なプログラムからのアクセスを検出することができる。例えば、アクセス一覧表120ではアクセスが示されていないにもかかわらず、あるデータ(例えば、データD,E)へのアクセスが増加していることが判明した際に、不正なプログラムからのアクセスが発生している可能性があることを検出することができる。
以下の説明では、システムの構成要素であるデータとして、「テーブル」を例に挙げて説明する。
(作業支援システム200のシステム構成例)
つぎに、図1に示した情報処理装置101を含む作業支援システム200のシステム構成例について説明する。作業支援システム200は、CRUD一覧表の作成にかかる作業を支援するコンピュータシステムである。作業支援システム200は、例えば、構成管理が要求される大規模なシステムや、定期的に改修がかかっても整合性を保つ必要があるクリティカルなシステムに適用される。
図2は、作業支援システム200のシステム構成例を示す説明図である。図2において、作業支援システム200は、情報処理装置101と、データベースサーバ201と、クライアント装置202と、を含む。作業支援システム200において、情報処理装置101、データベースサーバ201およびクライアント装置202は、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。
ここで、情報処理装置101は、プログラムソースDB(Database)220、プログラム管理テーブル230、テーブル管理テーブル240およびCRUD管理テーブル250を有し、CRUD一覧表を生成する。情報処理装置101は、例えば、サーバである。
プログラムソースDB220は、対象システムの構成要素であるプログラムPGのソースコードを記憶する。対象システムは、本作業支援システム200が適用されるシステムであり、例えば、複数拠点に導入される工場系システムである。なお、各種テーブル230,240,250の記憶内容については、図7、図8および図9を用いて後述する。
データベースサーバ201は、対象システムのデータベースDBを有するコンピュータである。データベースDBには、対象システムの構成要素であるテーブルTBが格納されている。データベースサーバ201は、例えば、対象システムのクライアントからのリクエストに応じて、データベースDBの検索処理などを行って処理結果を返す。
クライアント装置202は、作業支援システム200のユーザが使用するコンピュータである。作業支援システム200のユーザは、例えば、対象システムの機能改修などを行う開発者である。クライアント装置202は、例えば、PC(Personal Computer)、タブレット型PCなどである。
なお、上述した説明では、情報処理装置101とデータベースサーバ201とクライアント装置202とが、それぞれ別体に設けられることにしたが、これに限らない。例えば、情報処理装置101は、データベースサーバ201により実現されてもよく、また、クライアント装置202により実現されてもよい。
(情報処理装置101のハードウェア構成例)
図3は、情報処理装置101のハードウェア構成例を示すブロック図である。図3において、情報処理装置101は、CPU(Central Processing Unit)301と、メモリ302と、I/F(Interface)303と、ディスクドライブ304と、ディスク305と、を有する。また、各構成部は、バス300によってそれぞれ接続される。
ここで、CPU301は、情報処理装置101の全体の制御を司る。CPU301は、複数のコアを有していてもよい。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMがOS(Operating System)のプログラムを記憶し、ROMがアプリケーションプログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることで、コーディングされている処理をCPU301に実行させる。
I/F303は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して外部のコンピュータ(例えば、図2に示したデータベースサーバ201、クライアント装置202)に接続される。そして、I/F303は、ネットワーク210と装置内部とのインターフェースを司り、外部のコンピュータからのデータの入出力を制御する。I/F303には、例えば、モデムやLANアダプタなどを採用することができる。
ディスクドライブ304は、CPU301の制御に従ってディスク305に対するデータのリード/ライトを制御する。ディスク305は、ディスクドライブ304の制御で書き込まれたデータを記憶する。ディスク305としては、例えば、磁気ディスク、光ディスクなどが挙げられる。
なお、情報処理装置101は、上述した構成部のほかに、例えば、SSD(Solid State Drive)、入力装置、ディスプレイ等を有することにしてもよい。また、図2に示したデータベースサーバ201、クライアント装置202についても、情報処理装置101と同様のハードウェア構成により実現することができる。ただし、クライアント装置202は、上述した構成部のほかに、入力装置、ディスプレイ等を有する。
(プログラム一覧情報400の具体例)
つぎに、情報処理装置101が用いるプログラム一覧情報400の具体例について説明する。以下の説明では、対象システムの構成要素であるプログラムを「プログラムPG」と表記する場合がある。
図4は、プログラム一覧情報400の具体例を示す説明図である。図4において、プログラム一覧情報400は、対象システムの構成要素であるプログラムPGをリスト化して示す情報である。具体的には、プログラム一覧情報400は、プログラムIDとプログラム名との対応関係を示す。
ここで、プログラムIDは、プログラムPGを一意に識別する識別子である。例えば、プログラムIDは、「OYA###PG」という文字列によって表される。「OYA」は、対象システムの識別子の一例である。「###」は、3桁の英数字である。「PG」は、プログラムを示す文字列である。プログラム名は、プログラムPGの名称である。例えば、プログラム名は、対象システムの機能名によって表される。なお、プログラムPGは、例えば、メインプログラムであってもよく、また、メインプログラムから呼び出されるサブプログラムであってもよい。
(テーブル一覧情報500の具体例)
つぎに、情報処理装置101が用いるテーブル一覧情報500の具体例について説明する。以下の説明では、対象システムの構成要素であるテーブルを「テーブルTB」と表記する場合がある。
図5は、テーブル一覧情報500の具体例を示す説明図である。図5において、テーブル一覧情報500は、対象システムの構成要素であるテーブルTBをリスト化して示す情報である。具体的には、テーブル一覧情報500は、テーブルIDとテーブル名との対応関係を示す。
ここで、テーブルIDは、テーブルTBを一意に識別する識別子である。例えば、テーブルIDは、「OYA###TB」という文字列によって表される。「OYA」は、対象システムの識別子の一例である。「###」は、3桁の英数字である。「TB」は、テーブルを示す文字列である。テーブル名は、テーブルTBの名称である。
なお、図1に示した構成要素情報110は、例えば、図4に示したプログラム一覧情報400および図5に示したテーブル一覧情報500に相当する。
(情報処理装置101の機能的構成例)
図6は、情報処理装置101の機能的構成例を示すブロック図である。図6において、情報処理装置101は、取得部601と、生成部602と、特定部603と、表示制御部604と、を含む。取得部601〜表示制御部604は制御部となる機能であり、具体的には、例えば、図3に示したメモリ302、ディスク305などの記憶装置に記憶されたプログラムをCPU301に実行させることにより、または、I/F303により、その機能を実現する。各機能部の処理結果は、例えば、メモリ302、ディスク305などの記憶装置に記憶される。
取得部601は、対象システムの構成要素であるプログラムPGとテーブルTBとを特定する構成要素情報を取得する。具体的には、例えば、取得部601は、対象システムの構成要素を管理する不図示の構成管理システムから、図4に示したようなプログラム一覧情報400および図5に示したようなテーブル一覧情報500を取得することにしてもよい。
また、取得部601は、例えば、不図示の入力装置を用いたユーザの操作入力により、プログラム一覧情報400およびテーブル一覧情報500を取得することにしてもよい。また、取得部601は、図2に示したクライアント装置202から、プログラム一覧情報400およびテーブル一覧情報500を取得することにしてもよい。
生成部602は、取得された構成要素情報に基づいて、縦軸(または、横軸)にプログラムPGの識別情報を並べ、横軸(または、縦軸)にテーブルTBの識別情報を並べた表形式のアクセス一覧表を生成する。プログラムPGの識別情報は、例えば、プログラムIDおよび/またはプログラム名である。テーブルTBの識別情報は、例えば、テーブルIDおよび/またはテーブル名である。ただし、この時点では、アクセス一覧表における各プログラムPGと各テーブルTBとの組み合わせに対応する箇所(セル)は「空欄」である。
以下の説明では、アクセス一覧表として、「CRUD一覧表」を生成する場合を例に挙げて説明する。CRUD一覧表は、プログラムPGからテーブルTBに対して、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)のいずれの操作が行われるのかを示す表である。
具体的には、例えば、生成部602は、プログラム一覧情報400およびテーブル一覧情報500に基づいて、縦軸にプログラムPGのプログラムIDおよびプログラム名を並べ、横軸にテーブルTBのテーブルIDおよびテーブル名を並べた表形式のCRUD一覧表を生成する。
また、生成部602は、各プログラムPGのプログラム管理情報を、プログラム管理テーブル230に登録する。プログラム管理情報は、CRUD一覧表における各プログラムPGの位置を特定する情報である。また、生成部602は、各テーブルTBのテーブル管理情報を、テーブル管理テーブル240に登録する。テーブル管理情報は、CRUD一覧表における各テーブルTBの位置を特定する情報である。
ここで、図7および図8を用いて、プログラム管理テーブル230およびテーブル管理テーブル240の記憶内容について説明する。プログラム管理テーブル230およびテーブル管理テーブル240は、例えば、図3に示したメモリ302、ディスク305などの記憶装置により実現される。
図7は、プログラム管理テーブル230の記憶内容の一例を示す説明図である。図7において、プログラム管理テーブル230は、プログラムID、プログラム名および行番号のフィールドを有し、各フィールドに情報を設定することで、プログラム管理情報(例えば、プログラム管理情報700−1,700−2)をレコードとして記憶する。
ここで、プログラムIDは、プログラムPGを一意に識別する識別子である。プログラム名は、プログラムPGの名称である。行番号は、CRUD一覧表におけるプログラムPGの位置(行)を特定する情報である。例えば、プログラム管理情報700−1は、CRUD一覧表における1行目の項目として、プログラムID「OYA001PG」およびプログラム名「PA−ON」が設定されていることを示す。
図8は、テーブル管理テーブル240の記憶内容の一例を示す説明図である。図8において、テーブル管理テーブル240は、テーブルID、テーブル名および列番号のフィールドを有し、各フィールドに情報を設定することで、テーブル管理情報(例えば、テーブル管理情報800−1,800−2)をレコードとして記憶する。
ここで、テーブルIDは、テーブルTGを一意に識別する識別子である。テーブル名は、テーブルTGの名称である。列番号は、CRUD一覧表におけるテーブルTGの位置(列)を特定する情報である。例えば、テーブル管理情報800−1は、CRUD一覧表における1列目の項目として、テーブルID「OYA001TB」およびテーブル名「事業所マスタ」が設定されていることを示す。
これにより、縦軸にプログラムPGのプログラムIDおよびプログラム名を並べ、横軸にテーブルTBのテーブルIDおよびテーブル名を並べた表形式のCRUD一覧表を生成することができる。ただし、この時点では、CRUD一覧表における各プログラムPGと各テーブルTBとの組み合わせに対応する箇所(セル)は「空欄」である。
図6の説明に戻り、特定部603は、対象システムの構成要素である各プログラムPGについて、各プログラムPGのソースコードに基づいて、対象システムの構成要素であるテーブルTBのうち、各プログラムPGからアクセスされるテーブルTBを特定する。この際、特定部603は、テーブルTBに各プログラムPGがアクセスする際の操作種別をさらに特定することにしてもよい。
具体的には、例えば、特定部603は、プログラム一覧情報400を参照して、図2に示したプログラムソースDB220から、プログラムPGのソースコードを取得する。つぎに、特定部603は、取得したソースコードを解析して、DB操作文字列を検索する。検索対象となるDB操作文字列は、大文字によって表されている。DB操作文字列は、データベース(例えば、図2に示したデータベースサーバ201のデータベースDB)に対する操作を示す文字列である。DB操作文字列としては、例えば、SQLの操作を表す「INSERT」、「UPDATE」、「SELECT」、「DELETE」などがある。
ここで、DB操作文字列が検索された場合、特定部603は、取得したソースコードを解析して、検索したDB操作文字列に対応するテーブル文字列を検索する。検索対象となるテーブル文字列は、大文字によって表されている。テーブル文字列は、操作対象となるテーブルTBを示す文字列であり、例えば、「OYA###TB」という文字列(テーブルID)によって表される。例えば、特定部603は、DB操作文字列に対応するテーブル文字列を検索する処理を、プログラムPGのソースコードを最初から最後まで1行単位で読み込みながら順次実施する。ただし、コメント分は除く。
これにより、プログラムPGからテーブル文字列が示すテーブルTBに対して、DB操作文字列が示す操作(アクセス)が行われることを特定することができる。
一例として、プログラムPGのソースコードに「SELECT JIGYS_ID, JIGYS_NAME FROM OYA001TB;」という文字列が含まれている場合を想定する。この場合、特定部603は、上記文字列からDB操作文字列「SELECT」を検索する。そして、特定部603は、上記文字列からDB操作文字列「SELECT」に対応するテーブル文字列「OYA001TB」を検索する。これにより、テーブルID「OYA001TB」のテーブルTBに対して、「SELECT」の操作が行われることを特定することができる。
また、プログラムPGのソースコードに「INSERT INTO OYA002TB VALUES (’0001’, ’サンプル’);」という文字列が含まれている場合を想定する。この場合、特定部603は、上記文字列からDB操作文字列「INSERT」を検索する。そして、特定部603は、上記文字列からDB操作文字列「INSERT」に対応するテーブル文字列「OYA002TB」を検索する。これにより、テーブルID「OYA002TB」のテーブルTBに対して、「INSERT」の操作が行われることを特定することができる。
また、プログラムPGのソースコードに「UPDATE OYA003TB SET JIGYS_NAME = ’サンプル’ WHERE JIGYS_ID = ’0001’;」という文字列が含まれている場合を想定する。この場合、特定部603は、上記文字列からDB操作文字列「UPDATE」を検索する。そして、特定部603は、上記文字列からDB操作文字列「UPDATE」に対応するテーブル文字列「OYA003TB」を検索する。これにより、テーブルID「OYA003TB」のテーブルTBに対して、「UPDATE」の操作が行われることを特定することができる。
また、プログラムPGのソースコードに「DELETE FROM OYA004TB WHERE JIGYS_ID = ’0001’;」という文字列が含まれている場合を想定する。この場合、特定部603は、上記文字列からDB操作文字列「DELETE」を検索する。そして、特定部603は、上記文字列からDB操作文字列「DELETE」に対応するテーブル文字列「OYA004TB」を検索する。これにより、テーブルID「OYA004TB」のテーブルTBに対して、「DELETE」の操作が行われることを特定することができる。
なお、プログラムPGのソースコードを解析する具体的な処理手順例については、図14および図15のフローチャートを用いて後述する。また、特定された結果は、例えば、CRUD管理テーブル250に記憶される。CRUD管理テーブル250は、例えば、メモリ302、ディスク305などの記憶装置により実現される。
図9は、CRUD管理テーブル250の記憶内容の一例を示す説明図である。図9において、CRUD管理テーブル250は、プログラムID、テーブルID、操作種別および回数のフィールドを有し、各フィールドに情報を設定することで、CRUD管理情報(例えば、CRUD管理情報900−1〜900−5)をレコードとして記憶する。
ここで、プログラムIDは、プログラムPGを一意に識別する識別子である。テーブルIDは、テーブルTGを一意に識別する識別子である。操作種別は、プログラムIDのプログラムPGから、テーブルIDのテーブルTBに対して行われる操作の種別を示す。操作種別には、C,R,U,Dのいずれかの文字が設定される。
Cは、Createの頭文字であり、データを挿入する操作を示す。Cは、SQLのINSERT文の操作に対応する。Rは、Readの頭文字であり、データを取り出す操作を示す。Rは、SQLのSELECT文の操作に対応する。Uは、Updateの頭文字であり、データを更新する操作を示す。Uは、SQLのUPDATE文の操作に対応する。Dは、Deleteの頭文字であり、データを削除する操作を示す。Dは、SQLのDELETE文の操作に対応する。
回数は、プログラムIDのプログラムPGから、テーブルIDのテーブルTBに対して、操作種別の操作が行われる回数である。例えば、プログラムPGからテーブルTBに対して、データを挿入する操作が3回行われる場合、操作種別に「C」が設定され、回数に「3」が設定される。
例えば、CRUD管理情報900−1は、プログラムID「OYA001PG」のプログラムPGから、テーブルID「OYA001TB」のテーブルTBに対して、操作種別「C」の操作が行われる回数「1」を示す。なお、各CRUD管理情報には、プログラム名やテーブル名が含まれていてもよい。
図6の説明に戻り、生成部602は、生成したCRUD一覧表における、各プログラムPGと、特定された該各プログラムPGからアクセスされるテーブルTBとの組み合わせに対応する箇所にマーキングする。ここで、マーキングするとは、例えば、文字、記号、図形、模様などを設定することである。
具体的には、例えば、生成部602は、図9に示したCRUD管理テーブル250を参照して、CRUD一覧表における、プログラムPGと当該プログラムPGからアクセスされるテーブルTBとの組み合わせに対応する箇所(セル)に、特定された操作種別に応じた文字を設定する。なお、CRUD一覧表の構造は、例えば、図7に示したプログラム管理テーブル230および図8に示したテーブル管理テーブル240から特定される。
例えば、プログラムPGがテーブルTBにアクセスする際の操作種別が「C」の場合、生成部602は、プログラムPGとテーブルTBとの組み合わせに対応するセルに文字「C」を設定する。また、操作種別が「R」の場合、生成部602は、プログラムPGとテーブルTBとの組み合わせに対応するセルに文字「R」を設定する。また、操作種別が「U」の場合、生成部602は、プログラムPGとテーブルTBとの組み合わせに対応するセルに文字「U」を設定する。また、操作種別が「D」の場合、生成部602は、プログラムPGとテーブルTBとの組み合わせに対応するセルに文字「D」を設定する。
また、プログラムPGがテーブルTBにアクセスする際の操作種別として、複数の操作種別が特定される場合がある。この場合、生成部602は、例えば、複数の操作種別それぞれに応じた文字を全て付すことにしてもよく、また、複数の操作種別のうちのいずれかの操作種別に応じた文字を付すことにしてもよい。複数の操作種別それぞれに応じた文字を全て付す場合には、特定部603は、「C>R>U>D」の順番で付すことにしてもよい。
一例として、プログラムID「OYA001PG」のプログラムPGと、テーブルID「OYA003TB」のテーブルTBとの組み合わせを例に挙げる。この場合、生成部602は、CRUD管理テーブル250を参照して、プログラムID「OYA001PG」とテーブルID「OYA003TB」との組み合わせに対応する操作種別「C」、「R」および「D」を特定する。そして、生成部602は、CRUD一覧表におけるプログラムID「OYA001PG」とテーブルID「OYA003TB」との組み合わせに対応するセルに、「CRD」を設定(プロット)する。
表示制御部604は、プログラムPGと当該プログラムPGからアクセスされるテーブルTBとの組み合わせに対応する箇所にマーキングされたCRUD一覧表を表示する制御を行う。具体的には、例えば、表示制御部604は、図2に示したクライアント装置202からの表示要求に応じて、マーキングされたCRUD一覧表をクライアント装置202に表示することにしてもよい。
この際、表示制御部604は、例えば、マーキングされたCRUD一覧表を表示する画面の画面情報を生成して、クライアント装置202に送信することにしてもよい。これにより、クライアント装置202において、マーキングされたCRUD一覧表を含む画面を表示することができる。また、表示制御部604は、マーキングされたCRUD一覧表のみをクライアント装置202に送信することにしてもよい。この場合、クライアント装置202は、例えば、WEBサーバからCRUD一覧参照用のWEB画面を取得して、CRUD一覧表を表示してもよい。
また、表示制御部604は、マーキングされたCRUD一覧表を、自装置の不図示のディスプレイに表示してもよく、また、不図示のプリンタへ印刷出力してもよい。なお、マーキングされたCRUD一覧表の表示例については、図10を用いて後述する。
また、特定部603は、各テーブルTBについて、特定した結果(各プログラムPGからアクセスされるテーブルTB)に基づいて、各プログラムPGから各テーブルTBにアクセスする回数を計数することにしてもよい。そして、特定部603は、各テーブルTBについて、計数した各プログラムPGがアクセスする回数を積算することにより、アクセスSQL数を算出することにしてもよい。アクセスSQL数は、各テーブルTBが、対象システムの構成要素であるプログラムPGからアクセスされる合計回数を示す。
具体的には、例えば、特定部603は、CRUD管理テーブル250を参照して、プログラムPGからテーブルTBにアクセスする操作種別ごとの回数を特定する。つぎに、特定部603は、特定した操作種別ごとの回数を積算することにより、プログラムPGからテーブルTBにアクセスする回数を計数する。そして、特定部603は、各テーブルTBについて、計数した各プログラムPGがアクセスする回数を積算することにより、アクセスSQL数を算出する。
この場合、表示制御部604は、マーキングされたCRUD一覧表を表示する際に、各テーブルTBについて、算出されたアクセスSQL数を、各テーブルTBに対応付けて表示する制御を行うことにしてもよい。各テーブルTBのアクセスSQL数を、CRUD一覧表のどの位置に表示するかは、任意に設定可能である。
なお、各テーブルTBに対応付けてアクセスSQL数を表示する場合のCRUD一覧表の表示例については、図10を用いて後述する。
また、取得部601は、データベースDBに対して行われた操作について、データベースDBの性能劣化に影響を及ぼす度合いを示す値(以下、「コスト値」という)を含むSQL統計情報を取得することにしてもよい。ここで、データベースDBは、対象システムのデータベースであり、対象システムの構成要素であるテーブルTBを格納する。データベースDBに対する操作は、プログラムPGからテーブルTBへのアクセスに相当する。
具体的には、例えば、取得部601は、図2に示したデータベースサーバ201から、データベースDBの性能劣化に影響を及ぼす度合いが高いワーストN位までの操作についてのSQL統計情報を取得することにしてもよい。Nは、任意に設定可能であり、例えば、1〜10程度の値に設定される。SQL統計情報には、例えば、アクセス元であるプログラムPGの識別情報(例えば、プログラムID)と、データベースDBに対して行われた操作を示すSQL文とがさらに含まれる。
なお、データベースサーバ201からSQL統計情報を取得する際の具体的な処理手順例については、図16〜図18を用いて後述する。
また、特定部603は、取得されたSQL統計情報に基づいて、データベースDBの性能劣化に影響を及ぼす度合いが相対的に高いプログラムPGとテーブルTBとの組み合わせを特定することにしてもよい。具体的には、例えば、特定部603は、SQL統計情報に含まれるプログラムIDから、アクセス元であるプログラムPGを特定する。
また、特定部603は、SQL統計情報に含まれるSQL文を解析して、アクセス先であるテーブルTBを特定する。より詳細に説明すると、例えば、特定部603は、SQL文の先頭から末尾まで行単位のデータを取得して、「OYA###TB」という文字列を検索することにより、テーブルIDを特定する。
これにより、データベースDBの性能劣化に影響を及ぼす度合いが相対的に高いプログラムPGとテーブルTBとの組み合わせを特定することができる。以下の説明では、データベースDBの性能劣化に影響を及ぼす度合いが相対的に高いプログラムPGとテーブルTBとの組み合わせを「第2の組み合わせ」と表記する場合がある。
また、表示制御部604は、マーキングされたCRUD一覧表を表示する際に、特定された第2の組み合わせに対応する箇所を強調表示する制御を行うことにしてもよい。ここで、箇所(セル)を強調表示するとは、他の箇所(セル)とは異なる態様で表示することであり、例えば、セル内を網掛け表示したり、セルの枠を太線や点線で表示したりすることである。
また、表示制御部604は、強調表示した箇所が選択されたことに応じて、SQL統計情報に含まれるコスト値およびSQL文を表示することにしてもよい。この際、表示制御部604は、例えば、コスト値およびSQL文をポップアップ表示することにしてもよい。強調表示された箇所(セル)の選択は、例えば、クライアント装置202のユーザの操作入力により行われる。
なお、第2の組み合わせに対応する箇所(セル)を強調表示する場合のCRUD一覧表の表示例については、図11を用いて後述する。
また、情報処理装置101の各機能部は、作業支援システム200内の情報処理装置101とは異なる他のコンピュータ、例えば、データベースサーバ201またはクライアント装置202で実現することにしてもよい。また、情報処理装置101の各機能部は、作業支援システム200内の複数のコンピュータにより実現されることにしてもよい。
(CRUD一覧表の表示例)
つぎに、CRUD一覧表の表示例について説明する。ここでは、情報処理装置101の制御に従って、クライアント装置202の不図示のディスプレイに、CRUD一覧表を表示する場合を例に挙げて説明する。
図10は、CRUD一覧表の表示例を示す説明図(その1)である。図10において、CRUD一覧表1000は、縦軸にプログラムPGのプログラムIDおよびプログラム名を並べ、横軸にテーブルTBのテーブルID(図10中、「ID」と表記)およびテーブル名(図10中、「名称」と表記)を並べた表形式のアクセス一覧表である。なお、図10中、縦軸のNoは「行番号」に相当し、横軸のNoは「列番号」に相当する。
CRUD一覧表1000において、プログラムPGと、当該プログラムPGからアクセスされるテーブルTBとの組み合わせに対応するセルには、操作種別に応じた文字(C,R,U,D)が設定されている。例えば、プログラムID「OYA001PG」のプログラムPGと、テーブルID「OYA003TB」のテーブルTBとの組み合わせに対応するセル1001には、「CRD」という文字列が設定されている。
CRUD一覧表1000によれば、クライアント装置202のユーザは、プログラムPGからテーブルTBに対して、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)のいずれの操作が行われるのかを直感的に把握することができる。
例えば、セル1001には、「CRD」という文字列が設定されている。このため、ユーザは、プログラムID「OYA001PG」のプログラムPGから、テーブルID「OYA003TB」のテーブルTBに対して、Create(生成)、Read(読み取り)およびDelete(削除)の操作が行われることを把握することができる。
また、CRUD一覧表1000において、各テーブルTBに対応付けて、アクセスSQL数が表示されている。アクセスSQL数は、各テーブルTBについて、対象システムの構成要素であるプログラムPGがアクセスする回数を積算した値である。例えば、テーブルID「OYA001TB」のテーブルTBに対応するセル1002には、アクセスSQL数「4」が設定されている。
アクセスSQL数によれば、ユーザは、各テーブルTBに対して、どれだけのアクセス数が見込まれるかを把握することができる。例えば、セル1002には、アクセスSQL数「4」が設定されている。このため、テーブルID「OYA001TB」のテーブルTBに対して、4回のアクセスが見込まれることを把握することができる。
つぎに、図11を用いて、第2の組み合わせに対応する箇所(セル)を強調表示する場合のCRUD一覧表の表示例について説明する。第2の組み合わせは、データベースDBの性能劣化に影響を及ぼす度合いが相対的に高いプログラムPGとテーブルTBとの組み合わせである。ただし、ここでは、データベースDBの性能劣化に影響を及ぼす度合いが最も高いプログラムPGとテーブルTBとの組み合わせに対応する箇所のみを強調表示する場合を例に挙げて説明する。
図11は、CRUD一覧表の表示例を示す説明図(その2)である。CRUD一覧表1000において、セル1101が強調表示(網掛け表示)されている。セル1101は、データベースDBの性能劣化に影響を及ぼす度合いが最も高いプログラムPGとテーブルTBとの組み合わせに対応するセルである。
これにより、ユーザは、データベースDBの性能劣化に影響を及ぼす度合いが最も高いプログラムPGとテーブルTBとの組み合わせを直感的に把握することができる。図11の例では、ユーザは、プログラムID「OYA008PG」のプログラムPGと、テーブルID「OYA006TB」のテーブルTBとの組み合わせが、データベースDBの性能劣化に影響を及ぼす度合いが最も高いことがわかる。
また、CRUD一覧表1000において、クライアント装置202の不図示の入力装置を用いたユーザの操作入力により、セル1101を選択すると、例えば、図12に示すような詳細情報1200がポップアップ表示される。ここで、詳細情報1200の具体例について説明する。
図12は、詳細情報1200の具体例を示す説明図である。図12において、詳細情報1200は、Moduleと、コスト値と、SQL Textと、を含む。ここで、Moduleは、プログラムIDを示す。コスト値は、データベースDBの性能劣化に影響を及ぼす度合いを示す。SQL Textは、SQL文の詳細情報である。ただし、図12に示すSQL文の内容は一例であり、SQL文に含まれるテーブルIDは、図11に示したCRUD一覧表1000のテーブルIDとは対応していない。
詳細情報1200によれば、ユーザは、SQL Textを参照することで、データベースDBの性能劣化に影響を及ぼす度合いが高い操作の詳細を把握することができる。また、ユーザは、コスト値を参照することで、データベースDBの性能劣化に影響を及ぼす度合い評価して、何らかの対策をとるべきか否かを判断することができる。
(情報処理装置101の生成処理手順)
つぎに、図13を用いて、情報処理装置101の生成処理手順について説明する。情報処理装置101の生成処理は、例えば、クライアント装置202のユーザからの指示に応じて実行が開始される。
図13は、情報処理装置101の生成処理手順の一例を示すフローチャートである。図13のフローチャートにおいて、まず、情報処理装置101は、対象システムの構成要素であるプログラムPGをリスト化して示すプログラム一覧情報を取得する(ステップS1301)。そして、情報処理装置101は、取得したプログラム一覧情報に基づいて、縦軸にプログラムPGのプログラムIDおよびプログラム名を並べて、各プログラムPGのプログラム管理情報を、プログラム管理テーブル230に登録する(ステップS1302)。
つぎに、情報処理装置101は、対象システムの構成要素であるテーブルTBをリスト化して示すテーブル一覧情報を取得する(ステップS1303)。そして、情報処理装置101は、取得したテーブル一覧情報に基づいて、横軸にテーブルTBのテーブルIDおよびテーブル名を並べて、各テーブルTBのテーブル管理情報を、テーブル管理テーブル240に登録する(ステップS1304)。
つぎに、情報処理装置101は、取得したプログラム一覧情報から選択されていない未選択のプログラムIDを選択する(ステップS1305)。そして、情報処理装置101は、プログラムソースDB220から、選択したプログラムIDのプログラムPGのソースコードを取得する(ステップS1306)。
つぎに、情報処理装置101は、取得したソースコードを解析するソースコード解析処理を実行する(ステップS1307)。ソースコード解析処理の具体的な処理手順については、図14および図15を用いて後述する。ソースコード解析処理では、CRUD管理テーブル250が作成される。
そして、情報処理装置101は、プログラム一覧情報から選択されていない未選択のプログラムIDがあるか否かを判断する(ステップS1308)。ここで、未選択のプログラムIDがある場合(ステップS1308:Yes)、情報処理装置101は、ステップS1305に戻る。
一方、未選択のプログラムIDがない場合(ステップS1308:No)、情報処理装置101は、プログラム管理テーブル230、テーブル管理テーブル240およびCRUD管理テーブル250を参照して、プログラムPGと当該プログラムPGからアクセスされるテーブルTBとの組み合わせに対応するセルに操作種別に応じた文字を設定したCRUD一覧表を生成する(ステップS1309)。
そして、情報処理装置101は、CRUD管理テーブル250を参照して、各テーブルTBのアクセスSQL数を算出する(ステップS1310)。つぎに、情報処理装置101は、生成したCRUD一覧表に、算出した各テーブルTBのアクセスSQL数を設定する(ステップS1311)。
そして、情報処理装置101は、各テーブルTBのアクセスSQL数を設定したCRUD一覧表を、クライアント装置202に表示して(ステップS1312)、本フローチャートによる一連の処理を終了する。この際、情報処理装置101は、後述の図17に示す統計情報管理テーブル1700から特定される第2の組み合わせに対応する箇所を強調表示することにしてもよい。
これにより、クライアント装置202からの指示に応じて、プログラムPGからテーブルTBに対して、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)のいずれの操作が行われるのかを示すCRUD一覧表を生成して提示することができる。
つぎに、図14および図15を用いて、ステップS1307のソースコード解析処理の具体的な処理手順について説明する。
図14および図15は、ソースコード解析処理の具体的処理手順の一例を示すフローチャートである。図14のフローチャートにおいて、まず、情報処理装置101は、ステップS1306において取得したソースコードの先頭から、取得されていない未取得の1行分のデータを取得する(ステップS1401)。
つぎに、情報処理装置101は、取得したデータからコメント文を削除する(ステップS1402)。例えば、情報処理装置101は、コメント文をNULLに置換する。そして、情報処理装置101は、コメント文を削除したデータから、DB操作文字列を検索する(ステップS1403)。
つぎに、情報処理装置101は、DB操作文字列が検索されたか否かを判断する(ステップS1404)。ここで、DB操作文字列が検索されなかった場合(ステップS1404:No)、情報処理装置101は、図15に示すステップS1501に移行する。一方、DB操作文字列が検索された場合(ステップS1404:Yes)、情報処理装置101は、DB操作文字列が「UPDATE」であるか否かを判断する(ステップS1405)。
ここで、DB操作文字列が「UPDATE」ではない場合(ステップS1405:No)、情報処理装置101は、ステップS1407に移行する。一方、DB操作文字列が「UPDATE」の場合(ステップS1405:Yes)、情報処理装置101は、DB操作文字列の前に“FOR”が存在するか否かを判断する(ステップS1406)。
ここで、DB操作文字列の前に“FOR”が存在する場合(ステップS1406:Yes)、情報処理装置101は、図15に示すステップS1501に移行する。一方、DB操作文字列の前に“FOR”が存在しない場合(ステップS1406:No)、情報処理装置101は、DB操作文字列の前後文字が区切り文字であるか否かを判断する(ステップS1407)。なお、区切り文字は、例えば、ダブルコーテーション、スペース、タブ、カンマ、括弧、NULLなどである。
ここで、DB操作文字列の前後文字が区切り文字ではない場合(ステップS1407:No)、情報処理装置101は、図15に示すステップS1501に移行する。一方、DB操作文字列の前後文字が区切り文字の場合(ステップS1407:Yes)、情報処理装置101は、テーブル操作区分にDB操作文字列を設定して(ステップS1408)、図15に示すステップS1501に移行する。
図15のフローチャートにおいて、まず、情報処理装置101は、コメント文を削除したデータから、テーブル文字列を検索する(ステップS1501)。テーブル文字列は、例えば、「OYA###TB」である。つぎに、情報処理装置101は、テーブル文字列が検索されたか否かを判断する(ステップS1502)。
ここで、テーブル文字列が検索されなかった場合(ステップS1502:No)、情報処理装置101は、ステップS1505に移行する。一方、テーブル文字列が検索された場合(ステップS1502:Yes)、情報処理装置101は、テーブル文字列の前後文字が区切り文字であるか否かを判断する(ステップS1503)。
ここで、テーブル文字列の前後文字が区切り文字ではない場合(ステップS1503:No)、情報処理装置101は、ステップS1505に移行する。一方、テーブル文字列の前後文字が区切り文字の場合(ステップS1503:Yes)、情報処理装置101は、CRUD管理テーブル250を更新する(ステップS1504)。
具体的には、例えば、情報処理装置101は、CRUD管理テーブル250から、ステップS1305において選択したプログラムIDと、ステップS1502において検索されたテーブル文字列と、ステップS1408において設定されたテーブル操作区分との組み合わせに対応するレコードを検索する。ここで、レコードが検索された場合、情報処理装置101は、検索したレコードの回数をインクリメントする。一方、レコードが検索されなかった場合、情報処理装置101は、プログラムIDとテーブル文字列とテーブル操作区分との組み合わせに対応する新規レコードをCRUD管理テーブル250に登録する。新規レコードの回数は「1」とする。
つぎに、情報処理装置101は、ソースコードから取得されていない未取得行のデータがあるか否かを判断する(ステップS1505)。ここで、未取得行のデータがある場合(ステップS1505:Yes)、情報処理装置101は、ステップS1401に戻る。一方、未取得行のデータがない場合(ステップS1505:No)、情報処理装置101は、ソースコード解析処理を呼び出したステップに戻る。
これにより、プログラムPGからアクセスされるテーブルTBと、プログラムPGがテーブルTBにアクセスする際の操作種別とを特定して、CRUD管理テーブル250に登録することができる。また、プログラムPGがテーブルTBにアクセスする操作種別ごとの回数を計数することができる。
(情報処理装置101の影響分析情報取得処理手順)
つぎに、図16〜図18を用いて、情報処理装置101の影響分析情報取得処理について説明する。情報処理装置101の影響分析情報取得処理は、例えば、1時間ごとに定期的に実行される。
まず、図16を用いて、データベースサーバ201から取得されるレポート情報RTの具体例について説明する。
図16は、レポート情報RTの具体例を示す説明図である。図16において、レポート情報RTは、データベースDBの性能劣化に影響を及ぼす度合いが高いワースト10の操作についてのレポートを含む。各レポートは、プログラムPGと、テーブルTBと、操作種別との組み合わせごとに生成される。ただし、図16では、ワースト1,2のレポート1601,1602のみ示している。
各レポート1601,1602において、Moduleの後の文字列は、プログラムPGのプログラムIDである。また、Moduleの一行前のHash Valueの値は、データベースDBに対して行われた操作を識別する情報である。
つぎに、図17を用いて、情報処理装置101が用いる統計情報管理テーブル1700の記憶内容について説明する。統計情報管理テーブル1700は、例えば、メモリ302、ディスク305などの記憶装置により実現される。
図17は、統計情報管理テーブル1700の記憶内容の一例を示す説明図である。図17において、統計情報管理テーブル1700は、プログラムID、テーブルID、SQL文、Hash Value値、処理フラグおよび処理日時のフィールドを有する。各フィールドに情報を設定することで、統計情報(例えば、統計情報1700−1,1700−2)がレコードとして記憶される。
ここで、プログラムIDは、プログラムPGを一意に識別する識別子である。テーブルIDは、テーブルTGを一意に識別する識別子である。SQL文は、データベースDBに対して行われた操作を示すSQL文である。Hash Value値は、データベースDBに対して行われた操作を識別する情報である。
処理フラグは、レポートの処理状況を示すフラグである。ここでは、処理フラグには、0,1,2のいずれかが設定される。処理フラグ「0」は、レポートが未処理であることを示す。処理フラグ「1」は、レポートが処理済みであることを示す。処理フラグ「2」は、前回のレポートであることを示す。処理日時は、レポートが処理された日時を示す。
つぎに、図18を用いて、情報処理装置101のSQL統計情報取得処理手順について説明する。
図18は、情報処理装置101のSQL統計情報取得処理手順の一例を示すフローチャートである。図18のフローチャートにおいて、まず、情報処理装置101は、データベースサーバ201からレポート情報RTを取得する(ステップS1801)。
そして、情報処理装置101は、取得したレポート情報RTから選択されていない未選択のレポートを選択する(ステップS1802)。つぎに、情報処理装置101は、選択したレポートから、プログラムIDを取得する(ステップS1803)。具体的には、例えば、情報処理装置101は、Moduleの後の「OYA###PG」という文字列を検索することにより、プログラムIDを取得する。検索対象となる文字列は、大文字によって表されている。
つぎに、情報処理装置101は、選択したレポートから、Hash Value値を取得する(ステップS1804)。具体的には、例えば、情報処理装置101は、Moduleの一行前のデータのうちの7項目目の値を、Hash Value値として特定する。つぎに、情報処理装置101は、統計情報管理テーブル1700から、取得したプログラムIDに対応する処理フラグ「1」のHash Value値を取得する(ステップS1805)。
そして、情報処理装置101は、ステップS1804において取得したHash Value値を今回値とし、ステップS1805において取得したHash Value値を前回値として、データベースサーバ201からSQL統計情報を取得する(ステップS1806)。
つぎに、情報処理装置101は、取得したプログラムIDと、ステップS1804において取得したHash Value値と、取得したSQL統計情報に含まれるSQL文とを含む統計情報を、統計情報管理テーブル1700に新規登録する(ステップS1807)。ただし、この時点では、新規登録される統計情報のテーブルIDは未設定である。また、処理フラグは「0」である。処理日時には、現時点の日時が設定される。
そして、情報処理装置101は、取得したSQL統計情報に含まれるSQL文を解析して、テーブルIDを取得する(ステップS1808)。具体的には、例えば、情報処理装置101は、SQL文の先頭から末尾まで行単位のデータを取得して、「OYA###TB」という文字列を検索することにより、テーブルIDを取得する。
つぎに、情報処理装置101は、統計情報管理テーブル1700に新規登録した統計情報に、取得したテーブルIDを設定する(ステップS1809)。そして、情報処理装置101は、統計情報管理テーブル1700内の今回・前回の統計情報の処理フラグを更新する(ステップS1810)。
今回の統計情報は、新規登録された統計情報である。前回の統計情報は、ステップS1805において取得されたHash Value値を含む統計情報である。情報処理装置101は、今回の統計情報の処理フラグに「1」を設定する。また、情報処理装置101は、前回の統計情報の処理フラグに「2」を設定する。なお、新規登録された統計情報に、取得されたSQL統計情報に含まれるコスト値を含めることにしてもよい。
つぎに、情報処理装置101は、レポート情報RTから選択されていない未選択のレポートがあるか否かを判断する(ステップS1811)。ここで、未選択のレポートがある場合(ステップS1811:Yes)、情報処理装置101は、ステップS1802に戻る。
一方、未選択のレポートがない場合(ステップS1811:No)、情報処理装置101は、本フローチャートによる一連の処理を終了する。これにより、データベースDBの性能劣化に影響を及ぼす度合いが相対的に高い操作についてのSQL統計情報を取得することができる。また、SQL統計情報に含まれるSQL文等を統計情報管理テーブル1700に登録することができる。
統計情報管理テーブル1700によれば、情報処理装置101は、データベースDBの性能劣化に影響を及ぼす度合いが相対的に高いプログラムPGとテーブルTBとの組み合わせ(第2の組み合わせ)、および、SQL文の詳細情報を特定することができる。
具体的には、例えば、情報処理装置101は、統計情報管理テーブル1700を参照して、処理フラグ「1」の統計情報から特定されるプログラムPGとテーブルTBとの組み合わせを、第2の組み合わせとして特定する。そして、情報処理装置101は、CRUD一覧表を表示する際に、特定した第2の組み合わせに対応する箇所を強調表示することができる。
以上説明したように、実施の形態にかかる情報処理装置101によれば、対象システムの構成要素であるプログラムPGとテーブルTBとを特定する構成要素情報を取得し、取得した構成要素情報に基づいて、縦軸(または、横軸)にプログラムPGの識別情報を並べ、横軸(または、縦軸)にテーブルTBの識別情報を並べた表形式のCRUD一覧表を生成することができる。ただし、この時点では、CRUD一覧表における各プログラムPGと各テーブルTBとの組み合わせに対応する箇所(セル)は「空欄」である。また、情報処理装置101によれば、対象システムの構成要素である各プログラムPGについて、各プログラムPGのソースコードに基づいて、システムの構成要素であるテーブルTBのうち、各プログラムPGからアクセスされるテーブルTBと、当該テーブルTBに各プログラムPGがアクセスする際の操作種別とを特定することができる。そして、情報処理装置101によれば、生成したCRUD一覧表における、プログラムPGと当該プログラムPGからアクセスされるテーブルTBとの組み合わせに対応する箇所に、特定した操作種別に応じたマーキング、例えば、文字、記号、図形、模様のいずれかを設定することができる。
これにより、対象システムの構成要素であるプログラムPGからテーブルTBに対して、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)のいずれの操作が行われるのかを容易に特定可能なCRUD一覧表を生成することができる。また、プログラムPGのソースコードからアクセス対象のテーブルTBを洗い出してCRUD一覧表に自動で反映することができるため、CRUD一覧表の作成や更新にかかる作業負荷を削減することができる。このため、日々機能改修が行われるようなシステムにおいても、CRUD一覧表が陳腐化するのを防いで、使用する側(例えば、改修者)のリスクを排除することができる。また、対象システムの改修を行うにあたり、CRUD一覧表から改修にともなう影響範囲を把握できるため、障害発生前に事前に対策をとることが可能となる。
また、情報処理装置101によれば、データベースDBに対して行われた操作について、データベースDBの性能劣化に影響を及ぼす度合いを示すコスト値を含むSQL統計情報を取得し、取得したSQL統計情報に基づいて、データベースDBの性能劣化に影響を及ぼす度合いが相対的に高いプログラムPGとテーブルTBとの組み合わせを特定することができる。そして、情報処理装置101によれば、マーキングしたCRUD一覧表を表示する際に、特定された第2の組み合わせに対応する箇所を強調表示する制御を行うことができる。
これにより、データベースDBの性能劣化に影響を及ぼす度合いが相対的に高い操作が行われているプログラムPGとテーブルTBとの組み合わせを特定可能にして、ボトルネックとなっている操作を絞り込みやすくさせることができる。また、データベースの専門知識がなくても、レスポンスの問題箇所を直感的に把握可能にすることができる。
また、情報処理装置101によれば、強調表示した箇所が選択されたことに応じて、SQL統計情報に含まれるコスト値およびSQL文をポップアップ表示することができる。これにより、ボトルネックとなっている可能性がある操作についての詳細な内容を把握可能にして、実際に対策をとるべきか、どのような対策をとるべきかといったことの判断に役立てることができる。
また、情報処理装置101によれば、各テーブルTBについて、特定した各プログラムPGからアクセスされるテーブルTBに基づいて、各プログラムPGから各テーブルTBにアクセスする回数を計数することができる。そして、情報処理装置101によれば、マーキングしたCRUD一覧表を表示する際に、各テーブルTBについて、計数した各プログラムPGがアクセスする回数を積算したアクセスSQL数を各テーブルTBに対応付けて表示する制御を行うことができる。
これにより、各テーブルTBに対して、どれだけのアクセス数が見込まれるかを特定可能にすることができる。この結果、負荷がかかるテーブルTBを推定して、適切な対応をとることが可能となり、トラブルを未然に防ぐことができる。
これらのことから、情報処理装置101によれば、CRUD一覧表の生成を自動化することで、システムの開発者や保守作業員のCRUD一覧表の作成にかかる工数を削減することができるとともに、システムの改修にともなうトラブルを未然に防ぐことができる。
例えば、CRUD一覧表の作成について、保守作業員の調査に要する工数を「12人日/年」とし、開発者によるテーマ当たりの改定に要する工数を「2人日/テーマ」とする。1年間に30件の開発テーマが発生するとする。この場合、3.6人月/年(=12人日/年+2人日/テーマ×30)の工数を削減することが可能となる。また、トラブルを未然に防ぐことで、システムが安定化して生産停止時間を削減することができる。また、トラブル発生時に費やされていたオーバーヘッド分の工数も削減することができる(例えば、1回当たり1時間程度)。
なお、本実施の形態で説明した生成方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本生成プログラムは、ハードディスク、フレキシブルディスク、CD(Compact Disc)−ROM、MO(Magneto−Optical disk)、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本生成プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)システムの構成要素であるプログラムとデータとを特定する構成要素情報を取得し、
取得した前記構成要素情報に基づいて、縦軸または横軸のいずれか一方にプログラムの識別情報を並べ、他方にデータの識別情報を並べた表形式のアクセス一覧表を生成し、
前記システムの構成要素である各プログラムについて、前記各プログラムのソースコードに基づいて、前記システムの構成要素であるデータのうち、前記各プログラムからアクセスされるデータを特定し、
生成した前記アクセス一覧表における、前記各プログラムと、特定した前記データとの組み合わせに対応する箇所にマーキングする、
処理をコンピュータに実行させることを特徴とする生成プログラム。
(付記2)前記特定する処理は、
特定した前記データに前記各プログラムがアクセスする際の操作種別をさらに特定し、
前記マーキングする処理は、
特定した前記操作種別に応じた文字、記号、図形、模様のいずれかを前記箇所に設定する、ことを特徴とする付記1に記載の生成プログラム。
(付記3)前記システムの構成要素であるデータを格納するデータベースに対して行われた操作について、前記データベースの性能劣化に影響を及ぼす度合いを示す値を含むSQL統計情報を取得し、
取得した前記SQL統計情報に基づいて、前記データベースの性能劣化に影響を及ぼす度合いが相対的に高いプログラムとデータとの第2の組み合わせを特定し、
前記箇所にマーキングした前記アクセス一覧表を表示する際に、特定した前記第2の組み合わせに対応する箇所を強調表示する、
処理を前記コンピュータに実行させることを特徴とする付記1または2に記載の生成プログラム。
(付記4)前記システムの構成要素である各データについて、特定した前記各プログラムからアクセスされるデータに基づいて、前記各プログラムから前記各データにアクセスする回数を計数し、
前記箇所にマーキングした前記アクセス一覧表を表示する際に、前記各データについて、計数した前記各プログラムがアクセスする回数を積算した値を前記各データに対応付けて表示する、
処理を前記コンピュータに実行させることを特徴とする付記1〜3のいずれか一つに記載の生成プログラム。
(付記5)前記SQL統計情報は、前記データベースに対して行われた操作を示すSQL文を含み、
強調表示した前記第2の組み合わせに対応する箇所が選択されたことに応じて、前記SQL統計情報に含まれる前記値と前記SQL文とを表示する、
処理を前記コンピュータに実行させることを特徴とする付記3に記載の生成プログラム。
(付記6)前記操作種別は、Create、Read、UpdateおよびDeleteのいずれかを示す、ことを特徴とする付記2に記載の生成プログラム。
(付記7)システムの構成要素であるプログラムとデータとを特定する構成要素情報を取得し、
取得した前記構成要素情報に基づいて、縦軸または横軸のいずれか一方にプログラムの識別情報を並べ、他方にデータの識別情報を並べた表形式のアクセス一覧表を生成し、
前記システムの構成要素である各プログラムについて、前記各プログラムのソースコードに基づいて、前記システムの構成要素であるデータのうち、前記各プログラムからアクセスされるデータを特定し、
生成した前記アクセス一覧表における、前記各プログラムと、特定した前記データとの組み合わせに対応する箇所にマーキングする、
処理をコンピュータが実行することを特徴とする生成方法。
(付記8)システムの構成要素であるプログラムとデータとを特定する構成要素情報を取得し、
取得した前記構成要素情報に基づいて、縦軸または横軸のいずれか一方にプログラムの識別情報を並べ、他方にデータの識別情報を並べた表形式のアクセス一覧表を生成し、
前記システムの構成要素である各プログラムについて、前記各プログラムのソースコードに基づいて、前記システムの構成要素であるデータのうち、前記各プログラムからアクセスされるデータを特定し、
生成した前記アクセス一覧表における、前記各プログラムと、特定した前記データとの組み合わせに対応する箇所にマーキングする、
制御部を有することを特徴とする情報処理装置。