(57)【要約】      （修正有）【課題】プログラム評価時に、リソースリークを検出可能であり、さらにその対処として、リソースを解放する処理を追加する際に参考となる情報を記憶する情報処理装置を提供する。【解決手段】情報処理装置は、翻訳装置１０と、実行装置２０と、記録装置３０とを備える。翻訳装置１０は、原始プログラムを実行プログラムに翻訳する翻訳部１１と、該翻訳時に原始プログラムに記述されたリソースに関する命令を検索し、検索されたときにその命令を通知する処理が追加された実行プログラムを生成する解析部１２と、を備える。実行装置２０は、実行プログラムを実行する実行部２１と、該実行時に解析部により追加された処理によって起動され、リソースに関する命令と、実行プログラムを構成するモジュールの呼出関係と、に関して実行プログラムを監視する監視部２２と、を備える。記録装置３０は、解析部および監視部により得られた結果を記録する。【選択図】図１
2016071405.tif 000002
【特許請求の範囲】
【請求項１】
原始プログラムを実行プログラムに翻訳する翻訳手段と、
前記翻訳手段により前記原始プログラムを翻訳するときに、前記原始プログラムに記述されたリソースに関する命令を検索し、検索されたときにその命令を後述する監視手段に通知する処理が追加された実行プログラムを生成させるよう、前記原始プログラムを解析する解析手段とを備える
翻訳装置と、
前記実行プログラムを実行する実行手段と、
前記実行手段が前記実行プログラムを実行するときに、前記解析手段により追加された処理によって起動され、前記リソースに関する命令と、前記実行プログラムを構成するモジュールの呼び出し関係とに関して前記実行プログラムを監視する監視手段とを備える
実行装置と、
前記解析手段によって得られた検索結果と、前記実行プログラムを実行するとき提供される前記監視手段からの情報とを記録する記録装置と
を備える
情報処理装置。
【請求項２】
前記監視手段は、
前記実行プログラムより通知された前記命令に含まれる前記リソースに関する情報を前記記録装置に記録するリソース監視手段と、
前記実行プログラムにおけるモジュール間の参照関係を解析するモジュール間参照解析手段と、
前記実行プログラムより通知された前記リソースに関する情報が前記実行プログラムの実行開始からの前記リソースに関する処理において問題がないか解析するリソース情報解析手段とを備える
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記モジュール間参照解析手段は、
前記参照関係の解析によってモジュール間参照情報を生成し、前記モジュール間参照情報を前記記録装置に記録する
ことを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記リソース情報解析手段は、
前記リソースに関する情報に問題があるときに、その旨を前記記録装置に記録する
ことを特徴とする請求項２記載の情報処理装置。
【請求項５】
実行プログラムを実行する実行手段と、
前記実行手段が前記実行プログラムを実行するときに、リソースに関する命令が実行される時に起動され、前記リソースに関する命令と、前記実行プログラムを構成するモジュールの呼び出し関係とに関して前記実行プログラムを監視する監視手段とを備える
実行装置。
【請求項６】
原始プログラムを実行プログラムに翻訳するときに、前記原始プログラムに記述されたリソースに関する命令を検索し、検索されたときにその命令をに通知する処理が追加された実行プログラムを生成させるよう、前記原始プログラムを解析し、
前記実行プログラムを実行するときに、追加された前記処理によって起動され、前記リソースに関する命令と、前記実行プログラムを構成するモジュールの呼び出し関係とに関して前記実行プログラムを監視して、
検索した結果と、前記実行プログラムを実行するとき提供される前記リソースに関する処理内容とを記録する
プログラム評価方法。
【請求項７】
原始プログラムを実行プログラムに翻訳する翻訳機能と、
前記翻訳機能により前記原始プログラムを翻訳するときに、前記原始プログラムに記述されたリソースに関する命令を検索し、検索されたときにその命令を通知する処理が追加された実行プログラムを生成させるよう、前記原始プログラムを解析する解析機能と
を、コンピュータに実現させる
コンピュータ・プログラム。
【請求項８】
コンピュータで実行可能な形式の実行プログラムを実行する実行機能と、
前記実行機能が前記実行プログラムを実行するときに、前記実行プログラムにリソースに関する命令実行箇所に組み込まれた前記リソースに関する処理内容を通知する命令により起動され、前記リソースに関する命令と、前記実行プログラムを構成するモジュールの呼び出し関係とに関して前記実行プログラムを監視する監視機能と
を、コンピュータに実現させる
コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを評価する方法に関する。
【背景技術】
【０００２】
コンピュータにおいて動作するアプリケーションプログラムは、ＯＳ（オペレーティングシステム）が提供するリソースを必要に応じ、動的に確保して利用する。そして、アプリケーションプログラムは、確保したリソースが不要になったら、そのリソースを解放する。
【０００３】
アプリケーションプログラムにおいて、リソースの解放を適切に行わないと、システム（ＯＳ）全体の動作や性能に悪影響を与える虞がある。このような「リソースリーク」と呼称される、プログラム作成時の不具合が原因のシステムトラブルの回避は、必須である。そのため、適切なタイミングでリソースの解放を実施するようにプログラムを作成することが必要である。
【０００４】
しかし、ハンドル（システム全体で共通なリソース）の解放漏れに起因するシステムの障害を、開発工程において検出することは容易ではない。開発工程では、ソースコードのレビューおよびテストによる動作確認が一般的である。
【０００５】
ハンドル値は、プログラム開始から終了まで一意の値ではなく（解放した場合、再度同じ値となることがある）、プログラム全体で共通であること、ＯＳが提供する異なる機能の利用であってもハンドルの解放を共通の関数（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ、以下においてＡＰＩともいう）で行うことなどにより、確認作業が容易ではない。
【０００６】
また、ハンドルは、システム全体で共通なリソースであるため、システム負荷が大きい環境でないと、ハンドル値に関連した障害は発生しづらい。一般的に、開発環境ではハンドル自体の使用数が少ないため、ハンドル値が一意になる場合が多い。そのため、評価時には、プログラムが正常に動作してしまい、障害を見落としてしまうことがある。
【０００７】
ここで、本願出願に先だって存在する関連技術としては、例えば以下の特許文献がある。
【０００８】
特許文献１は、アプリケーションサーバにおいて、受け付けたリクエストに基づいて実行した処理の開始および終了と、オブジェクト生成および解放とをトレース情報に保存する。ユーザからの要求があれば、トレース情報を基に、メモリリークの疑いがあるオブジェクトの一覧を表示するメモリリーク検出装置を開示している。
【０００９】
特許文献２は、関数の呼び出しを仲介し、その呼び出し処理のログをとって、対となる関数が正常に終了しているかチェックする情報処理装置を開示している。
【００１０】
特許文献３は、ＯＳが記憶したログ情報を基に、割り当てたが解放していないリソースを検出するトレースシステムを開示している。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００８−１３４７０９号公報
【特許文献２】特開２００６−１７２２０５号公報
【特許文献３】特開平１０−２６９１０５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
特許文献１乃至３に提案されている技術は、評価対象のプログラムにおけるリソースリークを検出し、利用者に通知する。しかし、これらの技術は、通知を受けた利用者がリソースリークを回避するための作業をサポートすることについては考慮していない。
【００１３】
そこで、本発明は、プログラム評価時に、リソースリークを検出可能であり、さらにその対処として、リソースを解放する処理を追加する際に参考となる情報を記憶する情報処理装置等の提供を主たる目的とする。
【課題を解決するための手段】
【００１４】
上記の目的を達成すべく、本発明の一態様に係る情報処理装置は、以下の構成を備える。
【００１５】
即ち、本発明の一態様に係る情報処理装置は、
原始プログラムを実行プログラムに翻訳する翻訳手段と、
前記翻訳手段により前記原始プログラムを翻訳するときに、前記原始プログラムに記述されたリソースに関する命令を検索し、検索されたときにその命令を後述する監視手段に通知する処理が追加された実行プログラムを生成させるよう、前記原始プログラムを解析する解析手段とを備える
翻訳装置と、
前記実行プログラムを実行する実行手段と、
前記実行手段が前記実行プログラムを実行するときに、前記解析手段により追加された処理によって起動され、前記リソースに関する命令と、前記実行プログラムを構成するモジュールの呼び出し関係とに関して前記実行プログラムを監視する監視手段とを備える
実行装置と、
前記解析手段によって得られた検索結果と、前記実行プログラムを実行するとき提供される前記監視手段からの情報とを記録する記録装置と
を備える。
【００１６】
同目的を達成する本発明の一態様に係る実行装置は、
実行プログラムを実行する実行手段と、
前記実行手段が前記実行プログラムを実行するときに、リソースに関する命令が実行される時に起動され、前記リソースに関する命令と、前記実行プログラムを構成するモジュールの呼び出し関係とに関して前記実行プログラムを監視する監視手段とを備える。
【００１７】
同目的を達成する本発明の一態様に係るプログラム評価方法は、
原始プログラムを実行プログラムに翻訳するときに、前記原始プログラムに記述されたリソースに関する命令を検索し、検索されたときにその命令をに通知する処理が追加された実行プログラムを生成させるよう、前記原始プログラムを解析し、
前記実行プログラムを実行するときに、追加された前記処理によって起動され、前記リソースに関する命令と、前記実行プログラムを構成するモジュールの呼び出し関係とに関して前記実行プログラムを監視して、
検索した結果と、前記実行プログラムを実行するとき提供される前記リソースに関する処理内容とを記録する。
【００１８】
更に、同目的は、上記構成を有する情報処理装置、実行装置、或いは、プログラム評価方法を、コンピュータによって実現するコンピュータ・プログラム、及びそのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記憶媒体によっても達成される。
【発明の効果】
【００１９】
上記の本発明によれば、プログラム評価時に、リソースリークを検出可能であり、さらにその対処として、リソースを解放する処理を追加する際に参考となる情報を記憶することができるという効果がある。
【図面の簡単な説明】
【００２０】
【図１】本発明の第１の実施形態に係る情報処理装置の構成を示すブロック図である。
【図２】本発明の第２の実施形態に係る情報処理装置の構成を示すブロック図である。
【図３Ａ】本発明の第２の実施形態に係る情報処理装置にてプログラム翻訳部を実行する前の原始プログラムのイメージを例示する図である。
【図３Ｂ】本発明の第２の実施形態に係る情報処理装置にてプログラム翻訳部により処理を追加した原始プログラムのイメージを例示する図である。
【図４】本発明の第２の実施形態に係る情報処理装置の実行装置におけるプログラム実行時の動作イメージ説明する図である。
【図５】本発明の第２の実施形態に係る情報処理装置におけるリソース監視部を説明するフローチャートである。
【図６】本発明の第２の実施形態に係る情報処理装置におけるリソース情報解析部を説明するフローチャートである。
【図７】本発明の第２の実施形態に係る情報処理装置における監視結果記録装置に記録する実行履歴情報を説明する図である。
【図８】本発明の第２の実施形態に係る情報処理装置における実行プログラムの関数呼び出しフローの一例を説明する図である。
【図９Ａ】本発明の第２の実施形態に係る情報処理装置における実行プログラムの関数呼び出しフローの一例を説明する図である。
【図９Ｂ】本発明の第２の実施形態に係る情報処理装置における実行プログラムの関数呼び出しフローの一例を説明する図である。
【図１０】本発明の第２の実施形態に係る情報処理装置におけるプロセスに関する情報を表示する画面の一例を示す図である。
【図１１】本発明の第２の実施形態に係る情報処理装置におけるハンドル変数に関する情報を表示する画面の一例を示す図である。
【図１２】本発明の第２の実施形態に係る情報処理装置におけるハンドル変数に関する時系列情報を表示する画面の一例を示す図である。
【図１３】本発明の第２の実施形態に係る情報処理装置における関数呼び出しフローを表示する画面の一例を示す図である。
【図１４】本発明の第１および第２の実施形態を実現可能なコンピュータ（情報処理装置）のハードウェア構成を例示的に説明する図である。
【発明を実施するための形態】
【００２１】
次に、本発明を実施する形態について図面を参照して詳細に説明する。
【００２２】
＜第１の実施形態＞
図１は、本発明の第１の実施形態に係る情報処理装置の構成を示すブロック図である。
【００２３】
本実施形態に係る情報処理装置は、翻訳装置１０と、実行装置２０と、記録装置３０とを有する。
【００２４】
翻訳装置１０は、翻訳部１１と、解析部１２とを備える。
【００２５】
翻訳部１１は、原始プログラムを実行プログラム（機械語）に翻訳する。
【００２６】
解析部１２は、翻訳部１１により原始プログラムを翻訳するときに、原始プログラムに記述されたリソースに関する命令を検索し、検索されたときにその命令を後述する監視部２２に通知する処理が追加された実行プログラムを生成させるよう原始プログラムを解析する。
【００２７】
実行装置２０は、実行部２１と、監視部２２とを備える。
【００２８】
実行部２１は、実行プログラムを実行する。
【００２９】
実行部２１が実行プログラムを実行するときに、監視部２２は、解析部１２により追加された処理によって起動され、リソースに関する命令と、実行プログラムを構成するモジュールの呼び出し関係とに関して実行プログラムを監視する。
【００３０】
記録装置３０は、解析部１２および監視部２２により得られた結果を記録する。すなわち、記憶装置３０は、解析部１２によって得られた検索結果と、実行プログラムを実行するとき提供される監視部２２からの情報を記憶する。
【００３１】
以上、説明したように、第１の実施形態には、プログラム評価時に、リソースリークを検出可能であり、さらにその対処として、リソースを解放する処理を追加する際に参考となる情報を記憶することができるという効果がある。
【００３２】
その理由は、本実施形態に係る情報処理装置は、プログラムの翻訳時に解析部１２により処理を追加し、プログラムの実行時に追加した処理により、記録装置３０にハンドルに関する情報が記録されるからである。
【００３３】
＜第２の実施形態＞
次に上述した第１の実施形態に係る情報処理装置を基本とする第２の実施形態について説明する。図２は、本発明の第２の実施形態に係る情報処理装置の構成を示すブロック図である。ただし、図２に示す構成は、一例であって、本発明は、図２に示す情報処理装置に限定されない。
【００３４】
本実施形態に係る情報処理装置は、翻訳装置１００と、実行装置２００と、監視結果記録装置３００と、監視結果表示装置４００とを有する。
【００３５】
監視結果記録装置３００は、翻訳装置１００と、実行装置２００とから通知された情報を記録可能なディスク等の装置である。
【００３６】
監視結果表示装置４００は、監視結果記録装置３００に記録された情報を、例えば、画面に表示したり、紙に印刷することにより利用者に通知する装置である。
【００３７】
翻訳装置１００は、原始プログラム１０１と、プログラム翻訳部１０２と、実行プログラム１０３と、プログラム外部参照解析部１０４とを備える。
【００３８】
原始プログラム１０１は、プログラミング言語（例えば、Ｃ言語、ＣＯＢＯＬ言語など）で記述されたプログラムである。
【００３９】
プログラム翻訳部１０２は、まず、原始プログラム１０１に記述された、ハンドルに関する命令に処理を追加する。そして、プログラム翻訳部１０２は、処理を追加したプログラムを翻訳して実行プログラム１０３を作成する。
【００４０】
実行プログラム１０３は、コンピュータが実行可能な形式のプログラムである。
【００４１】
プログラム外部参照解析部１０４は、実行プログラム１０３が参照しているハンドルの操作に関する命令群を検索する。そして、プログラム外部参照解析部１０４は、ハンドルの操作に関する命令群が含まれる場合に、そのハンドルを解放する命令が実行プログラム１０３に含まれているかを判定する。そして、プログラム外部参照解析部１０４は、判定した結果を監視結果記録装置３００に記録する。
【００４２】
実行装置２００は、プログラム実行部２０１と、リソース監視部２０２と、モジュール間参照解析部２０３と、リソース情報解析部２０４とを備える。
【００４３】
プログラム実行部２０１は、翻訳装置１００により作成された実行プログラム１０３を実行する。ここで、実行プログラム１０３は、処理Ａ〜処理Ｘを含み、各々の処理にハンドルに関する命令を含むとする。
【００４４】
実行プログラム１０３を実行すると、ハンドルに関する命令を実行する度に、プログラム翻訳部１０２が追加した処理によりハンドルに関する情報がリソース監視部２０２に通知される。通知を受け取ったリソース監視部２０２は、通知された内容を監視結果記録装置３００に記録する。実行プログラム１０３の処理の特性や、評価内容により、リソース監視部２０２は、実行プログラム１０３と同期で動作しても良いし、非同期で動作しても良い。
【００４５】
それから、リソース監視部２０２は、モジュール間参照解析部２０３により、リソース監視部２０２へ通知した関数モジュールの実行プログラム１０３におけるモジュール間参照情報を解析する。解析した結果を、モジュール間参照解析部２０３は、監視結果記録装置３００に記録する。
【００４６】
また、リソース監視部２０２は、実行プログラム１０３により通知された内容に問題がないかをリソース情報解析部２０４により解析する。解析した結果を、リソース情報解析部２０４は、監視結果記録装置３００に記録する。
【００４７】
以下に、本実施形態の処理について、詳細に説明する。
【００４８】
初めに、プログラム翻訳部１０２は、翻訳対象である原始プログラム１０１に対して、ハンドルに関する命令群を検索して、通知処理を追加する。ハンドルに関する命令群は、例えば、ハンドル操作を実施する命令群およびハンドルの複製命令群である。プログラム翻訳部１０２は、処理を追加したプログラムを翻訳して、実行プログラム１０３を作成する。
【００４９】
図３Ａは、本発明の第２の実施形態に係る情報処理装置にてプログラム翻訳部を実行する前の原始プログラムのイメージを例示する図である。図３Ｂは、本発明の第２の実施形態に係る情報処理装置にてプログラム翻訳部により処理を追加した原始プログラムのイメージを例示する図である。ここで、図３Ｂに示す原始プログラムは、図３Ａに示す原始プログラムに対して、プログラム翻訳部１０２により、処理を追加したプログラムイメージである。
【００５０】
プログラム翻訳部１０２は、図３Ａに示す原始プログラムに対して、ハンドル操作を実施する命令群（ＡＰＩまたはシステムコール等と呼称される関数群）を検索する。命令群が見つかった場合、プログラム翻訳部１０２は、その命令群に、ハンドル操作の内容を通知する処理を追加する。図３Ａにおいて、ハンドル操作を実施する命令は、ｏｐｅｎ命令と、ｒｅａｄ命令と、ｗｒｉｔｅ命令と、ｃｌｏｓｅ命令である。翻訳装置２は、それらの各々の命令に、ハンドル操作の内容をリソース監視部２０２に通知する処理を追加する。また、プログラム翻訳部１０２は、原始プログラムに対して、ハンドルの複製命令群（代入文）にもその内容を通知する処理を追加する。それらの処理を追加したプログラムのイメージは、図３Ｂである。図３Ｂにおいて、下線を引いた箇所は、プログラム翻訳部１０２により追加された処理である。
【００５１】
プログラム翻訳部１０２は、図３Ｂに示すような処理を追加したプログラムを翻訳して、実行プログラム１０３を作成する。
【００５２】
実行プログラム１０３の作成が完了すると、プログラム外部参照解析部１０４は、実行プログラム１０３に対して、ハンドル操作を実施する命令群（関数群）の検索を行う。そして、プログラム外部参照解析部１０４は、検索した結果を基に、ハンドルの解放に関する命令が原始プログラム１０１に存在していたかを判定する。プログラム外部参照解析部１０４は、判定した結果を検索した結果と共に、監視結果記録装置３００に記録する。
【００５３】
ハンドルを解放する命令（例えば、ｃｌｏｓｅ命令など）がない場合、プログラム外部参照解析部１０４は、ハンドルがリークする可能性があると判定する。プログラム外部参照解析部１０４は、判定した結果を監視結果記録装置３００に記録する。そして、監視結果表示装置４００は、例えば、原始プログラム群１０１を翻訳した結果と共に、監視結果記録装置３００に記録した情報を、利用者に通知することが可能である。
【００５４】
図４は、本発明の第２の実施形態に係る情報処理装置の実行装置２００におけるプログラム実行時の動作イメージ説明する図である。
【００５５】
プログラム実行部２０１において実行プログラム１０３が実行されると、プログラム翻訳部１０２が追加した処理により、ハンドルを操作する命令を実施するごとに、リソース監視部２０２は、通知を受ける。図３Ｂに示すように、通知を受ける対象となる事象は、ハンドルの取得と、解放と、参照と、複製である。本実施形態では、ｏｐｅｎ、ｃｌｏｓｅ、ｒｅａｄ、ｗｒｉｔｅ、及びハンドルの代入が該当する。
【００５６】
図５は、本発明の第２の実施形態に係る情報処理装置におけるリソース監視部を説明するフローチャートである。
【００５７】
リソース監視部２０２は、ハンドルを操作する命令の通知を受け取ると、監視結果記録装置３００に上述の事象を通知する（ステップＳ５１０）。監視結果記録装置３００は、通知された事象の種別（ｏｐｅｎ、ｃｌｏｓｅ、ｒｅａｄ、ｗｒｉｔｅ、ハンドルの代入）と、ハンドル値とを関連付けて、記録する。
【００５８】
次に、リソース監視部２０２は、モジュール間参照解析部２０３に上述の事象を通知する（ステップＳ５２０）。モジュール間参照解析部２０３は、リソース監視部２０２から通知を受け取ると、リソース監視部２０２への通知元である関数モジュールの実行プログラム１０３における呼び出し関係を解析し、監視結果記録装置３００に通知する。例えば、図２に示す処理Ａ〜処理Ｘは、実際には１つ以上の関数モジュールを組み合わせて構成している。例えば、Ｃ言語の場合、ｍａｉｎ関数を入口とする各機能を関数モジュールに分割して実装する、いわゆるモジュールプログラミングでプログラムを実現するのが一般的である。モジュール間参照解析部２０３は、ｍａｉｎ関数から実際にハンドルを操作する命令を内包する関数モジュールまでの参照関係を解析する。モジュール間の参照を解析する方法は、一般的に知られた既存の方法を用いるものとして、ここでの説明を省略する。監視結果記録装置３００は、通知されたモジュール間の参照情報を、記録済みの事象の種別（ｏｐｅｎ、ｃｌｏｓｅ、ｒｅａｄ、ｗｒｉｔｅ、ハンドルの代入）と、ハンドル値とに関連付けて、記録する。
【００５９】
次に、リソース監視部２０２は、通知された事象の種別がハンドル値を参照する事象か判定する（ステップＳ５３０）。ハンドル値を参照する事象（ここでは、ｃｌｏｓｅ、ｒｅａｄ、ｗｒｉｔｅ）の場合（ステップＳ５３０で「Ｙｅｓ」）、リソース情報解析部２０４に通知する（ステップＳ５４０）。
【００６０】
図６は、本発明の第２の実施形態に係る情報処理装置におけるリソース情報解析部を説明するフローチャートである。図７は、本発明の第２の実施形態に係る情報処理装置における監視結果記録装置に記録する実行履歴情報を説明する図である。実行履歴情報は、時刻と、プロセスおよびスレッドと、種別と、モジュール間参照情報と、ハンドル値と、変数情報（ハンドル値を代入した変数に関する情報）とが関連付けて、格納されている情報である。図７において、種別は、ｏｐｅｎの場合に「取得」、ｃｌｏｓｅの場合に「解放」、ｒｅａｄとｗｒｉｔｅの場合に「参照」、ハンドルの代入の場合に「設定」と設定されている。
【００６１】
リソース情報解析部２０４は、リソース監視部２０２から通知を受け取ると、監視結果記録装置３００から現在有効なハンドルの情報を取得して、通知されたハンドルが操作可能な状況か解析を行う（ステップＳ６１０）。リソース情報解析部２０４は、通知されたハンドル値が不正な値（例えば、「ＮＵＬＬ」など）や、解放済みのハンドルである場合に、不正なハンドル値であることを監視結果記録装置３００に通知する（ステップＳ６２０）。
【００６２】
リソース情報解析部２０４は、ハンドルの代入によりハンドル値を格納する変数の一覧を監視結果記録装置３００より取得する（ステップＳ６３０）。そして、解放済みのハンドル値が変数に残っているなどの変数の値が不正な（ステップＳ６４０で「Ｎｏ」）場合に、リソース情報解析部２０４は、その旨を監視結果記録装置３００に通知する（ステップＳ６５０）。
【００６３】
リソース情報解析部２０４は、さらに、モジュール間参照情報を用いて、不正なハンドル値による参照がないかを確認する（ステップＳ６６０）。すなわち、リソース情報解析部２０４は、監視結果記録装置３００からモジュール間参照情報を取得する。次に、リソース情報解析部２０４は、取得した情報と、現在のハンドル値とハンドルを参照する命令の実行箇所を突き合わせて、ハンドル値を参照している関数モジュールの妥当性をチェックする。リソース情報解析部２０４は、監視結果記録装置３００に記録された実行履歴情報から、ハンドル値が同一のもので履歴を絞り込み、図８に示すように、一連のモジュール間参照を、「モジュールａ」を起点とするグループとして、グループ化する。図８は、本発明の第２の実施形態に係る情報処理装置における実行プログラムの関数呼び出しフローの一例を説明する図である。リソース情報解析部２０４は、現在使用中のハンドルについて同様の情報を取得する。そして、リソース情報解析部２０４は、取得した情報と、監視結果記録装置３００に記録された、過去の実行履歴情報を基にしたグループ化したモジュール間参照情報（関数呼び出しフロー）とを比較することにより、類似性を求める。リソース情報解析部２０４は、求めた類似性により、ハンドルの参照に問題がないかを判断する。過去の実行履歴情報として、評価フェーズにおいて、プログラムを繰り返し実行するときに、多数回発生した、モジュール間参情報を監視結果記録装置３００に蓄積しておくことが可能である。そして、ハンドルの参照に問題がある（ステップＳ６６０で「Ｎｏ」）と判断した場合に、リソース情報解析部２０４は、ハンドル値と共に、その旨を監視結果記録装置３００に通知する（ステップＳ６７０）。
【００６４】
図９Ａおよび図９Ｂは、本発明の第２の実施形態に係る情報処理装置における実行プログラムの関数呼び出しフローの一例を説明する図である。
【００６５】
監視結果記録装置３００に、図８に示した関数呼び出しフロー（グループ化したモジュール間参照情報）が記録されている状態で、評価を実施する場合を例に説明する。
【００６６】
プログラムの実行により得られた情報を基に、図９Ａに示す関数呼び出しが得られた場合、リソース情報解析部２０４は、図８と図９Ａとを比較して、現時点までのハンドルの参照に関して、類似性があると判定する。このとき、リソース情報解析部２０４は、不正なハンドル使用ではないと判断する。
【００６７】
プログラムの実行により得られた情報を基に、図９Ｂに示す関数呼び出しが得られた場合、リソース情報解析部２０４は、図８と図９Ｂとを比較して、現時点までのハンドルの参照に関して、類似性がないと判定する。このとき、リソース情報解析部２０４は、不正なハンドル使用確認対象と判断し、監視結果記録装置３００に判定結果を通知する。
【００６８】
次に、監視結果記録装置３００に記録された情報を基に、監視結果表示装置４００に表示する例について説明する。
【００６９】
図１０は、本発明の第２の実施形態に係る情報処理装置におけるプロセスに関する情報を表示する画面の一例を示す図である。図１０によれば、監視結果記録装置３００に記録された情報を基に、プロセスに関する情報が時系列に表示されている。例えば、監視結果表示装置４００は、不正なハンドル使用確認対象を検出した場合に、利用者に通知する。図１０において、監視結果表示装置４００は、「不正」欄と、「エラーレポート」欄を用いて、不正なハンドル使用確認対象であることを通知する。監視結果表示装置４００は、不正なハンドル使用確認対象を検出した場合に、利用者に通知すると共に、プログラムの実行を中断するか、プログラムの実行を継続するかを、利用者が選択することを可能としてもよい。また、監視結果表示装置４００は、プログラム毎、通知情報毎に、中断または継続の設定を可能とする機能を提供してもよい。
【００７０】
図１１は、本発明の第２の実施形態に係る情報処理装置におけるハンドル変数に関する情報を表示する画面の一例を示す図である。図１１によれば、監視結果表示装置４００は、フローと共に監視結果記録装置３００に記録された、不正ハンドル値の判定で参照したモジュール間参照情報と、その記録の範囲で参照されたハンドル変数とその内容と、定義場所とをリストで表示する。この図１１に示した画面により、利用者は、ハンドル値と、ハンドル値を使用した関数モジュールおよびハンドル値を管理していた変数を一緒に確認することが可能である。これにより、利用者は、原始プログラム１０１からプログラム修正に必要となる調査対象を素早く絞り込むことができる。これにより、修正に必要な時間および工数が改善され、品質の早期確保と生産性の向上が期待できる。
【００７１】
図１２は、本発明の第２の実施形態に係る情報処理装置におけるハンドル変数に関する時系列情報を表示する画面の一例を示す図である。図１２によれば、監視結果表示装置４００は、監視結果記録装置３００に記録された、グループ化したモジュール間参照情報とハンドル値の内容を時系列で参照することができる。すなわち、ハンドル値の確認および関数モジュールと処理の動作検証を、監視結果表示装置４００でプログラム実行の中断を指示した場合、またはプログラム終了後に実施できる。利用者は、図１２に示した画面により、プログラム動作時のハンドル値の割り当ての状況（同じハンドル値が解放した後、再度割り当てられている等）を可視化して確認することができる。
【００７２】
図１３は、本発明の第２の実施形態に係る情報処理装置における関数呼び出しフローを表示する画面の一例を示す図である。図３に示すように、監視結果表示装置４００は、監視結果記録装置３００に記録された、グループ化したモジュール間参照情報を表示する。利用者は、図１３に示した画面により、監視結果表示装置４００でプログラム実行の中断を指示した場合、ハンドルを使用中の各処理が正しいハンドル値で処理を実行しているか確認できる。また、プログラム終了後の場合、時系列順で同様にモジュール間参照のグループ化した複数の処理のハンドル値の状態を再現でき、利用者は、同様に正しいハンドル値で処理を実行しているか確認できる。例えば、同一のハンドル値が解放後に即取得されるようなハンドルが不足しているような場合でも、不正なハンドル値が使用されているか判断が容易となる。また、例えば、長時間動作するアプリケーションにおいて、ハンドル値を設定した変数の初期化ミスが原因であるような、長い時間を経過した後で発生する、不正なハンドルの使用を検出することも容易となる。
【００７３】
このように、プログラムに実装することなく、プログラムの実行時にハンドルの利用状況（確保、参照、解放）に関する情報を入手することが可能となり、開発作業で時間を占めるハンドルに関係する作業を大幅に軽減でき、かつプログラム品質を確保できる。また、実行時に収集した情報は、監視結果記録装置３００に記憶されるため、プログラムの実行後であっても、その内容の確認をすることが可能になる。
【００７４】
以上、説明したように、第２の実施形態には、プログラム評価時に、リソースリークを検出可能であり、さらにその対処として、リソースを解放する処理を追加する際に参考となる情報を記憶することができるという効果がある。さらに、本実施形態は、監視結果記録装置３００に記憶した情報を、監視結果表示装置４００に表示することにより、不正な使用が疑われ、確認対象とすべきリソース（ハンドル）を利用者に通知することができる。
【００７５】
その理由は、本実施形態に係る情報処理装置は、プログラムの翻訳時に処理を追加し、プログラムの実行時に追加した処理により、監視結果記録装置３００にハンドルに関する情報が記録されるからである。
【００７６】
（ハードウェア構成）
上述した実施形態において図１および図２に示した各部は、専用の装置によって実践してもよいが、ソフトウェアプログラムの機能（処理）単位（ソフトウェアモジュール）と捉えることができる。但し、これらの図面に示した各部の実装に際しては、様々な構成が想定され得る。このような場合のハードウェア環境の一例を、図１４を参照して説明する。
【００７７】
図１４は、本発明の第１および第２の実施形態を実現可能なコンピュータ（情報処理装置）のハードウェア構成を例示的に説明する図である。即ち、図１４は、図１に示した翻訳装置１０と実行装置２０、図２に示した翻訳装置１００と実行装置２００の全体または一部を実現可能なコンピュータ（情報処理装置）の構成であって、上述した実施形態における各機能を実現可能なハードウェア環境を表す。
【００７８】
図１４に示した情報処理装置９０００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９００１、ディスプレイ９００２、通信インタフェース（Ｉ／Ｆ）９００３、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９００４、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９００５、ハードディスク装置（ＨＤ）９００６を備え、これらがバス９００７を介して接続された構成を有する。ハードディスク装置（ＨＤ）９００６には、プログラム群９００６Ａと、各種の記憶情報９００６Ｂとが格納されている。プログラム群９００６Ａは、例えば、上述した図１および図２に示した翻訳装置１０、実行装置２０、翻訳装置１００および実行装置２００の各ブロック（各部）に対応する機能を実現するためのコンピュータ・プログラムである。各種の記憶情報９００６Ｂは、例えば、図１に示した記録装置３０と、図２に示した監視結果記録装置３００である。通信インタフェース９００３は、ネットワーク９１００を介して外部装置と通信を実現する一般的な通信手段である。
【００７９】
そして、情報処理装置９０００は、前述の実施形態の説明において参照したブロック図、あるいは、フローチャートの機能を実現可能なコンピュータ・プログラムを、当該ハードウェアのＣＰＵ９００１が実行する。すなわち、ＣＰＵ９００１は、コンピュータ・プログラムを、図１４に示す情報処理装置９０００のハードウェア資源を用いて実行することによって本発明の機能が達成される。具体的には、実行装置２００を、情報処理装置９０００によって実現する場合、情報処理装置９０００は、図５および図６に示すフローチャートの処理ステップを実行するためのコンピュータ・プログラムをＣＰＵ９００１が実行すればよい。また、情報処理装置９０００内に供給されたコンピュータ・プログラムは、読み書き可能な一時記憶メモリ（９００５）またはハードディスク装置９００６等の不揮発性の記憶デバイス（記憶媒体）に格納すればよい。
【００８０】
また、前記の場合において、当該装置内へのコンピュータ・プログラムの供給方法は、ＣＤ−ＲＯＭ等の各種記憶媒体を介して当該装置内にインストールする方法や、インターネット等の通信回線９１００を介して外部からダウンロードする方法等のように、現在では一般的な手順を採用することができる。そして、このような場合において、本発明は、係るコンピュータ・プログラムを構成するコード或いは、そのコードが記録されたところの、コンピュータ読み取り可能な記憶媒体によって構成されると捉えることができる。
【符号の説明】
【００８１】
１０    翻訳装置
１１    翻訳部
１２    解析部
２０    実行装置
２１    実行部
２２    監視部
３０    記録装置
１００    翻訳装置
１０１    原始プログラム
１０２    プログラム翻訳部
１０３    実行プログラム
１０４    プログラム外部参照解析部
２００    実行装置
２０１    実行部
２０２    リソース監視部
２０３    モジュール間参照解析部
２０４    リソース情報解析部
３００    監視結果記録装置
４００    監視結果表示装置
９０００    情報処理装置（コンピュータ）
９００１    ＣＰＵ
９００２    ディスプレイ
９００３    通信インタフェース（Ｉ／Ｆ）
９００４    ＲＯＭ
９００５    ＲＡＭ
９００６    ハードディスク装置（ＨＤ）
９００６Ａ    プログラム群
９００６Ｂ    各種の記憶情報
９００７    バス
９１００    ネットワーク
【図１】
2016071405.tif 000003
【図２】
2016071405.tif 000004
【図３Ａ】
2016071405.tif 000005
【図３Ｂ】
2016071405.tif 000006
【図４】
2016071405.tif 000007
【図５】
2016071405.tif 000008
【図６】
2016071405.tif 000009
【図７】
2016071405.tif 000010
【図８】
2016071405.tif 000011
【図９Ａ】
2016071405.tif 000012
【図９Ｂ】
2016071405.tif 000013
【図１０】
2016071405.tif 000014
【図１１】
2016071405.tif 000015
【図１２】
2016071405.tif 000016
【図１３】
2016071405.tif 000017
【図１４】
2016071405.tif 000018