(57)【要約】【課題】プログラムの動的解析をより高速に行うことができるようにする。【解決手段】本技術の情報処理装置は、プログラムを実行させて解析する動的解析の監視対象の中から、前記プログラムのソースコードの変更部分に関連するものを特定する特定部と、前記特定部により特定された監視対象を監視するように動的解析を行う動的解析部とを備える。本開示は例えばプログラムのデバッグを行う解析装置に適用することができる。【選択図】図１
2013206266.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行させて解析する動的解析の監視対象の中から、前記プログラムのソースコードの変更部分に関連するものを特定する特定部と、
前記特定部により特定された監視対象を監視するように動的解析を行う動的解析部と
を備える情報処理装置。
【請求項２】
前記特定部は、前記変更部分が使用するメモリ領域を特定し、
前記動的解析部は、前記特定部により特定された前記メモリ領域に対するアクセス、および、前記メモリ領域に格納される値の内、少なくともいずれか一方を監視する
請求項１に記載の情報処理装置。
【請求項３】
前記特定部は、前記ソースコードの各部分とメモリアドレスを関連付ける情報をコンパイラから取得し、取得した前記情報に基づいて、前記変更部分が使用するメモリ領域を特定する
請求項２に記載の情報処理装置。
【請求項４】
ウォッチポイントを監視し、前記ウォッチポイントの値が変化する場合、前記プログラムの実行を停止するブレークポイント処理を実行するブレークポイント処理部をさらに備え、
前記動的解析部は、前記特定部により特定された前記メモリ領域に前記ウォッチポイントを設定し、前記ブレークポイント処理部に対して、前記ウォッチポイントに対する前記ブレークポイント処理を実行させる
請求項２に記載の情報処理装置。
【請求項５】
前記動的解析部は、前記特定部により特定されたメモリ領域の近傍に、デバッグ用の領域を確保する
請求項２に記載の情報処理装置。
【請求項６】
前記特定部は、前記変更部分から生成される命令を特定し、
前記動的解析部は、前記特定部により特定された前記命令の実行を監視する
請求項１に記載の情報処理装置。
【請求項７】
前記特定部は、前記ソースコードの各部分と命令アドレスを関連付ける情報をコンパイラから取得し、取得した前記情報に基づいて、前記変更部分から生成される命令を特定する
請求項６に記載の情報処理装置。
【請求項８】
ブレークポイントを監視し、前記ブレークポイントの命令が実行される場合、前記プログラムの実行を停止するブレークポイント処理を実行するブレークポイント処理部をさらに備え、
前記動的解析部は、前記特定部により特定された前記命令の命令アドレスに前記ブレークポイントを設定し、前記ブレークポイント処理部に対して、前記ブレークポイントに対する前記ブレークポイント処理を実行させる
請求項６に記載の情報処理装置。
【請求項９】
他の環境を模倣する模倣処理部をさらに備え、
前記動的解析部は、前記模倣処理部に対して、他の環境を模倣させ、前記環境において前記プログラムを実行させる
請求項１に記載の情報処理装置。
【請求項１０】
前記特定部は、前記変更部分に関連するデバッグ出力命令を特定し、特定した前記デバッグ出力命令以外のデバッグ出力命令の実行を削除または抑制し、
前記動的解析部は、前記特定部により特定された前記デバッグ出力命令が実行されて出力されるデバッグ出力を監視する
請求項１に記載の情報処理装置。
【請求項１１】
前記特定部は、プログラム中のデバッグ出力命令の一覧を取得し、取得した前記デバッグ出力命令の一覧に基づいて、前記変更部分に関連するデバッグ出力命令を特定する
請求項１０に記載の情報処理装置。
【請求項１２】
前記特定部は、ユーザによりデバッグ出力命令として指定される出力命令の一覧を、前記デバッグ出力命令の一覧として取得する
請求項１１に記載の情報処理装置。
【請求項１３】
前記特定部は、ソースコードに含まれる出力命令の特徴、若しくは、コンパイルされた命令列に含まれる出力命令の特徴に基づいてデバッグ出力命令として選択される出力命令の一覧を、前記デバッグ出力命令の一覧として取得する
請求項１１に記載の情報処理装置。
【請求項１４】
前記特定部は、所定の文字列の出力を行う出力命令の一覧を、前記デバッグ出力命令の一覧として取得する
請求項１３に記載の情報処理装置。
【請求項１５】
前記特定部は、所定の関数を呼び出す出力命令の一覧を、前記デバッグ出力命令の一覧として取得する
請求項１３に記載の情報処理装置。
【請求項１６】
前記特定部は、特定した前記デバッグ出力命令以外のデバッグ出力命令をNOPに書き換える
請求項１０に記載の情報処理装置。
【請求項１７】
情報処理装置の情報処理方法であって、
前記情報処理装置が、
プログラムを実行させて解析する動的解析の監視対象の中から、前記プログラムのソースコードの変更部分に関連するものを特定し、
特定された監視対象を監視するように動的解析を行う
情報処理方法。
【請求項１８】
コンピュータを、
プログラムを実行させて解析する動的解析の監視対象の中から、前記プログラムのソースコードの変更部分に関連するものを特定する特定部と、
前記特定部により特定された監視対象を監視するように動的解析を行う動的解析部と
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、情報処理装置および方法、並びにプログラムに関し、特に、プログラムの動的解析をより高速に行うことができるようにした情報処理装置および方法、並びにプログラムに関する。
【背景技術】
【０００２】
従来、ソフトウエアプログラムのデバッグ手法として、動的解析がしばしば行われる。動的解析とは、プログラムを実行し、その実行状況が正常であるかを判断する手法である。例えば、不正なメモリ領域へアクセスしていないか、メモリ上の値が不正でないか、不正な命令が実行されていないかといった判断が行われる。また、プログラム中にデバッグのためのログやメッセージ出力を挿入し、実行状況やメモリの値の確認等も行われる。
【０００３】
一般的に、動的解析は、ソースコードだけを解析する静的解析に比べて、その判断の正確性が優れるものの、正常の処理に加えて動作を監視する処理を行うために、処理量が多く、処理時間が増大する恐れがあった。
【０００４】
静的解析の場合、処理時間を短縮する方法として、ソースコードの変更部分のみを対象とする方法があった（例えば、特許文献１参照）。しかしながら、動的解析では、実行状況を監視するため、ソースコードの変更情報をそのまま利用することはできない。
【０００５】
そこで、動的解析の処理時間を低減させる方法として、プログラム全体を監視するのではなく、プログラムの一部だけを監視する方法が考えられた。監視する範囲を限定する方法として、例えば、プログラム開発者がその範囲を指定する方法や、静的解析でバグの可能性があると判断された部分のみを動的解析の対象とする方法が考えられた（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１１３２９８号公報
【特許文献２】特開２０１１−１３３９６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、動的解析は、ただ行えばよいというものでは無く、当然、正確かつ有意な解析結果が得られることが求められる。
【０００８】
プログラム開発者が手動で動的解析対象を指定する方法の場合、正確かつ有意な解析結果を得るためには、どこを解析すべきかというプログラム開発者の正しい知識と、正確な作業が必要になる恐れがあった。つまり、その作業時間も含めて考えると、動的解析の処理時間が増大する恐れがあった。換言するに、プログラム開発者に必要な知識と手間が増大するため、処理時間を短縮させるためには、その解析精度が許容できないほど低減してしまう恐れがあった。
【０００９】
また、特許文献２に記載の方法の場合、動的解析に比べてバグ発見の正確性が低い静的解析結果を動的解析に利用するため、動的解析によるバグ発見の正確性を低減させてしまう恐れがあった。
【００１０】
このように従来の方法においては、動的解析を現実的な精度で行うことが困難であり、正確かつ有意な解析結果を得ることができない恐れがあった。すなわち、実質的に処理時間を短縮させることは困難であった。
【００１１】
本技術は、このような状況に鑑みて提案されたものであり、プログラムの動的解析の処理時間を低減させることを目的とする。
【課題を解決するための手段】
【００１２】
本技術の一側面は、プログラムを実行させて解析する動的解析の監視対象の中から、前記プログラムのソースコードの変更部分に関連するものを特定する特定部と、前記特定部により特定された監視対象を監視するように動的解析を行う動的解析部とを備える情報処理装置である。
【００１３】
前記特定部は、前記変更部分が使用するメモリ領域を特定し、前記動的解析部は、前記特定部により特定された前記メモリ領域に対するアクセス、および、前記メモリ領域に格納される値の内、少なくともいずれか一方を監視することができる。
【００１４】
前記特定部は、前記ソースコードの各部分とメモリアドレスを関連付ける情報をコンパイラから取得し、取得した前記情報に基づいて、前記変更部分が使用するメモリ領域を特定することができる。
【００１５】
ウォッチポイントを監視し、前記ウォッチポイントの値が変化する場合、前記プログラムの実行を停止するブレークポイント処理を実行するブレークポイント処理部をさらに備え、前記動的解析部は、前記特定部により特定された前記メモリ領域に前記ウォッチポイントを設定し、前記ブレークポイント処理部に対して、前記ウォッチポイントに対する前記ブレークポイント処理を実行させることができる。
【００１６】
前記動的解析部は、前記特定部により特定されたメモリ領域の近傍に、デバッグ用の領域を確保することができる。
【００１７】
前記特定部は、前記変更部分から生成される命令を特定し、前記動的解析部は、前記特定部により特定された前記命令の実行を監視することができる。
【００１８】
前記特定部は、前記ソースコードの各部分と命令アドレスを関連付ける情報をコンパイラから取得し、取得した前記情報に基づいて、前記変更部分から生成される命令を特定することができる。
【００１９】
ブレークポイントを監視し、前記ブレークポイントの命令が実行される場合、前記プログラムの実行を停止するブレークポイント処理を実行するブレークポイント処理部をさらに備え、前記動的解析部は、前記特定部により特定された前記命令の命令アドレスに前記ブレークポイントを設定し、前記ブレークポイント処理部に対して、前記ブレークポイントに対する前記ブレークポイント処理を実行させることができる。
【００２０】
他の環境を模倣する模倣処理部をさらに備え、前記動的解析部は、前記模倣処理部に対して、他の環境を模倣させ、前記環境において前記プログラムを実行させることができる。
【００２１】
前記特定部は、前記変更部分に関連するデバッグ出力命令を特定し、特定した前記デバッグ出力命令以外のデバッグ出力命令の実行を削除または抑制し、前記動的解析部は、前記特定部により特定された前記デバッグ出力命令が実行されて出力されるデバッグ出力を監視することができる。
【００２２】
前記特定部は、プログラム中のデバッグ出力命令の一覧を取得し、取得した前記デバッグ出力命令の一覧に基づいて、前記変更部分に関連するデバッグ出力命令を特定することができる。
【００２３】
前記特定部は、ユーザによりデバッグ出力命令として指定される出力命令の一覧を、前記デバッグ出力命令の一覧として取得することができる。
【００２４】
前記特定部は、ソースコードに含まれる出力命令の特徴、若しくは、コンパイルされた命令列に含まれる出力命令の特徴に基づいてデバッグ出力命令として選択される出力命令の一覧を、前記デバッグ出力命令の一覧として取得することができる。
【００２５】
前記特定部は、所定の文字列の出力を行う出力命令の一覧を、前記デバッグ出力命令の一覧として取得することができる。
【００２６】
前記特定部は、所定の関数を呼び出す出力命令の一覧を、前記デバッグ出力命令の一覧として取得することができる。
【００２７】
前記特定部は、特定した前記デバッグ出力命令以外のデバッグ出力命令をNOPに書き換えることができる。
【００２８】
本技術の一側面は、また、情報処理装置の情報処理方法であって、情報処理装置の情報処理方法であって、前記情報処理装置が、プログラムを実行させて解析する動的解析の監視対象の中から、前記プログラムのソースコードの変更部分に関連するものを特定し、特定された監視対象を監視するように動的解析を行う情報処理方法である。
【００２９】
本技術の一側面は、さらに、コンピュータを、プログラムを実行させて解析する動的解析の監視対象の中から、前記プログラムのソースコードの変更部分に関連するものを特定する特定部と、前記特定部により特定された監視対象を監視するように動的解析を行う動的解析部として機能させるためのプログラムである。
【００３０】
本技術の一側面においては、プログラムを実行させて解析する動的解析の監視対象の中から、前記プログラムのソースコードの変更部分に関連するものが特定され、その特定された監視対象のみを監視するように動的解析が行なわれる。
【発明の効果】
【００３１】
本技術によれば、情報を処理することが出来る。特に、プログラムの動的解析の処理時間を低減させることができる。
【図面の簡単な説明】
【００３２】
【図１】解析装置の主な構成例を示すブロック図である。
【図２】ソースコードの変更履歴の例を示す図である。
【図３】動的解析されるメモリアドレスと命令アドレスの例を示す図である。
【図４】解析処理の流れの例を説明するフローチャートである。
【図５】コンピュータの主な構成例を示すブロック図である。
【発明を実施するための形態】
【００３３】
以下、本開示を実施するための形態（以下実施の形態とする）について説明する。なお、説明は以下の順序で行う。
１．第１の実施の形態（解析装置）
２．第２の実施の形態（コンピュータ）
【００３４】
＜１．第１の実施の形態＞
［１−１動的解析］
ソフトウエアプログラムのデバッグ手法として、動的解析がしばしば行われている。動的解析とは、プログラムを実行し、その実行状況が正常であるかを判断する手法である。
【００３５】
動的解析では、例えば、不正なメモリ領域へアクセスしていないか、メモリ上の値が不正でないか、不正な命令が実行されていないかといった判断が行われる。また、動的解析では、プログラム中にデバッグのためのログやメッセージ出力を挿入し、実行状況やメモリの値を把握することも行われる。
【００３６】
動的解析は、ソースコードだけを解析する静的解析に比べて、その判断の正確性に優れる半面、正常の処理に加えて動作を監視する処理を行うために、動作のオーバーヘッドが問題となる場合があった。すなわち、一般的に、動的解析は、静的解析よりも処理量が多く、処理時間が許容できないほど増大する恐れがあった。
【００３７】
プログラムのデバッグは、プログラムを開発していく上で何度か行われるが、バグが発見されるところは、前回のデバッグ時から変更した部分である可能性が高い。そこで、動的解析のオーバーヘッドを抑制するために、プログラム全体を監視するのではなく、プログラムの一部だけを監視することにより処理量を低減させる方法が考えられた。つまり、動的解析する範囲をプログラム更新部分に限定することにより、処理量を低減させて処理時間を短くし、オーバーヘッドの抑制を図る方法が考えられた。
【００３８】
ところで、静的解析の場合、例えば、特許文献１に記載のように、ソースコードの変更部分のみを対象とする方法があるが、動的解析では、実行状況を監視するため、ソースコードの変更情報をそのまま利用することはできない。つまり、特許文献１に記載の方法をそのまま動的解析に利用することはできない。
【００３９】
そこで、特許文献２においては、プログラムに対して静的解析を行い、その静的解析でバグの可能性があると判断された部分のみを動的解析する方法が提案された。
【００４０】
しかしながら、動的解析は、ただ行えばよいというものでは無く、当然、正確かつ有意な解析結果が得られることが求められる。
【００４１】
一般的に、静的解析は、動的解析よりもバグ発見の精度が低い。そのため、静的解析結果を動的解析に利用すると、処理量を十分に低減できなかったり、バグ発見の精度が低減したりする恐れがあった。
【００４２】
例えば、静的解析において、バグではない部分に対してバグの可能性があると判断された場合、不要な動的解析が行われることになる。つまり、この場合、処理量を十分に低減することができない恐れがあった。
【００４３】
また、例えば、静的解析において、バグがある部分に対してバグがあると判断されない場合、動的解析でもそのバグを検出することができない。つまり、この場合、動的解析のバグ発見精度が低減する恐れがあった。
【００４４】
以上のように、特許文献２に記載の方法では、当然、正確かつ有意な動的解析結果を得ることが困難であった。
【００４５】
さらに他の手法として、プログラム開発者が動的解析をする部分を指定することも考えられた。しかしながら、その場合、正確かつ有意な解析結果を得るためには、プログラム開発者のプログラムに対する正しく詳細な知識が必要であった。そのため、動的解析を行う範囲を正確に限定し、処理量を十分に低減させることは困難であった。
【００４６】
また、正確かつ有意な解析結果を得るためには、プログラム開発者が、動的解析をする部分を指定するための煩雑な作業を正確に行う必要もあった。この指定作業の時間も動的処理の処理時間として考慮すると、処理時間を短縮させることができる程高速にこの指定作業を行うことは困難であった。
【００４７】
このように従来の方法においては、動的解析を現実的な精度で行うことが困難であり、正確かつ有意な解析結果を得ることができない恐れがあった。すなわち、実質的に処理時間を短縮させることは困難であった。
【００４８】
そこで、ソースコードの変更情報だけでなく、ソースコードからプログラムを生成する際の付加情報を取得し、それらの情報に基づいてソースコードの変更部分に関連する監視対象を特定し、その特定された監視対象のみを動的解析するようにする。
【００４９】
このようにすることにより、動的解析の監視対象をより正確に制限することができ、適切に処理量を低減させ、プログラムの動的解析の処理時間を十分に低減させることができる。
【００５０】
［１−２解析装置］
図１は、解析装置の主な構成例を示すブロック図である。
【００５１】
図１に示される解析装置１００は、所定の情報を処理する情報処理装置であり、例えば、ソースコードをコンパイルして得られるプログラムを動的解析する。
【００５２】
図１に示されるように、解析装置１００は、例えば、ソースコード管理部１０１、コンパイラ１０２、記憶部１０３、動的解析部１０４、ブレークポイント処理部１０５、およびエミュレーション処理部１０６を有する。
【００５３】
ソースコード管理部１０１は、ソースコードおよびその変更履歴を管理する。ソースコード管理部１０１が管理するソースコードおよびその変更履歴は、何処に存在していても良い。例えば、ソースコード管理部１０１がソースコードや変更履歴を記憶し、それを管理するようにしてもよい。また、ソースコード管理部１０１が、解析装置１００の外部の記憶部（記憶装置）に記憶されるソースコードやその変更履歴を管理するようにしてもよい。さらに、ソースコード管理部１０１が、複数箇所に記憶されるソースコードやその変更履歴を管理するようにしてもよい。
【００５４】
例えば、ソースコード管理部１０１は、ユーザ操作等によって新たなソースコードの保存が指示されると、そのソースコードを管理対象として登録する。また、例えば、ユーザ操作等によって、管理対象のソースコードが更新されると、ソースコード管理部１０１は、更新後のソースコードを新たな版として登録する。また、ソースコード管理部１０１は、その更新前後のソースコードの差分を変更履歴として管理する。
【００５５】
ソースコード管理部１０１は、例えば解析装置１００のユーザの指示などに基づいて、ソースコード管理部１０１が管理するソースコードの内、選択されたものをコンパイラ１０２に供給する。また、ソースコード管理部１０１は、例えば解析装置１００のユーザの指示などに基づいて、ソースコード管理部１０１が管理するソースコードの変更情報の内、選択されたものを動的解析部１０４に供給する。
【００５６】
変更情報とは、例えば、ソースコード管理部１０１が管理しているソースコードの各版（バージョン）間で、どの行または部分文字列が変更されたかを示す情報を含む。
【００５７】
コンパイラ１０２は、ソースコード管理部１０１から供給されるソースコードをコンパイルしてプログラム１１１を生成する。コンパイラ１０２は、生成したプログラム１１１を記憶部１０３に供給し、記憶させる。また、コンパイラ１０２は、そのプログラム１１１の生成に関する付加情報を動的解析部１０４に供給する。
【００５８】
付加情報は、例えば、コンパイラ１０２がソースコードから命令コードを生成する際に、ソースコード中のどの部分からどの命令を生成したかを関連付ける情報を含む。また、付加情報は、コンパイラ１０２がソースコード中の変数をメモリ上に配置する際に、ソースコード中のどの部分からどのメモリアドレスに配置したかを関連付ける情報を含む。
【００５９】
記憶部１０３は、コンパイラ１０２が生成したプログラム１１１を取得し、記憶する。
【００６０】
動的解析部１０４は、この記憶部１０３に記憶されるプログラム１１１を動的解析する。例えば、動的解析部１０４は、後述する制御部１５１の制御に基づいて、制御部１５１に動的解析対象として指定されたプログラム１１１の動的解析を行う。
【００６１】
動的解析部１０４は、このような動的解析を、プログラム１１１の全体に対してではなく、一部に対してのみ行うことができる。例えば、動的解析部１０４は、動的解析の監視対象であるプログラム１１１の、ソースコードの変更部分に関連するものを特定し、その特定された監視対象のみを監視する。このようにすることにより、動的解析部１０４は、動的解析の処理量を低減させることができる。
【００６２】
動的解析部１０４は、例えば、動的解析対象のプログラム１１１について、そのソースコードの、上述した変更情報をソースコード管理部１０１から取得する。また、動的解析部１０４は、動的解析対象のプログラム１１１について、上述した付加情報を、コンパイラ１０２から取得する。動的解析部１０４は、これらの情報を用いて、ソースコードの変更部分に関連するものを特定する。
【００６３】
プログラムのデバッグは、プログラムを開発していく上で何度か行われるが、バグが発見されるところは、前回のデバッグ時から変更した部分である可能性が高い。しかしながら、動的解析は、ソースコードそのものに対しては行わないので、ソースコードの変更履歴だけでは、動的解析の監視対象全体の中から、ソースコード変更部分に対応する部分を特定することは困難である。動的解析部１０４は、コンパイラ１０２から付加情報を取得し、それを参照して動的解析を行う部分を特定するので、ソースコード変更部分に対応する部分を、より正確に特定することができる。
【００６４】
しかも、動的解析部１０４は、これらの情報を参照することにより、ユーザによる動的解析を行う部分の指定無しに、ソースコード変更部分に対応する部分を、容易に特定することができる。
【００６５】
つまり、動的解析部１０４は、動的解析において監視すべき部分を、より容易かつ正確に特定することができ、適切に処理量を低減させ、プログラムの動的解析の処理時間を十分に低減させることができる。
【００６６】
動的解析として、動的解析部１０４は、プログラム１１１を実行し、例えば、使用されるメモリ領域を監視したり、プログラム１１１に含まれる命令の実行状況を監視したり、デバッグログやメッセージ出力を監視したりする。
【００６７】
例えば、動的解析部１０４は、付加情報として、ソースコードの各部分とメモリアドレスを関連付ける情報をコンパイラ１０２から取得し、その情報に基づいて、ソースコード変更部分が使用するメモリ領域（メモリアドレス）を特定することができる。このようにすることにより、動的解析部１０４は、メモリ領域の監視について、ソースコード変更部分が使用するメモリ領域（メモリアドレス）のみを監視する（それ以外のメモリ領域の監視を省略する）ことができる。つまり、動的解析部１０４は、動的解析の処理量を低減させることができる。
【００６８】
メモリ領域を監視する動的解析において、動的解析部１０４は、例えば、ソースコード変更部分が使用するメモリ領域（メモリアドレス）に対してウォッチポイントを設定し、ブレークポイント処理部１０５に、そのウォッチポイントを監視させることができる。
【００６９】
この場合、ブレークポイント処理部１０５は、動的解析におけるプログラム１１１の実行中、設定されたウォッチポイントを監視し、アクセスがあった場合や、その値が変化したりする場合、プログラム１１１の実行を停止するブレークポイント処理を実行する。
【００７０】
このようにすることにより、動的解析部１０４は、ソースコード変更部分が使用するメモリ領域（メモリアドレス）にアクセスがあった時点や、その値が変化した時点の、プログラム１１１の実行情況を容易に解析することができる。これにより、動的解析部１０４は、動的解析におけるバグ発見の精度を向上させることができる。
【００７１】
なお、動的解析部１０４は、例えば、その特定したメモリ領域（メモリアドレス）の近傍に、デバッグ用の領域を確保し、アクセスしたモジュール名などデバッグに有用な情報を記録したり、またはアクセス保護を設定したりすることもできる。
【００７２】
また、例えば、動的解析部１０４は、付加情報として、ソースコードの各部分と命令アドレスを関連付ける情報をコンパイラ１０２から取得し、その情報に基づいて、ソースコード変更部分から生成される命令を特定することができる。このようにすることにより、動的解析部１０４は、命令の実行状況の監視について、ソースコード変更部分から生成される命令の実行状況のみを監視する（それ以外の命令の実行状況の監視を省略する）ことができる。つまり、動的解析部１０４は、動的解析の処理量を低減させることができる。
【００７３】
命令の実行状況を監視する動的解析において、動的解析部１０４は、例えば、ソースコード変更部分から生成される命令の命令アドレスにブレークポイントを設定し、ブレークポイント処理部１０５に、そのブレークポイントを監視させることができる。
【００７４】
この場合、ブレークポイント処理部１０５は、動的解析におけるプログラム１１１の実行中、設定されたブレークポイントを監視し、その命令が実行される場合、プログラム１１１の実行を停止するブレークポイント処理を実行する。
【００７５】
このようにすることにより、動的解析部１０４は、ソースコード変更部分から生成される命令が実行された時点の、プログラム１１１の実行情況を容易に解析することができる。これにより、動的解析部１０４は、動的解析におけるバグ発見の精度を向上させることができる。
【００７６】
さらに、動的解析部１０４は、例えば、エミュレーション（模倣）対象とする他の環境を設定し、エミュレーション処理部１０６に、その環境をエミュレーション（模倣）させることができる。
【００７７】
この場合、エミュレーション処理部１０６は、指定された環境をエミュレーションし、そのエミュレーションした環境において、プログラム１１１の実行を行う。つまり、エミュレーションされた環境下での動的解析が行われる。このようにすることにより、動的解析部１０４は、例えば、運用時の環境下での動的解析を行うことができる。つまり、動的解析装置１００は、より多様な環境下での動的解析を実現することができる。
【００７８】
さらに、例えば、動的解析部１０４は、付加情報として、プログラム中のデバッグ出力命令の一覧を取得し、その情報に基づいて、ソースコード変更部分に関連するデバッグ出力命令を特定することができる。
【００７９】
デバッグ出力命令の一覧の入手元は任意であるが、例えば、動的解析部１０４は、デバッグ出力命令の一覧を、ソースコード管理部１０１若しくはコンパイラ１０２から取得する。
【００８０】
このデバッグ出力命令の一覧は、どのように生成されてもよい。例えば、ユーザによりデバッグ出力命令として指定される出力命令の一覧を、このデバッグ出力命令の一覧としてもよい。また、例えば、ソースコードに含まれる出力命令の特徴、若しくは、コンパイルされた命令列に含まれる出力命令の特徴に基づいてデバッグ出力命令として選択される出力命令の一覧を、このデバッグ出力命令の一覧としてもよい。
【００８１】
さらに、この出力命令の特徴は、任意である。例えば、所定の文字列の出力を行うこと（例えばdebugという文字列の出力から始まること）を出力命令の特徴とするようにしてもよいし、所定の関数を呼び出すことを出力命令の特徴とするようにしてもよい。
【００８２】
そして、動的解析部１０４は、付加情報として、ソースコードの各部分とメモリアドレスを関連付ける情報をコンパイラ１０２から取得する。動的解析部１０４は、その情報に基づいて、ソースコード変更部分に関連するデバッグ出力命令により出力されるデバッグ出力が使用するメモリ領域（メモリアドレス）を特定することができる。このようにすることにより、動的解析部１０４は、デバッグ出力の監視について、ソースコード変更部分に関連するデバッグ出力命令により出力されるデバッグ出力（デバッグログやメッセージ出力）のみを監視する（それ以外のデバッグ出力の監視を省略する）ことができる。つまり、動的解析部１０４は、動的解析の処理量を低減させることができる。
【００８３】
なお、動的解析部１０４は、デバッグ用にプログラム１１１を改変することができる。例えば、動的解析部１０４は、特定したデバッグ出力命令以外のデバッグ命令の実行を削除または抑制することができる。その場合、動的解析部１０４は、例えば、付加情報として、ソースコードの各部分と命令アドレスを関連付ける情報をコンパイラ１０２から取得し、その情報に基づいて、各デバッグ出力命令の命令アドレスを特定する。そして、動的解析部１０４は、特定したデバッグ出力命令以外のデバッグ出力命令をNOPに書き換える。このようにすることにより、不要なデバッグ出力を削除または抑制することができるので、動的解析部１０４は、動的解析の処理量を低減させることができる。
【００８４】
また、解析装置１００は、制御部１５１、入力部１６１、出力部１６２、記憶部１６３、通信部１６４、およびドライブ１６５を有する。
【００８５】
制御部１５１は、例えば、CPU（Central Processing Unit）、ROM（Read Only Memory）、およびRAM（Random Access Memory）等を有し、解析装置１００の各部（例えば、ソースコード管理部１０１乃至エミュレーション処理部１０６）を制御する。例えば、制御部１５１のCPUは、ROMに記憶されているプログラムに従って各種の処理を実行する。また、そのCPUは、記憶部１６３からRAMにロードされたプログラムに従って各種の処理を実行する。RAMにはまた、CPUが各種の処理を実行するにあたって必要なデータなども適宜記憶される。
【００８６】
入力部１６１は、例えば、キーボード、マウス、タッチパネル、および外部入力端子などよりなり、ユーザ指示や外部からの情報の入力を受け付け、制御部１５１に供給する。出力部１６２は、例えば、CRT（Cathode Ray Tube）ディスプレイやLCD（Liquid Crystal Display）等のディスプレイ、スピーカ、並びに外部出力端子などよりなり、制御部１５１から供給される各種情報を画像、音声、若しくは、アナログ信号やデジタルデータとして出力する。
【００８７】
記憶部１６３は、例えばフラッシュメモリ等SSD（Solid State Drive）やハードディスクなどよりなり、制御部１５１から供給される情報を記憶したり、制御部１５１からの要求に従って、記憶している情報を読み出して供給したりする。
【００８８】
通信部１６４は、例えば、有線LAN（Local Area Network）や無線LANのインタフェースやモデムなどよりなり、インターネットを含むネットワークを介して、外部の装置との通信処理を行う。例えば、通信部１６４は、制御部１５１から供給される情報を通信相手に送信したり、通信相手から受信した情報を制御部１５１に供給したりする。
【００８９】
ドライブ１６５は、必要に応じて制御部１５１に接続される。そして、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア１７１がそのドライブ１６５に適宜装着される。そして、そのドライブ１６５を介してリムーバブルメディア１７１から読み出されたコンピュータプログラムが、必要に応じて記憶部１６３にインストールされる。
【００９０】
以上のように、解析装置１００は、プログラムの動的解析の処理量を低減させることができる。したがって、解析装置１００は、プログラムの動的解析をより高速に行い、その処理時間を低減させることができる。
【００９１】
なお、例えば、動作クロックの高速化や、コア数やメモリ容量の増大といった、ハードウエア性能の向上を行えば、当然、動的解析の高速化は、実現可能である。しかしながら、その場合、製造コストや消費電力の増大を伴う恐れがある。また、ハードウエア性能の向上には、技術上の限界がある。このようなデメリットが存在するため、このような高速化が適切であるか否かは、場合によって異なる。したがって、ここでは、解析装置１００のハードウエア性能の向上による高速化は考慮しないこととする。
【００９２】
換言するに、解析装置１００は、上述したように動的解析処理を行うことにより、ハードウエア性能の向上を必要とせずに、プログラムの動的解析をより高速に行い、その処理時間を低減させることができる。
【００９３】
［１−３具体的動作例］
次に、解析装置１００による動的解析の具体的な例について説明する。図２は、動的解析されるプログラム１１１の、ソースコードの変更履歴の例を示す図である。また、図３は、そのプログラム１１１の、動的解析されるメモリアドレスと命令アドレスの例を示す図である。
【００９４】
図２に示されるソースコード２０１は、ソースコード管理システムによって管理されている、デバッグ対象プログラムの変更前のソースコード（version=1）である。また、図２に示されるソースコード２０２は、ソースコード管理システムによって管理されている、変更後のソースコード（version=2）である。さらに、図２に示される変更差分情報２０３は、ソースコード管理システムによって管理されている、ソースコード２０１とソースコード２０２との変更差分情報（differences）である。
【００９５】
また、図３に示される付加情報３０１は、コンパイラ１０２によって生成された、ソースコードの各部分とメモリアドレスを関連付ける情報である。また、図３に示される付加情報３０２は、コンパイラ１０２によって生成された、ソースコードの各部分と命令アドレスを関連付ける情報である。
【００９６】
動的解析部１０４は、変更差分情報２０３に基づいて、４行目が変更されていることを特定する。
【００９７】
動的解析部１０４は、メモリ領域を監視する場合、変更部分で使用しているメモリ領域を付加情報３０１から特定する。例えば、変更差分情報２０３によると、変更された４行目において「bonus」という変数が使用されている。したがって、動的解析部１０４は、付加情報３０１から、この変数「bonus」が格納されるメモリアドレス0xC00Cを特定し、このメモリアドレスを動的解析の監視対象とする。動的解析部１０４は、例えば、このメモリアドレス0xC00Cに対してウォッチポイントを設定する。
【００９８】
また、命令の実行状況を監視する場合、動的解析部１０４は、変更部分から生成される命令アドレスを付加情報３０２から特定する。例えば、変更差分情報２０３によると、ソースコードの４行目が変更されている。そこで、動的解析部１０４は、付加情報３０２を用いて、この４行目から命令がアドレス0x8000および0x8004に生成されていることを特定し、この命令アドレスを動的解析の監視対象とする（４バイト命令が２つ（0x8000-0x8007））。動的解析部１０４は、例えば、このアドレス0x8000または0x8004に対して、ブレークポイントを設定する。
【００９９】
さらに、デバッグログやメッセージを出力する解析を行う場合、動的解析部１０４は、変更部分に関連するデバッグ出力命令が出力するデバッグ出力を付加情報３０１から特定する。
【０１００】
例えば、ソースコード２０１（ソースコード２０２）において、７行目および８行目がデバッグ出力であるとする。動的解析部１０４は、付加情報３０１に基づいて、ソースコード変更部分である４行目と関連するデバッグ出力が８行目のデバッグ出力であること（４行目で操作されている変数「bonus」を出力していること）を特定する。
【０１０１】
動的解析部１０４は、付加情報３０２に基づいて、特定されたデバッグ出力以外のデバッグ出力命令、つまり７行目のデバッグ出力命令の命令アドレス（0x8024および0x8028（0x8024-0x802F））を特定する。そして、動的解析部１０４は、それらの命令が実行されないように、命令アドレス0x8024および0x8028の命令をNOP（何もしない命令）に書き換える。
【０１０２】
なお、以上に説明した例では、直近した２つのバージョン間の変更差分情報を用いたが、解析装置１００は、動的解析を行う部分を特定するのに、離れた２つのバージョン間の変更差分情報を用いるようにしても良いし、多くのバージョン間の変更統計を変更情報として用い、変更回数や変更頻度がある閾値以上の部分を監視対象とするようにしても良い。
【０１０３】
［１−４処理の流れ］
次に、解析装置１００により実行される各処理について説明する。
【０１０４】
（１）解析処理
図４のフローチャートを参照して、解析装置１００により実行される解析処理の流れの例を説明する。解析装置１００は、動的解析を行う場合、この解析処理を実行する。
【０１０５】
例えば、ユーザや他の装置等に、動的解析処理の実行が指示されると、制御部１５１は、解析処理を開始し、その指示において指定されたソースコードをコンパイラ１０２に通知する。コンパイラ１０２は、ステップＳ１０１において、ソースコード管理部１０１から、制御部１５１に指定されたプログラム１１１のソースコードを取得する。
【０１０６】
コンパイラ１０２は、ステップＳ１０２において、ステップＳ１０１において取得したソースコードをコンパイルしてプログラム１１１を生成する。コンパイラ１０２は、生成したプログラム１１１を記憶部１０３に供給し、記憶させる。
【０１０７】
なお、動的解析処理の実行が指示された時点で、プログラム１１１が記憶部１０３に格納されているようにしてもよい。その場合、ステップＳ１０１およびステップＳ１０２の処理は省略することができる。また、その場合、ユーザや他の装置等は、動的解析処理の実行指示において、ソースコードではなくプログラム１１１を指定することもできる。
【０１０８】
制御部１５１は、動的解析開始の指示において指定されたソースコード（若しくはプログラム１１１）を動的解析部１０４に通知する。ステップＳ１０３において、動的解析部１０４は、制御部１５１から指定されたソースコード（若しくはプログラム１１１）に対応する付加情報をコンパイラ１０２から取得する。
【０１０９】
これらの処理と並列して、または前後して、ステップＳ１０４において、動的解析部１０４は、制御部１５１から指定されたソースコード（若しくは、制御部１５１から指定されたプログラム１１１に対応するソースコード）の変更情報をソースコード管理部１０１から取得する。
【０１１０】
動的解析部１０４は、コンパイラ１０２から得た付加情報とソースコード管理部１０１から得た変更情報を組み合わせて、解析対象部分を限定して動的解析を行う。動的解析処理の例として、メモリ領域を監視する解析、命令の実行状況を監視する解析、デバッグログやメッセージ出力を用いた解析を挙げる。
【０１１１】
メモリ領域を監視する場合、動的解析部１０４は、ステップＳ１０５において、変更情報に加えて、コンパイラ１０２から取得した付加情報のうち、ソースコード中の各部分とメモリアドレス（メモリ領域）を関連付けた情報を用い、ソースコード中で変更のあった部分と関連付けられているメモリアドレス（メモリ領域）を特定する。
【０１１２】
ステップＳ１０６において、動的解析部１０４は、ステップＳ１０５において特定されたメモリアドレスへのアクセス、または、そのメモリアドレスに格納されている値を監視する。監視方法としては、例えばウォッチポイントを設定する方法や、メモリ配置を改変して特定アドレスの前後等にデバッグ用の領域を確保し、アクセスしたモジュール名などデバッグに有用な情報を記録したり、またはアクセス保護を設定したりする方法が挙げられる。
【０１１３】
命令の実行状況を監視する場合、動的解析部１０４は、ステップＳ１０７において、変更情報に加えて、コンパイラ１０２から取得した付加情報のうち、ソースコード中の各部分と命令アドレスを関連付けた情報を用い、ソースコード中で変更のあった部分と関連付けられている命令アドレスを特定する。
【０１１４】
ステップＳ１０８において、動的解析部１０４は、ステップＳ１０７において特定された命令の実行を監視する。監視方法としては、例えばブレークポイントを設定する方法や、命令をそのまま実行せず、エミュレーション機構を通して実行する方法が挙げられる。
【０１１５】
デバッグログやメッセージ出力を用いた解析を行う場合、動的解析部１０４は、ステップＳ１０９において、プログラム中のデバッグ出力命令の中から、変更情報を用いて変更部分と関連するデバッグ出力命令を特定する。ここでいう関連とは、例えば変更部分から実行されているか、または変更部分で使用されている変数の内容を出力する等である。
【０１１６】
ステップＳ１１０において、動的解析部１０４は、ステップＳ１０９において特定されたデバッグ出力以外のデバッグ出力を選択する。
【０１１７】
ステップＳ１１１において、動的解析部１０４は、付加情報のうち、ソースコード中の各部分と命令アドレスを関連付けた情報を元に、ステップＳ１１０において選択されたデバッグ出力命令のアドレスを求め、それらの命令が実行されないようにする。例えば、動的解析部１０４は、その命令をプログラムから削除または置換しても良いし、分岐命令などで実行されないようにしても良い。
【０１１８】
以上の処理が終了すると、解析処理が終了する。
【０１１９】
なお、解析処理を終了する際、動的解析部１０４は、例えば、動的解析結果を制御部１５１に供給し、出力部１６２のディスプレイに表示させたり、スピーカから音声出力させたり、外部出力端子から出力させたりするようにしてもよい。また、この動的解析結果は、記憶部１６３や記憶部１０３に記憶させるようにしてもよいし、通信部１６４を介して他の装置に伝送されるようにしてもよいし、ドライブ１６５を介してリムーバブルメディア１７１に記録されるようにしてもよい。
【０１２０】
以上のように各処理を実行することにより、解析装置１００は、プログラムの動的解析の処理量を低減させ、処理時間を低減させることができる。
【０１２１】
解析装置１００は、例えば、プログラムを動的解析する際に、プログラム全体を監視するのではなく、前回のデバッグ時から変更した部分に限って監視し、他の部分に対する処理を省略することで、動的解析のオーバーヘッドを削減することができる。また、このようにすることにより、バグが起きやすい部分を対象にすることができ、解析装置１００は、より効率的に動的解析を行うことができる。
【０１２２】
また、解析装置１００は、デバッグ出力を行う解析をする際、変更した部分以外に関するデバッグ出力を抑制させることで、デバッグ出力結果の量を低減させることができ、プログラム開発者がデバッグ出力結果を確認する手間を低減させることができる。
【０１２３】
また、解析装置１００がこのように動的解析を行うことにより、プログラム開発者による動的解析をするべき部分の指定が不要になる。したがって、プログラム開発者は、より容易に動的解析を行うことができ、どこを解析すべきかの正確かつ詳細な知識（ノウハウ）が不要になる。また、プログラム開発者は、動的解析をするべき部分を指定する手間を省略することができる。したがって、解析装置１００は、動的解析の処理時間をより低減させることができる。
【０１２４】
＜２．第２の実施の形態＞
［コンピュータ］
上述した一連の処理は、ハードウエアにより実行させることもできるし、ソフトウエアにより実行させることもできる。一連の処理をソフトウエアにより実行する場合には、そのソフトウエアを構成するプログラムが、コンピュータにインストールされる。ここでコンピュータには、専用のハードウエアに組み込まれているコンピュータや、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータ等が含まれる。
【０１２５】
図５は、上述した一連の処理をプログラムにより実行するコンピュータのハードウエアの構成例を示すブロック図である。
【０１２６】
図５に示されるコンピュータ５００において、CPU（Central Processing Unit）５０１、ROM（Read Only Memory）５０２、RAM（Random Access Memory）５０３は、バス５０４を介して相互に接続されている。
【０１２７】
バス５０４にはまた、入出力インタフェース５１０も接続されている。入出力インタフェース５１０には、入力部５１１、出力部５１２、記憶部５１３、通信部５１４、およびドライブ５１５が接続されている。
【０１２８】
入力部５１１は、例えば、キーボード、マウス、マイクロホン、タッチパネル、入力端子などよりなる。出力部５１２は、例えば、ディスプレイ、スピーカ、出力端子などよりなる。記憶部５１３は、例えば、ハードディスク、RAMディスク、不揮発性のメモリなどよりなる。通信部５１４は、例えば、ネットワークインタフェースよりなる。ドライブ５１５は、磁気ディスク、光ディスク、光磁気ディスク、または半導体メモリなどのリムーバブルメディア５２１を駆動する。
【０１２９】
以上のように構成されるコンピュータでは、CPU５０１が、例えば、記憶部５１３に記憶されているプログラムを、入出力インタフェース５１０およびバス５０４を解して、RAM５０３にロードして実行することにより、上述した一連の処理が行われる。RAM５０３にはまた、CPU５０１が各種の処理を実行する上において必要なデータなども適宜記憶される。
【０１３０】
コンピュータ（CPU５０１）が実行するプログラムは、例えば、パッケージメディア等としてのリムーバブルメディア５２１に記録して適用することができる。また、プログラムは、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の伝送媒体を介して提供することができる。
【０１３１】
コンピュータでは、プログラムは、リムーバブルメディア５２１をドライブ５１５に装着することにより、入出力インタフェース５１０を介して、記憶部５１３にインストールすることができる。また、プログラムは、有線または無線の伝送媒体を介して、通信部５１４で受信し、記憶部５１３にインストールすることができる。その他、プログラムは、ROM５０２や記憶部５１３に、あらかじめインストールしておくことができる。
【０１３２】
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
【０１３３】
また、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０１３４】
また、本明細書において、システムとは、複数の構成要素（装置、モジュール（部品）等）の集合を意味し、全ての構成要素が同一筐体中にあるか否かは問わない。したがって、別個の筐体に収納され、ネットワークを介して接続されている複数の装置、及び、１つの筐体の中に複数のモジュールが収納されている１つの装置は、いずれも、システムである。
【０１３５】
また、以上において、１つの装置（または処理部）として説明した構成を分割し、複数の装置（または処理部）として構成するようにしてもよい。逆に、以上において複数の装置（または処理部）として説明した構成をまとめて１つの装置（または処理部）として構成されるようにしてもよい。また、各装置（または各処理部）の構成に上述した以外の構成を付加するようにしてももちろんよい。さらに、システム全体としての構成や動作が実質的に同じであれば、ある装置（または処理部）の構成の一部を他の装置（または他の処理部）の構成に含めるようにしてもよい。
【０１３６】
以上、添付図面を参照しながら本開示の好適な実施形態について詳細に説明したが、本開示の技術的範囲はかかる例に限定されない。本開示の技術分野における通常の知識を有する者であれば、特許請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本開示の技術的範囲に属するものと了解される。
【０１３７】
例えば、本技術は、１つの機能を、ネットワークを介して複数の装置で分担、共同して処理するクラウドコンピューティングの構成をとることができる。
【０１３８】
また、上述のフローチャートで説明した各ステップは、１つの装置で実行する他、複数の装置で分担して実行することができる。
【０１３９】
さらに、１つのステップに複数の処理が含まれる場合には、その１つのステップに含まれる複数の処理は、１つの装置で実行する他、複数の装置で分担して実行することができる。
【０１４０】
なお、本技術は以下のような構成も取ることができる。
（１）  プログラムを実行させて解析する動的解析の監視対象の中から、前記プログラムのソースコードの変更部分に関連するものを特定する特定部と、
前記特定部により特定された監視対象を監視するように動的解析を行う動的解析部と
を備える情報処理装置。
（２）  前記特定部は、前記変更部分が使用するメモリ領域を特定し、
前記動的解析部は、前記特定部により特定された前記メモリ領域に対するアクセス、および、前記メモリ領域に格納される値の内、少なくともいずれか一方を監視する
前記（１）に記載の情報処理装置。
（３）  前記特定部は、前記ソースコードの各部分とメモリアドレスを関連付ける情報をコンパイラから取得し、取得した前記情報に基づいて、前記変更部分が使用するメモリ領域を特定する
前記（２）に記載の情報処理装置。
（４）  ウォッチポイントを監視し、前記ウォッチポイントの値が変化する場合、前記プログラムの実行を停止するブレークポイント処理を実行するブレークポイント処理部をさらに備え、
前記動的解析部は、前記特定部により特定された前記メモリ領域に前記ウォッチポイントを設定し、前記ブレークポイント処理部に対して、前記ウォッチポイントに対する前記ブレークポイント処理を実行させる
前記（２）または（３）に記載の情報処理装置。
（５）  前記動的解析部は、前記特定部により特定されたメモリ領域の近傍に、デバッグ用の領域を確保する
前記（２）乃至（４）のいずれかに記載の情報処理装置。
（６）  前記特定部は、前記変更部分から生成される命令を特定し、
前記動的解析部は、前記特定部により特定された前記命令の実行を監視する
前記（１）乃至（５）のいずれかに記載の情報処理装置。
（７）  前記特定部は、前記ソースコードの各部分と命令アドレスを関連付ける情報をコンパイラから取得し、取得した前記情報に基づいて、前記変更部分から生成される命令を特定する
前記（６）に記載の情報処理装置。
（８）  ブレークポイントを監視し、前記ブレークポイントの命令が実行される場合、前記プログラムの実行を停止するブレークポイント処理を実行するブレークポイント処理部をさらに備え、
前記動的解析部は、前記特定部により特定された前記命令の命令アドレスに前記ブレークポイントを設定し、前記ブレークポイント処理部に対して、前記ブレークポイントに対する前記ブレークポイント処理を実行させる
前記（６）または（７）に記載の情報処理装置。
（９）  他の環境を模倣する模倣処理部をさらに備え、
前記動的解析部は、前記模倣処理部に対して、他の環境を模倣させ、前記環境において前記プログラムを実行させる
前記（１）乃至（８）のいずれかに記載の情報処理装置。
（１０）  前記特定部は、前記変更部分に関連するデバッグ出力命令を特定し、特定した前記デバッグ出力命令以外のデバッグ出力命令の実行を削除または抑制し、
前記動的解析部は、前記特定部により特定された前記デバッグ出力命令が実行されて出力されるデバッグ出力を監視する
前記（１）乃至（９）のいずれかに記載の情報処理装置。
（１１）  前記特定部は、プログラム中のデバッグ出力命令の一覧を取得し、取得した前記デバッグ出力命令の一覧に基づいて、前記変更部分に関連するデバッグ出力命令を特定する
前記（１０）に記載の情報処理装置。
（１２）  前記特定部は、ユーザによりデバッグ出力命令として指定される出力命令の一覧を、前記デバッグ出力命令の一覧として取得する
前記（１１）に記載の情報処理装置。
（１３）  前記特定部は、ソースコードに含まれる出力命令の特徴、若しくは、コンパイルされた命令列に含まれる出力命令の特徴に基づいてデバッグ出力命令として選択される出力命令の一覧を、前記デバッグ出力命令の一覧として取得する
前記（１１）または（１２）に記載の情報処理装置。
（１４）  前記特定部は、所定の文字列の出力を行う出力命令の一覧を、前記デバッグ出力命令の一覧として取得する
前記（１３）に記載の情報処理装置。
（１５）  前記特定部は、所定の関数を呼び出す出力命令の一覧を、前記デバッグ出力命令の一覧として取得する
前記（１３）または（１４）に記載の情報処理装置。
（１６）  前記特定部は、特定した前記デバッグ出力命令以外のデバッグ出力命令をNOPに書き換える
前記（１０）乃至（１５）のいずれかに記載の情報処理装置。
（１７）  情報処理装置の情報処理方法であって、
前記情報処理装置が、
プログラムを実行させて解析する動的解析の監視対象の中から、前記プログラムのソースコードの変更部分に関連するものを特定し、
特定された監視対象を監視するように動的解析を行う
情報処理方法。
（１８）  コンピュータを、
プログラムを実行させて解析する動的解析の監視対象の中から、前記プログラムのソースコードの変更部分に関連するものを特定する特定部と、
前記特定部により特定された監視対象を監視するように動的解析を行う動的解析部と
して機能させるためのプログラム。
【符号の説明】
【０１４１】
１００  解析装置，  １０１  ソースコード管理部，  １０２  コンパイラ，  １０３  記憶部，  １０４  動的解析部，  １０５  ブレークポイント処理部，  １０６  エミュレーション処理部，  １５１  制御部，  １６１  入力部，  １６２  出力部，  １６３  記憶部，  １６４  通信部，  １６５  ドライブ，  １７１  リムーバブルメディア
【図１】
2013206266.tif 000003
【図２】
2013206266.tif 000004
【図３】
2013206266.tif 000005
【図４】
2013206266.tif 000006
【図５】
2013206266.tif 000007