(57)【要約】      （修正有）【課題】適切なテスト回数でメモリリークを検出するコンピュータプログラム、情報処理方法及び情報処理装置を提供すること。【解決手段】コンピュータに、試験対象となるプログラム実行前にメモリ使用量を計測し（Ｓ２）、前記プログラムの入力パラメータを設定して前記プログラムを実行し（Ｓ３）、前記プログラムの実行後に、メモリ使用量を計測し（Ｓ４）、計測したメモリ使用量が前記プログラム実行前のメモリ使用量より所定値以上増加している場合（Ｓ５）、前記プログラムを再実行し（Ｓ７）、前記プログラム再実行後に、メモリ使用量を計測し（Ｓ８）、前記プログラム再実行後に計測したメモリ使用量が、前記プログラム再実行前のメモリ使用量より所定値以上増加しているとき、前記プログラム実行によりメモリリークの可能性ありと判定する処理を実行させる(Ｓ１３〜Ｓ１５）。【選択図】図７
2015090683.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
試験対象となるプログラム実行前にメモリ使用量を計測し、
前記プログラムの入力パラメータを設定して前記プログラムを実行し、
前記プログラムの実行後に、メモリ使用量を計測し、
計測したメモリ使用量が前記プログラム実行前のメモリ使用量より所定値以上増加している場合、前記プログラムを再実行し、
前記プログラム再実行後に、メモリ使用量を計測し、
前記プログラム再実行後に計測したメモリ使用量が、前記プログラム再実行前のメモリ使用量より所定値以上増加しているとき、前記プログラム実行によりメモリリークの可能性ありと判定する
処理を実行させるコンピュータプログラム。
【請求項２】
メモリリークの可能性ありと判定した場合、前記プログラムを反復実行し、
前記プログラムの実行の前後でメモリ使用量を計測し、
前記プログラムの実行の前後でメモリ使用量が増加して続けるときは、メモリリークであると判定し、
前記プログラムの実行の前後でメモリ使用量の増加が止まったときは、メモリリークではないと判定する
処理を実行させる請求項１に記載のコンピュータプログラム。
【請求項３】
前記プログラムの実行は試験項目と対応付けがされており、
前記プログラムの実行の前後で行うメモリ使用量の計測は、前記プログラムを実行するコンピュータで実行されている複数のプロセスそれぞれについて行うものであり、
プロセスそれぞれについて、
前記プログラム実行の前後でメモリ使用量を測定し、
前記プログラム実行の前後で、メモリ使用量が略同一の場合、前記プログラム実行中における前記プログラム関するエラーログを検索し、
検索にヒットしたときは、ヒットしたエラーログのＩＤと、プロセスのＩＤと、前記プログラムの実行に対応する試験項目のＩＤとを対応付けて第１プロセスリストに記憶し、
検索にヒットしなかったときは、前記プログラムの実行に対応する試験項目のＩＤと、プロセスのＩＤとを対応付けて第２プロセスリストに記憶する
処理を実行させる請求項１又は請求項２に記載のコンピュータプログラム。
【請求項４】
コンピュータが、
試験対象となるプログラム実行前にメモリ使用量を計測し、
前記プログラムの入力パラメータを設定して前記プログラムを実行し、
前記プログラムの実行後に、メモリ使用量を計測し、
計測したメモリ使用量が前記プログラム実行前のメモリ使用量より所定値以上増加している場合、前記プログラムを再実行し、
前記プログラム再実行後に、メモリ使用量を計測し、
前記プログラム再実行後に計測したメモリ使用量が、前記プログラム再実行前のメモリ使用量より所定値以上増加しているとき、前記プログラム実行によりメモリリークの可能性ありと判定する
情報処理方法。
【請求項５】
メモリ使用量を計測部と、
試験対象となるプログラムの入力パラメータを設定する設定部と、
前記プログラムを実行する実行部とを備え、
前記計測部は、前記プログラムの実行前及び実行後に、メモリ使用量を計測し、
前記プログラム実行後に計測したメモリ使用量が前記プログラム実行前のメモリ使用量より所定値以上増加している場合、前記実行部は前記プログラムを再実行し、
前記計測部は、前記プログラム再実行後に、メモリ使用量を計測し、
計測したメモリ使用量が、前記プログラム再実行前のメモリ使用量より所定値以上増加しているとき、
前記プログラム実行によりメモリリークの可能性ありと判定する判定部を
備えた情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアの動作テストにおけるメモリリーク検出を行うコンピュータプログラム、情報処理装置及び情報処理方法に関する。
【背景技術】
【０００２】
従来から、ソフトウェアの動作テストにおいて、メモリリークの発生有無について検証が行われている。メモリリークの発生有無の検証は、実際にソフトウェアを動作させた前後のメモリ使用量を観測し、前後のメモリ使用量の値変化からメモリリークの有無を判定する（特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−２３３０７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
メモリリークの発生事象は様々であり、プログラムの実行を複数回実施しなければ、メモリリークであるかを判定できないものがある。さらに、単に同様のプログラムの実行を繰り返し行うだけでは検出できない事象もある。また、プログラムの実行回数に比例してテストの所要時間が増大する。しかし、ソフトウェアの開発、改修の全体工程において、動作テストに十分な時間が必ずしも振り分けられるとは限らず、テスト結果の精度向上と所要時間の増加抑止の両立が求められている。
【０００５】
本発明はこのような事情に鑑みなされたものであり、一つの側面では、適切なプログラム実行回数でメモリリークを検出するコンピュータプログラム、情報処理装置及び情報処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本願に開示するコンピュータプログラムは、コンピュータに、試験対象となるプログラム実行前にメモリ使用量を計測し、前記プログラムの入力パラメータを設定して前記プログラムを実行し、前記プログラムの実行後に、メモリ使用量を計測し、計測したメモリ使用量が前記プログラム実行前のメモリ使用量より所定値以上増加している場合、前記プログラムを再実行し、前記プログラム再実行後に、メモリ使用量を計測し、前記プログラム再実行後に計測したメモリ使用量が、前記プログラム再実行前のメモリ使用量より所定値以上増加しているとき、前記プログラム実行によりメモリリークの可能性ありと判定する処理を実行させる。
【発明の効果】
【０００７】
本願の一観点によれば、適切なプログラム実行回数でメモリリークを検出することが可能となる。
【図面の簡単な説明】
【０００８】
【図１】メモリリーク検出システムの概要構成の一例を示す説明図である。
【図２】検出装置のハードウェアの一構成例を示すブロック図である。
【図３】タイプ１についての説明図である。
【図４】タイプ２についての説明図である。
【図５】タイプ３についての説明図である。
【図６】ログデータの一例を示す説明図である。
【図７】検出処理の手順を示すフローチャートである。
【図８】プログラムＰ２−１が行う処理を示すフローチャ−トである。
【図９】プログラムＰ２−２が行う処理を示すフローチャートである。
【図１０】プログラムＰ２−２が行う処理を示すフローチャートである。
【図１１】上限確認処理の手順を示すフローチャートである。
【図１２】プログラムＰ２−３が行う処理を示すフローチャートである。
【図１３】プログラムＰ２−３が行う処理を示すフローチャートである。
【図１４】プログラムＰ２−４が行う処理を示すフローチャートである。
【図１５】プログラムＰ２−４が行う処理を示すフローチャートである。
【図１６】使用量差分セットの手順を示すフローチャートである。
【図１７】プログラムＰ２−５が行う処理を示すフローチャートである。
【図１８】プログラムＰ２−５が行う処理を示すフローチャートである。
【図１９】使用量差分セット２で行う処理についてのフローチャートである。
【図２０】一定時間放置におけるメモリリーク検出処理についてのフローチャートである。
【図２１】測定１の処理内容を示すフローチャートである。
【図２２】判定処理１の処理内容を示すフローチャートである。
【図２３】検証結果表示処理を示すフローチャートである。
【図２４】タイプ１−ａの判定例を示すための説明図である。
【図２５】タイプ１−ｂの判定例を示すための説明図である。
【図２６】タイプ２と判定される測定結果の一例を示す説明図である。
【図２７】タイプ２の判定に用いられるログデータの一例を示す説明図である。
【図２８】タイプ２の判定に用いられるログデータの一例を示す説明図である。
【図２９】タイプ３の判定に用いられるログデータの一例を示す説明図である。
【図３０】タイプ３の判定に用いられるログデータの一例を示す説明図である。
【図３１】最大値テストの実行結果の一例を示す説明図である。
【図３２】加速テストの実行結果の一例を示す説明図である。
【図３３】検出装置の機能ブロックの一例を示すブロック図である。
【発明を実施するための形態】
【０００９】
図１はメモリリーク検出システムの概要構成の一例を示す説明図である。メモリリーク検出システムは、検出装置１、対象装置２を含む。検出装置１及び対象装置２はネットワークＮを介して通信を行うことが可能である。対象装置２はテスト対象となるプログラムが動作するコンピュータである。検出装置１は対象装置２に対して、テストの実行を指示したり、メモリ使用量の計測を行わせたりし、その結果の解析を行う。検出装置１は解析結果に基づき、メモリリークが発生していないか否かを判定する。
【００１０】
図２は検出装置１のハードウェアの一構成例を示すブロック図である。検出装置１は、ＣＰＵ（Central Processing Unit）１０、ＲＡＭ（Random Access Memory）１１、ＲＯＭ（Read Only Memory）１２、大容量記憶装置１３、入力部１４、出力部１５、通信部１６、読取部１７を含む。ＣＰＵ１０はＲＯＭ１２に記憶された制御プログラム１ｐに従いハードウェア各部を制御する。ＲＡＭ１１は例えばＳＲＡＭ、ＤＲＡＭ、フラッシュメモリ等である。ＲＡＭ１１はＣＰＵ１０によるプログラムの実行時に発生する種々のデータを一時的に記憶する。大容量記憶装置１３は例えばハードディスク、ＳＳＤ（Solid State Drive）である。大容量記憶装置１３は種々のデータを記憶する。大容量記憶装置１３に制御プログラム１ｐを記憶しておいても良い。入力部１４はキーボード、マウス、タッチパネル等であり、ユーザがデータ、コマンドなどを入力する。出力部１５は表示装置（図示しない）に表示させるデータを出力する。通信部１６はネットワークＮを介して、対象装置２、その他のコンピュータと通信する機能を備える。
【００１１】
読取部１７はＣＤ（Compact Disk）−ＲＯＭ、ＤＶＤ（Digital Versatile Disc）−ＲＯＭ等の可搬型記憶媒体１ｂを読み取る。制御プログラム１ｐは可搬型記憶媒体１ｂより読取部１７が読み取り、大容量記憶装置１３に記憶することとしても良い。また、ネットワークＮを介して他のコンピュータから制御プログラム１ｐをダウンロードしても良い。さらにまた、半導体メモリ１ａから制御プログラム１ｐを読み込むこととしても良い。
【００１２】
次に、最初に従来の動作テストにおけるメモリリーク検出方法について説明する。従来の動作テストにおいては、テスト前後でメモリ使用量の変化を観測し、テスト後のメモリ使用量が増大した場合には、同じテスト条件で再テストを行う。再テストにより、メモリ使用量の増大が再現すればメモリリークの可能性有りと判断する。そのような場合は、テスト条件等を変えながらテストを重ねて、メモリリークが発生するかを調査する。再現すればメモリリークが発生していると断定できるが、テストを重ねても再現したり、再現しなかったりする場合には、さらにテスト条件を変えながらテストを行うことになる。このような方法では、飛躍的にテストに要する時間が増大することになる。
【００１３】
一方、メモリ使用量の増大が再現されなければ、テスト対象のプログラムではない他の要因でメモリ使用量が増大したものとして、調査打ち切りとしていた。しかしながら、単に再テストしたのではメモリリークが再現しない場合もあり、調査を打ち切ったことにより、製品出荷後にメモリリークが発見されることになる。
【００１４】
本願発明者は鋭意努力検討した結果、メモリ使用量増大の要因とその増大の再現性との関係に着目して、メモリ使用量の増大現象を分類することにより、無駄な再現テストを重ねることなく、適切なテスト回数でメモリリークを検出可能であることを見出した。以下、順を追って説明する。なお、以下の説明において、障害とは、テスト対象プログラムのメモリリークの他、他の要因でメモリリークが生じたことを言う。タイプとは、メモリ増大現象の類型である。タイプにはメモリリークの障害も含むが、障害とされないものも含む。
【００１５】
次にメモリ増大現象の類型（タイプ）について説明する。以下の説明において参照するグラフは、テストの進行状況とメモリ使用量との関係を示すものであり、横軸はテスト進行状況である。両矢印で示す範囲が一回の動作テストを示している。縦軸がメモリ使用量である。
図３はタイプ１についての説明図である。タイプ１はメモリ使用量が単調増加傾向を示す現象である。図３Ａは障害の場合、図３Ｂは障害でない場合である。図３Ａはテストを繰り返すことにより、メモリ使用量が増大している。テスト対象プログラムが確保したメモリを適切に開放していないことが、メモリ使用量増大の要因であり、障害が発生しているみなすべきである。以降、このような現象を「タイプ１−ａ」または「１−ａ」とする。
【００１６】
図３Ｂでは当初のテスト実行においては、メモリ使用量の増大が続いたが、その後、頭打ちになっている。これは、テスト対象プログラムの仕様として、メモリ使用量の上限を定めている場合である。その上限を超えない範囲においては、必要に応じてメモリを確保するため、当初はメモリ使用量が増大するが、一定のところで頭打ちになるのである。よって、障害ではなく、プログラムの仕様から生じる現象である。以降、このような現象を「タイプ１−ｂ」また「１−ｂ」とする。
【００１７】
図４はタイプ２についての説明図である。テスト実行により、メモリ使用量の増大が生じたが、その後、メモリ使用量は頭打ちとなっている。グラフで表す現象としては１−ｂと同様であるが、その要因が異なる場合である。例えば、テストを実行時に、テスト対象プログラムとは直接関係しない、イレギュラーな処理がたまたま行われ、その処理において、メモリが開放されなかったために、生じた現象である。イレギュラーな処理の一例としては、ネットワーク異常時に行われるリカバリ処理である。イレギュラーな処理が要因であるため、再テストを行っても再現をせずに、障害でないと判定されてしまう。確かに、テスト対象プログラムが要因ではないため、テスト結果としてはある意味正しいのであるが、イレギュラーな処理であっても障害であるから、検出することが望ましい。
【００１８】
図５はタイプ３についての説明図である。タイプ１と同様にメモリ使用量が単調増加傾向を示す現象であるが、メモリ使用量の増大するタイミンクが、タイプ１と異なる。タイプ３は、上位（プログラム、装置）からのアクセス内容の変化に応じた作業領域の拡張など、所定の条件に合致した場合に使用メモリを拡張する場合である。図５Ａのように制限なく拡張し続ける場合は障害である。以降の、このような現象を「タイプ３−ａ」又は「３−ａ」とする。図５Ｂのように、仕様で定めた上限を超えない制御を行っている場合は、障害ではない。以降、このような現象を「タイプ３−ｂ」または「３−ｂ」とする。領域の拡張の例としては、キャッシュ領域が足りなければ増やす、コネクション開設毎にメモリを確保する処理である。タイプ１よりも、メモリ使用量が増大する間隔が広くなるのは、領域を拡張する際にはある程度、まとまったサイズを確保するのが通常であるからである。そのため、再テストを数回行っただけでは、資源の不足が発生せずに領域拡張が起こらないのである。
【００１９】
以上のように、メモリ使用量の増大現象は、タイプ１−ａ、１−ｂ、２、３−ａ、３−ｂの５タイプに類型化される。そのうち、タイプ１−ａ、２、３−ａは障害である。それに対して、タイプ１−ｂ、３−ｂはプログラムの仕様による現象であり、障害ではない。本実施の形態においては、メモリ使用量の増大現象が５タイプのうちのどのタイプであるかを識別する。そして、障害であるタイプ１−ａ、２、３−ａの場合のみ、再テストを実行する。タイプに則したテストを繰り返すことにより、メモリリークを発生させている可能性の高いプログラムの高精度に特定することが可能となる。
【００２０】
次にタイプを識別するための指針を示す。タイプ１（１−ａ、１−ｂ）、タイプ３を識別するための指針は以下の通りである。タイプ１は再テストで必ず発生するものであるから、再テストを繰り返し行うことで検出可能である。一方、タイプ３は同じ項目で再テストを繰り返しても、メモリ使用量はすぐには増大しないため、以下の２種類のテストを行う。
【００２１】
（１）最大値テスト
最大値テストは、メモリ使用量の増加を検出したテスト項目で設定した要因に基づき、テストで指定するパラメータを最大値に設定して再テストを行う。このテストを実施した結果、ａ．仕様で定められたメモリ獲得の上限を超えるメモリ増加があった場合、ｂ．メモリ枯渇によりシステムがハングアップした場合は、障害であると判定できる。
【００２２】
（２）加速テスト
加速テストは、メモリ使用量の増加を検出したテスト項目で設定した要因に基づき、テストで指定するパラメータを最小値から最大値まで変えながらテストを行う。なお、初回のテストで検出した状態は所定のメモリを確保済みの状態であり、確保済みメモリを使いきるまでメモリ使用量は増大しないため、装置を再起動し初期状態に戻した上でテストを行う。加速テストを行うことにより、最大値テストでは障害であるか否か判定できなかった現象の判定を行うことが可能である。
【００２３】
最大値テストの一例をファイルアクセスの場合にて説明する。ファイルアクセスのテストパラメータとして、クライアント数、read長がある。クライアント数が１〜８１９２の範囲で指定可能である場合、最大値８１９２としてテストを行うのが、最大値テストである。同様に、read長が１ＫＢ〜１２８ＭＢ指定可能な場合に、１２８ＭＢとしてテストを行うのが、最大値テストである。
【００２４】
加速テストの一例をファイルアクセスの場合にて説明する。パラメータ１は、クライアント数であり、例えば、１，２，４，８，１６，３２，６４，・・・８１９２のような値を指定する。パラメータ２はread長であり、１ＫＢ，２，４，８，１６，３２ＫＢ，・・１ＭＢ，２，４，８，１６，・・１２８ＭＢのような値を指定する。加速テストでは、まず、パラメータ２は固定し、パラメータ１を１から順に値を増やしながら、繰り返しテストを行う。次に、パラメータ１を固定して、パラメータ２を１ＫＢから順に増やしながら、繰り返し行う。
【００２５】
加速テストは、１項目あたり数十回〜数百回の再実行が必要であるだけではなく、実施前にシステムの再起動が必要であることから、テスト時間に対するオーバーヘッドが大きい。このため、メモリ使用量の増加を検出した際、タイプ１、タイプ２に該当するか判定した上で、タイプ３の疑いがあるもののみについて、加速テストを行うこととする。最大値テストを実行したした結果から、障害又は仕様通りの動作と判定できたものは、加速テストの対象から除外される。
【００２６】
タイプ２はテスト対象プログラムとは直接関係のない要因による障害であるから、テスト結果のみでは検出できない。そこで、ログデータを用いて判定する。ここで、一般にログを用いたエラー解析では障害が発生した時刻から時間を遡って、一つ一つのログの内容を検討する。しかしながら、全てのプログラムがメモリ使用量増大の要因となりうるので、メモリ使用量の増大を検出した直前のログのみでは、要因を誤ってしまう可能性がある。そのため、検出した時刻からある程度の時間まで遡った時刻までのログを解析するのであれば、解析するログのデータが多くなり、効率が悪い。
【００２７】
そこで、本実施の形態においては、全テストが終了後に、同一プロセスで複数回の同一現象が発生していないか、すなわち、メモリ使用量が増加、かつ同じＩＤのログが有るか否かを判定する。図６はログデータの一例を示す説明図である。この例では、時刻１５：１２及び１６：１５にメモリ使用量の増加を検出したものとする。図６に示すように、プロセス名「filebprovider」、ログＩＤ「2498-7766-0011」のログが、それぞれの時刻で記録されていることが分かる。従って、プロセス「filebprovider」がメモリ使用量増大の要因であると判定する。
【００２８】
次に、検出装置１におけるメモリリーク検出処理について説明する。図７は検出処理の手順を示すフローチャートである。検出装置１のＣＰＵ１０はループカウンタｉに１を設定する（ステップＳ１）。次に、ＣＰＵ１０はプログラムＰ２−１を実行する（ステップＳ２）。プログラムＰ２−１は、対象装置２におけるメモリ使用量を計測するプログラムである。ＣＰＵ１０はｉ番目のテスト対象プログラム（以下、「テストプログラムｉ」と記す。）を対象装置２に実行させる（ステップＳ３）。ＣＰＵ１０はプログラムＰ２−２を実行する。プログラムＰ２−２は、主として障害タイプ１−ａを検出するプログラムである。ＣＰＵ１０は対象装置２でメモリ使用量が増加したか否かを判定する（ステップＳ５）。具体的にはプログラムＰ２−２が戻り値として、「再テスト要」を設定したか否かを判定する。「再テスト要」とはテストプログラムを再度、対象装置２において、動作させる必要が有ることを示す。Ｐ２−２が戻り値として「再テスト要」を返しており、メモリ使用量が増加した場合（ステップＳ５でＹＥＳ）、ＣＰＵ１０はプログラムＰ２−１を再度実行する（スフップＳ６）。ＣＰＵ１０は、テストプログラムｉを対象装置２に実行させる（ステップＳ７）。ＣＰＵ１０はプログラムＰ２−２を実行する（ステップＳ８）。ＣＰＵ１０は対象装置２で上限確認が必要か否かを判定する（ステップＳ９）。上限確認が必要である場合（ステップＳ９でＹＥＳ）、ＣＰＵ１０は上限確認処理を行う（ステップＳ１０）。ＣＰＵ１０は処理をステップＳ１１に移す。
【００２９】
対象装置２でメモリ使用量が増加していない場合（ステップＳ５でＮＯ）又は上限確認が不要の場合（ステップＳ９でＮＯ）、ＣＰＵ１０は処理をステップＳ１１に移す。ＣＰＵ１０はループカウンタｉを１増加する（ステップＳ１１）。ＣＰＵ１０は、ループカウンタｉが、ＳＵより大きいか否か判定する（ステップＳ１２）。ここで、ＳＵはテストプログラムの数を示す値である。ループカウンタｉがＳＵ以下の場合（ステップＳ１２でＮＯ）、ＣＰＵ１０は処理をステップＳ２に戻す。
【００３０】
ループカウンタｉがＳＵより大きい場合（ステップＳ１２でＹＥＳ）、ＣＰＵ１０はプログラムＰ２−３、Ｐ２−４、Ｐ２−５を順に実行し（ステップＳ１３、Ｓ１４、Ｓ１５）、処理を終了する。プログラムＰ２−３、Ｐ２−４、Ｐ２−５共に、メモリリークを検出するプログラムである。
【００３１】
次に、これまでに参照した各プログラムについて、詳細を説明する。図８は、プログラムＰ２−１が行う処理を示すフローチャ−トである。ＣＰＵ１０は、対象装置２のメモリ使用量を取得する（ステップＳ２１）。ここで、メモリ使用量は、対象装置２で動作する全てのプロセスに対して、プロセス単位で取得するものとする。ＣＰＵ１０はループカウンタｉを１に設定する（ステップＳ２２）。ＣＰＵ１０は配列ＤＡＴＡ−Ｓ（ＰＩＤ）に、対象装置２で動作するｉ番目のプロセスが使用しているメモリ使用量を格納する（ステップＳ２３）。ここで、ＰＩＤは対象装置２で動作するｉ番目のプロセスのプロセスＩＤである。ＣＰＵ１０はループカウンタｉを１増加させる（ステップＳ２４）。ＣＰＵ１０はループカウンタｉが対象装置２で動作するプロセス数より大きいか否か判定する（ステップＳ２５）。ループカウンタｉがプロセス数以下である場合（ステップＳ２５でＮＯ）、ＣＰＵ１０は処理をステップＳ２３に戻す。ループカウンタｉがプロセス数より大きい場合（ステップＳ２５でＹＥＳ）、ＣＰＵ１０は処理を終了し、呼び出し元のプログラムに処理を戻す。
【００３２】
図９、図１０は、プログラムＰ２−２が行う処理を示すフローチャートである。プログラムＰ２−２が実行される際には、引数として、「初回テスト」か「再テスト」であるのか、また、実行されたテスト項目が渡される。ＣＰＵ１０は、対象装置２のメモリ使用量を取得する（ステップＳ３１）。ここで、メモリ使用量は、対象装置２で動作する全てのプロセスに対して、プロセス単位で取得するものとする。ＣＰＵ１０はループカウンタｉを１に設定する（ステップＳ３２）。ＣＰＵ１０は変数ＰＩＤに、対象装置２で動作するｉ番目のプロセスのプロセスＩＤを設定する（ステップＳ３３）。ＣＰＵ１０は配列ＤＡＴＥ−Ｅ（ＰＩＤ）に、対象装置２で動作するｉ番目のプロセスが使用しているメモリ使用量を格納する（ステップＳ３４）。ＣＰＵ１０はＰＩＤを配列ＰＬＩＳＴ−Ｅ（ｉ）に格納する（ステップＳ３５）。ＣＰＵ１０はループカウンタｉを１増加させる（ステップＳ３６）。ＣＰＵ１０はループカウンタｉが対象装置２で動作するプロセス数より大きいか否か判定する（ステップＳ３７）。ループカウンタｉがプロセス数以下である場合（ステップＳ３７でＮＯ）、ＣＰＵ１０は処理をＳ３３に戻す。ループカウンタｉがプロセス数より大きい場合（ステップＳ３７でＹＥＳ）、ＣＰＵ１０は再びループカウンタｉを１に設定する（ステップＳ３８）。
【００３３】
ＣＰＵ１０は、変数ＰＩＤにＰＬＩＳＴ−Ｅ（ｉ）を設定する（ステップＳ３９）。ＣＰＵ１０は、ＤＡＴＡ−Ｓ（ＰＩＤ）及びＤＡＴＡ−Ｅ（ＰＩＤ）が両方存在するか否かを判定する（ステップＳ４０）。これは、テストプログラム実行前後の両時点で、対象装置２に存在するプロセスのみを、評価対象とするからである。ＣＰＵ１０は、ＤＡＴＡ−Ｅ（ＰＩＤ）とＤＡＴＡ−Ｓ（ＰＩＤ）との差分をＤＩＦ（ｉ，ＰＩＤ）に格納する（ステップＳ４１）。ＣＰＵ１０はループカウンタｉを１増加させる（ステップＳ４２）。ＣＰＵ１０はループカウンタｉが対象装置２で動作するプロセス数より大きいか否か判定する（ステップＳ４３）。ループカウンタｉがプロセス数以下である場合（ステップＳ４３でＮＯ）、ＣＰＵ１０は処理をステップＳ４０に戻す。ループカウンタｉがプロセス数より大きい場合（ステップＳ４３でＹＥＳ）、図１０に移り、ＣＰＵ１０は再びループカウンタｉを１に設定する（ステップＳ４４）。
【００３４】
ＣＰＵ１０は変数ＰＩＤにＰＬＩＳＴ−Ｅ（ｉ）を設定する（ステップＳ４５）。ＣＰＵ１０は、ＤＩＦ（ｉ，ＰＩＤ）の値が０より大きいか否かを判定する（ステップＳ４６）。ＤＩＦ（ｉ，ＰＩＤ）の値が０より大きい場合（ステップＳ４６でＹＥＳ）、ＣＰＵ１０は引数が再テストであるか否かを判定する（ステップＳ４７）。引数が再テストである場合（ステップＳ４７でＹＥＳ）、ＣＰＵ１０は「上限確認要」であることをＲＡＭ１１又は大容量記憶装置１３に記憶するとともに、プロセス名を配列PROC_LIST()に記憶し（ステップＳ４８）、処理をステップＳ５０に移す。引数が再テストではない、すなわち、初回テストの場合（ステップＳ４７でＮＯ）、ＣＰＵ１０は「再テスト要」であることをＲＡＭ１１又は大容量記憶装置１３に記憶し（ステップＳ４９）、処理を呼び出し元に戻す。
【００３５】
ＤＩＦ（ｉ，ＰＩＤ）の値が０以下の場合（ステップＳ４６でＮＯ）、ＣＰＵ１０はループカウンタｉを１増加させる。（ステップＳ５０）。ＣＰＵ１０はループカウンタｉがプロセス数より大きいか判定する（ステップＳ５１）。ループカウンタｉがプロセス数以下の場合（ステップＳ５１でＮＯ）、ＣＰＵ１０は処理をステップＳ４５に戻す。ループカウンタｉがプロセス数よりも大きい場合（ステップＳ５１でＹＥＳ）、ＣＰＵ１０は引数が再テストであるか否かを判定する（ステップＳ５２）。引数が再テストではなく、初回テストである場合（ステップＳ５２でＮＯ）、ＣＰＵ１０は戻り値「判定」に正常をセットし（ステップＳ５８）、処理を呼び出し元に戻す。引数が再テストである場合（ステップＳ５２でＹＥＳ）、ＣＰＵ１０はログ確認を行う（ステップＳ５３）。ログ確認は、ログ管理プログラム（ロギングプログラム）に、ＰＩＤ、ログが記録された時間の範囲を指定して、ログを検索させ、エラーログがないかを調べる。ＣＰＵ１０はログ管理プログラムの処理結果を調べ、エラーログが有った否かを判定する（ステップＳ５４）。エラーログが有った場合（ステップＳ５４でＹＥＳ）、ＣＰＵ１０は、ログＩＤ、プロセス名（またはプロセスＩＤ）、及びテスト項目名を紐付けて、増加時ログありデータとして、ＲＡＭ１１又は大容量記憶装置１３に記憶し（ステップＳ５５）、処理を呼び出し元に戻す。
【００３６】
エラーログがなかった場合（ステップＳ５４でＮＯ）、ＣＰＵ１０は戻り値「判定」に「障害でない」を設定する（ステップＳ５６）。ＣＰＵ１０は、テスト項目とプロセス名（またはプロセスＩＤ）とを紐付けて、再発しないが増加ありデータとして、ＲＡＭ１１又は大容量記憶装置１３に記憶し（ステップＳ５７）、処理を呼び出し元に戻す。
【００３７】
図１１は上限確認処理の手順を示すフローチャートである。上限確認処理では、引数としてメモリリークの疑いがあるプロセス名が記憶された配列PROC_LIST()が渡される。ここで、配列PROC_LIST()の内容は、図１０のステップＳ４８で記憶したものである。また、各プロセスに関する前々回（図７のステップＳ３）と前回テスト時（図７のステップＳ７）のメモリ使用量が記憶された配列DATA(1,i)、DATA(2,i)も渡される。まず、ＣＰＵ１０はループカウンタｉを３に設定する。ここで、ループカウンタｉを３と設定するのは、図７で示したように、テストプログラム２回動作させて、いずれもメモリ使用量の増加を示した場合に、上限確認処理が呼ばれるからである。すなわち、上限確認処理にて、再度、テストプログラムを動作させるのが、通算３回目となるからである。ＣＰＵ１０はテストプログラムの再実行を指示する（ステップＳ６２）。ＣＰＵ１０はテストプログラムの実行が正常に完了したか否かを判定する（ステップＳ６３）。テストプログラムが正常に完了しなかった場合（ステップＳ６３でＮＯ）、ＣＰＵ１０は戻り値「判定」に「障害」をセットし、戻り値「タイプ」に「１−ａ」を設定し（ステップＳ６４）、呼び出し元に処理を戻す。ここで、テストプログラムが正常に完了しないのは、メモリリークが繰り返されたために、対象装置２がハングアップすることが想定される。
【００３８】
テストプログラムの実行が正常に完了した場合（ステップＳ６３でＹＥＳ）、ＣＰＵ１０はループカウンタｊを１に設定する（ステップＳ６５）。ＣＰＵ１０は対象装置２で動作しているｊ番目のプロセスのメモリ使用量を取得する（ステップＳ６６）。ＣＰＵ１０は、DATA(i, j)とDATA(j-1,j)との差分が、０より大きいか判定する（ステップＳ６７）。DATA(i, j)とDATA(j-1,j)との差分が０より大きい場合（ステップＳ６７でＹＥＳ）、ＣＰＵ１０はループカウンタｊを１増加させる（ステップＳ６８）。ＣＰＵ１０はループカウンタｊがプロセス数をより大きいか判定する（ステップＳ６９）。プロセス数以下であれば（ステップＳ６９でＮＯ）、ＣＰＵ１０は処理をステップＳ６６に戻す。
【００３９】
DATA(i, j)とDATA(j-1,j)との差分が０以下の場合（ステップＳ６７でＮＯ）、メモリ使用量の増加が止まったので、仕様とみなす。すなわち、ＣＰＵ１０は戻り値「判定」に「仕様」をセットする。戻り値「タイプ」に「１−ｂ」をセットする（ステップＳ７３）。ＣＰＵ１０はプロセス名とテスト項目名を紐付けて上限プロセスリスト（タイプ１）に記憶する（ステップＳ７４）。ＣＰＵ１０は処理を呼び出し元に戻す。上限プロセスリスト（タイプ１）は、ＲＡＭ１１、大容量記憶装置１３等に記憶する。
【００４０】
ＣＰＵ１０はループカウンタｊがプロセス数より大きいのであれば（ステップＳ６９でＹＥＳ）、ＣＰＵ１０はループカウンタｉの値を１増加させる（ステップＳ７０）。ＣＰＵ１０はループカウンタｉの値が繰り返し回数Ｎより大きいか否か判定する（ステップＳ７１）。ここで、繰り返し回数Ｎは、３以上の値を予め設定しておくものとする。ループカウンタｉの値が繰り返し回数Ｎ以下の場合（ステップＳ７１でＮＯ）、ＣＰＵ１０は処理をステップＳ６２に戻す。ループカウンタｉの値が繰り返し回数Ｎより大きい場合（ステップＳ７１でＹＥＳ）、ＣＰＵ１０は戻り値「判定」に「障害」を設定し、戻り値「タイプ」に１−ａを設定し（ステップＳ７２）、処理を呼び出し元に戻す。
【００４１】
以上のように、上限確認処理により、メモリ使用量の増加が頭打ちになるであれば仕様（タイプ１−ｂ）であると判定し、メモリ使用量が増加を続ければ、メモリリーク（タイプ１−ａ）と判定する。なお、ステップＳ６６からステップＳ６９のプロセスごとにメモリ使用量が増加しているか否かの判定は、配列PROC_LIST()に記憶されているメモリリークの疑いがあるプロセスのみに行うこととしても良いし、全てのプロセスとしても良い。
【００４２】
次に、プログラムＰ２−３の処理について、説明する。プログラムＰ２−３では、プログラムＰ２−２で「増加時ログあり」と判定されたプロセス及び「再発しないが増加」と判定されたプロセスについて、さらに検証を行う。図１２及び図１３はプログラムＰ２−３が行う処理を示すフローチャートである。
【００４３】
ＣＰＵ１０は、ＲＡＭ１１又は大容量記憶装置１３に記憶してある増加時ログありデータ（リスト）を取得する（ステップＳ８１）。増加時ログありデータ（リスト）は、ログＩＤ、プロセス名及びテスト項目を紐付けたリストである。以降このリストをＬＩＳＴ１という。ＣＰＵ１０は取得したＬＩＳＴ１からプロセス名を配列ＰＲＯＣ（）にセットする（ステップＳ８２）。ＣＰＵ１０はログ管理プログラムに問い合せを行い、配列ＰＲＯＣ（）に設定されているプロセスのログデータを取得する（ステップＳ８３）。ログデータの検索範囲は、最初のテスト開始時刻から最後のテストの終了時刻までの範囲である。ここで、取得したログデータのリストを以降ＬＩＳＴ２という。
【００４４】
ＣＰＵ１０はループカウンタｉを１に設定する（ステップＳ８４）。次に、ＣＰＵ１０は、ＬＩＳＴ１でｉ番目のプロセスと紐付けられたログＩＤの件数を、ログＩＤ毎にカウントする（ステップＳ８５）。ＣＰＵ１０はカウントが２件以上であるログＩＤがあるか否かを判定する（ステップＳ８６）。ログＩＤが１件の場合（ステップＳ８６でＮＯ）、ＬＩＳＴ２より、ｉ番目のプロセスに対応するログを配列log(i, j)にセットする（ステップＳ８７）。ＣＰＵ１０は配列log(i, j)にセットしたログデータに対して、ステップＳ８６で１件とカウントされたログＩＤを検索する（ステップＳ８８）。ＣＰＵ１０はログＩＤが見つかった否かを判定する（ステップＳ８９）。ログＩＤが見つかった場合（ステップＳ８９でＹＥＳ）、ＣＰＵ１０はテスト項目と「障害でない」旨の情報とを対応付けて記憶する（ステップＳ９０）。ログＩＤが見つからなかった場合（ステップＳ８９でＮＯ）、ＣＰＵ１０はテスト項目と「判定不可（情報不足）」の情報とを対応付けて記憶する（ステップＳ９１）。
【００４５】
カウントが２件以上の場合（ステップＳ８６でＹＥＳ）、ＣＰＵ１０はテスト項目に「障害（タイプ２）」をセットする（ステップＳ９２）。ＣＰＵ１０はループカウンタｉを１増加させる（ステップＳ９３）。ＣＰＵ１０はループカウンタｉがプロセス数Ｓより大きいかを判定する（ステップＳ９４）。ループカウンタｉがプロセス数以下の場合（ステップＳ９４でＮＯ）、ＣＰＵ１０は処理をステップＳ８５に戻す。ループカウンタｉがプロセス数以下の場合（ステップＳ９４でＹＥＳ）、ＣＰＵ１０は処理をステップＳ９５に進める。
【００４６】
次に、ＣＰＵ１０は、再発しないが増加ありデータを取得する（ステップＳ９５）。ＣＰＵ１０は取得した件数が０より大きいか判定する（ステップＳ９６）。件数が０件である場合（ステップＳ９６でＮＯ）、ＣＰＵ１０は処理を終了し、呼び出し元に処理を戻す。件数が０より大きい場合（ステップＳ９６でＹＥＳ）、ＣＰＵ１０はプロセス名でソートを行う（ステップＳ９７）。ＣＰＵ１０はプロセス名の数をカウントし、その値をＮＵＭにセットする（ステップＳ９８）。ＣＰＵ１０はループカウンタｉを１にセットする（ステップＳ９９）。ＣＰＵ１０はｉ番目のプロセスに関するデータが複数あるか否か判定する（ステップＳ１００）。データが複数件ではない場合（ステップＳ１００でＮＯ）、ＣＰＵ１０は処理を終了し、呼び出し元に処理を戻す。
【００４７】
データが複数件の場合（ステップＳ１００でＹＥＳ）、ＣＰＵ１０はＲＡＭ１１にテスト項目とプロセス名を追加して記憶する（ステップＳ１０１）。ＣＰＵ１０はループカウンタｉを１増加させる（ステップＳ１０２）。ＣＰＵ１０はループカウンタｉがプロセス名の数ＮＵＭより大きいか判定する（ステップＳ１０３）。ループカウンタｉがＮＵＭより大きくない場合（ステップＳ１０３でＮＯ）、ＣＰＵ１０は処理をステップＳ１００に戻す。ループカウンタｉがＮＵＭより大きい場合（ステップＳ１０３でＹＥＳ）、ＣＰＵ１０はテスト項目、プロセス名を上限プロセスリスト（タイプ３）に記憶する（ステップＳ１０４）。ＣＰＵ１０は復帰値（戻り値）に「加速テスト要」をセットし（ステップＳ１０５）、処理を呼び出し元に戻す。なお、上限プロセスリスト（タイプ３）は、ＲＡＭ１１、大容量記憶装置１３等に記憶する。
【００４８】
次に、プログラムＰ２−４について説明する。プログラムＰ２−４は上述した最大値テストを実行させるプログラムである。図１４及び図１５はプログラムＰ２−４が行う処理を示すフローチャートである。ＣＰＵ１０はテスト数を変数ＫＡＺＵに設定する（ステップＳ１１１）。テスト数は、上述の上限プロセスリスト（タイプ３）に記憶されている。ＣＰＵ１０はテスト毎に変化させるパラメータの種類を配列T_KIND()にセットする（ステップＳ１１２）。ＣＰＵ１０はループカウンタｉを１に設定する（ステップＳ１１３）。続いて、ＣＰＵ１０はループカウンタＫＩＮＤにも１を設定する（ステップＳ１１４）。ＣＰＵ１０は最大値テストを実行させる（ステップＳ１１５）。最大値テストにおける個々のテストでは、開始時と終了時にメモリ使用量が計測され、それぞれ、配列ＤＡＴＡ＿Ｓ（）、ＤＡＴＡ＿Ｅ（）に格納されているものとする。例えば、ｉ番目のテストにおいて、ｊ番目のパラメータが最大値を指定して実行した場合において、ｌ（エル）番目のプロセスのテスト開始時及び終了時の使用メモリ量は、それぞれ、ＤＡＴＡ＿Ｓ（i, j, l）、ＤＡＴＡ＿Ｅ（ｉ，ｊ，ｌ）に格納されている。
【００４９】
ＣＰＵ１０は最大値テストにおけるメモリの使用量差分を求め、所定の配列にセットする（ステップＳ１１６）。図１６は使用量差分セットの手順を示すフローチャートである。なお、図面においては、ｌ（エル）をリットル記号で表記している。ＣＰＵ１０はループカウンタｉ、ループカウンタｊ、ループカウンタｌの値をそれぞれ１に設定する（ステップＳ１３１、Ｓ１３２、Ｓ１３３）。ＣＰＵ１０はテスト終了時のメモリ使用量ＤＡＴＡ＿Ｅ（i, j, l）及びテスト開始時のメモリ使用量ＤＡＴＡ＿Ｓ（i, j, l）の差分を求め、ＤＩＦＦ（i, j, l）に格納する（ステップＳ１３４）。ＣＰＵ１０はループカウンタｌを１増加させる（ステップＳ１３５）。ＣＰＵ１０はループカウンタｌがプロセス数より大きいか判定する（ステップＳ１３６）。ループカウンタｌがプロセス数以下である場合（ステップＳ１３６でＮＯ）、ＣＰＵ１０は処理をステップＳ１３４に戻す。ループカウンタｌがプロセス数より大きい場合（ステップＳ１３６でＹＥＳ）、ＣＰＵ１０は、ループカウンタｊを１増加させる（ステップＳ１３７）。ＣＰＵ１０はループカウンタｊがＴ＿ＫＩＮＤ（ｉ）より大きいか判定する（ステップＳ１３８）。Ｔ＿ＫＩＮＤ（ｉ）は、前述したように変化させるパラメータ種類数を表す。ループカウンタｊがＴ＿ＫＩＮＤ（ｉ）より大きくない場合（ステップＳ１３８でＮＯ）、ＣＰＵ１０は処理をステップＳ１３３に戻す。ループカウンタｊがＴ＿ＫＩＮＤ（ｉ）より大きい場合（ステップＳ１３８でＹＥＳ）、ＣＰＵ１０はループカウンタｉを１増加させる（ステップＳ１３９）。ＣＰＵ１０はループカウンタｉがテスト数ＫＡＺＵより大きいか否かを判定する（ステップＳ１４０）。ループカウンタｉがテスト数ＫＡＺＵより大きくない場合（ステップＳ１４０でＮＯ）、ＣＰＵ１０は処理をステップＳ１３２に戻す。ループカウンタｉがテスト数ＫＡＺＵより大きい場合、ＣＰＵ１０は処理を終了し、呼び出し元に処理を戻す。
【００５０】
図１４に戻り、ＣＰＵ１０は最大値テストが正常に完了したか否かを判定する（ステップＳ１１７）。最大値テストが正常に完了しなかった場合（ステップＳ１１７でＮＯ）、ＣＰＵ１０は戻り値「判定」に「障害」をセットし、戻り値「タイプ」に「３−ａ」をセットして（ステップＳ１３０）、処理を終了する。
【００５１】
最大値テストが正常に完了した場合（ステップＳ１１７でＹＥＳ）、ＣＰＵ１１０はループカウンタｉ、ｊ、ｌを１に設定する（ステップＳ１１８、Ｓ１１９、Ｓ１２０）。ＣＰＵ１０はメモリ使用量の上限値が既知であるか判定する（ステップＳ１２１）。マニュアル、仕様書等でメモリ獲得量の上限値が明確になっている場合、予め大容量記憶装置１３等に記憶しておく。メモリ使用量の上限値が既知である場合（ステップＳ１２１でＹＥＳ）、ＣＰＵ１０はＤＩＦＦ（ｉ，ｊ，ｌ）が、既知の上限値より大きいか否かを判定する（ステップＳ１２２）。既知の上限値より大きい場合（ステップＳ１２２でＹＥＳ）、ＣＰＵ１０は戻り値「判定」に「障害」をセットし、戻り「タイプ」に「３−ａ」をセットし（ステップＳ１３０）、処理を終了し、呼び出し元に処理を戻す。
【００５２】
ＤＩＦＦ（ｉ，ｊ，ｌ）が既知の上限値より小さい場合（ステップＳ１２２でＮＯ）、ＣＰＵ１０はループカウンタｌを１増加させる（ステップＳ１２３）。ＣＰＵ１０はループカウンタｌがプロセス数より大きいか否か判定する（ステップＳ１２４）。ループカウンタｌがプロセス数以下の場合（ステップＳ１２４でＮＯ）、ＣＰＵ１０は処理をステップＳ１２１へ戻す。ループカウンタｌがプロセス数より大きい場合（ステップＳ１２４でＹＥＳ）、ＣＰＵ１０はループカウンタｊを１増加させる（ステップＳ１２５）。ＣＰＵ１０はループカウンタｊがＴ＿ＫＩＮＤ（ｉ）より大きいか否かを判定する（ステップＳ１２６）。ループカウンタｊがＴ＿ＫＩＮＤ（ｉ）以下の場合（ステップＳ１２６でＮＯ）、ＣＰＵ１０は処理をステップＳ１２０へ戻す。ループカウンタｊがＴ＿ＫＩＮＤ（ｉ）より大きい場合（ステップＳ１２６でＹＥＳ）、ＣＰＵ１０はテスト項目とプロセス名を対応付けてＲＡＭ１１や大容量記憶装置１３に記憶する（ステップＳ１２７）。ＣＰＵ１０はループカウンタｉを１増加させる（ステップＳ１２８）。ＣＰＵ１０はループカウンタｉがＫＡＺＵより大きいか否かを判定する（ステップＳ１２９）。ループカウンタｉがＫＡＺＵ以下の場合（ステップＳ１２９でＮＯ）、ＣＰＵ１０は処理をステップＳ１１９に戻す。ループカウンタｉがＫＡＺＵ以下の場合（ステップＳ１２９でＹＥＳ）、ＣＰＵ１０は処理を終了し、呼び出し元に処理を戻す。
【００５３】
メモリ確保量の上限値が既知ではない場合（ステップＳ１２１でＮＯ）、ＣＰＵ１０はステップＳ１２７以降を実行する。具体的な内容は上述の通りである。
【００５４】
次に、プログラムＰ２−５が行う処理内容について説明する。プログラムＰ２−５は上述した加速テストを実行させるプログラムである。プログラムＰ２−５は、プログラムＰ２−４までの処理を経てもメモリリークであるか否か判定できなかったものについて、検証を行う。すなわち、図１５のステップＳ１２７で記憶したプロセスについて行う。検証すべきプロセスについては、例えば、プロセス名が格納された配列ＰＲＯＣ＿ＬＩＳＴ（）が引数としてプログラムＰ２−５に渡される。
【００５５】
図１７及び図１８はプログラムＰ２−５が行う処理を示すフローチャートである。
ＣＰＵ１０は対象となるテスト数を変数ＫＡＺＵに設定する（ステップＳ１５１）。上述したステップＳ１２７で記憶したテスト項目の数に対応する。ＣＰＵ１０はテスト毎に変化させるパラメータの種類数を配列Ｔ＿ＫＩＮＤ（ｉ）に記憶する（ステップＳ１５２）。ＣＰＵ１０はパラメータ毎のテスト数を配列Ｔ＿ＩＴＥＭ（ｌ，ｉ）に格納する（ステップＳ１５３）。ＣＰＵ１０はループカウンタｉを１にセットする（ステップＳ１５４）。ＣＰＵ１０は加速テストを実行させる（ステップＳ１５５）。加速テストで行う各テストの前後では、プロセス毎にメモリ使用量が取得される。ｉ番目のテストにおいて、ｊ番目のパラメータにおけるｋ番目の指定値で実施した際のｌ番目のプロセスの使用メモリ量は、開始時の値がＤＡＴＡ＿Ｓ（ｉ，ｊ，ｋ，ｌ）に、終了時の値がＤＡＴＡ＿Ｅ（ｉ，ｊ，ｋ，ｌ）に格納される。
【００５６】
ＣＰＵ１０はメモリ使用量の差分を求める処理（使用量差分セット２）を行う（ステップＳ１５６）。図１９は使用量差分セット２で行う処理についてのフローチャートである。ＣＰＵ１０はループカウンタｉ、ｊ、ｋ、ｌに１を設定する（ステップＳ１８１、Ｓ１８２、Ｓ１８３、Ｓ１８４）。ＣＰＵ１０はメモリ使用量の差分、すなわち、ＤＡＴＡ＿Ｅ（ｉ，ｊ，ｋ，ｌ）とＤＡＴＡ＿Ｓ（ｉ，ｊ，ｋ，ｌ）との差分値をＤＩＦＦ（ｉ，ｊ，ｋ，ｌ）に格納する（ステップＳ１８５）。ＣＰＵ１０はループカウンタｌを１増加させる（ステップＳ１８６）。ＣＰＵ１０はｌがプロセス数より大きいか否かを判定する（ステップＳ１８７）。ループカウンタｌがプロセス数以下の場合（ステップＳ１８７でＮＯ）、ＣＰＵ１０は処理をステップＳ１８５に戻す。ループカウンタｌがプロセス数より大きい場合（ステップＳ１８７でＹＥＳ）、ＣＰＵ１０はループカウンタｋを１増加させる（ステップＳ１８８）。ＣＰＵ１０はループカウンタｋがＴ＿ＩＴＥＭ（ｌ，ｉ）より大きいか否かを判定する（ステップＳ１８９）。ループカウンタｋがＴ＿ＩＴＥＭ（ｌ，ｉ）以下である場合（ステップＳ１８９でＮＯ）、ＣＰＵ１０は処理をステップＳ１８４に戻す。ループカウンタｋがＴ＿ＩＴＥＭ（ｌ，ｉ）より大きい場合（ステップＳ１８９でＹＥＳ）、ＣＰＵ１０はループカウンタｊを１増加させる（ステップＳ１９０）。ＣＰＵ１０はループカウンタｊがＴ＿ＫＩＮＤ（ｉ）より大きいか否かを判定する（ステップＳ１９１）。ループカウンタｊがＴ＿ＫＩＮＤ（ｉ）以下の場合（ステップＳ１９１でＮＯ）、ＣＰＵ１０は処理をステップＳ１８３に戻す。ループカウンタｊがＴ＿ＫＩＮＤ（ｉ）より大きい場合（ステップＳ１９１でＹＥＳ）、ＣＰＵ１０はループカウンタｉを１増加させる（ステップＳ１９２）。ＣＰＵ１０はループカウンタｉがＫＡＺＵより大きいか否かを判定する（ステップＳ１９３）。ループカウンタｉがＫＡＺＵ以下の場合（ステップＳ１９３でＮＯ）、ＣＰＵ１０は処理をステップＳ１８２に戻す。ループカウンタｉがＫＡＺＵより大きい場合（ステップＳ１９３でＹＥＳ）、ＣＰＵ１０は処理を終了し、呼び出し元に処理を戻す。
【００５７】
図１７に戻り、ＣＰＵ１０は加速テストが正常に完了したか否かを判定する（ステップＳ１５７）。正常に完了しなかった場合は、加速テスト実行によりメモリリークが繰り返し発生し、対象装置２のメモリが枯渇したのが、その原因と考えられるからである。したがって、加速テストが正常に完了しなかった場合（ステップＳ１５７でＮＯ）、ＣＰＵ１０は戻り値「判定」に「障害」を、戻り値「タイプ」に「３−ａ」をセットする（ステップＳ１７４）。ＣＰＵ１０は処理を終了し、呼び出し元に処理を戻す。
【００５８】
加速テストが正常に完了した場合（ステップＳ１５７でＹＥＳ）、ＣＰＵ１０はループカウンタｉ、ｊ、ｋに１を設定する（ステップＳ１５８、Ｓ１５９、Ｓ１６０）。ＣＰＵ１０はメモリ使用量の上限値が既知であるか否かを判定する（ステップＳ１６１）。これは、上述した図１４のステップＳ１２１と同様の処理であるので、詳細は省略する。上限値が既知の場合（ステップＳ１６１でＹＥＳ）、ＣＰＵ１０はループカウンタｌに１を設定する（ステップＳ１７０）。ＣＰＵ１０はメモリ使用量ＤＡＴＡ＿Ｅ（i, j, k, l）とＤＡＴＡ＿Ｓ（ｉ，ｋ，１，ｌ）との差分が上限値以上であるか否かを判定する（ステップＳ１７１）。差分が上限値以上である場合（ステップＳ１７１でＹＥＳ）、ＣＰＵ１０は戻り値「判定」に「障害」を、戻り値「タイプ」に「３−ａ」をセットする（ステップＳ１７４）。
【００５９】
差分が上限値に達していない場合（ステップＳ１７１でＮＯ）、ＣＰＵ１０はループカウンタｌを１増加させる（ステップＳ１７２）。ＣＰＵ１０はループカウンタｌがプロセス数より大きいか否かを判定する（ステップＳ１７３）。ループカウンタｌがプロセス数以下の場合（ステップＳ１７３でＮＯ）、ＣＰＵ１０は処理をステップＳ１７１に戻す。ループカウンタｌがプロセス数より大きい場合（ステップＳ１７３でＹＥＳ）、ＣＰＵ１０は処理をステップＳ１６２に移す。上述のステップＳ１６１で上限値が既知でない場合（ステップＳ１６１でＮＯ）も、ＣＰＵ１０は処理をステップＳ１６２に移す。
【００６０】
図１８に移り、ＣＰＵ１０は差分値ＤＩＦＦ（ｉ，ｊ，ｋ，ｌ）の値の列において、後半の１０％で正の値があるか否かを判定する（ステップＳ１６２）。後半の１０％でも増加するものがある場合は、上限なく使用メモリを拡張したことを意味している。後半の１０％に正の値がある場合（ステップＳ１６２でＹＥＳ）、ＣＰＵ１０は戻り値「判定」に「判定不可」を設定する（ステップＳ１７５）。ＣＰＵ１０は処理を終了し、呼び出し元に処理を戻す。
【００６１】
後半の１０％に正の値がない場合（ステップＳ１６２でＮＯ）、ＣＰＵ１０はループカウンタｋを１増加させる（ステップＳ１６３）。ＣＰＵ１０はループカウンタｋがＴ＿ＫＩＮＤ（ｊ，ｉ）より大きいか否かを判定する（ステップＳ１６４）。ループカウンタｋがＴ＿ＫＩＮＤ（ｊ，ｉ）以下の場合（ステップＳ１６４でＮＯ）、ＣＰＵ１０は処理をステップＳ１６１へ戻す。ループカウンタｋがＴ＿ＫＩＮＤ（ｊ，ｉ）より大きい場合（ステップＳ１６４でＹＥＳ）、ＣＰＵ１０はループカウンタｊを１増加させる（ステップＳ１６５）。ＣＰＵ１０はループカウンタｊがＴ＿ＫＩＮＤ（ｉ）より大きい否かを判定する（ステップＳ１６６）。ループカウンタｊがＴ＿ＫＩＮＤ（ｉ）以下の場合（ステップＳ１６６でＮＯ）、ＣＰＵ１０は処理をステップＳ１６０に戻す。ループカウンタｊがＴ＿ＫＩＮＤ（ｉ）より大きい場合（ステップＳ１６６でＹＥＳ）、ＣＰＵ１０はループカウンタｉを１増加させる（ステップＳ１６７）。ＣＰＵ１０はループカウンタｉがＫＡＺＵより大きいか否か判定する（ステップＳ１６８）。ループカウンタｉがＫＡＺＵ以下の場合（ステップＳ１６８でＮＯ）、ＣＰＵ１０は処理をＳ１５９に戻す。ループカウンタｉがＫＡＺＵより大きい場合（ステップＳ１６８でＹＥＳ）、ＣＰＵ１０は戻り値「判定」に「仕様」を、戻り値「タイプ」に「３−ｂ」をセットする（ステップＳ１６９）。ＣＰＵ１０は処理を終了し、呼び出し元に処理を戻す。
なお、後半１０％とは、ｉ番目のテストにおいて、ｊ番目のパラメータの値を変化させていった場合の値の列の後半１０％ということである。
【００６２】
上述のメモリリーク検出処理は、テスト前後のメモリ使用量比較するものであった。テストにはそのようなものだけではなく、一定時間放置しておき、メモリの使用量を比較するというテスト項目もある。これは、定期的に実行される処理（デバイス、負荷状態等に関する監視処理、情報の配布処理等）に対するリーク障害の有無を検証するためである。
当該検証法方法について、以下に説明する。
【００６３】
図２０は一定時間放置におけるメモリリーク検出処理についてのフローチャートである。この検出処理が呼ばれる場合には、引数として初期時刻、最終時刻、測定間隔が指定される。ＣＰＵ１０は、初期時刻、測定間隔を元に、最初の測定時刻、測定の間隔をＲＡＭ１１等の作業領域に設定する（ステップＳ２０１）。ＣＰＵ１０は、初期時刻、最終時刻、測定回数から測定数を算出する（ステップＳ２０２）。ＣＰＵ１０は、算出した測定数を変数ＮＵＭに格納する（ステップＳ２０３）。ＣＰＵ１０はループカウンタｉに１を設定する（ステップＳ２０４）。ＣＰＵ１０は測定１を行う（ステップＳ２０５）。
【００６４】
図２１は測定１の処理内容を示すフローチャートである。ＣＰＵ１０はループカウンタｋに１を設定する（ステップＳ２２１）。ＣＰＵ１０は使用メモリ量の測定を行う（ステップＳ２２２）。ＣＰＵ１０はループカウンタｋを１増加させる（ステップＳ２２３）。ＣＰＵ１０はループカウンタｋが基礎測定数より大きいか否かを判定する（ステップＳ２２４）。ここで、一回のデータ取得を一回の測定としてしまうと、計測誤差があった場合、測定値にバラツキが発生する。そこで、一回の測定では複数回のデータ取得を行い、その平均値を測定値する。データ取得の回数を基礎測定数という。例えば、基礎測定回数は３回である。ループカウンタｋが基礎測定数より小さい場合（ステップＳ２２４でＮＯ）、ＣＰＵ１０は次の測定まで待機する（ステップＳ２２５）。待機後、ＣＰＵ１０はステップＳ２２２に処理を移す。ここで、待機する時間の一例は５から１０秒である。
【００６５】
ループカウンタｋが基礎測定数より大きい場合（ステップＳ２２４でＹＥＳ）、ＣＰＵ１０は、ループカウンタｊに１を設定する（ステップＳ２２６）。ＣＰＵ１０はｊ番目のプロセスについての取得結果から、異常値の除去を行う（ステップＳ２２７）。例えば、基礎測定回数が３回の場合は、３つの測定値の平均値を求め、最も平均値から離れている値を除去する。ＣＰＵ１０は残りの値の平均値を算出する（ステップＳ２２８）。ＣＰＵ１０は算出した値を、ＤＡＴＡ（ｉ，ｊ）に、対象となったプロセスのプロセス名をＰＲＯＣ（ｊ）に格納する（ステップＳ２２９）。ＣＰＵ１０はループカウンタｊを１増加させる（ステップＳ２３０）。ＣＰＵ１０はループカウンタｊがプロセス数より大きいか否か判定する（ステップＳ２３１）。ループカウンタｊがプロセス数以下の場合（ステップＳ２３１でＮＯ）、ＣＰＵ１０は処理をステップＳ２２７へ戻す。ループカウンタｊがプロセス数より大きい場合（ステップＳ２３１でＹＥＳ）、ＣＰＵ１０は処理を終了し、呼び出し元に処理を戻す。
【００６６】
図２０に戻り、ＣＰＵ１０はループカウンタｉを１増加させる（ステップＳ２０６）。ＣＰＵ１０はループカウンタｉが測定数ＮＵＭより大きいか否か判定する（ステップＳ２０７）。ループカウンタｉがＮＵＭ以下の場合（ステップＳ２０７でＮＯ）、ＣＰＵ１０は処理をステップＳ２０５に戻す。ループカウンタｉがＮＵＭより大きい場合（ステップＳ２０７でＹＥＳ）、ＣＰＵ１０は判定処理１を行う（ステップＳ２０８）。
【００６７】
図２２は判定処理１の処理内容を示すフローチャートである。ＣＰＵ１０はループカウンタｊを１に設定する（ステップＳ２４１）。ＣＰＵ１０はループカウンタｉを１に設定する（ステップＳ２４２）。ＣＰＵ１０は連続する測定結果の比較し値が増加していないか、すなわち、ＤＡＴＡ（ｉ＋１，ｊ）の値がＤＡＴＡ（ｉ，ｊ）より大きいか否か判定する（ステップＳ２４３）。ＤＡＴＡ（ｉ＋１，ｊ）の値がＤＡＴＡ（ｉ，ｊ）より大きい場合（ステップＳ２４３でＹＥＳ）、ＣＰＵ１０は障害フラグをＯＮにする（ステップＳ２４８）。ＣＰＵ１０は対象となったプロセスのプロセス名（ＰＲＯＣ（ｊ））を配列ＩＮＣ＿ＰＲＯＣ（）に追加する（ステップＳ２４９）。ＣＰＵ１０は処理をステップＳ２４６に移す。
【００６８】
連続する測定結果に増加が見られない場合（ステップＳ２４３でＮＯ）、ＣＰＵ１０はループカウンタｉを１増加させる（ステップＳ２４４）。ＣＰＵ１０はループカウンタｉがＮＵＭより大きいか否か判定を判定する（ステップＳ２４５）。ループカウンタｉがＮＵＭ以下の場合（ステップＳ２４５でＮＯ）、ＣＰＵ１０は処理をステップＳ２４３に戻す。ループカウンタｉがＮＵＭより大きい場合（ステップＳ２４５でＹＥＳ）、ＣＰＵ１０はループカウンタｊを１増加させる（ステップＳ２４６）。ＣＰＵ１０はループカウンタｊがＳＵ（プロセス数）より大きいか否か判定する（ステップＳ２４７）。ループカウンタｊがＳＵ以下の場合（ステップＳ２４７でＮＯ）、ＣＰＵ１０は処理をステップＳ２４２に戻す。ループカウンタｊがＳＵより大きい場合（ステップＳ２４７でＹＥＳ）、ＣＰＵ１０は処理を終了し、呼び出し元に処理を戻す。
【００６９】
図２０に戻り、ＣＰＵ１０は障害フラグがＯＮか否かを判定する（ステップＳ２０９）。障害フラグがＯＮの場合（ステップＳ２０９でＹＥＳ）、ＣＰＵ１０はＲＡＭ１１等の作業領域にあるＩＮＣ＿ＰＲＯＣを不揮発性の大容量記憶装置１３に格納する（ステップＳ２１０）。ＣＰＵ１０は戻り値「完了コード」に１−ａをセットする（ステップＳ２１１）。ＣＰＵ１０は処理を終了する。
【００７０】
障害フラグがＯＮでない場合（ステップＳ２０９でＮＯ）、ＣＰＵ１０は戻り値「完了コード」に障害なしをセットする（ステップＳ２１２）。
【００７１】
次に、処理結果を表示する処理について説明する。図２３は検証結果表示処理を示すフローチャートである。ＣＰＵ１０は、ＲＡＭ１１、大容量記憶装置１３等に記憶した上限プロセスリスト（タイプ１）、上限プロセスリスト（タイプ３）を読み込む（ステップＳ２５１）。ＣＰＵ１０は、読み込んだ２つのリストを元に、プロセス名、判定結果のタイプ等を表示する（ステップＳ２５２）。
なお、ここでは省略したが、図２０から図２２での処理結果についても、大容量記憶装置１３に記憶した配列ＩＮＣ＿ＰＲＯＣ（）を用いて、結果を表示することが可能である。
【００７２】
次に、データサンプルを用いて、障害の判定例を説明する。図２４はタイプ１−ａの判定例を示すための説明図である。測定結果ｄ１は初回テスト実施前、すなわち、図７のステップＳ２においてプログラムＰ２−１が動作し、取得したプロセス毎のメモリ使用量である。次に、テストプログラムが実行される（図７のステップＳ３）。その直後に、プログラムＰ２−２が実行される。ここでプログラムＰ２−２に渡される引数は「初回テスト」である。プログラムＰ２−２では、図９のステップＳ３１からＳ３７の処理により、各プロセスのメモリ使用量が再度、取得される。それを表したのが、図２４の測定結果ｄ２となる。
【００７３】
プログラムＰ２−２では、図９のステップＳ３８からＳ４６にかけて、テストプログラムの実行前後で各プロセスのメモリ使用量の増加がないか否かが検証される。図２４に示した測定結果ｄ２とｄ１との間では、プロセス名ｐｓ２、ｐｓ３のプロセス（以下、それぞれを「プロセスｐｓ２」、「プロセスｐｓ３」と記す。）のメモリ使用量が増加している。この２つのプロセスについては、図１０のステップＳ４６でＹＥＳと判定され、引数は初回テストであるから、ステップＳ４９に流れ、再テスト対象となる。
【００７４】
再テスト対象となるから、図７のステップＳ５でＹＥＳと判定され、ステップＳ６でプログラムＰ２−１が実行される。その結果が、図２４の例では測定結果ｄ３となる。次に、図７のフローチャートにおいて、ステップＳ７が実行され、テストプログラムが再度、実行される。そして、プログラムＰ２−２が実行される。この場合の引数は「再テスト」である。プログラムＰ２−２で取得されるメモリ使用量は、図２４の測定結果ｄ４である。ここで、ｄ４とｄ３とを比べると、プロセスｐｓ２はメモリ使用量が増加しているが、プロセスｐｓ３はメモリ使用量が増加してない。
【００７５】
したがって、プロセスｐｓ２については、図１０のステップＳ４６で再びＹＥＳとなり、引数は再テストであるから、ステップＳ４７でＹＥＳとなり、上限確認が必要なプロセスとなる。一方、プロセスｐｓ３については、ステップＳ４６でＮＯとなり、タイプ１からの候補からは外れることとなる。
【００７６】
プログラムＰ２−２の実行後、プロセスｐｓ３は上限確認が必要なプロセスとされているから、図７のステップＳ９はＹＥＳと判定され、上限確認処理が実行される（ステップＳ１０）。図１１に示したように、上限確認処理では繰り返し、テストプログラムが実行され、所定回数実行しても、ターゲットとなるプロセスの使用メモリ量が増加し続ける場合、タイプ１−ａのメモリリークが発生したと判断する。図２４に示した例では、測定結果ｄ６、ｄ７、ｄ８と増加を続けたことから、タイプ１−ａの障害が発生している判定する。
【００７７】
次に、タイプ１−ｂの判定例を示す。図２５は、タイプ１−ｂの判定例を示すための説明図である。上限確認処理までは、タイプ１−ａと同様であり、図２５に示した結果も同様であるので、説明を省略する。
【００７８】
図２５に示した例では、通算３０回目のテストプログラム実施後に、プロセスｐｓ２のメモリ使用量の増加が止まっている（測定結果ｄ９、ｄ１０が同じとなっている）。この場合、図１１のフローチャートにおいては、ステップＳ６７でＮＯと判断されることとなるから、判定＝仕様、タイプ１−ｂとの結果となる。
【００７９】
次に、タイプ２の判定例を示す。図２６は、タイプ２と判定される測定結果の一例を示す説明図である。図２７、図２８は、タイプ２の判定に用いられるログデータの一例を示す説明図である。再テストが実行されるまでは、上述したタイプ１と同様であるので、簡単に説明する。図２６に示す例では、初回テストでプロセスｐｓ３のメモリ使用量が増加したが、再テストではメモリ使用量の増加が見られていない。この場合、図１０に示したフローチャートで、ステップＳ４６がＹＥＳ、ステップＳ５２でＹＥＳと判定され、ログの確認がされる（ステップＳ５３）。
【００８０】
上述したようにステップＳ５３では、ログ管理プログラムに対して、プロセス名と時刻を指定して検索を指示する。この例では、プロセスｐｓ３について、実行時刻を指定して、検索を指示する。図２７に示したログＬ１ではレコードＬ１１が問題となっているプロセスｐｓ３についてのレコードである。レコードＬ１１ではログＩＤが２４９８−７７６６−００１１である。したがって、図１０のステップＳ５４でＹＥＳと判定され、ステップＳ５５で増加時ログありデータとして出力される。
【００８１】
図２８に示しているログデータは、増加時ログありデータであり、すべてのテストが終了された後のデータである。すなわち、図７でのフローチャートで言えば、ステップＳ１２でＹＥＳと判定された後の状態である。タイプ２の最終的な判定は、図７ではステップＳ１３で実行されるプログラムＰ２−３で行われる。図１２に示すフローチャートのステップＳ８１で読み込まれるのが、「増加時ログあり」リストの一例が図２８で示すものである。ここで、注目しているプロセスはプロセスｐｓ３であり、ログＩＤが上述の２４９８−７７６６−００１１である。図１２のステップＳ８５において、同じログＩＤを持つレコードのカウントがされるが、図２８に示した例では、プロセス名ｐｓ３で、ログＩＤが２４９８−７７６６−００１１を持つレコードはＬ２１、Ｌ２２の２件である。したがって本例では、図１２のステップＳ８６でＹＥＳと判定され、ステップＳ９２でタイプ２と認定されることとなる。
【００８２】
次に、タイプ３−ａの判定例を示す。初回テスト、再テストの結果については、タイプ２と同様である。異なるのは、テスト実行期間に対象プロセスのログが存在しない点が、タイプ２と異なる。ここでは、プロセスｐｓ３がメモリリークの疑われているプロセスであるとして、以降、説明を行う。
【００８３】
図２９、図３０はタイプ３の判定に用いられるログデータの一例を示す説明図である。タイプ３の場合、初回テストではメモリ使用量が増加したが、再テストではメモリ使用量が増加しない。そのため、図１０のフローチャートでステップＳ５３まで辿り着くことは、上述したタイプ２と同様である。図２９はステップＳ５３で検索されるログの一例である。ここで、着目しているプロセスはｐｓ３であるが、ログＬ３にはｐｓ３についてのレコードは存在しない。したがって、図１０のフローチャートのＳ５４ではＮＯとの判定がされ、この時点では障害でないものと判定される（ステップＳ５６）。しかしながら、より詳しい検証が必要となるため、再発しないが増加ありデータとしてテスト項目とプロセス名が記憶される（ステップＳ５７）。再発しないが増加ありデータについての検証は、プログラムＰ２−３で行われる。図１３の示すフローチャートのステップＳ９５で以降である。
【００８４】
図１３のステップＳ９５で読み込まれるデータの一例が、図３０に示したデータＬ４である。図１３のステップＳ１００で同一プロセスについて記録が複数あるかが検証される。図３０に示す例では、着目しているプロセスｐｓ３のレコードは２件（Ｌ４１、Ｌ４２）存在している。したがって、ステップＳ１００でＹＥＳと判定され、加速テストが必要と判断される。
【００８５】
図３１は最大値テストの実行結果の一例を示す説明図である。ここで、着目しているプロセスｐｓ３のメモリ獲得量の上限値は３００であることが既知であるとする。図１７で示すフローチャートでは、ステップＳ１６１でＹＥＳ判定される。ステップＳ１７１でメモリ使用量の増大が評価される。図３１に示す例では、１番目のパラメータの最大値テストでは、メモリ使用量は変化せず問題は発生していない。２番目のパラメータの最大値テストでは、メモリ使用量は増大しているものの、既知である獲得量の上限値に等しい値であるから、これも問題はないと判定される。しながら、ｎ番目のパラメータの最大値テストでは、メモリ使用量が増大し、しかも、上限値の３００を超えているため、障害が発生している判定される。すなわち、図１７のステップＳ１７１でＹＥＳと判定され、タイプ３−ａの障害と判定される（ステップＳ１７４）。
【００８６】
次に、タイプ３−ｂと判定される例を示す。加速テストが実行されるまでは、タイプ３−ａと同様である。ここで、着目しているプロセスｐｓ３のメモリ獲得量の上限は既知ではないとする。図１７に示すフローチャートおいて、ステップＳ１６１はＮＯと判定されることとなる。図３２は、加速テストの実行結果の一例を示す説明図である。図３２のようにいずれのパラメータのテストにおいても後半の１０％のテストでメモリ使用量の増加ないため、障害は発生していないと判定され、タイプ３−ｂとされる。
【００８７】
以上のように、本実施の形態においては、メモリリークを類型化し、その類型の当てはまることを確かめるためのテスト戦略を組んでいる。そのことにより、効率的にメモリリークを検出することが可能となる。特に工数を必要とする加速テストについては、タイプ３に当てはまる可能性がある場合にのみ実行するので、効率的にテストを行うことが可能となる。
【００８８】
図３３は検出装置１の機能ブロックの一例を示すブロック図である。ＣＰＵ１０が制御プログラム１Ｐを実行することにより、検出装置１は以下のように動作する。計測部１０ａは、メモリ使用量を計測する。設定部１０ｂは試験対象となるプログラムの入力パラメータを設定する。実行部１０ｃは試験対象となるプログラムを実行させる。判定部１０ｄは、試験対象となるプログラムの実行後に計測したメモリ使用量が、実行前のメモリ使用量より所定値以上増加しているとき、プログラム実行によりメモリリークの可能性ありと判定する。検索部１０ｅは試験対象となるプログラム関するエラーログを検索する。記憶部１０ｆはメモリ使用量、メモリリークの可能性のあるプロセス名（プロセスＩＤ）などを記憶する。計数部１０ｇはエラーログの出現回数をカウントする。
【００８９】
上述の実施の形態では、メモリ資源に関するリーク障害について説明したが、その他の資源（ＯＳから獲得するファイルディスクリプタ、ハンドルなどの資源）に対しても、同じ方法により障害や仕様であるかどうかを判定可能である。
【００９０】
各実施例で記載されている技術的特徴（構成要件）はお互いに組合せ可能であり、組み合わせすることにより、新しい技術的特徴を形成することができる。
今回開示された実施の形態はすべての点で例示であって、制限的なものでは無いと考えられるべきである。本発明の範囲は、上記した意味では無く、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【００９１】
以上の実施形態に関し、さらに以下の付記を開示する。
【００９２】
（付記１）
コンピュータに、
試験対象となるプログラム実行前にメモリ使用量を計測し、
前記プログラムの入力パラメータを設定して前記プログラムを実行し、
前記プログラムの実行後に、メモリ使用量を計測し、
計測したメモリ使用量が前記プログラム実行前のメモリ使用量より所定値以上増加している場合、前記プログラムを再実行し、
前記プログラム再実行後に、メモリ使用量を計測し、
前記プログラム再実行後に計測したメモリ使用量が、前記プログラム再実行前のメモリ使用量より所定値以上増加しているとき、前記プログラム実行によりメモリリークの可能性ありと判定する
処理を実行させるコンピュータプログラム。
【００９３】
（付記２）
メモリリークの可能性ありと判定した場合、前記プログラムを反復実行し、
前記プログラムの実行の前後でメモリ使用量を計測し、
前記プログラムの実行の前後でメモリ使用量が増加して続けるときは、メモリリークであると判定し、
前記プログラムの実行の前後でメモリ使用量の増加が止まったときは、メモリリークではないと判定する
処理を実行させる付記１に記載のコンピュータプログラム。
【００９４】
（付記３）
前記プログラムの実行は試験項目と対応付けがされており、
前記プログラムの実行の前後で行うメモリ使用量の計測は、前記プログラムを実行するコンピュータで実行されている複数のプロセスそれぞれについて行うものであり、
プロセスそれぞれについて、
前記プログラム実行の前後でメモリ使用量を測定し、
前記プログラム実行の前後で、メモリ使用量が略同一の場合、前記プログラム実行中における前記プログラム関するエラーログを検索し、
検索にヒットしたときは、ヒットしたエラーログのＩＤと、プロセスのＩＤと、前記プログラムの実行に対応する試験項目のＩＤとを対応付けて第１プロセスリストに記憶し、
検索にヒットしなかったときは、前記プログラムの実行に対応する試験項目のＩＤと、プロセスのＩＤとを対応付けて第２プロセスリストに記憶する
処理を実行させる付記１又は付記２に記載のコンピュータプログラム。
【００９５】
（付記４）
前記試験項目と前記試験対象となるプログラムとの組み合わせが、予め複数定められており、全ての組み合わせに従い、複数の試験対象となるプログラムが実行され、その実行の前後でメモリ使用量の計測が行われるようにしてあり、
全ての試験項目についてのプログラムの実行後に、
前記第１プロセスリストに含まれるプロセスのＩＤとエラーログのＩＤとの組み合わせ毎に件数をカウントし、
カウントした件数が２件以上の組み合わせについては、それら組み合わせと対応する試験項目のＩＤと、障害のタイプ２を示す情報とを一時リストに出力し、
カウントした件数が１件のみの組み合わせについては、最初の試験対象となるプログラムが実行された日時から、最後の試験対象となるプログラムが終了した日時までのエラーログを取得し、
前記組み合わせに含まれるプロセスのＩＤと対応するエラーログのＩＤを読み込み、
読み込んだエラーログのＩＤが前記エラーログに含まれるか否かを判定し、
前記エラーログのＩＤが含まれている場合、前記組み合わせと対応する試験項目のＩＤと、障害でないことを示す情報とを一時リストに出力し、
前記エラーログのＩＤが含まれていない場合、前記組み合わせと対応する試験項目のＩＤと、判定不可とであることを示す情報とを一時リストに出力する
処理を実行させる付記３に記載のコンピュータプログラム。
【００９６】
（付記５）
前記試験項目と前記試験対象となるプログラムとの組み合わせが、予め複数定められており、全ての組み合わせに従い、複数の試験対象となるプログラムが実行され、その実行の前後でメモリ使用量の計測が行われるようにしてあり、
全ての試験項目についてのプログラムの実行後に、
前記第２プロセスリストに含まれる試験項目のＩＤとプロセスのＩＤとの組み合わせ毎に件数をカウントし、
カウントした件数が所定の件数以上である場合、試験項目のＩＤとプロセスのＩＤとを対応付けて第３プロセスリストに出力する
処理を実行させる付記３又は付記４に記載のコンピュータプログラム。
【００９７】
（付記６）
前記第３プロセスリストに含まれるプロセスの仕様上のメモリ使用量の最大値を取得し、
前記第３プロセスリストに含まれる試験項目のＩＤに対応した前記プログラムの複数の入力パラメータの一つを想定される最大値に設定、前記プログラムを実行し、
前記プログラムの実行前後で、前記第３プロセスリスト含まれるプロセスのＩＤに対応したプロセスのメモリ使用量を計測し、
計測したメモリ使用量が、前記メモリ使用量の最大値を超えた場合に、メモリリークであると判定する付記５に記載のコンピュータプログラム。
【００９８】
（付記７）
前記第３プロセスリストに含まれるプロセスの仕様上のメモリ使用量の最大値が取得出来ない場合に、前記第３プロセスリストに含まれる試験項目のＩＤに対応した前記プログラムの複数の入力パラメータの一つを想定される最小値から最大値に適宜設定変更しながら、繰り返し前記プログラムを実行し、
前記プログラムの各実行前後で、前記第３プロセスリスト含まれるプロセスのＩＤに対応したプロセスのメモリ使用量を計測し、
前記プログラムの各実行前後で、前記プロセスのメモリ使用量が増大した場合に、メモリリークであると判定する付記５に記載のコンピュータプログラム。
【００９９】
（付記８）
コンピュータが、
試験対象となるプログラム実行前にメモリ使用量を計測し、
前記プログラムの入力パラメータを設定して前記プログラムを実行し、
前記プログラムの実行後に、メモリ使用量を計測し、
計測したメモリ使用量が前記プログラム実行前のメモリ使用量より所定値以上増加している場合、前記プログラムを再実行し、
前記プログラム再実行後に、メモリ使用量を計測し、
前記プログラム再実行後に計測したメモリ使用量が、前記プログラム再実行前のメモリ使用量より所定値以上増加しているとき、前記プログラム実行によりメモリリークの可能性ありと判定する
情報処理方法。
【０１００】
（付記９）
メモリ使用量を計測部と、
試験対象となるプログラムの入力パラメータを設定する設定部と、
前記プログラムを実行する実行部とを備え、
前記計測部は、前記プログラムの実行前及び実行後に、メモリ使用量を計測し、
前記プログラム実行後に計測したメモリ使用量が前記プログラム実行前のメモリ使用量より所定値以上増加している場合、前記実行部は前記プログラムを再実行し、
前記計測部は、前記プログラム再実行後に、メモリ使用量を計測し、
計測したメモリ使用量が、前記プログラム再実行前のメモリ使用量より所定値以上増加しているとき、
前記プログラム実行によりメモリリークの可能性ありと判定する判定部を
備えた情報処理装置。
【符号の説明】
【０１０１】
１  検出装置
１０  ＣＰＵ
１０ａ  計測部
１０ｂ  設定部
１０ｃ  実行部
１０ｄ  判定部
１０ｅ  検索部
１０ｆ  記憶部
１０ｇ  計数部
１１  ＲＡＭ
１２  ＲＯＭ
１３  大容量記憶装置
１４  入力部
１５  出力部
１６  通信部
１７  読取部
１ａ  半導体メモリ
１ｂ  可搬型記憶媒体
２  対象装置
Ｎ  ネットワーク
【図１】
2015090683.tif 000003
【図２】
2015090683.tif 000004
【図３】
2015090683.tif 000005
【図４】
2015090683.tif 000006
【図５】
2015090683.tif 000007
【図６】
2015090683.tif 000008
【図７】
2015090683.tif 000009
【図８】
2015090683.tif 000010
【図９】
2015090683.tif 000011
【図１０】
2015090683.tif 000012
【図１１】
2015090683.tif 000013
【図１２】
2015090683.tif 000014
【図１３】
2015090683.tif 000015
【図１４】
2015090683.tif 000016
【図１５】
2015090683.tif 000017
【図１６】
2015090683.tif 000018
【図１７】
2015090683.tif 000019
【図１８】
2015090683.tif 000020
【図１９】
2015090683.tif 000021
【図２０】
2015090683.tif 000022
【図２１】
2015090683.tif 000023
【図２２】
2015090683.tif 000024
【図２３】
2015090683.tif 000025
【図２４】
2015090683.tif 000026
【図２５】
2015090683.tif 000027
【図２６】
2015090683.tif 000028
【図２７】
2015090683.tif 000029
【図２８】
2015090683.tif 000030
【図２９】
2015090683.tif 000031
【図３０】
2015090683.tif 000032
【図３１】
2015090683.tif 000033
【図３２】
2015090683.tif 000034
【図３３】
2015090683.tif 000035