(57)【要約】【課題】不具合が発生し得るソースプログラムを検出可能なプログラム検出装置を提供する。【解決手段】第一のソースプログラムと、第二のソースプログラムが格納され得るソースプログラム格納部１０１と、第一のソースプログラムに基づくプログラムを実行させた場合の、不具合の原因となるソースコードに対応した命令パターンの識別情報である不具合命令パターン識別情報を取得する不具合命令パターン識別情報取得部１０２と、第二のソースプログラムについて、不具合命令パターン識別情報が示す命令パターンに対応するソースコードを有する第二のソースプログラムを検出し、検出した第二のソースプログラムを示す情報を取得する影響プログラム取得部１０３と、影響プログラム取得部１０３が取得したソースプログラムを示す情報を出力する出力部１０４とを備えた。【選択図】図１
2011170474.tif 000002
【特許請求の範囲】
【請求項１】
１以上の第一のソースプログラムと、１以上の第二のソースプログラムが格納され得るソースプログラム格納部と、
前記第一のソースプログラムに基づくプログラムを実行させた場合の、不具合の原因となるソースコードに対応した命令パターンの識別情報である不具合命令パターン識別情報を取得する不具合命令パターン識別情報取得部と、
前記ソースプログラム格納部に格納されている第二のソースプログラムについて、前記不具合命令パターン識別情報が示す命令パターンに対応するソースコードを有する第二のソースプログラムを検出し、検出した第二のソースプログラムを示す情報を取得する影響プログラム取得部と、
前記影響プログラム取得部が取得したソースプログラムを示す情報を出力する出力部とを備えたプログラム検出装置。
【請求項２】
前記ソースプログラム格納部に格納されている第二のソースプログラムを構成するソースコードは、当該ソースコードに対応する命令パターンを識別する情報である命令パターン識別情報と対応付けられており、
前記影響プログラム取得部は、前記不具合命令パターン識別情報と一致する命令パターン識別情報と対応付けられたソースコードを有する第二のソースプログラムを検出し、当該第二のソースプログラムを示す情報を取得する請求項１記載のプログラム検出装置。
【請求項３】
前記命令パターン識別情報と、命令パターンとが、対応付けて格納され得る第一命令パターン格納部を更に備え、
前記影響プログラム取得部は、前記不具合命令パターン識別情報に対応した命令パターンを、前記第一命令パターン格納部から取得し、当該命令パターンに対応するソースコードを有する第二のソースプログラムを検出し、当該第二のソースプログラムを示す情報を取得する請求項１記載のプログラム検出装置。
【請求項４】
前記第一のソースプログラムを構成するソースコードは、当該ソースコードに対応する命令パターンを識別する情報である命令パターン識別情報と対応付けられており、
前記不具合命令パターン識別情報取得部は、
前記ソースプログラム格納部に格納されている第一のソースプログラムに基づくプログラムを実行させた場合の、第一ソースプログラム内の不具合の原因となるソースコードと対応付けられた命令パターン識別情報を、不具合命令パターン識別情報として取得する請求項１から請求項３いずれか記載のプログラム検出装置。
【請求項５】
前記命令パターン識別情報と、命令パターンとが、対応付けて格納され得る第二命令パターン格納部を更に備え、
前記不具合命令パターン識別情報取得部は、
前記ソースプログラム格納部に格納されている第一のソースプログラムに基づくプログラムを実行させた場合の、不具合の原因となるソースコードに対応する命令パターンと対応付けられた命令パターン識別情報を、不具合命令パターン識別情報として前記第二命令パターン格納部から取得する請求項１から請求項３いずれか記載のプログラム検出装置。
【請求項６】
前記不具合命令パターン識別情報取得部は、
不具合の原因となるソースコードに対応した命令パターンの識別情報であって、前記第一のソースプログラムの変換に用いられた命令パターンの識別情報を、前記不具合命令パターン識別情報として取得する請求項１から請求項５いずれか記載のプログラム検出装置。
【請求項７】
１以上の第一のソースプログラムと、１以上の第二のソースプログラムが格納され得るソースプログラム格納部と、不具合命令パターン識別情報取得部と、影響プログラム取得部と、出力部とを用いて行われるプログラム検出方法であって、
前記不具合命令パターン識別情報取得部が、前記第一のソースプログラムに基づくプログラムを実行させた場合の、不具合の原因となるソースコードに対応した命令パターンの識別情報である不具合命令パターン識別情報を取得する不具合命令パターン識別情報取得ステップと、
前記影響プログラム取得部が、前記ソースプログラム格納部に格納されている第二のソースプログラムについて、前記不具合命令パターン識別情報が示す命令パターンに対応するソースコードを有する第二のソースプログラムを検出し、検出した第二のソースプログラムを示す情報を取得する影響プログラム取得ステップと、
前記出力部が、前記影響プログラム取得部が取得したソースプログラムを示す情報を出力する出力ステップとを備えたプログラム検出方法。
【請求項８】
コンピュータを、
前記第一のソースプログラムに基づくプログラムを実行させた場合の、不具合の原因となるソースコードに対応した命令パターンの識別情報である不具合命令パターン識別情報を取得する不具合命令パターン識別情報取得部と、
１以上の第一のソースプログラムと、１以上の第二のソースプログラムが格納され得るソースプログラム格納部に格納されている第二のソースプログラムについて、前記不具合命令パターン識別情報が示す命令パターンに対応するソースコードを有する第二のソースプログラムを検出し、検出した第二のソースプログラムを示す情報を取得する影響プログラム取得部と、
前記影響プログラム取得部が取得したソースプログラムを示す情報を出力する出力部として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不具合のあるソースプログラムを検出する装置等に関するものである。
【背景技術】
【０００２】
従来、ソースプログラムを命令パターン等を用いて変換する装置等が知られていた。例えば、一の環境で動作していたプログラムである旧ソースプログラムを、他の環境で動作させるための新ソースプログラムに変換するプログラム自動変換装置であって、旧ソースプログラムの命令パターンを示す情報である第一命令パターン情報と新ソースプログラムの命令パターンを示す情報である第二命令パターン情報の対を１以上、格納している命令パターン対応情報格納部と、旧ソースプログラムを格納しているプログラム格納部と、前記旧ソースプログラムにおいて、前記１以上の第一命令パターン情報が何回出現するかを解析する解析部と、前記解析部において第一命令パターン情報の出現回数が、所定回数（所定回数は２以上である）以上であると解析された第一命令パターン情報に対応する旧ソースプログラムの記述箇所をコメントアウトした情報を含むように、当該旧ソースプログラムの記述箇所を当該第一命令パターン情報と対になる第二命令パターン情報に対応するように変換する命令パターン変換部と、前記命令パターン変換部において前記変換する処理が行われた後、前記命令パターン変換部でコメントアウトされた情報を含む手作業前の新ソースプログラムであり、前記命令パターン変換部で前記旧ソースプログラムを変換した結果である手作業前の新ソースプログラムを出力する新プログラム出力部と、前記新プログラム出力部において、前記手作業前の新ソースプログラムが出力された後、前記解析部において第一命令パターン情報の出現回数が前記所定回数未満であると解析された第一命令パターン情報に対応する、前記手作業前の新ソースプログラムの記述箇所に対して、ユーザの手作業による変更の入力を行う入力手段とを具備するプログラム自動変換装置等が知られていた（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第４３５４５１４号公報（第１頁、第１図等）
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来においては、命令パターンを用いて変換された一のソースプログラム等において、変換に用いられた命令パターンの不備等による変換箇所の異常や、命令パターンにより変換されなかった箇所の異常等により、動作等に不具合等が生じていた場合に、同じような不具合の生じる可能性のある他のソースプログラムを検出することが容易ではないという課題があった。例えば、従来においては、不具合の生じたソースプログラムから不具合箇所を特定し、この不具合箇所と同様のソースコードを、他のソースプログラム内において目視等により探す必要があり、手間と時間がかかるという問題があった。
【課題を解決するための手段】
【０００５】
本発明のプログラム検出装置は、１以上の第一のソースプログラムと、１以上の第二のソースプログラムが格納され得るソースプログラム格納部と、第一のソースプログラムに基づくプログラムを実行させた場合の、不具合の原因となるソースコードに対応した命令パターンの識別情報である不具合命令パターン識別情報を取得する不具合命令パターン識別情報取得部と、ソースプログラム格納部に格納されている第二のソースプログラムについて、不具合命令パターン識別情報が示す命令パターンに対応するソースコードを有する第二のソースプログラムを検出し、検出した第二のソースプログラムを示す情報を取得する影響プログラム取得部と、影響プログラム取得部が取得したソースプログラムを示す情報を出力する出力部とを備えたプログラム検出装置である。
【０００６】
かかる構成により、不具合の原因となるソースコードに対応した命令パターンの識別情報を用いて、不具合が発生し得るソースプログラムを検出することができる。
【０００７】
また、本発明のプログラム検出装置は、前記プログラム検出装置において、ソースプログラム格納部に格納されている第二のソースプログラムを構成するソースコードは、ソースコードに対応する命令パターンを識別する情報である命令パターン識別情報と対応付けられており、影響プログラム取得部は、不具合命令パターン識別情報と一致する命令パターン識別情報と対応付けられたソースコードを有する第二のソースプログラムを検出し、第二のソースプログラムを示す情報を取得するプログラム検出装置である。
【０００８】
かかる構成により、不具合の原因となるソースコードに対応した命令パターンの識別情報と対応付けられたソースコードを有する第二ソースプログラムを不具合が発生し得るソースプログラムとして検出することができ、不具合が発生し得るソースプログラムを容易に検出することができる。
【０００９】
また、本発明のプログラム検出装置は、前記プログラム検出装置において、命令パターン識別情報と、命令パターンとが、対応付けて格納され得る第一命令パターン格納部を更に備え、影響プログラム取得部は、不具合命令パターン識別情報に対応した命令パターンを、第一命令パターン格納部から取得し、命令パターンに対応するソースコードを有する第二のソースプログラムを検出し、第二のソースプログラムを示す情報を取得するプログラム検出装置である。
【００１０】
かかる構成により、不具合の原因となるソースコードに対応した命令パターンと対応するソースコードを有する第二ソースプログラムを、不具合が発生し得るソースプログラムを検出することができ、ソースプログラムが命令パターン識別情報等と対応付けられていなくても、不具合が発生し得るソースプログラムを検出することが可能となり、汎用性を高めることができる。
【００１１】
また、本発明のプログラム検出装置は、前記プログラム検出装置において、第一のソースプログラムを構成するソースコードは、ソースコードに対応する命令パターンを識別する情報である命令パターン識別情報と対応付けられており、不具合命令パターン識別情報取得部は、ソースプログラム格納部に格納されている第一のソースプログラムに基づくプログラムを実行させた場合の、第一ソースプログラム内の不具合の原因となるソースコードと対応付けられた命令パターン識別情報を、不具合命令パターン識別情報として取得するプログラム検出装置である。
【００１２】
かかる構成により、第一ソースプログラムの不具合の原因となるソースコードに対応する命令パターン識別情報を容易に取得することができる。
【００１３】
また、本発明のプログラム検出装置は、前記プログラム検出装置において、命令パターン識別情報と、命令パターンとが、対応付けて格納され得る第二命令パターン格納部を更に備え、不具合命令パターン識別情報取得部は、ソースプログラム格納部に格納されている第一のソースプログラムに基づくプログラムを実行させた場合の、不具合の原因となるソースコードに対応する命令パターンと対応付けられた命令パターン識別情報を、不具合命令パターン識別情報として第二命令パターン格納部から取得するプログラム検出装置である。
【００１４】
かかる構成により、第一ソースプログラムのソースコードと、命令パターンとが対応付けられていなくても、第一ソースプログラムの不具合の原因となるソースコードに対応する命令パターン識別情報を取得することができ、汎用性を高めることができる。
【００１５】
また、本発明のプログラム検出装置は、前記プログラム検出装置において、前記不具合命令パターン識別情報取得部は、不具合の原因となるソースコードに対応した命令パターンの識別情報であって、前記第一のソースプログラムの変換に用いられた命令パターンの識別情報を、前記不具合命令パターン識別情報として取得するプログラム検出装置である。
【００１６】
かかる構成により、命令パターンを用いた変換による不具合の影響を受けるソースプログラムを検出することができる。
【発明の効果】
【００１７】
本発明によるプログラム検出装置等によれば、不具合が発生し得るソースプログラムを検出することができる。
【図面の簡単な説明】
【００１８】
【図１】本実施の形態におけるプログラム検出装置のブロック図
【図２】同プログラム検出装置の動作を示すフローチャート
【図３】同プログラム検出装置の動作の変形例を示すフローチャート
【図４】同ソースプログラムに含まれ得る命令パターンと、命令パターン識別情報との対応関係を管理する命令パターン管理表を示す図
【図５】同プログラム検出装置の動作を説明するための、ソースプログラム格納部１０１に格納されている第一ソースプログラムおよび第二ソースプログラムの一例を示す図
【図６】同プログラム検出装置の動作を説明するための、ステップ単位で実行されるソースコードの表示例を示す図
【図７】同プログラム検出装置の動作を説明するための、不具合命令パターン識別情報取得部が取得して蓄積したパターンＩＤである不具合命令パターン識別情報を示す図
【図８】同プログラム検出装置の動作を説明するための、第二ソースプログラムのファイル名と、当該ファイル名が示す第二ソースプログラムに含まれる不具合命令パターン識別情報とを対応付けて管理する不具合ファイル管理情報を示す図
【図９】同プログラム検出装置の動作を説明するための、出力部の出力例を示す図
【図１０】同プログラム検出装置の変形例の構成を示すブロック図
【図１１】同プログラム検出装置を実現するコンピュータの外観の一例を示す模式図
【図１２】同プログラム検出装置を実現するコンピュータの内部構成を示す図
【発明を実施するための形態】
【００１９】
以下、プログラム検出装置等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。
【００２０】
（実施の形態１）
図１は、本実施の形態におけるプログラム検出装置１のブロック図である。
プログラム検出装置１は、ソースプログラム格納部１０１、不具合命令パターン識別情報取得部１０２、影響プログラム取得部１０３、出力部１０４、第一命令パターン格納部１０５、および第二命令パターン格納部１０６を備える。
【００２１】
ソースプログラム格納部１０１は、１以上の第一のソースプログラム（以下、第一ソースプログラムと称す）と、１以上の第二のソースプログラム（以下、第二ソースプログラムと称す）が格納され得る。ソースコードは、例えば、プログラミング言語の言語仕様等に従って記述されたコンピュータに対する一連の指示であり、文字列等で構成される。ソースプログラムは１以上のソースコードにより構成される。ソースプログラムは、例えば、１以上のソースコードにより構成される１以上のソースファイルであっても良い。ソースプログラムは、ＣＯＢＯＬ言語や、Ｃ言語、ｐｅｒｌ言語等、どのような言語のソースプログラムであっても良い。また、スクリプト等であっても良い。ここで述べるプログラムとは、例えば、コンピュータの行う処理（演算・動作・通信など）の手順を指示したもののことである。第一及び第二のソースプログラムは、例えば、同じプログラム言語で記述されたソースプログラムである。また、第一及び第二のソースプログラムは、例えば、同じメインフレームの環境に対応したソースプログラムであっても良い。また、第一および第二のソースプログラムは、一のソースプログラムの異なる部分を構成するソースプログラムであってもよい。また、第一のソースプログラムと第二のソースプログラムは動的に変更されても良い。例えば、同じソースプログラムであっても、後述するように不具合の検出等を行う処理を行っている場合には、このソースプログラムを第一のソースプログラムとし、不具合の検出等が行われていない場合には、第二のソースプログラムと考えるようにしてもよい。
【００２２】
ソースプログラム格納部１０１に格納される第一ソースプログラムおよび第二ソースプログラムは、例えば、命令パターンを用いてマイグレーションされたソースプログラムである。ソースプログラム格納部１０１に格納されているソースプログラムに対する命令パターンを用いた変換がどのように行われたものであるかは問わない。命令パターンを用いた変換は、例えば、予め用意された変換前のソースプログラムに対応した第一の命令パターンと、変換後のソースプログラムに対応した第二の命令パターンとを対応付けた情報を用いて、変換対象となるソースプログラムの第一の命令パターンに対応するソースコードを、第二の命令パターンに対応するソースコードに変換する変換である。例えば、ソースプログラムの変換の一例については、上述した特許文献１等に開示されている。
【００２３】
第一ソースプログラムとは、例えば、ユーザ等により予め指定された、動作の不具合（例えばエラー等）の検出対象として用いられるソースプログラムである。例えば、命令パターンを用いた変換が正常に行われたか否かや、命令パターンを用いて適切な変換が行われたか否かをテストすること等を目的とした動作テスト等に用いられるソースプログラムである。
【００２４】
第二ソースプログラムとは、例えば、ユーザ等により予め指定された、不具合が生じるソースプログラムであるか否かの判断対象となるソースプログラムである。
【００２５】
命令パターンとは、例えば、第一および第二ソースプログラムに含まれるソースコードで構成される命令のパターンを示す情報である。なお、命令パターンは、第一および第二ソースプログラムが利用される環境等に対応した命令のパターンでも良い。
【００２６】
命令パターンとは、ソースプログラムにおいて出現するソースコードのうちの一部、例えば、変数やリテラル文字や関数名等を、固定されていない文字列であることを示すための、予め指定されている字句要素（例えば単語）で置き換えた情報であっても良い。この置き換える情報を、ここでは、例えば変換語と呼ぶ。また、変数やリテラル文字や関数名やこれらを含む文字列等の固定されていない文字列をここでは非固定語と呼ぶ。逆に、これ以外の固定されている文字列を固定語と呼ぶ。変換語は、非固定語を正規表現化したものと考えても良い。変換語は、当該変換語が配置されている位置に配置される情報のデータタイプやデータサイズや属性等が判断可能な情報であることが好ましい。変換語は、第一および第二ソースプログラムの少なくとも一部を構成する文字列が、変数、関数名、またはリテラル文字の少なくとも一つを含む非固定語のタイプのうちの、いずれのタイプの非固定語であるかを示す文字列と考えても良い。例えば、第一および第二ソースプログラムの少なくとも一部を構成する文字列が、どのような属性を有する非固定語であるかを示す文字列と考えても良い。すなわち、変換語を、第一及び第二ソースプログラムの少なくとも一部に含まれる、変数、関数名、またはリテラル文字の少なくとも一つを含む文字列（例えば単語）が、どのような属性の文字列であるかを示す文字列と考えても良い。この属性は、第一および第二のソースプログラムの文字列が、変数、関数名、またはリテラル文字のいずれであるかを示す属性であっても良いし、第一および第二ソースプログラムの文字列の用途等や、文字列が指定するものの種別等を示す属性であっても良い。また、この属性は、第一および第二ソースプログラムの文字列の文字数や、文字の種類等を示す属性であっても良い。変換語は、例えば、変数やリテラル文字や関数名等の非予約語を置き換える情報と考えてもよく、この場合、変換語は、いずれのタイプの非予約語であるか、例えば属性の非予約語であるかを示す文字列と考えても良い。第二命令パターンは、例えば、命令語と、ユーザ指定語と、変換語と、その他の文字列とのうちの１以上の組み合わせで構成される。命令語、ユーザ指定語、変換語等の詳細については後述する。第二命令パターンは、第一および第二ソースプログラムにおける命令語等の固定語の出現するパターン、非固定語（例えば、変数やリテラル文字や関数名等）の出現するパターン、または固定語および非固定語の出現するパターンと考えても良い。また、第二命令パターンを、第一および第二ソースプログラムにおける予約語（例えば命令語等）の出現するパターン、非予約語（例えば、変数やリテラル文字や関数名等）の出現するパターン、または予約語および非予約語の出現するパターンと考えても良く、この場合、第二命令パターンは、例えば、第一および第二ソースプログラムにおける予約語の出現するパターン、非予約語の出現するパターン、または予約語および非予約語の出現するパターンの少なくとも一つを示す情報であってもよい。具体例を挙げると、第二命令パターンは、「命令語  ＜引数１＞  ＜引数２＞」という予約語と非予約語の配列パターンを示す情報である。ただし、この場合、「��令語」は、「ＯＰＥＮ」や「ＭＯＶＥ」、「ＣＡＬＬ」等の予約語であり、「＜引数１＞」、「＜引数２＞」は変数文字列である非予約語である。また、第二命令パターン情報は、固定語や非固定語がどのような順番で配列されているかを示す情報等であっても良い。また、第二命令パターン情報は、特定の予約語、例えば命令語や不特定の予約語がどのような順番で配列されているかを示す情報等であっても良い。なお、予約語とは、プログラミング言語の仕様等で定められた、変数名や関数名、クラス名等の識別子名として使用できない字句要素である。また、ここでは、命令語でない予約語を非予約語と呼ぶようにしても良い。
【００２７】
ソースプログラム格納部１０１に格納されている各第一ソースプログラムは、それぞれを構成する１以上のソースコードが、それぞれに対応する命令パターンの識別情報（以下、命令パターン識別情報と称す）と対応付けられていることが好ましい。言い換えれば、ソースプログラム格納部１０１には、命令パターンの識別情報と、この命令パターンに対応する第一ソースプログラム内のソースコードとが対応付けて格納されていてもよい。第一ソースプログラムを構成する全てのソースコードが命令パターン識別情報と対応付けてられていても良いし、いなくても良い。第一ソースプログラムを構成するソースコードのうちの、少なくとも命令パターンを用いて変換されたソースコードの少なくとも一部が、変換に用いられた命令パターンの識別情報と対応付けられていることが好ましい。また、第一ソースプログラムを構成するソースコードのうちの、命令パターンを用いた変換が行われてないソースコードが、当該ソースコードと対応する命令パターンと対応付けられていても良い。ソースコードと対応付けられている命令パターンは、第一ソースプログラムの変換に用いられた命令パターンだけであってもよい。この場合、後述する不具合命令パターン識別情報取得部１０２が、第一ソースプログラムの変換に用いられた命令パターンだけを取得することが可能となる。
【００２８】
ソースプログラムの１以上のソースコードと、各ソースコードに対応する命令パターンとの対応関係は、どのように管理されていても良い。例えば、ソースプログラム内の、一のソースコード、もしくは一のソースコードを示す情報（例えばソースコードの行番号）と、これに対応する一の命令パターンの識別情報とが、対応関係を管理するために用いられる図示しない格納部に格納されている管理情報の一のレコードの二つの項目のデータとして管理されていても良い。また、１以上の命令パターンの識別情報が、ソースプログラム内の、当該命令パターンに対応するソースコードを示す位置に記述されていても良い。例えば、ソースプログラム内の命令パターンに対応する部分の近傍、例えばコメント欄やコメント領域等に、命令パターンの識別情報が配置されていても良い。この場合、ソースプログラムが対応関係を管理する情報を兼ねていると考えても良い。
【００２９】
この実施の形態では、以下、このようにソースコードと命令パターンとが対応付けられている場合を例に挙げて説明する。
【００３０】
また、同様に、ソースプログラム格納部１０１に格納されている各第二ソースプログラムについても、第一ソースプログラムと同様に、それぞれのソースプログラムを構成する１以上のソースコードが、それぞれに対応する命令パターン識別情報と対応付けられていることが好ましい。第二ソースプログラムを構成するソースコードと命令パターン識別情報との対応付けに関しては、上記第一ソースプログラムの場合と同様であるのでここでは説明を省略する。
【００３１】
ソースプログラム格納部１０１に第一および第二ソースプログラム情報が記憶される過程は問わない。ソースプログラム格納部１０１は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
【００３２】
不具合命令パターン識別情報取得部１０２は、第一ソースプログラムに基づくプログラムを実行させた場合の、不具合の原因となるソースコードに対応した命令パターンの識別情報である不具合命令パターン識別情報を取得する。
【００３３】
ソースプログラムに基づくプログラムとは、ソースプログラムに対応した実行用のコードで構成されるプログラムである。例えば、ソースプログラムに基づくプログラムは、ソースプログラムそのものであっても良いし、ソースプログラムに対してコンパイル等の変換を行って得られたプログラムであっても良い。例えば、ソースプログラム格納部１０１に格納されたソースプログラムがインタプリタ型のソースプログラムである場合、ソースプログラムに基づくプログラムは、ソースプログラムそのものであり、ソースプログラムは、予め指定された単位、例えば行単位で読み出されて、解釈実行される。また、ソースプログラム格納部１０１に格納されたソースプログラムがインタプリタ型でない場合、ソースプログラムに基づくプログラムは、ソースプログラムがコンパイルされて得られたプログラムである。
【００３４】
ソースプログラムに基づくプログラムを実行させた場合とは、ソースプログラムに基づくプログラムを実行させ、例えばソースプログラムの不具合等を検出するためのテスト用に用意された１以上のテストデータを用いて、予め指定された処理のテストを行うことであっても良いし、ソースプログラムに基づくプログラムに対して、予め指定された処理のテストのシミュレーションを行うことであってもよい。ソースプログラムに対応したプログラムの実行は、不具合命令パターン識別情報取得部１０２が行っても良いし、不具合命令パターン識別情報取得部１０２の外部の図示しない実行部等に行わせるようにしてもよい。ここでのテストは、例えばソースプログラムの変換が正常に行われたか否かを判断することが可能な動作のテスト等である。なお、テストデータや、どのようなテストを行うかを指定する情報等は、図示しない記憶媒体等に予め蓄積しておくようにすればよい。
【００３５】
ソースプログラムに基づくプログラムを実行させた場合の不具合のあるソースコードを検出するための技術は、いわゆるデバッガの技術として公知であるので、ここでは説明を省略する。デバッガとは、例えば、ソースコードを、例えばステップ毎に実行させることで、ソースプログラムの動作の不具合をソースコードと対応付けて確認できるようにしたものである。例えば、ソースプログラムにおいて、ソースコードが行単位で記述されている場合、デバッガを用いて行単位でソースプログラムに対応したプログラムを実行させることで、動作の不具合の原因となるソースコード、ここではソースコードの行を検出可能である。不具合があるステップであるか否かの判断は、ユーザが行っても良いし、自動で行っても良い。デバッガについては、公知技術であるのでここでは説明を省略する。なお、ここでのステップとは、例えば、ソースプログラムに基づくプログラムの処理が行われる単位や、処理段階を示す単位である。例えばソースプログラムがインタプリタ型のソースプログラムである場合、ステップとは、例えば行等のソースプログラムの逐次解釈実行される各ソースコード群や、ソースコードの読み出される単位である。例えば、改行コードや行番号等の予め指定された区切りのための予め指定された指定情報等で区切られる単位の情報がステップと考えても良い。また、ソースプログラムがインタプリタ型のソースプログラムとは異なるソースプログラム、例えばコンパイルが必要なソースプログラムである場合、ステップはコンパイルされたプログラムの各命令セットや命令群である。コンパイルにより得られたオブジェクトコードの読み出される単位であっても良い。
【００３６】
不具合命令パターン識別情報取得部１０２は、例えば、第一ソースプログラムに基づくプログラムを実行させた場合の、不具合の原因となるソースコードを示す情報を取得し、この情報で示されるソースコードに対応した命令パターン識別情報を、不具合命令パターン識別情報として取得する。
【００３７】
具体的には、不具合命令パターン識別情報取得部１０２は、図示しない実行部等にいわゆるデバッガもしくはそれに相当する機能を有する処理を実行させて、第一ソースプログラムに基づくプログラムを、例えばステップ毎に実行させる。そして、プログラムの動作に不具合が検出された場合に、この不具合が検出されたステップに対応するソースコードを示す情報を取得する。このソースコードを示す情報の取得は、ユーザにより入力される不具合のあるソースコードを示す情報の受け付けであっても良い。また、不具合命令パターン識別情報取得部１０２が自動検出した不具合が検出された箇所を示す情報の取得であっても良い。そして、次に、不具合のあるソースコードであるという判断結果が取得されたソースコードに対応する命令パターン識別情報を取得する。
【００３８】
例えば、デバッガ等を実行する実行部（図示せず）が、不具合命令パターン識別情報取得部１０２の外部に設けられている場合、不具合命令パターン識別情報取得部１０２は、デバッガ等が出力する不具合の原因となるソースコードを示す情報、例えば不具合の原因となるソースコードのソースプログラム内の位置を示す情報や、ソースコードを含む行番号や、ソースコードの識別情報等を示す情報を入力として受信し、このソースコードを示す情報が示すソースコードと対応付けられた命令パターン識別情報を取得する。
【００３９】
また、不具合命令パターン識別情報取得部１０２が、デバッガ等を実行する実行部（図示せず）等を内部に備えている場合、不具合命令パターン識別情報取得部１０２は、内部で実行されたデバッガ等で取得した不具合の原因となるソースコードと対応付けられた命令パターン識別情報を取得してもよい。
【００４０】
また、デバッガ等を実行することで取得された不具合の原因となるソースコードを示す情報を、ユーザが不具合命令パターン識別情報取得部１０２に対して図示しない入力デバイス等を介して入力するようにし、この入力されたソースコードを示す情報が示すソースコードと対応付けられた命令パターン識別情報を取得してもよい。
【００４１】
あるいは、デバッガ等を実行することで取得された不具合の原因となるソースコードに対応付けられた命令パターン識別情報を、ユーザが不具合命令パターン識別情報取得部１０２に対して図示しない入力デバイス等を介して入力するようにてもよい。なお、ここでの取得は、結果的に取得可能であれば、受け付けも含む概念も含むと考えて良い。
【００４２】
なお、第一および第二ソースプログラムに利用可能なソースコードと、当該ソースコードに対応する命令パターン識別情報とが予め対応付けられている場合、不具合命令パターン識別情報取得部１０２は、この対応付けに基づいて、ソースプログラム格納部１０１に格納されている第一ソースプログラムに基づくプログラムを実行させた場合の、第一ソースプログラム内の不具合の原因となるソースコードと対応付けられた命令パターン識別情報を、不具合命令パターン識別情報として取得することが可能である。
【００４３】
具体的には、上記のように、ソースプログラムを構成するソースコードと、当該ソースコードに対応する命令パターン識別情報とが予め対応付けられている場合、不具合命令パターン識別情報取得部１０２は、この対応付けに基づいて、デバッガが検出したソースコードに対応した命令パターン識別情報を取得することができる。
【００４４】
例えば、行番号等のソースコードを示す情報と、当該ソースコードに対応する命令パターン識別情報とが対応付けて図示しない管理情報等において管理されている場合や、対応付けてソースプログラム内に格納されている場合、不具合命令パターン識別情報取得部１０２は、デバッガの実行部から受信したソースコードを示す情報、あるいはユーザから受け付けたソースコードを示す情報と一致するソースコードを示す情報を管理情報やソースプログラム内において検索し、検出された情報と対応付けられた命令パターン識別情報を取得してもよい。ここでの一致は完全一致であっても部分一致であっても良い。
【００４５】
また、例えばソースプログラム内において、各ソースコードと、当該ソースコードに対応する命令パターン識別情報とが対応付けて格納されている場合、即ち記述されている場合には、不具合命令パターン識別情報取得部１０２は、不具合命令パターン識別情報取得部１０２の内部等に設けられたデバッガの実行部がソースプログラム内において検出した不具合の原因となるソースコードと対応付けて、同じソースプログラム内に格納（記述）されている命令パターン識別情報を読み出して取得してもよい。
【００４６】
あるいは、この場合、デバッガの実行部が検出した不具合の原因となるソースコードと対応付けられて同じソースプログラム内に格納されている命令パターン識別情報を、ユーザが目視等により取得し、取得した命令パターン識別情報を、不具合命令パターン識別情報取得部１０２に入力しても良い。
【００４７】
なお、第一のソースプログラムが、例えば、旧第一のソースプログラムを１以上の命令パターンを用いて変換して取得されたソースプログラムである場合、不具合命令パターン識別情報取得部１０２が取得する不具合命令パターン識別情報は、不具合の原因となるソースコードに対応した命令パターンのうちの、第一のソースプログラムの変換に用いられた命令パターンの識別情報であることが好ましい。つまり、不具合命令パターン識別情報取得部１０２は、不具合の原因となるソースコードと対応付けられた命令パターン識別情報のうちの、第一ソースプログラムの変換に用いられた命令パターンに対応した命令パターンの識別情報だけを不具合命令パターン識別情報として取得するようにしても良い。第一ソースプログラムの変換に用いられた命令パターンとは、変換前のソースコードの一部あるいは全部を変換する際に用いられる命令パターンであり、変換前のソースコードの少なくとも一部が、この命令パターンによって置換されたり、追加される。この場合、同様に、第二のソースプログラムも、旧第二のソースプログラムを、第一のソースプログラムの変換に利用され得る１以上の命令パターンを用いて変換を行うことで取得されたソースプログラムであることが好ましい。
【００４８】
不具合命令パターン識別情報取得部１０２は、通常、ＭＰＵやメモリ等から実現され得る。不具合命令パターン識別情報取得部１０２の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。
【００４９】
なお、不具合命令パターン識別情報取得部１０２は、第一ソースプログラムに対して行われるテストに用いられるデータが格納されるテストデータ格納部（図示せず）を有していてもよい。
【００５０】
影響プログラム取得部１０３は、ソースプログラム格納部１０１に格納されている第二ソースプログラムについて、不具合命令パターン識別情報取得部１０２が取得した不具合命令パターン識別情報が示す命令パターンに対応するソースコードを有する第二のソースプログラムを検出し、検出した第二のソースプログラム示す情報を取得する。
【００５１】
例えば、上述したように、ソースプログラム格納部１０１に格納されている第二のソースプログラムを構成するソースコードが、当該ソースコードに対応する命令パターンを識別する情報である命令パターン識別情報と対応付けられている場合、影響プログラム取得部１０３は、不具合命令パターン識別情報取得部１０２が取得した不具合命令パターン識別情報と一致する命令パターン識別情報と対応付けられたソースコードを有する第二ソースプログラムを検出し、第二ソースプログラムを示す情報を取得する。
【００５２】
具体的には、ソースプログラム格納部１０１に格納されている１以上の第二のソースプログラムのそれぞれについて、それぞれを構成するソースコードに対応付けられた命令パターン識別情報の中に、不具合命令パターン識別情報取得部１０２が取得した不具合命令パターン識別情報と一致する命令パターン識別情報があるか否かを、検索等を行って判断する。そして、一致する命令パターン識別情報が検出された第二ソースプログラムを示す情報を取得する。ここでの一致は、完全一致としても部分一致としても良い。
【００５３】
また、例えば、１以上の命令パターン識別情報と、各命令パターン識別情報が示す命令パターンとが、それぞれ対応付けられて、後述する第一命令パターン格納部１０５に格納されている場合、影響プログラム取得部１０３は、不具合命令パターン識別情報取得部１０２が取得した不具合命令パターン識別情報に対応した命令パターンを、第一命令パターン格納部１０５から取得し、取得した命令パターンに対応するソースコードを有する第二ソースプログラムをソースプログラム格納部１０１に格納されている第二ソースプログラムの中から検出し、検出した第二ソースプログラムを示す情報を取得する。
【００５４】
具体的には、第一命令パターン格納部１０５から取得した不具合命令パターン識別情報に対応した命令パターンを検索キーとして用いて、ソースプログラム格納部１０１に格納されている第二ソースプログラムのそれぞれについてパターンマッチングを行って、検索キーに対応したソースコードを有する第二ソースプログラムがあるか否かを判断する。そして、検索キーに対応したソースコードを有する第二ソースプログラムを示す情報を取得する。
【００５５】
ここでのパターンマッチングは、正規表現を用いた検索処理と同様の処理と考えても良い。例えば、影響プログラム取得部１０３は、パターンマッチングにより命令パターンの固定語や変換語等の出現パターンと対応する固定語や非固定語等の出現パターンを有するソースコードを、第二ソースプログラム内において検出する。ここでの対応とは、パターンマッチングや正規表現を用いた検索における一致と考えても良い。このとき、命令パターン内の変換語の部分については、この変換語に対応した属性の文字列の非固定語がソースコード内に検出された場合に、対応する、あるいは一致すると判断する。例えば、識別情報が「Ｃ０００１」である第二命令パターンが「ｍｏｖｅ  ＊  ｔｏ  ＊」であり、「ｍｏｖｅ」と「ｔｏ」が固定語であり、「＊」がアルファベットまたは数字のいずれかを示す変換語であったとすると、第二命令パターン「Ｃ０００１」が、実行済ソースコード内の「ｍｏｖｅ  Ａ００１  ｔｏ  ＊Ｂ００１」というソースコードに対応している命令パターンであるとして検出される。
【００５６】
なお、パターンマッチングを行う際には、各第二ソースプログラムから、予め指定されたルールに従って、ソースコードが命令パターンに変換される単位と同じ単位ごとに、ソースコードを切り出し、この切り出したソースコードと，命令パターンとのパターンマッチングを行うようにしても良い。特に、第二ソースプログラムに対応したプログラムの実行時に第二ソースプログラムから読み出すソースコードの単位と、命令パターンを用いて変換されるソースコードの単位とが同じ単位である場合、この単位でソースコードからソースコードを取り出し、取り出したソースコードと命令パターンとの比較を行うようにしてもよい。例えば、改行コードや行番号等の予め指定された区切りのための予め指定された指定情報等で区切られたソースコードを単位として実行済ソースコードから切り出したソースコードと命令パターンとを比較しても良い。
【００５７】
区切に用いられる指定情報は、例えば、ユーザにより指定された文字列等の情報である。ここでは文字列に、ピリオドやセミコロン等の記号を含むと考えてもよい。指定情報は、予め指定された、改行コードやＴＡＢ等の制御コード等であっても良い。改行コードやＴＡＢ等の制御コードを文字列と考えても良い。また、指定情報は、例えば、第一および第二ソースプログラムに用いられる命令語、すなわち、第一及び第二ソースプログラムの言語等に用いられる命令語の全部、あるいは一部等であっても良い。また、指定情報は、これらの情報の組み合わせであっても良い。
【００５８】
影響プログラム取得部１０３が取得する第二ソースプログラムは、不具合の原因となったソースコードに対応する命令パターンの影響を受けるソースプログラム、言い換えれば不具合の発生する可能性がある第二ソースプログラムである。例えば、不具合命令パターン識別情報が、第二ソースプログラムの変換に用いられた命令パターンである場合、影響プログラム取得部１０３が取得する第二ソースプログラムは、この命令パターンを用いた変換による不具合の影響が起こり得る第二ソースプログラムとなる。
【００５９】
第二ソースプログラムを示す情報は、第二ソースプログラムを識別可能な情報である。第二ソースプログラムを示す情報は、具体的には、ソースプログラムのファイル名や、プログラム名、関数名、メソッド名等である。
【００６０】
影響プログラム取得部１０３は、通常、ＭＰＵやメモリ等から実現され得る。影響プログラム取得部１０３の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。
【００６１】
出力部１０４は、影響プログラム取得部１０３が取得したソースプログラムを示す情報を出力する。出力部１０４は、影響プログラム取得部１０３が取得したソースプログラムを示す情報を、不具合命令パターン識別情報取得部１０２が取得した不具合命令パターン識別情報と対応付けて出力しても良い。
【００６２】
ここで述べる出力とは、ディスプレイへの表示、プロジェクターを用いた投影、プリンタへの印字、音出力、外部の装置への送信、記録媒体への蓄積、他の処理装置や他のプログラムなどへの処理結果の引渡しなどを含む概念である。
【００６３】
出力部１０４は、ディスプレイやスピーカー等の出力デバイスを含むと考えても含まないと考えても良い。出力部１０４は、出力デバイスのドライバーソフトまたは、出力デバイスのドライバーソフトと出力デバイス等で実現され得る。
【００６４】
第一命令パターン格納部１０５には、命令パターン識別情報と、命令パターンとが、対応付けて格納され得る。具体的には、命令パターン識別情報と、この命令パターン識別情報で識別される命令パターンとが対応付けて格納され得る。命令パターン識別情報と命令パターンとの対応付けがどのように管理されるかは問わない。例えば、対応付けられた命令パターン識別情報と、命令パターンとが、管理テーブルの一のレコードの二つの項目として管理されても良い。第一命令パターン格納部１０５は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
【００６５】
図２は、プログラム検出装置１の動作を示すフローチャートである。以下、図２のフローチャートを用いてプログラム検出装置１の動作について説明する。なお、ここでは、第二ソースプログラムを構成するソースコードが、これに対応する命令パターン識別情報と対応付けられている場合を例に挙げて説明する。
【００６６】
（ステップＳ２０１）不具合命令パターン識別情報取得部１０２は、ソースプログラム格納部１０１から第一ソースプログラムを読み出す。
【００６７】
（ステップＳ２０２）不具合命令パターン識別情報取得部１０２は、ステップＳ２０１で読み出した第一ソースプログラムに対応するプログラムを実行させて、予め指定された１以上のテスト用のデータ等を用いて１以上のテストを行った場合の、不具合の原因のとなるソースコード、具体的にはプログラム実行時に不具合が検出された箇所に対応するソースコードを示す情報を取得する。ソースコードを示す情報は、ソースコード自身であっても、ソースコードを特定可能な識別情報、例えば行番号等であっても良い。不具合命令パターン識別情報取得部１０２は、例えば、第一ソースプログラムに対応するプログラムを、予め指定されたステップ毎に実行させて、プログラムの不具合をこの実行させたステップ単位毎に判断できるようにし、不具合であると判断されたソースコードの部分を示す情報を取得する。プログラムの不具合の判断は、ユーザが行っても良いし、不具合命令パターン識別情報取得部１０２が自動で行っても良い。例えば、第一ソースプログラムが行単位記述されたソースプログラムである場合、第一ソースプログラムに対応するプログラムを、第一ソースプログラムの行単位に相当する単位で実行させて、第一ソースプログラム内の不具合のあると判断された部分を示す情報、例えば行を示す情報を取得する。例えば、行単位に相当する単位で第一ソースプログラムを実行させた場合の、ユーザから、不具合が検出された行の指定、具体的には行番号の指定を受け付ける。このような受け付けも、ここでは、取得と考える。このような不具合のあるソースコードを検出するための処理は、デバッガ等の処理として公知であるので詳細な説明は省略する。なお、不具合命令パターン識別情報取得部１０２は、第一ソースプログラムを実行させる実行部（図示せず）を供えていても良いし、外部の実行部に第一ソースプログラムを実行させてもよい。また、不具合命令パターン識別情報取得部１０２は、デバッガを実行するデバッガ実行部（図示せず）や、これと同等の処理を実行可能な実行部等を供えていても良いし、外部の実行部にデバッガの処理を実行させても良い。また、不具合命令パターン識別情報取得部１０２は、予め指定されたテストの実行に用いられるテストデータやテストを設定する情報等が格納され得るテストデータ格納部（図示せず）等を備えていてもよい。
【００６８】
（ステップＳ２０３）不具合命令パターン識別情報取得部１０２は、不具合の原因となるソースコードに対応した命令パターン識別情報である不具合命令パターン識別情報を取得する。具体的には、不具合命令パターン識別情報取得部１０２は、ステップＳ２０２で取得した不具合の原因となるソースコードを示す情報に対応した命令パターン識別情報を不具合命令パターン識別情報として取得する。例えば、第一ソースプログラム内にソースコードと対応付けて格納されている命令パターン識別情報の中から、ステップＳ２０２で取得したソースコードを示す情報が示すソースコードと対応付けられた命令パターン識別情報を取得する。あるいは、第一ソースプログラム内のソースコードを示す情報と、ソースコードを対応する命令パターン識別情報とを対応付けて管理する管理情報から、ステップＳ２０２で取得したソースコードを示す情報と対応付けられた命令パターン識別情報を取得してもよい。なお、ここで取得する命令パターン識別情報は、第一ソースプログラムの変換に用いられた命令パターンについての命令パターン識別情報に限定するようにしても良い。
【００６９】
（ステップＳ２０４）影響プログラム取得部１０３は、ソースプログラム格納部１０１に格納されているステップＳ２０３で取得した命令パターン識別情報と一致する命令パターン識別情報と対応付けられたソースコードを有する第二ソースプログラムを検出する。例えば、各第二ソースプログラム内に、当該ソースプログラムを構成するソースコードと、当該ソースコードに対応する命令パターン識別情報とが対応付けて格納されている場合、ステップＳ２０３で取得した各命令パターン識別情報と一致する命令パターン識別情報が含まれているかを、各第二ソースプログラム別に検索し、含まれている第二ソースプログラムを検出する。また、例えば、各第二ソースプログラムと、各第二ソースプログラムを構成するソースコードに対応する命令パターン識別情報とを、対応付けて管理する管理情報が設けられている場合、ステップＳ２０３で取得した命令パターン識別情報と一致する命令パターン識別情報と対応付けられた第二ソースプログラムを検出してもよい。
【００７０】
（ステップＳ２０５）影響プログラム取得部１０３は、ステップＳ２０４で検出した第二ソースプログラムを示す情報を取得する。なお、この第二ソースプログラムを示す情報を、検出に用いた命令パターン識別情報と対応付けて取得してもよい。
【００７１】
（ステップＳ２０６）出力部１０４は、ステップＳ２０５において取得した第二ソースプログラムを示す情報を出力する。なお、第二ソースプログラムを、当該第二ソースプログラムと対応付けられた命令パターン識別情報と対応付けて出力しても良い。そして処理を終了する。
【００７２】
なお、この処理においては、第一命令パターン格納部１０５は省略しても良い。
【００７３】
図３は、プログラム検出装置１の動作の変形例を示すフローチャートである。この変形例は、第二ソースプログラムを構成するソースコードが、これに対応する命令パターン識別情報と対応付けられていない場合の処理例を示すものである。以下、図３のフローチャートを用いてプログラム検出装置１の変形例の動作について説明する。なお、図３において、図２と同一符号のステップは、同一又は相当する処理ステップであることを示す。
【００７４】
（ステップＳ３０１）影響プログラム取得部１０３は、カウンターｎに１を代入する。
【００７５】
（ステップＳ３０２）影響プログラム取得部１０３は、ステップＳ２０３で取得した不具合命令パターン識別情報のうちの、ｎ番目の不具合命令パターン識別情報に対応する命令パターンを、第一命令パターン格納部１０５から読み出す。
【００７６】
（ステップＳ３０３）影響プログラム取得部１０３は、カウンターｍに１を代入する。
【００７７】
（ステップＳ３０４）影響プログラム取得部１０３は、ｍ番目の第二ソースプログラムをソースプログラム格納部１０１から読み出す。
【００７８】
（ステップＳ３０５）影響プログラム取得部１０３は、ｍ番目の第二ソースプログラム内に、ｎ番目の不具合命令パターン識別情報に対応する命令パターンに一致するソースコードがあるか否かを判断する。一致するソースコードがある場合、ステップＳ３０６に進み、ない場合、ステップＳ３０７に進む。例えば、影響プログラム取得部１０３は、ｍ番目の第二ソースプログラムから、予め指定された区切を指定する指定情報等で区切られる単位でソースコードを読み出し、パターンマッチングにより、ｎ番目の命令パターン識別情報に対応する命令パターンと一致するか否かを判断する。一致するものが検出できた時点で、一致するソースコードがあると判断して良い。
【００７９】
（ステップＳ３０６）影響プログラム取得部１０３は、ｍ番目の第二ソースプログラムを示す情報を取得する。取得した第二ソースプログラムを示す情報を、図示しない格納部に蓄積する。なお、第二ソースプログラムを示す情報を、ｎ番目の不具合命令パターン識別情報と対応付けて蓄積しても良い。
【００８０】
（ステップＳ３０７）影響プログラム取得部１０３は、カウンターｍの値を１インクリメントする。
【００８１】
（ステップＳ３０８）影響プログラム取得部１０３は、ｍ番目の第二ソースプログラムが、ソースプログラム格納部１０１にあるか否かを判断する。ある場合、ステップ３０４に戻り、ない場合、ステップＳ３０９に進む。
【００８２】
（ステップＳ３０９）影響プログラム取得部１０３は、カウンターｎの値を１インクリメントする。
【００８３】
（ステップＳ３１０）影響プログラム取得部１０３は、ステップＳ２０３で取得した命令パターン識別情報の中に、ｎ番目の命令パターン識別情報があるか否かを判断する。ある場合、ステップＳ３０２に戻り、ない場合、ステップＳ３１１に進む。
【００８４】
（ステップＳ３１１）影響プログラム取得部１０３は、ステップＳ３０６で取得した第二ソースプログラム識別情報があるか否かを判断する。ある場合、ステップＳ３１２に進み、ない場合、処理を終了する。なお、ない場合、不具合の命令パターンに対応するソースコードを含む第二ソースプログラムがなかった旨の出力を出力部１０４に行わせるようにしても良い。
【００８５】
（ステップＳ３１２）出力部１０４は、ステップＳ３０６において取得した第二ソースプログラムを示す情報を出力する。なお、第二ソースプログラムを示す情報を、当該情報と対応付けて蓄積された命令パターン識別情報等と対応付けて出力しても良い。そして処理を終了する。
【００８６】
以下、本実施の形態におけるプログラム検出装置１の具体的な動作について説明する。
【００８７】
（具体例１）
この具体例においては、第二ソースプログラムとして、当該第二ソースプログラムを構成するソースコードと、当該ソースコードに対応する命令パターンとが対応付けられたソースプログラムを用いる場合について説明する。この具体例は、図３のフローチャートに示した処理に対応する例である。
【００８８】
図４は、第一および第二ソースプログラムに含まれ得る命令パターンと、命令パターン識別情報との対応関係を管理する命令パターン管理表である。この命令パターン管理表で管理される情報が、例えば、第一命令パターン格納部１０５に格納されている。ただし、この具体例においては、この命令パターン管理表は説明のためのものであり、処理には利用しない。命令パターン管理表は、「パターンＩＤ」と、「第一命令パターン」と、「第二命令パターン」という項目を有している。「パターンＩＤ」は、命令パターン識別情報である。ここでは、特に、命令パターンは、第一命令パターンと第二命令パターンとに分けられている。第一命令パターンは、変換前のソースプログラムを構成するソースコードに対応した命令パターンである。また、第二命令パターンは変換後のソースプログラムを構成するソースコードに対応した命令パターンである。第一命令パターンと対応付けられた第二命令パターンとは、第一命令パターンが対応する変換前のソースプログラム内のソースコードの変換に用いられる命令パターンである。第一命令パターンが対応する変換前のソースプログラム内のソースコードが、対応する第二命令パターンが示すパターンを有するソースコードとなるように変換される。なお、「パターンＩＤ」は、第二命令パターンの識別情報と考えても良いし、第一命令パターンの識別情報と考えても良い。この命令パターン管理表においては、対応する命令パターン識別情報と、第一命令パターンと、第二命令パターンとが一のレコードで管理されている。なお、「パターンＩＤ」の末尾が「Ｓ」の行から、次に現れる末尾が「Ｅ」である「パターンＩＤ」の行までのレコードの「第一命令パターン」は、例えば、一の命令パターンであることを示す。また、第二命令パターンにおける「＃ＤＥＬ＃」は、第一命令パターンに対応した置き換え用の第二命令パターン情報がなく、第一命令パターン情報に対応する第一ソースプログラムの記述箇所を、削除する処理が行われることを示す文字列であるとする。また、第二命令パターンが空欄であるレコードについては、当該レコードの第一命令パターンに対応するソースコードについては変換が行われないことを示す。
【００８９】
図５は、ソースプログラム格納部１０１に格納されている第一ソースプログラムおよび第二ソースプログラムの一例を示す図である。この第一および第二ソースプログラムは、図４に示したような命令パターン管理表で管理される第一命令パターンと第二命令パターンとを用いて、予め用意された変換前のソースプログラム（図示せず）の第一命令パターンに対応するソースコードを、この第一命令パターンに対応する第二命令パターンに対応するソースコードに変換して得られた、パターン変換済のソースプログラムであるとする。パターン変換の処理については、ここでは説明を省略する。この変換においては、ソースプログラムの行単位でソースコードの変換が行われたものとする。このソースプログラムにおいては、各行の１から６カラムまでが行番号等を記述する領域であり、各行の８１カラム以降がコメントを記述するコメント領域であるとする。また、「＊」で始まる文字列（例えば「＊」からピリオドや改行コードまでの文字列）は、コメント行であるとする。このソースプログラムのコメント行には、ソースプログラムの変換に用いられた第一命令パターンと第二命令パターンの組みの識別情報であるパターンＩＤが配置されているものとする。なお、複数行にわたるソースコードが一の第二命令パターンを用いて変換された部分については、変換に用いられた第二命令パターンのパターンＩＤが、複数行のそれぞれの行のコメント領域に記述されるとともに、その先頭行のパターンＩＤの末尾には、「Ｓ」が、また、最終行のパターンＩＤの末尾には、「Ｅ」が記述されるものとする。なお、ここでは、第二命令パターンによる変換が行われなかった行のコメント領域にも、この行に対応する第一命令パターンに対応付けられたパターンＩＤが記述されるものとする。
【００９０】
まず、ユーザが第一ソースプログラムの不具合の原因となるソースコードを検出する指示を、メニュー等を操作してプログラム検出装置１に与えると、不具合命令パターン識別情報取得部１０２は、ソースプログラム格納部１０１に格納されている図５に示したソースプログラムを読み出し、ソースプログラムに対応したプログラムを実行させ、ソースプログラムに対して予め用意された１以上のテストを行う。プログラムの実行は、不具合命令パターン識別情報取得部１０２が行っても良いし、外部に設けられた実行部（図示せず）等により実行させても良い。ここでは、不具合命令パターン識別情報取得部１０２は、不具合箇所が検出できるように、ステップ単位で処理を実行する。例えばソースプログラムが行単位でソースコードを実行するインタプリタ型のソースプログラムであったとすると、ソースプログラムに対応したプログラムは、ソースプログラム自身であり、ソースプログラムが行単位で実行される。ここでの実行は、ソースプログラムを実際に実行させることであっても良いし、ソースプログラムの動作のシミュレーションの実行であっても良い。なお、ここでのソースプログラムに対応したプログラムの実行は、ソースプログラムに対応したプログラムの、プログラム実行時に使用された部分に対応するソースコードを検出できるようにするために、予め指定された文字列等を付加したソースプログラムに対応したプログラムの実行であっても良い。
【００９１】
つぎに、不具合命令パターン識別情報取得部１０２は、例えばステップ単位で実行されたソースコードが不具合箇所であるか否かを示す情報をユーザ等から受け付ける。例えば、一のステップを実施した場合に得られる結果等が、不適切な結果であるとユーザが判断し、このステップに対応したソースコードを指定する情報を図示しない受付部等を介して入力すると、不具合命令パターン識別情報取得部１０２は、このソースコードを示す情報を、不具合の原因となるソースコードを示す情報として取得する。このソースコードを示す情報は、ここでは、例えば、行番号である。なお、ソースプログラムをステップ単位等の予め指定された単位で実行できるようにする処理については、いわゆるデバッガ等の処理と同様であるので、ここでは説明を省略する。
【００９２】
例えば、図６に示すように、ステップ単位で実行されるソースコードを示す画面において、「０１００００」行のソースコードにおいて不具合を検出したとし、ユーザがこの行が不具合のあるソースコードを含む行であることを指定するボタン６１をマウス（図示せず）等を操作して押したとする。不具合命令パターン識別情報取得部１０２は、この操作によって、この行番号「０１００００」を不具合の原因となるソースコードを示す情報として取得する。
【００９３】
つぎに、不具合命令パターン識別情報取得部１０２は、取得した不具合の原因となるソースコードを示す情報と対応付けられた不具合命令パターン識別情報を取得する。具体的には、テスト等が実行された第一ソースプログラムの、取得した不具合の原因となるソースコードを示す情報である行番号に対応するコメント領域に格納されているパターンＩＤを取得する。
【００９４】
ここで、この具体例においては、不具合の原因となるソースコードのうちの、第二命令パターンで変換されたソースコードと対応付けられたパターンＩＤを取得する場合を例に挙げて説明する。このようにすることで、命令パターンを用いた変換に起因する不具合を検出することが可能となる。
【００９５】
具体的には、取得したパターンＩＤに対応する第二命令パターンがあるか否かを、図４に示した命令パターン管理表を用いて判断する。そして、対応する第二命令パターンがある場合は、このパターンＩＤを不具合の原因となるソースコードを示す情報パターンと対応付けられた命令パターン識別情報として取得する。そして取得したパターンＩＤを、図示しない記憶媒体等に一時記憶する。また、対応する第二命令パターンがない場合は、パターンＩＤを取得しない。
【００９６】
例えば、不具合命令パターン識別情報取得部１０２が、図５に示したような第一ソースプログラムについて、不具合の原因となるソースコードを示す情報として行番号「０１００００」を受け付け、この行番号に対応したパターンＩＤ「０６０９９９００００１０」を取得したとする。この場合、不具合命令パターン識別情報取得部１０２は、取得したパターンＩＤ「０６０９９９００００１０」に対応付けられた第二命令パターンがあるか否かを、図４に示した命令パターン管理表において判断する。図４に示した命令パターン管理表においては、パターンＩＤ「０６０９９９００００１０」に対応する第二命令パターンはないため、このパターンＩＤを不具合の原因となるソースコードに対応した命令パターン識別情報として取得しない。
【００９７】
一方、不具合命令パターン識別情報取得部１０２が、図５に示したような第一ソースプログラムについて、不具合の原因となるソースコードを示す情報として行番号「０１０３００」を受け付け、この行番号に対応したパターンＩＤ「０８０９９９００００４０」を取得したとする。この場合、不具合命令パターン識別情報取得部１０２は、取得したパターンＩＤ「０８０９９９００００４０」に対応付けられた第二命令パターンがあるか否かを、図４に示した命令パターン管理表において判断する。図４に示した命令パターン管理表においては、パターンＩＤ「０８０９９９００００４０」に対応付けられた第二命令パターンがあるため、このパターンＩＤを不具合の原因となるソースコードに対応した不具合命令パターン識別情報として取得する。取得したパターンＩＤを、図示しない格納部等に一時記憶する。
【００９８】
図７は、不具合命令パターン識別情報取得部１０２が取得して蓄積したパターンＩＤである不具合命令パターン識別情報を示す図である。
【００９９】
次に、影響プログラム取得部１０３は、図示しない格納部等に蓄積された図７に示すような不具合命令パターン識別情報から一の不具合命令パターン識別情報、例えば「０８９９９０００４０」を読み出す。さらに、ソースプログラム格納部１０１から一の第二ソースプログラム、例えばファイル名が「ソースＡ」である第二ソースプログラムを読み出し、この第二ソースプログラムのコメント領域に、読み出した不具合命令パターン識別情報と一致するパターンＩＤが１以上あるか否かを検索する。そして、１以上検出できた場合、この第二ソースプログラムを示す情報、例えばここではファイル名を取得する。例えば、ファイル名が「ソースＡ」である第二ソースプログラムのコメント欄に、読み出した不具合命令パターン識別情報「０８９９９０００４０」と一致するパターンＩＤが検出されたとすると、このファイル名「ソースＡ」を、不具合命令パターン識別情報「０８９９９０００４０」を用いて変換されたソースコードを有する第二ソースプログラムを示す情報として取得する。そして、この第二ソースプログラムを示す情報であるファイル名「ソースＡ」を、不具合命令パターン識別情報「０８９９９０００４０」と対応付けて蓄積する。
【０１００】
一方、ソースプログラム格納部１０１に格納されているファイル名が「ソースＢ」である第二ソースプログラムのコメント領域に、読み出した不具合命令パターン識別情報「０８９９９０００４０」と一致するパターンＩＤが検出されなかった場合、このファイル名は取得しない。
【０１０１】
このようにして、影響プログラム取得部１０３は、一の不具合命令パターン識別情報「０８９９９０００４０」を用いて、ソースプログラム格納部１０１に格納されている全ての第二ソースプログラムについて、上記と同様のファイル名を取得する処理を行った後、さらに、図７に示した不具合命令パターン識別情報のうちの残りの不具合命令パターン識別情報についてもそれぞれ上記と同様の処理を行う。そして、影響プログラム取得部１０３は、ファイル名と、当該ファイル名が示す第二ソースプログラムに含まれる不具合命令パターン識別情報とを対応付けた情報を取得する。
【０１０２】
図８は、影響プログラム取得部１０３が取得した第二ソースプログラムのファイル名と、当該ファイル名が示す第二ソースプログラムに含まれる不具合命令パターン識別情報とを対応付けて管理する不具合ファイル管理情報を示す図である。不具合ファイル管理情報は、「不具合命令パターン識別情報」と「ファイル名」という項目を有している。「不具合命令パターン識別情報」は不具合命令パターン識別情報である。「ファイル名」は、不具合命令パターン識別情報と同じパターンＩＤを有する第二ソースプログラムのファイル名である
【０１０３】
出力部１０４は、図８に示すような、影響プログラム取得部１０３が取得した第二ソースプログラムを示す情報と、各第二ソースプログラムに含まれる不具合命令パターン識別情報とを対応付けた不具合ファイル管理情報を、例えばモニタ等に出力する。
【０１０４】
図９は、出力部１０４の出力例、即ち表示例を示す図である。
【０１０５】
このような出力によって、第一ソースプログラムの不具合の原因となるソースコードと同じ命令パターンで変換されたソースコードを含む第二ソースプログラム、即ち同じ命令を用いた変換による不具合の影響を受け得る第二ソースプログラムと、その変換に用いられた命令パターンとをユーザ等に知らせることができる。
【０１０６】
（具体例２）
次に、上記具体例において、不具合命令パターン識別情報が示す命令パターンに対応するソースコードを有する第二のソースプログラムを、当該第二ソースプログラムのソースコードと、不具合命令パターン識別情報が示す命令パターンとのパターンマッチングを用いて検出するようにした場合について説明する。この具体例は、図４のフローチャートに示した処理に対応する例である。なお、この具体例２においては、第二ソースプログラムのソースコードは、パターンＩＤと対応付けられていなくて良い。
【０１０７】
不具合命令パターン識別情報取得部１０２が図７に示すような、不具合命令パターン識別情報を取得するまでの動作については、上記具体例と同様であるので説明を省略する。
【０１０８】
影響プログラム取得部１０３は、図示しない格納部等に蓄積された図７に示すような不具合命令パターン識別情報から一の不具合命令パターン識別情報、例えば「０８９９９０００４０」を読み出す。そして、図４に示したような命令パターン管理表から、読み出した不具合命令パターン識別情報「０８９９９０００４０」と対応付けられた命令パターン、ここでは、「ＳＥＬＥＣＴ  変数０１  ＡＳＳＩＧＮ  ＴＯ  変数０１ＩＮ．」を取得する。
【０１０９】
次に、ソースプログラム格納部１０１から一の第二ソースプログラム、例えばファイル名が「ソースＡ」である第二ソースプログラムを読み出す。そして、この第二ソースプログラムから、予め指定された指定情報で区切られるソースコードを順次読み出し、上記の命令パターンとのパターンマッチングを行っていく。予め指定された指定情報で区切られるソースコードとは、例えば「．」（ピリオド）で区切られるソースコードである。パターンマッチングは、いわゆる正規表現を用いた検索処理や比較処理と同様である。例えば、「ＳＥＬＥＣＴ  ＲＮ１４  ＡＳＳＩＧＮ  ＴＯ  ＲＮ１４ＩＮ．」というソースコードが「ソースＡ」に含まれていた場合、命令パターンとマッチングすると判断される。パターンがマッチングする一のソースコードが検出された時点で、この第二ソースプログラムを、不具合命令パターンに対応したソースコードを含む第二ソースプログラムと判断する。そして、この第二ソースプログラムのファイル名「ソースＡ」を、不具合命令パターン識別情報「０８９９９０００４０」と対応付けて蓄積する。マッチングするソースコードが１つも検出されなかった第二ソースファイルのファイル名は取得しない。
【０１１０】
このようにして、影響プログラム取得部１０３は、一の不具合命令パターン識別情報「０８９９９０００４０」に対応した命令パターンを用いて、ソースプログラム格納部１０１に格納されている全ての第二ソースプログラムについて、上記と同様のファイル名を取得する処理を行った後、さらに、図７に示した不具合命令パターン識別情報のうちの残りの不具合命令パターン識別情報についてもそれぞれ上記と同様の処理を行う。そして、影響プログラム取得部１０３は、図８と同様の、ファイル名と、当該ファイル名が示す第二ソースプログラムに含まれる不具合命令パターン識別情報とを対応付けた情報を取得する。
【０１１１】
この具体例においては、第二ソースプログラムのソースコードが、命令パターンと予め対応付けられていなくても良い。このため、通常のソースプログラムをそのまま第二ソースプログラムとして用いることができるため、汎用性が高い。
【０１１２】
以上、本実施の形態によれば、第一ソースプログラム中の、不具合の原因となるソースコードに対応した命令パターン識別情報を取得し、この命令パターン識別情報に対応したソースコードを含む第二ソースプログラムを示す情報を取得できるようにしたことにより、第一ソースプログラムにおいて発生した不具合と同様の不具合が発生すると考えられる第二ソースプログラムを、テスト等を行うことなく、検出することが可能となる。
【０１１３】
（変形例１）
上記実施の形態においては、ソースコードと、当該ソースコードに対応する命令パターン識別情報とが対応付けられた第一ソースプログラムを用いて、第一ソースプログラムにおいて不具合が検出された場合に、その検出された箇所に対応する命令パターン識別情報を取得するようにした。
【０１１４】
しかしながら、本発明においては、以下に示す変形例１のように、予め第一ソースプログラムのソースコードに含まれ得る命令パターンと、当該命令パターンの識別情報とが対応付けて格納された第二命令パターン格納部１０６を設けるようにし、第二命令パターン格納部１０６に格納されている命令パターンから、第一ソースプログラムにおいて不具合が検出されたソースコードと対応する命令パターンを、パターンマッチングにより検出し、その命令パターンに対応付けられた命令パターン識別情報を不具合命令パターン識別情報として検出するようにしてもよい。
【０１１５】
図１０は、本実施の形態の変形例におけるプログラム検出装置２の構成を示すブロック図である。図において、図一と同一符号は同一又は相当する部分を示している。
【０１１６】
第二命令パターン格納部１０６には、命令パターン識別情報と、当該命令パターン識別情報に対応する命令パターンとが対応付けて格納され得る。この命令パターンは、第二ソースプログラムを構成する命令に対応する命令パターンである。第二命令パターン格納部１０６に格納される情報は、上述した第一命令パターン格納部１０５に格納される命令パターンと同様のものであってもよい。なお、第二命令パターン格納部１０６に格納される命令パターンは、第二ソースプログラムをパターン変換する際に用いられ得る変換後の命令パターンを示す命令パターンのみとしても良い。第二命令パターン格納部１０６は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。なお、第二命令パターン格納部１０６と第一命令パターン格納部１０５とに、実質的に同じ情報が格納される場合、いずれか一方のみを設けて、格納されている情報を第二命令パターン格納部１０６と第一命令パターン格納部１０５とに格納されている情報として兼用するようにしても良い。
【０１１７】
この変形例においては、不具合命令パターン識別情報取得部１０２は、ソースプログラム格納部１０１に格納されている第一ソースプログラムに基づくプログラムを実行させた場合の、不具合の原因となるソースコードに対応する命令パターンと対応付けられた命令パターン識別情報を、不具合命令パターン識別情報として第二命令パターン格納部１０６から取得する。具体的には、不具合命令パターン識別情報取得部１０２は、第二命令パターン格納部１０６に格納されている命令パターンと、不具合が検出されたソースコードとのパターンマッチングを行って、不具合が検出されたソースコードと対応する命令パターンを検出する。そして、不具合命令パターン識別情報取得部１０２は、検出した命令パターンと対応付けられた命令パターンし識別情報を取得する。その他の処理については、上述した不具合命令パターン識別情報取得部１０２と同様である。
【０１１８】
この変形例においては、例えば、図５に示したような第一ソースプログラムの行番号「０１０２００」のソースコード「ＳＥＬＥＣＴ  ＲＮ−１１  ＡＳＳＩＧＮ  ＴＯ   Ｓ−ＲＮ１１ＩＮ．」に不具合が検出されたとすると、不具合命令パターン識別情報取得部１０２は、このソースコードと、第二命令パターン格納部１０６に格納されている命令パターンとのパターンマッチングを順番に行って、対応する命令パターンを検出する。
【０１１９】
例えば、図４と同様の命令パターン管理表で対応関係が管理されている命令パターンと、命令パターン識別情報とが、第二命令パターン格納部１０６に格納されていたとすると、この管理表の「第二命令パターン」のデータを順番に読み出し、パターンマッチングを行って、対応する第二命令パターンを検出する。ここでは、例えば、第二命令パターンの「ＳＥＬＥＣＴ  変数０１  ＡＳＳＩＧＮ  ＴＯ  変数０１ＩＮ．」がソースコード「ＳＥＬＥＣＴ  ＲＮ−１１  ＡＳＳＩＧＮ  ＴＯ  Ｓ−ＲＮ１１ＩＮ．」とマッチングしたと判断されたとすると、この第二命令パターンに対応するパターンＩＤを不具合命令パターン識別情報として第二命令パターン格納部１０６から取得する。これにより、不具合命令パターン識別情報が取得できる。以下の処理は上記具体例１，２等と同様である。
【０１２０】
このような変形例においては、予め第一ソースプログラムのソースコードと命令パターンとが対応付けられていなくても良い。このため、通常のソースプログラムをそのまま第一ソースプログラムとして用いることができるため、汎用性が高い。
【０１２１】
なお、上記各実施の形態において、各処理（各機能）は、単一の装置（システム）によって集中処理されることによって実現されてもよく、あるいは、複数の装置によって分散処理されることによって実現されてもよい。
【０１２２】
また、上記各実施の形態において、一の装置に存在する２以上の通信手段（情報送信部など）は、物理的に一の媒体で実現されても良いことは言うまでもない。
【０１２３】
また、上記実施の形態において、各構成要素が実行する処理に関係する情報、例えば、各構成要素が受け付けたり、取得したり、選択したり、生成したり、送信したり、受信したりする情報や、各構成要素が処理で用いるしきい値や数式、アドレス等の情報等は、上記説明で明記していない場合であっても、図示しない記録媒体において、一時的に、あるいは長期にわたって保持されていてもよい。また、その図示しない記録媒体への情報の蓄積を、各構成要素、あるいは、図示しない蓄積部が行ってもよい。また、その図示しない記録媒体からの情報の読み出しを、各構成要素、あるいは、図示しない読み出し部が行ってもよい。
【０１２４】
また、上記各実施の形態では、プログラム検出装置がスタンドアロンである場合について説明したが、プログラム検出装置は、スタンドアロンの装置であってもよく、サーバ・クライアントシステムにおけるサーバ装置であってもよい。後者の場合には、出力部や受付部は、通信回線を介して入力を受け付けたり、画面を出力したりすることになる。
【０１２５】
また、上記各実施の形態において、各構成要素は専用のハードウェアにより構成されてもよく、あるいは、ソフトウェアにより実現可能な構成要素については、プログラムを実行することによって実現されてもよい。例えば、ハードディスクや半導体メモリ等の記録媒体に記録されたソフトウェア・プログラムをＣＰＵ等のプログラム実行部が読み出して実行することによって、各構成要素が実現され得る。
【０１２６】
なお、上記各実施の形態におけるプログラム検出装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータを、第一のソースプログラムに基づくプログラムを実行させた場合の、不具合の原因となるソースコードに対応した命令パターンの識別情報である不具合命令パターン識別情報を取得する不具合命令パターン識別情報取得部と、１以上の第一のソースプログラムと、１以上の第二のソースプログラムが格納され得るソースプログラム格納部に格納されている第二のソースプログラムについて、不具合命令パターン識別情報が示す命令パターンに対応するソースコードを有する第二のソースプログラムを検出し、検出した第二のソースプログラムを示す情報を取得する影響プログラム取得部と、影響プログラム取得部が取得したソースプログラムを示す情報を出力する出力部として機能させるためのプログラムである。
【０１２７】
なお、上記プログラムにおいて、上記プログラムが実現する機能には、ハードウェアでしか実現できない機能は含まれない。例えば、情報を取得する取得部や、情報を出力する出力部などにおけるモデムやインターフェースカードなどのハードウェアでしか実現できない機能は、上記プログラムが実現する機能には含まれない。
【０１２８】
また、このプログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
【０１２９】
図１１は、上記プログラムを実行して、上記実施の形態によるプログラム検出装置を実現するコンピュータの外観の一例を示す模式図である。上記実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムによって実現されうる。
【０１３０】
図１１において、コンピュータシステム９００は、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ドライブ９０５、ＦＤ（Ｆｌｏｐｐｙ（登録商標）  Ｄｉｓｋ）ドライブ９０６を含むコンピュータ９０１と、キーボード９０２と、マウス９０３と、モニタ９０４とを備える。
【０１３１】
図１２は、コンピュータシステム９００の内部構成を示す図である。図１２において、コンピュータ９０１は、ＣＤ−ＲＯＭドライブ９０５、ＦＤドライブ９０６に加えて、ＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９１１と、ブートアッププログラム等のプログラムを記憶するためのＲＯＭ９１２と、ＭＰＵ９１１に接続され、アプリケーションプログラムの命令を一時的に記憶すると共に、一時記憶空間を提供するＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１３と、アプリケーションプログラム、システムプログラム、及びデータを記憶するハードディスク９１４と、ＭＰＵ９１１、ＲＯＭ９１２等を相互に接続するバス９１５とを備える。なお、コンピュータ９０１は、ＬＡＮへの接続を提供する図示しないネットワークカードを含んでいてもよい。
【０１３２】
コンピュータシステム９００に、上記実施の形態によるプログラム検出装置等の機能を実行させるプログラムは、ＣＤ−ＲＯＭ９２１、またはＦＤ９２２に記憶されて、ＣＤ−ＲＯＭドライブ９０５、またはＦＤドライブ９０６に挿入され、ハードディスク９１４に転送されてもよい。これに代えて、そのプログラムは、図示しないネットワークを介してコンピュータ９０１に送信され、ハードディスク９１４に記憶されてもよい。プログラムは実行の際にＲＡＭ９１３にロードされる。なお、プログラムは、ＣＤ−ＲＯＭ９２１やＦＤ９２２、またはネットワークから直接、ロードされてもよい。
【０１３３】
プログラムは、コンピュータ９０１に、上記実施の形態によるプログラム検出装置の機能を実行させるオペレーティングシステム（ＯＳ）、またはサードパーティプログラム等を必ずしも含んでいなくてもよい。プログラムは、制御された態様で適切な機能（モジュール）を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいてもよい。コンピュータシステム９００がどのように動作するのかについては周知であり、詳細な説明は省略する。
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【産業上の利用可能性】
【０１３４】
以上のように、本発明にかかるプログラム検出装置は、ソースプログラムの不具合を検出する装置等として適しており、特に、命令パターンを用いて変換されたソースプログラムの不具合を検出する装置等として有用である。
【符号の説明】
【０１３５】
１、２  プログラム検出装置
１０１  ソースプログラム格納部
１０２  不具合命令パターン識別情報取得部
１０３  影響プログラム取得部
１０４  出力部
１０５  第一命令パターン格納部
１０６  第二命令パターン格納部
【図１】
2011170474.tif 000003
【図２】
2011170474.tif 000004
【図３】
2011170474.tif 000005
【図４】
2011170474.tif 000006
【図５】
2011170474.tif 000007
【図６】
2011170474.tif 000008
【図７】
2011170474.tif 000009
【図８】
2011170474.tif 000010
【図９】
2011170474.tif 000011
【図１０】
2011170474.tif 000012
【図１１】
2011170474.tif 000013
【図１２】
2011170474.tif 000014