(57)【要約】【課題】計測対象となるプログラムに条件実行命令が含まれる場合でも、実行範囲の解析が可能なカバレッジ計測に好適な翻訳方法および実行通知命令の埋め込み方法を提供する。【解決手段】ソースプログラムを機械語プログラムへ変換する変換ステップと、変換した機械語プログラムを最適化する最適化ステップと、最適化した機械語プログラムの各基本ブロックおよび各条件実行命令群に対して、自身が実行されたことを通知する実行通知命令を埋め込む実行通知命令埋め込みステップと、実行通知命令を含んだ実行プログラムを生成するプログラム生成ステップとを備えることにより、条件実行命令を含むプログラムについても実行範囲の解析が可能となる。【選択図】図１
2007133716.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムを実行プログラムに翻訳する翻訳方法であって、
前記ソースプログラムを機械語プログラムに変換する変換ステップと、
前記機械語プログラムの冗長性を排除する最適化ステップと、
前記最適化ステップの後に、自身が実行されたことを通知する実行通知命令を、最適化した前記機械語プログラム中に埋め込む埋め込みステップと、
前記実行通知命令を含んだ実行プログラムを生成するプログラム生成ステップとを備え、
前記埋め込みステップは、
前記機械語プログラム中の基本ブロック毎の開始点を検索する第１の検索サブステップと、
前記第１の検索サブステップにおいて検索した基本ブロック毎の開始点に実行通知命令を配置する第１の命令配置サブステップと、
前記機械語プログラム中の条件実行命令群毎の開始点を検索する第２の検索サブステップと、
前記第２の検索サブステップにおいて検索した条件実行命令群毎の開始点に、条件実行命令群と同一の条件を付与した前記実行通知命令を配置する第２の命令配置サブステップとを備え、
前記プログラム生成ステップは、
前記実行通知命令毎に対して、個々の実行通知命令を識別するための情報を生成する識別情報生成サブステップと、
前記実行通知命令毎に対して、前記識別情報を付与する識別情報付与サブステップとを備えることを特徴とする翻訳方法。
【請求項２】
前記第２の命令配置サブステップにおいて、
処理対象とする任意の条件実行命令群について、当該条件実行命令群の開始点から、当該条件実行命令群を含む基本ブロックの開始点に向かって、当該条件実行命令群に付与されている条件の真偽値を設定する条件設定命令を検索する第３の検索サブステップと、
前記第３の検索サブステップの結果、前記条件設定命令が存在する場合に、前記条件設定命令と当該条件実行命令群の開始点との間に、命令並列度に空きがある箇所を検索する第４の検索サブステップと、
前記第４の検索サブステップの結果、命令並列度に空きがある箇所があれば、前記実行通知命令を空きがある箇所に配置し直す第１の配置変更サブステップと、
前記第３の検索サブステップの結果、前記条件設定命令が存在しない場合に、前記基本ブロックの開始点と当該条件実行命令群の開始点との間に、命令並列度に空きがある箇所を検索する第５の検索サブステップと、
前記第５の検索サブステップの結果、命令並列度に空きがある箇所があれば、前記実行通知命令を空きがある箇所に配置し直す第２の配置変更サブステップとを備える請求項１に記載の翻訳方法。
【請求項３】
変換前のソースプログラムまたは変換後の機械語プログラムに対する実行通知命令の埋め込み方法であって、
それぞれが包含関係にある複数の単位を決定する単位決定ステップと、
第１の単位として、前記単位決定ステップで決定した単位から任意の単位を選択する第１の単位選択ステップと、
変換前のソースプログラムまたは変換後の機械語プログラムを前記第１の単位で分割するプログラム分割ステップと、
前記プログラム分割ステップで分割した領域毎の開始点および終了点を検索する開始点および終了点検索ステップと、
前記開始点および終了点検索ステップで検索した領域毎の開始点および終了点に、前記実行通知命令を配置する命令配置ステップと、
第１の識別情報として、第１の単位に対応した前記実行通知命令全体に対して、前記機械語プログラム全体の中で唯一となる識別情報を生成する第１の識別情報生成ステップと、
前記第１の識別情報を前記実行通知命令毎に付与する第１の識別情報付与ステップと、
第２の単位として、前記単位決定ステップで決定した単位から、第１の単位に包含される単位を選択する第２の単位選択ステップと、
第２の識別情報として、第２の単位に対応した実行通知命令毎に対して、前記第１の単位で分割した領域の中で唯一となる識別情報を生成する第２の識別情報生成ステップと、
前記第２の識別情報を前記実行通知命令毎に付与する第２の識別情報付与ステップとを備え、
前記単位決定ステップで決定した全ての単位について、前記の第１の単位選択ステップ、プログラム分割ステップ、開始点および終了点検索ステップ、命令配置ステップ、第１の識別情報生成ステップ、第１の識別情報付与ステップ、第２の単位選択ステップ、第２の識別情報生成ステップ、第２の識別情報付与ステップを実行することを特徴とする実行通知命令の埋め込み方法。
【請求項４】
前記任意の単位において分割する領域の開始点と終了点が常に一対一で対応するかどうかを判定する対応判定ステップを備え、
前記対応判定ステップの結果、領域の開始点と終了点が常に一対一で対応している場合は、当該単位で分割する領域の終了点に対する検索ステップ、命令配置ステップ、識別情報の生成ステップ、識別情報の付与ステップを省略する請求項３に記載の実行通知命令の埋め込み方法。
【請求項５】
前記任意の単位において分割する領域の開始点が、当該単位を包含する単位で分割した領域の開始点と同一であるかどうか、または、前記任意の単位において分割する領域の終了点が、当該単位を包含する単位で分割した領域の終了点と同一であるかどうかを判定する重複判定ステップを備え、
前記重複判定ステップの結果、当該領域毎の開始点が、当該単位を包含する単位で分割した領域の開始点と同一である場合、または、当該領域毎の終了点が、当該単位を包含する単位で分割した領域の終了点と同一である場合は、当該領域開始点に対する命令配置ステップ、識別情報の生成ステップ、識別情報の付与ステップ、または当該領域終了点に対する命令配置ステップ、識別情報の生成ステップ、識別情報の付与ステップを省略する請求項３に記載の実行通知命令の埋め込み方法。
【請求項６】
プログラムが複数のソースファイルから構成される場合に、各ソースファイルに対応したオブジェクトファイルの生成時には、識別情報がソースファイル間で依存し合う単位に対する識別情報の生成ステップおよび識別情報の付与ステップは未実施のままにしておき、生成された各オブジェクトファイルのリンク時に、識別情報がソースファイル間で依存し合う単位に対する識別情報の生成ステップおよび識別情報の付与ステップを実行する請求項３に記載の実行通知命令の埋め込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行通知命令の埋め込みによるカバレッジ計測に適した翻訳方法および実行通知命令の埋め込み方法に関するものである。
【背景技術】
【０００２】
従来のカバレッジ計測方法では、プログラム中に予め実行通知命令を埋め込んでおき、プログラム実行時に通知される情報から実行範囲を解析する方法が用いられている。従来の実行通知命令の埋め込み方法には２通りがある。ソースプログラムから変換した機械語プログラム中の基本ブロック毎に実行通知命令を埋め込む方法と、ソースプログラム中の分岐箇所毎に実行通知命令を埋め込む方法とである。また、各実行通知命令には、実行箇所の特定を可能にするための識別情報として、予めプログラム全体において唯一となる（互いに識別可能な）ＩＤ番号が付与されている。
【０００３】
従来の実行通知命令の埋め込み方法において、機械語プログラム中の基本ブロック毎に実行通知命令を埋め込む場合の構成を図１１に示し、ソースプログラム中の分岐箇所毎に実行通知命令を埋め込む場合の構成を図１２に示す。
【０００４】
図１１において、翻訳部２００は、ソースプログラムＰ１を機械語プログラムに変換する変換部１０と、機械語プログラムの冗長性を排除する最適化部２０と、基本ブロック毎への実行通知命令埋め込み部３０と、実行プログラムＰ２を生成する実行プログラム生成部４０から構成されている。基本ブロック毎への実行通知命令埋め込み部３０では、機械語プログラム中の基本ブロックを検索し、ＩＤ番号を付与した実行通知命令を埋め込む。
【０００５】
図１２において、翻訳部３００は、ソースプログラムＰ１中の分岐箇所毎への実行通知命令埋め込み部５と、実行通知命令を埋め込んだソースプログラムを機械語プログラムに変換する変換部１０と、機械語プログラムの冗長性を排除する最適化部２０と、実行プログラムＰ２を生成する実行プログラム生成部４０から構成されている。分岐箇所毎への実行通知命令埋め込み部５では、ソースプログラムＰ１中の分岐箇所を検索し、ＩＤ番号を付与した実行通知命令を埋め込む。
【０００６】
特許文献１には、ソースプログラム中の分岐箇所に、プログラム全体において唯一となるＩＤ番号を付与した実行通知命令を埋め込み、プログラム実行時に通知される情報から実行範囲を解析する方法が開示されている。
【特許文献１】特開平１１−３１６６９６号公報（第１５−１６頁、第６−７図）
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、機械語プログラム中の基本ブロック毎に実行通知命令を埋め込む従来の方法では、計測対象となるプログラム中に条件実行命令が含まれる場合に、条件実行命令に対応した実行通知命令が生成されないという問題がある。
【０００８】
上記の問題は、機械語プログラムに対して実行通知命令を埋め込む従来の方法ではなく、機械語プログラムに変換される前のソースプログラムに対して実行通知命令を埋め込む従来の方法であれば、ソースプログラム中に埋め込まれた実行通知命令は、翻訳時に自動的に条件実行命令を含む実行プログラムへの翻訳されるため、解決可能である。
【０００９】
しかし、機械語プログラムに変換される前のソースプログラムに実行通知命令を埋め込む従来の計測方法では、機械語プログラムの最適化を行うと、埋め込んだ実行通知命令が意図しない箇所に移動されてしまう可能性があるため、結果として実行範囲が正確に解析できないという問題がある。
【００１０】
すなわち、条件実行命令が含まれる機械語プログラムを最適化すると、従来の計測方法では、実行範囲を正確に解析できないという問題がある。
【００１１】
従来の計測方法の具体例を図１３、図１４を参照しながら説明する。
【００１２】
図１３は、図１１に示した構成によって、機械語プログラム中の基本ブロック毎に実行通知命令を埋め込んだ場合の例を示す図である。
【００１３】
図１３に示す機械語プログラムの例は、基本ブロックＡ，Ｂ，Ｃからなる。機械語プログラム中には、各基本ブロックに対応する実行通知命令ｉ１，ｉ２，ｉ３が埋め込まれており、プログラム実行時にこれらの実行通知命令が通知する情報から実行範囲を解析する。例えば、４行目の命令１については、同一基本ブロック内にある３行目の実行通知命令ｉ１が実行されていれば、４行目の命令１も実行されたと判断することができる。
【００１４】
しかし、１１行目の条件実行命令については、命令に付与されている条件ａの真偽値によって実行状態が変化するため、同一基本ブロック内にある８行目の実行通知命令が実行されていたとしても、１１行目の条件実行命令も実行されたかどうかは判断できない。
【００１５】
図１４は、図１２に示した構成によって、ソースプログラム中の分岐箇所毎に実行通知命令を埋め込み、機械語プログラムに変換、最適化した場合の例を示す図である。
【００１６】
図１４に示す機械語プログラムの例は、基本ブロックＡ，Ｂ，Ｃからなる。基本ブロックＡ，Ｂ，Ｃの開始点は、それぞれ機械語プログラムに変換する前のソースプログラムにおける分岐箇所ａ，ｂ，ｃに対応しているものとする。機械語プログラム中には、ソースプログラム中の分岐箇所ａ，ｂ，ｃに対応する実行通知命令ｉ１，ｉ２，ｉ３が埋め込まれており、プログラム実行時にこれらの実行通知命令が通知する情報から実行範囲を解析する。
【００１７】
しかし、機械語プログラム中では、最適化によりソースプログラム中の分岐箇所ｂに対応する実行通知命令が、基本ブロックＢの開始点より前の８行目に移動されている。そのため、機械語プログラムからは、基本ブロックＢ内の命令が実行されたかどうかが判断できない。
【００１８】
以上の理由により、条件実行命令が含まれる機械語プログラムを最適化すると、従来の計測方法では、実行範囲を正確に解析できない。
【００１９】
本発明は、上記の従来技術の課題を解決するもので、計測対象となるプログラムに条件実行命令が含まれる場合でも、正確かつ効率的に実行範囲を解析することが可能な翻訳方法および実行通知命令の埋め込み方法を提供することを目的とする。
【００２０】
また、本発明を実行することによってプログラムに埋め込む実行通知命令の数が増大することが予想される。この新たな課題に対して、実行通知命令を階層的に使用することで、各実行通知命令に通知させる情報量を削減することを目的とする。
【課題を解決するための手段】
【００２１】
本発明による翻訳方法は、ソースプログラムを実行プログラムに翻訳する方法であって、
前記ソースプログラムを機械語プログラムに変換する変換ステップと、
前記機械語プログラムの冗長性を排除する最適化ステップと、
前記最適化ステップの後に、自身が実行されたことを通知する実行通知命令を、最適化した前記機械語プログラム中に埋め込む埋め込みステップと、
前記実行通知命令を含んだ実行プログラムを生成するプログラム生成ステップとを備え、
前記埋め込みステップは、
前記機械語プログラム中の基本ブロック毎の開始点を検索する第１の検索サブステップと、
前記第１の検索サブステップにおいて検索した基本ブロック毎の開始点に実行通知命令を配置する第１の命令配置サブステップと、
前記機械語プログラム中の条件実行命令群毎の開始点を検索する第２の検索サブステップと、
前記第２の検索サブステップにおいて検索した条件実行命令群毎の開始点に、条件実行命令群と同一の条件を付与した前記実行通知命令を配置する第２の命令配置サブステップとを備え、
前記プログラム生成ステップは、
前記実行通知命令毎に対して、個々の実行通知命令を識別するための情報を生成する識別情報生成サブステップと、
前記実行通知命令毎に対して、前記識別情報を付与する識別情報付与サブステップとを備えることを特徴とする。
【００２２】
本構成によって、各基本ブロックに対応する実行通知命令および各条件実行命令群に対応する実行通知命令が埋め込まれるため、計測対象となるプログラムに条件実行命令が含まれる場合でも、実行範囲を解析することが可能となる。
【００２３】
上記の翻訳方法の前記第２の命令配置サブステップにおいて、
処理対象とする任意の条件実行命令群について、当該条件実行命令群の開始点から、当該条件実行命令群を含む基本ブロックの開始点に向かって、当該条件実行命令群に付与されている条件の真偽値を設定する条件設定命令を検索する第３の検索サブステップと、
前記第３の検索サブステップの結果、前記条件設定命令が存在する場合に、前記条件設定命令と当該条件実行命令群の開始点との間に、命令並列度に空きがある箇所を検索する第４の検索サブステップと、
前記第４の検索サブステップの結果、命令並列度に空きがある箇所があれば、前記実行通知命令を空きがある箇所に配置し直す第１の配置変更サブステップと、
前記第３の検索サブステップの結果、前記条件設定命令が存在しない場合に、前記基本ブロックの開始点と当該条件実行命令群の開始点との間に、命令並列度に空きがある箇所を検索する第５の検索サブステップと、
前記第５の検索サブステップの結果、命令並列度に空きがある箇所があれば、前記実行通知命令を空きがある箇所に配置し直す第２の配置変更サブステップとを備えるという態様がある。
【００２４】
本構成によって、実行通知命令の並列実行度を向上させることで、命令埋め込みによるプログラムの実行速度の低下を防ぐことが可能となる。
【００２５】
また、本発明による実行通知命令の埋め込み方法は、変換前のソースプログラムまたは変換後の機械語プログラムに対する実行通知命令の埋め込み方法であって、
それぞれが包含関係にある複数の単位を決定する単位決定ステップと、
第１の単位として、前記単位決定ステップで決定した単位から任意の単位を選択する第１の単位選択ステップと、
変換前のソースプログラムまたは変換後の機械語プログラムを前記第１の単位で分割するプログラム分割ステップと、
前記プログラム分割ステップで分割した領域毎の開始点および終了点を検索する開始点および終了点検索ステップと、
前記開始点および終了点検索ステップで検索した領域毎の開始点および終了点に、前記実行通知命令を配置する命令配置ステップと、
第１の識別情報として、第１の単位に対応した前記実行通知命令全体に対して、前記機械語プログラム全体の中で唯一となる識別情報を生成する第１の識別情報生成ステップと、
前記第１の識別情報を前記実行通知命令毎に付与する第１の識別情報付与ステップと、
第２の単位として、前記単位決定ステップで決定した単位から、第１の単位に包含される単位を選択する第２の単位選択ステップと、
第２の識別情報として、第２の単位に対応した実行通知命令毎に対して、前記第１の単位で分割した領域の中で唯一となる識別情報を生成する第２の識別情報生成ステップと、
前記第２の識別情報を前記実行通知命令毎に付与する第２の識別情報付与ステップとを備え、
前記単位決定ステップで決定した全ての単位について、前記の第１の単位選択ステップ、プログラム分割ステップ、開始点および終了点検索ステップ、命令配置ステップ、第１の識別情報生成ステップ、第１の識別情報付与ステップ、第２の単位選択ステップ、第２の識別情報生成ステップ、第２の識別情報付与ステップを実行することを特徴とする。
【００２６】
本構成によって、実行通知命令を階層的に使用することで識別情報のサイズを小さくし、増大する実行通知命令に付与するＩＤ番号が不足することを防ぐことが可能となる。
【００２７】
上記の実行通知命令の埋め込み方法において、さらに、
前記任意の単位において分割する領域の開始点と終了点が常に一対一で対応するかどうかを判定する対応判定ステップを備え、
前記対応判定ステップの結果、領域の開始点と終了点が常に一対一で対応している場合は、当該単位で分割する領域の終了点に対する検索ステップ、命令配置ステップ、識別情報の生成ステップ、識別情報の付与ステップを省略するという態様がある。
【００２８】
本構成によって、任意の単位で分割する領域毎の開始点と終了点が一対一で対応している場合は、終了点に対する実行通知命令の埋め込みを省略することにより、当該単位に対応する実行通知命令を半分に減少させることができ、プログラムのサイズの増大および実行速度の低下を防ぐことが可能となる。
【００２９】
また、上記の実行通知命令の埋め込み方法において、さらに、
前記任意の単位において分割する領域の開始点が、当該単位を包含する単位で分割した領域の開始点と同一であるかどうか、または、前記任意の単位において分割する領域の終了点が、当該単位を包含する単位で分割した領域の終了点と同一であるかどうかを判定する重複判定ステップを備え、
前記重複判定ステップの結果、当該領域毎の開始点が、当該単位を包含する単位で分割した領域の開始点と同一である場合、または、当該領域毎の終了点が、当該単位を包含する単位で分割した領域の終了点と同一である場合は、当該領域開始点に対する命令配置ステップ、識別情報の生成ステップ、識別情報の付与ステップ、または当該領域終了点に対する命令配置ステップ、識別情報の生成ステップ、識別情報の付与ステップを省略するという態様がある。
【００３０】
本構成によって、重複する実行通知命令の埋め込みを省略することで、プログラムのサイズの増大および実行速度の低下を防ぐことが可能となる。
【００３１】
また、上記の実行通知命令の埋め込み方法において、さらに、
プログラムが複数のソースファイルから構成される場合に、各ソースファイルに対応したオブジェクトファイルの生成時には、識別情報がソースファイル間で依存し合う単位に対する識別情報の生成ステップおよび識別情報の付与ステップは未実施のままにしておき、生成された各オブジェクトファイルのリンク時に、識別情報がソースファイル間で依存し合う単位に対する識別情報の生成ステップおよび識別情報の付与ステップを実行するという態様がある。
【００３２】
本構成によって、複数のソースファイルから構成されるプログラムを再度翻訳する場合に、前回の翻訳時から内容が変更されていないソースファイルについては、再翻訳時にオブジェクトファイルを生成し直すステップを省略することが可能となる。
【発明の効果】
【００３３】
本発明によれば、基本ブロックに対応した実行通知命令および条件実行命令に対応した実行通知命令が埋め込まれるため、計測対象となるプログラムに条件実行命令が含まれる場合でも、実行範囲を解析することが可能となる。
【００３４】
また、本発明を実行することによってプログラムに埋め込む実行通知命令の数が増大することが予想されるが、実行通知命令を階層的に使用することによって、実行通知命令毎に付与するＩＤ番号が不足することを防ぐことが可能となる。
【発明を実施するための最良の形態】
【００３５】
以下、本発明にかかわる翻訳方法および実行通知命令の埋め込み方法の実施の形態を図面に基づいて詳細に説明する。
【００３６】
図１は、本発明の実行通知命令の埋め込み方法の構成を説明するブロック図である。
【００３７】
図１において、本実施の形態における翻訳方法は、パーソナルコンピュータ等のコンピュータ上で実行されるプログラムによって実現され、ソースプログラムＰ１を翻訳部１００によって実行プログラムＰ２に翻訳する。
【００３８】
翻訳部１００は、ソースプログラムＰ１を機械語プログラムに変換する変換部１０と、変換した機械語プログラムの冗長性を排除する最適化部２０と、機械語プログラム内に実行通知命令を埋め込む実行通知命令埋め込み部３０と、実行プログラムＰ２を生成する実行プログラム生成部４０から構成される。
【００３９】
実行通知命令埋め込み部３０は、機械語プログラム内のソースファイル単位に対応した実行通知命令埋め込み部３１と、機械語プログラム内の関数単位に対応した実行通知命令埋め込み部３２と、機械語プログラム内の基本ブロック単位に対応した実行通知命令埋め込み部３３と、機械語プログラム内の条件実行命令群に対応した実行通知命令埋め込み部３４から構成されている。
【００４０】
以下、本発明による実行通知命令の埋め込み手順を説明する。
【００４１】
本発明の実施の形態では、機械語プログラムを分割する複数の単位として、ソースファイル、関数、基本ブロックの３つを使用する。また、ソースファイル単位、関数単位、基本ブロック単位に対応して埋め込む実行通知命令に、第１の識別情報として、それぞれＩＤ番号１、ＩＤ番号２、ＩＤ番号３を予め付与しておく。
【００４２】
まず、ソースファイル単位に対応した実行通知命令の埋め込み部３１の処理手順について図２を用いて説明する。
【００４３】
ステップＳ１では、機械語プログラム中に未処理のソースファイルの開始点、すなわち外部関数があるかどうかを判定する。未処理の外部関数がない場合は、処理を終了する。ある場合は、ステップＳ２に進み、次に処理する外部関数を選択する。
【００４４】
ステップＳ３では、外部関数の開始点に第１の識別情報としてＩＤ番号１を付与した実行通知命令を配置する。
【００４５】
ステップＳ４では、外部関数中に未処理の外部関数の終了点があるかどうかを判定する。未処理の外部関数の終了点がない場合は、ステップＳ１に戻り、次の処理を行う。ある場合は、ステップＳ５に進み、次に処理する外部関数の終了点を選択する。
【００４６】
ステップＳ６では、終了点に第１の識別情報としてＩＤ番号１を付与した実行通知命令を配置し、ステップＳ４に戻る。
【００４７】
次に、関数単位に対応した実行通知命令の埋め込み部３２の処理手順について図３を用いて説明する。
【００４８】
ステップＳ１１では、機械語プログラム中に未処理の内部関数があるかどうかを判定する。未処理の内部関数がない場合は、処理を終了する。ある場合は、ステップＳ１２に進み、次に処理する内部関数を選択する。
【００４９】
ステップＳ１３では、関数の開始点に第１の識別情報としてＩＤ番号２を付与した実行通知命令を配置する。
【００５０】
ステップＳ１４では、実行通知命令に、第２の識別情報としてソースファイル中で唯一となるＩＤ番号を付与する。
【００５１】
ステップＳ１５では、内部関数中に未処理の内部関数の終了点があるかどうかを判定する。未処理の内部関数の終了点がない場合は、ステップＳ１１に戻り、次の処理を行う。ある場合は、ステップＳ１６に進み、次に処理する内部関数の終了点を選択する。
【００５２】
ステップＳ１７では、終了点に第１の識別情報としてＩＤ番号２を付与した実行通知命令を配置する。
【００５３】
ステップＳ１８では、実行通知命令に、第２の識別情報としてソースファイル中で唯一となるＩＤ番号を付与し、ステップＳ１５に戻る。
【００５４】
ここで、関数単位で分割する領域のうち、外部関数の開始点および終了点は、関数単位を包含する単位であるソースファイル単位で分割した領域の開始点および終了点と重複している。そのため、外部関数の開始点および終了点に対する実行通知命令の埋め込みは、省略可能であると判断できる。
【００５５】
ゆえに、関数単位に対応した実行通知命令の埋め込みでは、外部関数以外、すなわち内部関数のみについて処理を行う。
【００５６】
次に、基本ブロック単位に対応した実行通知命令の埋め込み部３３の処理手順について図４を用いて説明する。
【００５７】
ステップＳ２１では、機械語プログラム中に未処理の基本ブロックがあるかどうかを判定する。未処理の基本ブロックがない場合は、処理を終了する。ある場合は、ステップＳ２２に進み、次に処理する基本ブロックを選択する。
【００５８】
ステップＳ２３では、基本ブロックの開始点が、関数の開始点と等しいかどうかを判定する。基本ブロックの開始点と関数の開始点が等しい場合は、ステップＳ２１に戻り、次の処理を行う。等しくない場合は、ステップＳ２４に進み、基本ブロックの開始点に、第１の識別情報としてＩＤ番号３を付与した実行通知命令を配置する。
【００５９】
ステップＳ２５では、実行通知命令に、第２の識別情報として関数中で唯一となるＩＤ番号を付与し、ステップＳ２１に戻る。
【００６０】
ここで、基本ブロック単位で分割する領域の開始点および終了点は、常に一対一で対応している。そのため、基本ブロックの終了点に対する実行通知命令の埋め込みは、省略可能であると判断できる。
【００６１】
ゆえに、基本ブロック単位に対応した実行通知命令の埋め込みでは、基本ブロックの開始点についてのみの処理を行う。
【００６２】
次に、条件実行命令に対応した実行通知命令の埋め込み部３４の処理手順について図５を用いて説明する。
【００６３】
ステップＳ３１では、機械語プログラム中に未処理の条件実行命令群があるかどうかを判定する。未処理の条件実行命令群がない場合は、処理を終了する。ある場合は、ステップＳ３２に進み、次に処理する条件実行命令群を選択する。
【００６４】
ステップＳ３３では、条件実行命令群の開始点に、第１の識別情報としてＩＤ番号３を付与した実行通知命令を配置する。
【００６５】
ステップＳ３４では、実行通知命令に、条件実行命令と同一の実行条件を付与する。
【００６６】
ステップＳ３５では、条件実行命令の開始点と、これより先行する基本ブロックの開始点の間に、条件実行命令群に付与されている条件の真偽値を設定する条件設定命令があるかどうかを判断する。条件設定命令がない場合は、ステップＳ３６に進み、次の処理を行う。ある場合は、ステップＳ３７に進み、次の処理を行う。
【００６７】
ステップＳ３６では、条件実行命令群の開始点と、当該条件実行命令群を包含する基本ブロックの開始点の間に、命令並列度に空きがある箇所があるかどうか判定する。空きがある箇所がない場合は、ステップＳ３９に進み、次の処理を行う。ある場合は、ステップＳ３８に進み、次の処理を行う。
【００６８】
ステップＳ３７では、条件実行命令群の開始点と条件設定命令の間に、命令並列度に空きがある箇所があるかどうか判定する。空きがある箇所がない場合は、ステップＳ３９に進み、次の処理を行う。ある場合は、ステップＳ３８に進み、次の処理を行う。
【００６９】
ステップＳ３８では、命令並列度に空きがある箇所に実行通知命令を配置し直す。
【００７０】
ステップＳ３９では、実行通知命令に、第２の識別情報として関数中で唯一となるＩＤ番号を付与し、ステップＳ３１に戻る。
【００７１】
次に、ソースファイル単位に対応した実行通知命令に対する第２の識別情報の生成、付与手順について図６を用いて説明する。
【００７２】
ソースファイル単位に対応した実行通知命令に対する第２の識別情報の生成、付与は、機械語プログラムから生成するオブジェクトファイルのリンク時に行う。
【００７３】
ステップＳ４１では、機械語プログラム中に未処理の実行通知命令があるかどうかを判定する。未処理の実行通知命令がない場合は、処理を終了する。ある場合は、ステップＳ４２に進み、次に処理する実行通知命令を選択する。
【００７４】
ステップＳ４３は、実行通知命令の第１の識別情報にＩＤ番号１が付与されているかどうかを判定する。ＩＤ番号１が付与されていない場合は、ステップＳ４１に戻り、次の処理を行う。付与されている場合は、ステップＳ４４に進み、実行通知命令に第２の識別情報としてプログラム全体の中で唯一となるＩＤ番号を付与し、ステップＳ４１に戻る。
【００７５】
以上、図２〜図６に示した手順により、各基本ブロックに対応する実行通知命令、および各条件実行命令群に対応する実行通知命令が埋め込まれるため、計測対象となるプログラムに条件実行命令が含まれる場合でも、実行範囲を解析することが可能となる。
【００７６】
本発明の実施の形態では、図５におけるステップＳ３５〜Ｓ３８を実行することにより、実行通知命令の並列実行度を向上させることで、命令埋め込みによるプログラムの実行速度の低下を防ぐことが可能となる。
【００７７】
本発明の実施の形態では、機械語プログラムを分割する複数の単位として、ソースファイル、関数、基本ブロックの３つを使用する。また、機械語プログラムに対して、図２、図３、図４の処理フローを適用して実行通知命令に第１の識別情報および第２の識別情報を付与し、実行通知命令を単位毎に階層化して使用することで、識別情報のサイズを小さくし、実行通知命令に付与するＩＤ番号が不足することを防ぐことが可能となる。
【００７８】
図４で説明したように、基本ブロック単位で分割する領域の開始点および終了点は、常に一対一で対応しているため、基本ブロックの終了点に対する実行通知命令の埋め込みを省略している。このように、不要な実行通知命令の埋め込みを省略することで、プログラムのサイズの増大、および実行速度の低下を防ぐことが可能となる。
【００７９】
図３で説明したように、関数単位で分割する領域のうち、外部関数の開始点および終了点は、関数単位を包含する単位であるソースファイル単位で分割した領域の開始点および終了点と重複しているため、実行通知命令の埋め込みを省略している。また、図４におけるステップＳ２３で選択中基本ブロックの開始点と関数の開始点が重複している場合は、実行通知命令の埋め込みを省略している。このように、重複する実行通知命令の埋め込みを省略することで、プログラムのサイズの増大、および実行速度の低下を防ぐことが可能となる。
【００８０】
図６で説明したように、機械語プログラムから生成するオブジェクトファイルのリンク時に図６におけるステップＳ４１〜Ｓ４４を実行することにより、複数のソースファイルから構成されるプログラムを再度翻訳する場合は、前回の翻訳時から内容が変更されていないソースファイルからオブジェクトファイルを生成し直すステップを省略することが可能となる。
【００８１】
ここで、〔課題を解決するための手段〕での説明との対応関係を説明する。
【００８２】
前記埋め込みステップは、前記機械語プログラム中の基本ブロック毎の開始点を検索する第１の検索サブステップ（これは、図４のステップＳ２１，Ｓ２２に対応する）と、前記第１の検索サブステップにおいて検索した基本ブロック毎の開始点に実行通知命令を配置する第１の命令配置サブステップ（これは、図４のステップＳ２４に対応する）と、前記機械語プログラム中の条件実行命令群毎の開始点を検索する第２の検索サブステップ（これは、図５のステップＳ３１，Ｓ３２に対応する）と、前記第２の検索サブステップにおいて検索した条件実行命令群毎の開始点に、条件実行命令群と同一の条件を付与した前記実行通知命令を配置する第２の命令配置サブステップ（これは、図５のステップＳ３３，Ｓ３４に対応する）とを備え、前記プログラム生成ステップは、前記実行通知命令毎に対して、個々の実行通知命令を識別するための情報を生成する識別情報生成サブステップと、前記実行通知命令毎に対して、前記識別情報を付与する識別情報付与サブステップ（これは、図６のステップＳ４１〜Ｓ４４に対応する）とを備える。
【００８３】
次の対応関係を説明する。
【００８４】
上記の翻訳方法の前記第２の命令配置サブステップにおいて、処理対象とする任意の条件実行命令群について、当該条件実行命令群の開始点から、当該条件実行命令群を含む基本ブロックの開始点に向かって、当該条件実行命令群に付与されている条件の真偽値を設定する条件設定命令を検索する第３の検索サブステップ（これは、図５のステップＳ３５に対応する）と、前記第３の検索サブステップの結果、前記条件設定命令が存在する場合に、前記条件設定命令と当該条件実行命令群の開始点との間に、命令並列度に空きがある箇所を検索する第４の検索サブステップ（これは、図５のステップＳ３７に対応する）と、前記第４の検索サブステップの結果、命令並列度に空きがある箇所があれば、前記実行通知命令を空きがある箇所に配置し直す第１の配置変更サブステップ（これは、図５のステップＳ３８に対応する）と、前記第３の検索サブステップの結果、前記条件設定命令が存在しない場合に、前記基本ブロックの開始点と当該条件実行命令群の開始点との間に、命令並列度に空きがある箇所を検索する第５の検索サブステップ（これは、図５のステップＳ３６に対応する）と、前記第５の検索サブステップの結果、命令並列度に空きがある箇所があれば、前記実行通知命令を空きがある箇所に配置し直す第２の配置変更サブステップ（これは、図５のステップＳ３８に対応する）とを備える。
【００８５】
次の対応関係を説明する。
【００８６】
それぞれが包含関係にある複数の単位を決定する単位決定ステップと、第１の単位として、前記単位決定ステップで決定した単位から任意の単位を選択する第１の単位選択ステップと、変換前のソースプログラムまたは変換後の機械語プログラムを前記第１の単位で分割するプログラム分割ステップと、前記プログラム分割ステップで分割した領域毎の開始点および終了点を検索する開始点および終了点検索ステップ（これは、図３のステップＳ１１，Ｓ１２，Ｓ１５，Ｓ１６に対応する）と、前記開始点および終了点検索ステップで検索した領域毎の開始点および終了点に、前記実行通知命令を配置する命令配置ステップ（これは、図３のステップＳ１３，Ｓ１７に対応する）と、第１の識別情報として、第１の単位に対応した前記実行通知命令全体に対して、前記機械語プログラム全体の中で唯一となる識別情報を生成する第１の識別情報生成ステップ（これは、図３のステップＳ１８に対応する）と、前記第１の識別情報を前記実行通知命令毎に付与する第１の識別情報付与ステップ（これは、図３のステップＳ１８に対応する）と、第２の単位として、前記単位決定ステップで決定した単位から、第１の単位に包含される単位を選択する第２の単位選択ステップ（これは、図４のステップＳ２１，Ｓ２２に対応する）と、第２の識別情報として、第２の単位に対応した実行通知命令毎に対して、前記第１の単位で分割した領域の中で唯一となる識別情報を生成する第２の識別情報生成ステップ（これは、図４のステップＳ２５に対応する）と、前記第２の識別情報を前記実行通知命令毎に付与する第２の識別情報付与ステップ（これは、図４のステップＳ２５に対応する）とを備え、前記単位決定ステップで決定した全ての単位について、前記の第１の単位選択ステップ、プログラム分割ステップ、開始点および終了点検索ステップ、命令配置ステップ、第１の識別情報生成ステップ、第１の識別情報付与ステップ、第２の単位選択ステップ、第２の識別情報生成ステップ、第２の識別情報付与ステップを実行する。
【００８７】
また、次の対応関係を説明する。
【００８８】
「前記任意の単位において分割する領域の開始点と終了点が常に一対一で対応するかどうかを判定する対応判定ステップ」および「前記任意の単位において分割する領域の開始点が、当該単位を包含する単位で分割した領域の開始点と同一であるかどうか、または、前記任意の単位において分割する領域の終了点が、当該単位を包含する単位で分割した領域の終了点と同一であるかどうかを判定する重複判定ステップ」は、図４のステップＳ２３に対応する。
【００８９】
以上で、〔課題を解決するための手段〕での説明との対応関係の説明を終わる。
【００９０】
次に、本発明の実施の形態による、実行通知命令を埋め込み方法の具体例を図７〜図１０を参照しながら説明する。
【００９１】
本発明によって生成される実行プログラムＰ２は、２命令までの並列実行が可能なプロセッサで実行されるものとする。また、前記プロセッサは、自身が実行されると、予め付与された２種類の識別情報を通知する実行通知命令を備えているものとする。
【００９２】
実行通知命令毎に付与した第１の識別情報および第２の識別情報は、実行通知命令の末尾に「（第１の識別情報−第２の識別情報）」という形式で記述する。
【００９３】
図７、図８において、機械語プログラムＡ，Ｂは、それぞれソースファイルａ，ｂを変換、最適化したものとする。図８は、ある特定の時点での状態を示すものではなく、時系列的に変化する状態を重ね合わせて示している。特に、機械語プログラムＡにおいて、実行通知命令（３−３）が１３行目から９行目へ移動されている点に注目すべきである。
【００９４】
図７に示すように、機械語プログラムＡは、外部関数Ａ、および内部関数ａを含む。外部関数Ａは、基本ブロックＡ，Ｂを含み、基本ブロックＡには、条件ａ，ｂに対応した２つの条件実行命令群が存在する。外部関数Ａの関数終了命令は、基本ブロックＡ，Ｂの２箇所に存在する。内部関数ａは、基本ブロックＣを含み、基本ブロックＣは関数終了命令を含む。
【００９５】
また、機械語プログラムＢは、外部関数Ｂ、および内部関数ｂを含む。外部関数Ｂは、基本ブロックＤ，Ｅ，Ｆを含み、基本ブロックＤは、条件ｃの設定命令を含む。基本ブロックＥは、条件ｃに対応した条件実行命令群を含み、基本ブロックＦは、関数終了命令を含む。内部関数ｂは、基本ブロックＧを含み、基本ブロックＧは関数終了命令を含む。
【００９６】
まず、機械語プログラムＡに着目して実行通知命令の埋め込む処理の説明を行う。
【００９７】
まずは、ソースファイル単位に対応した実行通知命令について処理する。
【００９８】
図２における手順に従い、ステップＳ１で、未処理のソースファイルの開始点、すなわち外部関数を検索する。その結果、ステップＳ２で、外部関数Ａを選択する。
【００９９】
ステップＳ３で、外部関数Ａの開始点である３行目に、第１の識別情報としてＩＤ番号１を付与した実行通知命令を配置する。
【０１００】
ステップＳ４で、未処理の終了点を検索する。その結果、ステップＳ５で、１６行目の終了点を選択する。
【０１０１】
ステップＳ６で、１６行目に、第１の識別情報としてＩＤ番号１を付与した実行通知命令を配置する。
【０１０２】
ステップＳ４に戻り、未処理の終了点を検索する。その結果、ステップＳ５で、２３行目の終了点を選択する。
【０１０３】
ステップＳ６で、２３行目に、第１の識別情報としてＩＤ番号１を付与した実行通知命令を配置する。
【０１０４】
ステップＳ４に戻り、未処理の終了点を検索する。その結果、未処理の終了点が存在しないため、ステップＳ１に戻る。
【０１０５】
ステップＳ１で、未処理の外部関数を検索する。その結果、未処理の外部関数が存在しないため、処理を終了する。
【０１０６】
次に、関数単位に対応した実行通知命令について処理する。
【０１０７】
図３における手順に従い、ステップＳ１１で、未処理の内部関数を検索する。その結果、ステップＳ１２で、内部関数ａを選択する。
【０１０８】
ステップＳ１３で、内部関数ａの開始点である２７行目に、第１の識別情報としてＩＤ番号２を付与した実行通知命令を配置する。
【０１０９】
ステップＳ１４で実行通知命令に、第２の識別情報としてソースファイル中で唯一となるＩＤ番号である「１」を付与する。
【０１１０】
つまり、２７行目に実行通知命令（２−１）を埋め込む。
【０１１１】
ステップＳ１５で未処理の終了点を検索する。その結果、ステップＳ１６で、３０行目の終了点を選択する。
【０１１２】
ステップＳ１７で、３０行目に、第１の識別情報としてＩＤ番号２を付与した実行通知命令を配置する。
【０１１３】
ステップＳ１８で、実行通知命令に、第２の識別情報としてソースファイル中で唯一となるＩＤ番号である「２」を付与する。
【０１１４】
つまり、３０行目に実行通知命令（２−２）を埋め込む。
【０１１５】
ステップＳ１５に戻り、未処理の終了点を検索する。その結果、未処理の終了点が存在しないため、ステップＳ１１に戻る。
【０１１６】
ステップＳ１１で、未処理の内部関数を検索する。その結果、未処理の内部関数が存在しないため、処理を終了する。
【０１１７】
次に、基本ブロック単位に対応した実行通知命令について処理する。
【０１１８】
図４における手順に従い、ステップＳ２１で、未処理の基本ブロックを検索する。
【０１１９】
その結果、ステップＳ２２で基本ブロックＡを選択する。
【０１２０】
ステップＳ２３で、関数の開始点と重複しているかどうかを判定する。その結果、関数の開始点と重複しているためステップＳ２１に戻る。
【０１２１】
ステップＳ２１で、未処理の基本ブロックを検索する。その結果、ステップＳ２２で、基本ブロックＢを選択する。
【０１２２】
ステップＳ２３で、関数の開始点と重複しているかどうかを判定する。その結果、関数の開始点と重複していないため、ステップＳ２４に進む。
【０１２３】
ステップＳ２４で、基本ブロックＢの開始点である２０行目に、第１の識別情報としてＩＤ番号３を付与した実行通知命令を配置する。
【０１２４】
ステップＳ２５で実行通知命令に、第２の識別情報として関数中で唯一となるＩＤ番号である「１」を付与する。
【０１２５】
つまり、２０行目に実行通知命令（３−１）を埋め込む。
【０１２６】
ステップＳ２１に戻り、未処理の基本ブロックを検索する。その結果、ステップＳ２２で、基本ブロックＣを選択する。
【０１２７】
ステップＳ２３で、関数の開始点と重複しているかどうかを判定する。その結果、関数の開始点と重複しているためステップＳ２１に戻る。
【０１２８】
ステップＳ２１で、未処理の基本ブロックを検索する。その結果、未処理の基本ブロックが存在しないため処理を終了する。
【０１２９】
次に、条件実行命令群に対応した実行通知命令について処理する。
【０１３０】
図５における手順に従い、ステップＳ３１で、未処理の条件実行命令群を検索する。その結果、ステップＳ３２で、条件ａに対応する条件実行命令群を選択する。
【０１３１】
ステップＳ３３で、条件実行命令群の先頭である７行目に、第１の識別情報としてＩＤ番号３を付与した実行通知命令を配置する。
【０１３２】
ステップＳ３４で、実行通知命令に、条件実行命令群と同一の実行条件であるａを付与する。
【０１３３】
ステップＳ３５で、条件実行命令群の開始点と、基本ブロックの開始点との間に、条件設定命令があるかどうかを判定する。その結果、条件設定命令が存在するためステップＳ３７に進む。
【０１３４】
ステップＳ３７で、条件実行命令群の開始点と条件設定命令の間に、命令並列度に空きがある箇所があるかどうかを判定する。その結果、空きがある箇所が存在しないため、ステップＳ３９に進む。
【０１３５】
ステップＳ３９で、実行通知命令に、第２の識別情報として関数中で唯一となるＩＤ番号である「２」を付与する。
【０１３６】
つまり、７行目に実行通知命令（３−２）を埋め込む。
【０１３７】
ステップＳ３１に戻り、未処理の条件実行命令群を検索する。その結果、ステップＳ３２で、条件ｂに対応する条件実行命令群を選択する。
【０１３８】
ステップＳ３３で、条件実行命令群の先頭である１３行目に、第１の識別情報としてＩＤ番号３を付与した実行通知命令を配置する。
【０１３９】
ステップＳ３４で、実行通知命令に、条件実行命令群と同一の実行条件であるｂを付与する。
【０１４０】
ステップＳ３５で、条件実行命令群の開始点と基本ブロックの開始点との間に、条件設定命令があるかどうかを判定する。その結果、条件設定命令が存在するためステップＳ３７に進む。
【０１４１】
ステップＳ３７で、条件実行命令群の開始点と条件設定命令の間に、命令並列度に空きがある箇所があるかどうかを判定する。１１、１２行目の命令セットは２命令存在するため空きがないが、１０行目の命令セットは１命令のみで空きがあるため、ステップＳ３８に進む。
【０１４２】
ステップＳ３８で、命令並列度に空きがある９行目に実行通知命令を配置し直す。
【０１４３】
ステップＳ３９で、実行通知命令に、第２の識別情報として関数中で唯一となるＩＤ番号である３を付与する。
【０１４４】
つまり、９行目に実行通知命令（３−３）を埋め込む。
【０１４５】
ステップＳ３１に戻り、未処理の条件実行命令群を検索する。その結果、未処理の条件実行命令が存在しないため処理を終了する。
【０１４６】
次に、機械語プログラムＢに着目して実行通知命令の埋め込む処理の説明を行う。
【０１４７】
ソースファイル単位、関数単位、基本ブロック単位に対応した実行通知命令については、機械語プログラムＡと同様の手順で処理できるため記述を省略し、条件実行命令群に対応した実行通知命令についての処理のみ説明する。
【０１４８】
図５における手順に従い、ステップＳ３１で、未処理の条件実行命令群を検索する。その結果、ステップＳ３２で、条件ｃに対応する条件実行命令群を選択する。
【０１４９】
ステップＳ３３で、条件実行命令群の先頭である１０行目に、第１の識別情報としてＩＤ番号３を付与した実行通知命令を配置する。
【０１５０】
ステップＳ３４で、実行通知命令に、条件実行命令群と同一の実行条件であるｃを付与する。
【０１５１】
ステップＳ３５で、条件実行命令群の開始点と基本ブロックの開始点との間に、条件設定命令があるかどうかを判定する。その結果、条件設定命令が存在しないためステップＳ３６に進む。
【０１５２】
ステップＳ３６で、条件実行命令群の開始点と基本ブロックの開始点の間に、命令並列度に空きがある箇所があるかどうかを判定する。その結果、空きがある箇所が存在しないため、ステップＳ３９に進む。
【０１５３】
ステップＳ３９で、実行通知命令に、第２の識別情報として関数中で唯一となるＩＤ番号である３を付与する。
【０１５４】
つまり、１０行目に実行通知命令（３−３）を埋め込む。
【０１５５】
ステップＳ３１に戻り、未処理の条件実行命令群を検索する。その結果、未処理の条件実行命令群が存在しないため処理を終了する。
【０１５６】
以上の手順で実行通知命令を埋め込んだ機械語プログラムＡ，Ｂから、それぞれのオブジェクトファイルを生成する。これらのオブジェクトファイルをリンクし、実行プログラムを生成する際に、第１の識別情報としてＩＤ番号１を付与した実行通知命令、すなわちソースファイル単位で配置した実行通知命令に、第２の識別情報として実行プログラム中で唯一となるＩＤ番号を付与する手順を説明する。
【０１５７】
図９は、図８の機械語プログラムＡ，Ｂから生成されるオブジェクトファイルをリンクし、生成した実行プログラムの例を示したものである。
【０１５８】
図６における手順に従い、ステップＳ４１で、未処理の実行通知命令を検索する。その結果、ステップＳ４２で、３行目の実行通知命令を選択する。
【０１５９】
ステップＳ４３で、第１の識別情報にＩＤ番号１が付与されているかどうかを判定する。その結果、ＩＤ番号１が付与されているためステップＳ４４に進む。
【０１６０】
ステップＳ４４で、実行通知命令に、第２の識別情報として、プログラム全体の中で唯一となるＩＤ番号である「１１」を付与する。
【０１６１】
ステップＳ４１に戻り、未処理の実行通知命令を検索する。その結果、ステップＳ４２で、７行目の実行通知命令を選択する。
ステップＳ４３で、第１の識別情報にＩＤ番号１が付与されているかどうかを判定する。その結果、ＩＤ番号１が付与されていないため、ステップＳ４１に戻る。
【０１６２】
同様の処理を９、１５、１９、２２、２６、２９、３４、３９、４１、４７、５０、５４、５６行目の実行通知命令に対して行う。その結果、１５、２２、３４、５０行目の実行通知命令に、第２の識別情報として、プログラム全体の中で唯一となるＩＤ番号である、「１２」、「１３」、「１４」、「１５」がそれぞれ付与される。
【０１６３】
以上の処理により、各基本ブロックに対応する実行通知命令および各条件実行命令群に対応する実行通知命令が埋め込まれる。
【０１６４】
次に、本発明の実施の形態によるカバレッジ計測方法の具体例を図１０を参照しながら説明する。
【０１６５】
図１０は、図９の実行プログラムを実行した際に、通知される識別情報の内容と通知順の例を示す図である。
【０１６６】
まず、プログラム実行時に通知される識別情報とその通知順から、実行された実行通知命令の箇所を特定する。
【０１６７】
本発明では、実行通知命令を階層的に使用するため、プログラム実行時に通知される識別情報は、ネスト構造になる。そのため、ソースファイルの開始点および終了点に埋め込まれた実行通知命令の識別情報の組合せでネストを解析し、同じ深さにある実行通知命令は当該ソースファイル内に存在する実行通知命令であると判断できる。同様に、関数の開始点および終了点に埋め込まれた実行通知命令の識別情報の組合せでネストを解析し、同じ深さにある実行通知命令は当該関数内に存在する実行通知命令であると判断できる。
【０１６８】
例えば、図１０において、４、５、９、１０行目の識別情報（３−２）、（２−１）、（２−２）、（３−１）は、外部関数Ａの開始点および終了点に埋め込まれた識別情報である（１−１１）および（１−１３）の組合せと同じ深さにあることから、全て機械語プログラムＡに含まれる実行通知命令であると判断できる。同様に、７行目の識別情報（３−２）は、外部関数Ｂの開始点および終了点に埋め込まれた識別情報である（１−１４）および（１−１５）の組合せと同じ深さにあることから、機械語プログラムＢに含まれる実行通知命令であると判断できる。
【０１６９】
以上のように、実行された実行通知命令の箇所を特定することにより、当該実行通知命令と同一条件で実行される命令についても実行されていると判断することができる。
【０１７０】
例えば、図９における３行目の実行通知命令（１−１１）が実行されていることが判断できれば、当該実行通知命令と同一基本ブロック内の命令であり、且つ条件実行命令でない命令である６、１０、１１、１２行目の命令も実行されていると判断することができる。
【０１７１】
また同様に、図９における７行目の実行通知命令（３−２）が実行されていることが判断できれば、当該実行通知命令と同一条件が付与されている条件実行命令群である８行目の条件実行命令も実行されていると判断することができる。
【０１７２】
また逆に、図９における９行目の実行通知命令（３−３）が実行されていないことが判断できれば、当該実行通知命令と同一条件が付与されている条件実行命令群である１３、１４行目の条件実行命令も実行されていないと判断することができる。
【０１７３】
なお、実施例の中では機械語プログラムを分割する複数の単位として、ソースファイル、関数、基本ブロックの３つを使用した例で説明したが、単位はこの３つに限定したものではなく、単位数も３つに限定したものではない。
【０１７４】
また、実施例の中では２命令までの並列実行が可能なプロセッサの例で説明したが、並列度は２命令に限定したものではない。
【０１７５】
また、実施例の中では２種類の識別情報を使用した例で説明したが、識別情報の種類は２種類に限定したものではない。
【０１７６】
また、実施例の中では実行通知命令の埋め込み処理を、第１の識別情報の付与、機械語プログラム中への配置、第２の識別情報の付与という順で実行する例を説明したが、埋め込み処理の順はこの順に限定したものではない。
【産業上の利用可能性】
【０１７７】
本発明の技術は、条件実行命令を含むプログラムについても実行範囲の解析が可能なカバレッジ計測方法等として有用である。
【図面の簡単な説明】
【０１７８】
【図１】本発明の実施の形態における実行通知命令の埋め込み方法の構成を説明するブロック図
【図２】本発明の実施の形態におけるソースファイル単位に対応した実行通知命令の埋め込み手順を示す図
【図３】本発明の実施の形態における関数単位に対応した実行通知命令の埋め込み手順を示す図
【図４】本発明の実施の形態における基本ブロック単位に対応した実行通知命令の埋め込み手順を示す図
【図５】本発明の実施の形態における条件実行命令単位に対応した実行通知命令の埋め込み手順を示す図
【図６】本発明の実施の形態におけるソースファイル単位に対応した実行通知命令に対する第２の識別情報の生成、付与手順を示す図
【図７】本発明の実施の形態における機械語プログラムの概念図
【図８】本発明の実施の形態における機械語プログラムに実行通知命令を埋め込んだ例を示す図
【図９】本発明の実施の形態における機械語プログラムから生成される実行プログラムの例を示す図
【図１０】本発明の実施の形態におけるプログラム実行時に通知される識別情報の例を示す図
【図１１】従来の実行通知命令の埋め込み方法の構成を説明するブロック図（その１）
【図１２】従来の実行通知命令の埋め込み方法の構成を説明するブロック図（その２）
【図１３】従来の技術において、機械語プログラム中の基本ブロック毎に実行通知命令を埋め込んだ例を示す図
【図１４】従来の技術において、ソースプログラム中の分岐箇所毎に実行通知命令を埋め込み、機械語プログラムに変換、最適化した例を示す図
【符号の説明】
【０１７９】
１０  変換部
２０  最適化部
３０  実行通知命令埋め込み部
３１  ソースファイル単位に対応した実行通知命令埋め込み部
３２  関数単位に対応した実行通知命令埋め込み部
３３  基本ブロック単位に対応した実行通知命令埋め込み部
３４  条件実行命令群に対応した実行通知命令埋め込み部
４０  プログラム生成部
１００  翻訳部
Ｐ１  ソースプログラム
Ｐ２  実行プログラム
【図１】
2007133716.tif 000003
【図２】
2007133716.tif 000004
【図３】
2007133716.tif 000005
【図４】
2007133716.tif 000006
【図５】
2007133716.tif 000007
【図６】
2007133716.tif 000008
【図７】
2007133716.tif 000009
【図８】
2007133716.tif 000010
【図９】
2007133716.tif 000011
【図１０】
2007133716.tif 000012
【図１１】
2007133716.tif 000013
【図１２】
2007133716.tif 000014
【図１３】
2007133716.tif 000015
【図１４】
2007133716.tif 000016