(57)【特許請求の範囲】
【請求項１】
コンパイル装置が、
診断対象装置に含まれる複数の資源の中から、当該診断対象装置上で実行される目的プログラムに含まれる命令列が利用する資源の集合である利用資源群を特定し、
前記特定された利用資源群に応じて、前記診断対象装置における自己診断の対象となる資源の集合である対象資源群を決定し、
前記決定された対象資源群に対して、前記自己診断を実行させるために、前記診断対象装置に対して当該対象資源群に基づく情報を出力する
コンパイル方法。
【請求項２】
前記コンパイル装置が、
前記複数の資源のうち前記診断対象装置における複数の機能のそれぞれに対応する資源の集合である複数の機能ブロックを予め定義し、
前記複数の機能ブロックの組み合わせの中から、前記特定された利用資源群に応じた前記対象資源群を決定する
請求項１に記載のコンパイル方法。
【請求項３】
前記コンパイル装置が、
前記複数の機能ブロックの組み合わせの中から、前記利用資源群に属する資源の全てを含むもののうち資源数が最小となる組み合わせを、前記対象資源群として決定する
請求項２に記載のコンパイル方法。
【請求項４】
前記コンパイル装置が、
前記複数の機能ブロックの組み合わせの中から、前記利用資源群に属さない資源の数が最小となる組み合わせを、前記対象資源群として決定する
請求項２に記載のコンパイル方法。
【請求項５】
前記コンパイル装置が、
前記複数の機能ブロックの組み合わせの中から、前記利用資源群に属する資源を所定の割合で含む組み合わせを、前記対象資源群として決定する
請求項２に記載のコンパイル方法。
【請求項６】
前記コンパイル装置が、
前記複数の機能ブロックの組み合わせの中から、前記利用資源群に属する資源を所定の割合で含む組み合わせが複数存在する場合に、
前記複数の機能ブロックごとに予め登録された前記自己診断の実行時間の予測値に基づいて、当該複数存在する組み合わせの中から、前記実行時間の予測値の合計が最小となる組み合わせを、前記対象資源群として決定する
請求項５に記載のコンパイル方法。
【請求項７】
前記コンパイル装置が、
前記複数の機能ブロックの組み合わせの中から、前記利用資源群に属する資源を所定の割合で含む組み合わせが複数存在する場合に、
前記複数の機能ブロックごとに予め登録された機能の重要度に基づいて、当該複数存在する組み合わせの中から、前記重要度の合計がより高い組み合わせを、前記対象資源群として決定する
請求項５に記載のコンパイル方法。
【請求項８】
前記コンパイル装置が、
前記複数の機能ブロックのそれぞれに対応し、前記自己診断を行うための複数のプログラムモジュールを予め定義し、
前記複数のプログラムモジュールの中から、前記決定された対象資源群の組み合わせに対応するプログラムモジュールを選択し、
前記選択したプログラムモジュールに基づいて前記自己診断を実行するための自己診断プログラムを生成する
請求項２に記載のコンパイル方法。
【請求項９】
前記コンパイル装置が、
前記診断対象装置に定義された複数の命令のそれぞれと、各命令が利用する前記資源の集合とが対応付けられた対応表を参照して、前記利用資源群を特定する
請求項１に記載のコンパイル方法。
【請求項１０】
前記コンパイル装置が、
前記目的プログラムのコンパイルと共に、当該コンパイルにより生成された前記命令列を用いて、前記対象資源群を決定する
請求項１に記載のコンパイル方法。
【請求項１１】
診断対象装置に含まれる複数の資源の中から、当該診断対象装置上で実行される目的プログラムに含まれる命令列が利用する資源の集合である利用資源群を特定する特定部と、
前記特定された利用資源群に応じて、前記診断対象装置における自己診断の対象となる資源の集合である対象資源群を決定する決定部と、
前記診断対象装置において前記決定された対象資源群に対する前記自己診断を実行させるために、当該診断対象装置に対して当該対象資源群に基づく情報を出力する出力部と、
を備えるコンパイル装置。
【請求項１２】
入力されたソースプログラムを機械語に変換して、診断対象装置上で実行される目的プログラムを生成する処理と、
前記診断対象装置に含まれる複数の資源の中から、前記目的プログラムに含まれる命令列が利用する資源の集合である利用資源群を特定する処理と、
前記特定された利用資源群に応じて、前記診断対象装置における自己診断の対象となる資源の集合である対象資源群を決定する処理と、
前記診断対象装置において前記決定された対象資源群に対する前記自己診断を実行させるために、当該診断対象装置に対して当該対象資源群に基づく情報を出力する処理と、
をコンピュータに実行させるコンパイラプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自己診断方法、コンパイル装置及びコンパイラに関し、例えば、プログラムを実行する装置に自己診断させるための自己診断方法、コンパイル装置及びコンパイラに関する。
【背景技術】
【０００２】
車載向け装置等の機能安全への重要性が高い分野では、プロセッサにおいて任意のタイミングで自己診断プログラムを実行して、故障の検出を継続的に行っている。
【０００３】
例えば、特許文献１には、ユーザによって作成されたプログラム（例えば、ユーザプログラム）とユーザによって作成されていないプログラム（例えば、自己診断プログラム）をスケジューリングにより切り替えて実行し、自己診断プログラムにより誤りを検出した場合に、両方のプログラムの実行を抑止する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１５６７４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１では、自己診断プログラムの実行時間が長い場合には、ユーザプログラムにスケジューリングされる時間が相対的に短くなってしまうという問題点がある。そのため、自己診断プログラムの実行時間を短縮する必要がある。
【０００６】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、装置上で実行される目的プログラムに含まれる命令列が利用する資源群を対象として自己診断プログラムを実行する。
【０００８】
なお、上記実施の形態の装置を方法やシステムに置き換えて表現したもの、該装置または該装置の一部の処理をコンピュータに実行せしめるプログラム、該装置を備えた撮像装置なども、本発明の態様としては有効である。
【発明の効果】
【０００９】
前記一実施の形態によれば、自己診断プログラムの実行時間を短縮することができる。
【図面の簡単な説明】
【００１０】
【図１】本実施の形態１にかかる自己診断システムの構成を示すブロック図である。
【図２】本実施の形態１にかかる診断対象装置における領域分割の例を示す図である。
【図３】本実施の形態１にかかる命令資源対応表の例を示す図である。
【図４】本実施の形態１にかかる命令とその命令が利用する資源との対応の例を示す図である。
【図５】本実施の形態１にかかるテスト資源対応表の例を示す図である。
【図６】本実施の形態１にかかるテスト項目ごとの自己診断の範囲となる領域の例を示す図である。
【図７】本実施の形態１にかかる自己診断プログラム分割の例を示す図である。
【図８】本実施の形態１にかかるコンパイラの処理の流れを示すフローチャートである。
【図９】本実施の形態１にかかる目的プログラムの命令列と利用分割ＩＤ集合、及び、テスト集合の例を示す図である。
【図１０】本実施の形態１にかかるコンパイル装置のハードウェア構成を示すブロック図である。
【図１１】本実施の形態２にかかる自己診断システムの構成を示すブロック図である。
【図１２】本実施の形態２にかかるコンパイラの処理の流れを示すフローチャートである。
【図１３】本実施の形態２にかかる生成される自己診断プログラムの例を示す図である。
【図１４】本実施の形態３にかかるコンパイラの処理の流れを示すフローチャートである。
【図１５】本実施の形態３にかかる出力されるテスト集合の例を示す図である。
【図１６】本実施の形態４にかかるテストＩＤと実行時間の予測値の対応表の例を示す図である。
【図１７】本実施の形態４にかかるコンパイラの処理の流れを示すフローチャートである。
【図１８】本実施の形態４にかかる出力されるテスト集合の例を示す図である。
【図１９】本実施の形態５にかかる分割ＩＤと重要度の対応表の例を示す図である。
【図２０】本実施の形態５にかかるコンパイラの処理の流れを示すフローチャートである。
【図２１】本実施の形態５にかかる出力されるテスト集合の例を示す図である。
【発明を実施するための形態】
【００１１】
以下では、上述した課題を解決するための手段を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００１２】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、応用例、詳細説明、補足説明等の関係にある。また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００１３】
さらに、以下の実施の形態において、その構成要素（動作ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等（個数、数値、量、範囲等を含む）についても同様である。
【００１４】
ここで、上述した課題についてさらに説明する。車載向けプロセッサ等では、通常、１００ミリ秒に１回の自己診断プログラムの実行が必要とされる。そのため、特許文献１のように自己診断プログラムと目的プログラムをスケジューリングにより切り替えて動作させる場合には、自己診断プログラムの実行時間が長くなり過ぎると、ユーザプログラムの処理に割り当てられる時間が短くなってしまう。つまり、ユーザプログラムは処理時間の短いものしか実行できなくなってしまい、制約が大きいという問題がある。
【００１５】
そこで、自己診断プログラムの実行時間を短縮すべく、以下の各実施の形態に共通する構成について説明する。すなわち、本実施の形態にかかる自己診断方法は、診断対象装置に含まれる複数の資源の中から、当該診断対象装置上で実行される目的プログラムに含まれる命令列が利用する資源の集合である利用資源群を特定し、前記特定された利用資源群に応じて、前記診断対象装置における自己診断の対象となる資源の集合である対象資源群を決定し、前記決定された対象資源群に対して、前記自己診断を実行するものである。これにより、診断対象装置に含まれる全ての資源ではなく、一部の資源に対して自己診断プログラムを実行するため、自己診断プログラムの実行時間を短縮できる。
【００１６】
さらに、前記自己診断方法は、前記複数の資源のうち前記診断対象装置における複数の機能のそれぞれに対応する資源の集合である複数の機能ブロックを予め定義し、前記複数の機能ブロックの組み合わせの中から、前記特定された利用資源群に応じた前記対象資源群を決定することが望ましい。例えば、自己診断プログラムに全ての機能ブロックに対する自己診断処理を実装し、かつ、機能ブロックごとに選択的に実行するように実装したとする。このように、自己診断の対象を機能ブロック単位とすることで、目的プログラムごとに自己診断プログラムを生成する必要がなく、当該自己診断プログラムを有効活用できる。
【００１７】
また、本実施の形態にかかるコンパイル装置は、診断対象装置に含まれる複数の資源の中から、当該診断対象装置上で実行される目的プログラムに含まれる命令列が利用する資源の集合である利用資源群を特定する特定部と、前記特定された利用資源群に応じて、前記診断対象装置における自己診断の対象となる資源の集合である対象資源群を決定する決定部と、前記診断対象装置において前記決定された対象資源群に対する前記自己診断を実行させるために、当該診断対象装置に対して当該対象資源群に基づく情報を出力する出力部と、を備える。
【００１８】
または、本実施の形態にかかるコンパイラは、診断対象装置上で実行される目的プログラムを生成する処理と、前記診断対象装置に含まれる複数の資源の中から、前記目的プログラムに含まれる命令列が利用する資源の集合である利用資源群を特定する処理と、前記特定された利用資源群に応じて、前記診断対象装置における自己診断の対象となる資源の集合である対象資源群を決定する処理と、前記診断対象装置において前記決定された対象資源群に対する前記自己診断を実行させるために、当該診断対象装置に対して当該対象資源群に基づく情報を出力する処理と、をコンピュータに実行させるものである。
【００１９】
（実施の形態１）
本実施の形態１は、上述した自己診断方法に加え、前記複数の機能ブロックの組み合わせの中から、前記利用資源群に属する資源の全てを含むもののうち資源数が最小となる組み合わせを、前記対象資源群として決定する。このように、命令列に含まれる全てかつ最小限の資源を対象とするため、効果的な自己診断を実行できる。
【００２０】
＜自己診断システムの構成＞
図１は、本実施の形態１にかかる自己診断システム１の構成を示すブロック図である。尚、自己診断システム１は、コンパイラシステムと呼ぶこともできる。自己診断システム１は、コンパイル装置２１及び診断対象装置２２を含む。診断対象装置２２は、プロセッサ等であり、自己診断対象となる装置である。診断対象装置２２は、少なくともユーザプログラムを実行することが可能な装置である。診断対象装置２２は、例えば、車載向け装置に用いることができるが、これに限定されない。
【００２１】
本実施の形態１では、診断対象装置２２を複数の領域に分割した場合の各領域に識別情報である分割ＩＤを付与しているものとする。図２は、本実施の形態１にかかる診断対象装置２２における領域分割の例を示す図である。図２の例では、診断対象装置２２を１６個の領域に等分に分割した場合を示す。そして、以下では図２内の１〜１６の番号を分割ＩＤとして説明する。
【００２２】
ここで、「領域」とは、診断対象装置２２に含まれる複数の資源の集合である。資源としては、例えば、診断対象装置２２における論理回路の回路素子が挙げられる。そのため、領域は、トランジスタ、演算器、レジスタ又はメモリ等の単位で表現することができる。つまり、領域は、最低限１つの回路素子で構成されていればよい。尚、領域は、配線接続されているトランジスタの集合であればよい。つまり、物理的に隣接して配置されていないトランジスタ同士を同一の領域として定義しても構わない。
【００２３】
図１に戻り説明を続ける。
コンパイル装置２１が備えるコンパイラ２１０は、ソースプログラム１１、命令資源対応表１３及びテスト資源対応表１４を入力とし、オブジェクトプログラム１２及びテストリスト１５を出力する。
【００２４】
＜入出力データの説明＞
ここで、ソースプログラム１１は、診断対象装置２２上で実行するためのユーザプログラムが実装されたソースプログラム１１である。オブジェクトプログラム１２は、ソースプログラム１１がコンパイルされた機械語のプログラムである。つまり、オブジェクトプログラム１２は、診断対象装置２２上で実行される目的プログラムである。オブジェクトプログラム１２は命令列１２０を含む。命令列１２０は、複数の命令１２１、１２２・・・を含む。ここで、命令１２１等は診断対象装置２２上に定義され、診断対象装置２２に含まれる複数のリソース（資源）の集合を用いて特定の処理を行わせるものである。言い換えると、命令１２１等は、上述した分割ＩＤが付与された１以上の領域を利用するものである。尚、ユーザプログラムは、特定の目的のためにユーザにより作成されるものである。そのため、ユーザプログラムは、診断対象装置２２の全ての機能を利用するわけではない。そして、本実施の形態では、オブジェクトプログラム１２に含まれる命令列には、診断対象装置２２に定義された全命令の一部が含まれており、全ては含まれないものとする。つまり、診断対象装置２２上でオブジェクトプログラム１２を実行したとしても、診断対象装置２２の一部の領域が利用され、全領域が利用されるわけではないものとする。
【００２５】
命令資源対応表１３は、診断対象装置２２に定義された複数の命令１２１等のそれぞれと、各命令が利用する資源の集合（分割ＩＤ）とが対応付けられた対応表である。図３は、本実施の形態１にかかる命令資源対応表１３の例を示す図である。ここでは、命令ｏｐＡ、ｏｐＢ、ｏｐＣ、ｏｐＤ、ｏｐＥ、ｏｐＦ・・・のそれぞれと、これらが利用する分割ＩＤとの対応関係が定義されていることを示す。また、図４は、本実施の形態１にかかる命令とその命令が利用する資源（領域、分割ＩＤ）との対応の例を示す図である。例えば、診断対象装置２２が命令ｏｐＡ（１３１）を実行した場合、分割ＩＤ“５”、“６”、“９”及び“１０”に対応する領域が利用されることを示す。命令ｏｐＢ〜ｏｐＦ（１３２〜１３６）についても同様である。
【００２６】
図１に戻り説明を続ける。
テスト資源対応表１４は、診断対象装置２２に対するテスト項目を識別するテストＩＤと、分割ＩＤとが対応付けられた対応表である。テスト項目は、診断対象装置２２における特定の機能をテストするための単位である。つまり、テスト項目は、機能ブロック単位ということもできる。そのため、テスト項目に対応する診断処理が実装されたテストモジュールを診断対象装置２２上で実行することで、当該テスト項目に対応付けられた分割ＩＤに対応する領域の診断を行うことができる。図５は、本実施の形態１にかかるテスト資源対応表１４の例を示す図である。また、図６は、本実施の形態１にかかるテスト項目ごとの自己診断の範囲となる領域の例を示す図である。テストＩＤ  Ｔ１（１４１）には、分割ＩＤ“１”、“２”、“５”及び“６”が対応付けられている。つまり、テストＩＤ  Ｔ１は、分割ＩＤ“１”、“２”、“５”及び“６”に対応する領域に対するテスト項目といえる。テストＩＤ  Ｔ２〜Ｔ４（１４２〜１４４）についても同様である。尚、テスト資源対応表１４は、上述した機能ブロックの定義に相当するものである。
【００２７】
図１に戻り説明を続ける。
自己診断プログラム１６には、診断対象装置２２内の全ての領域をテストするための実装が含まれている。特に、本実施の形態にかかる自己診断プログラム１６は、複数のテストモジュール（例えば、関数）に分割され、それぞれに上述したテストＩＤが対応付けられているものとする。図７は、本実施の形態１にかかる自己診断プログラム３０１の分割の例を示す図である。また、図７の１６Ｘは、テストＩＤとテスト関数の対応関係を示す。自己診断プログラム３０１は、テストＩＤ  Ｔ１〜Ｔ４について実行可否が指定された場合に、テスト関数ｔｅｓｔＡ（）からｔｅｓｔＤ（）のそれぞれを実行するものである。ここで、テスト関数ｔｅｓｔＡ（）からｔｅｓｔＤ（）のそれぞれには、テスト資源対応表１４に定義された分割ＩＤに対応する領域の診断を行うための実装がされている。例えば、テストＩＤ  Ｔ１が実行対象として指定された場合、テスト関数ｔｅｓｔＡ（）が実行され、分割ＩＤ“１”、“２”、“５”及び“６”に対応する領域の診断を行うことができる。テスト関数ｔｅｓｔＢ（）からｔｅｓｔＤ（）についても同様である。但し、自己診断プログラムの実装はこれに限定されない。尚、命令資源対応表１３及びテスト資源対応表１４は、予め定義されているものとする。さらに、自己診断プログラム１６は、テスト資源対応表１４に基づいて予め作成されていてもよい。
【００２８】
図１に戻り説明を続ける。
テストリスト１５は、本実施の形態において自己診断対象となるテストＩＤのリストである。テストリスト１５は、コンパイラ２１０により出力される。そして、テストリスト１５は、診断対象装置２２に入力される。テストリスト１５は、上述した自己診断プログラム１６の実行対象の指定として用いられる。尚、テストリスト１５は、診断対象装置２２において対象資源群に対する自己診断を実行させるための、対象資源群に基づく情報の一例である。
【００２９】
＜コンパイラの構成＞
コンパイラ２１０は、コンパイル部２１１、特定部２１２、決定部２１３及び出力部２１４を備える。コンパイル部２１１は、ソースプログラム１１の入力を受け付けてコンパイルし、オブジェクトプログラム１２として出力する。つまり、コンパイル部２１１は、ソースプログラム１１を機械語に変換してオブジェクトプログラム１２を生成して出力する。
【００３０】
特定部２１２は、診断対象装置２２に含まれる複数の資源（領域）の中から、オブジェクトプログラム１２に含まれる命令列１２０が利用する資源の集合である利用資源群を特定する。具体的には、特定部２１２は、オブジェクトプログラム１２から命令１２１、１２２、・・・を抽出し、命令資源対応表１３を参照して各命令に対応する分割ＩＤの集合（利用分割ＩＤ集合、利用資源群）を特定する。このように、命令資源対応表１３を用いることで、特定部２１２は全領域の中から効率的に利用資源群を特定できる。
【００３１】
決定部２１３は、特定部２１２により特定された利用資源群に応じて、診断対象装置２２における自己診断の対象となる資源の集合である対象資源群を決定する。具体的には、決定部２１３は、複数のテストＩＤ（機能ブロック）の組み合わせの中から、利用資源群に応じた対象資源群を決定する。特に、本実施の形態にかかる決定部２１３は、複数のテストＩＤの組み合わせの中から、利用資源群に属する資源の全てを含むもののうち資源数が最小となる組み合わせを、対象資源群として決定する。
【００３２】
また、決定部２１３は、複数のテストＩＤの組み合わせの中から、利用資源群に属さない資源の数が最小となる組み合わせを、対象資源群として決定するものともいえる。これにより、自己診断後に実行される目的プログラムでは利用されない領域を自己診断対象から除外できる。そのため、自己診断の効率を向上できる。
【００３３】
出力部２１４は、診断対象装置２２において、決定された対象資源群に対する自己診断を実行させるために、診断対象装置２２に対して対象資源群に基づく情報を出力する。特に、本実施の形態にかかる出力部２１４は、決定された対象資源群に対する自己診断を実行させるための対象資源群に基づく情報として、テストリスト１５を出力する。
【００３４】
このように、本実施の形態では、目的プログラムのコンパイルと共に、当該コンパイルにより生成された命令列を用いて、対象資源群を決定するものである。これにより、自己診断対象を効率的に決定できる。但し、目的プログラムのコンパイル後に別途、対象資源群を決定しても構わない。
【００３５】
＜処理の流れ＞
図８は、本実施の形態１にかかるコンパイラの処理の流れを示すフローチャートである。まず、コンパイル部２１１は、ソースプログラム１１をコンパイルすることにより、命令列１２０を含むオブジェクトプログラム１２を生成する（Ｓ１０１）。次に、特定部２１２は、オブジェクトプログラム１２が診断対象装置２２（プロセッサ）で実行されるときに利用される全資源を求める。具体的には、特定部２１２は、命令列１２０に含まれる各命令について命令資源対応表１３と照合し、対応付けられた分割ＩＤのリストを読み出す。そして、特定部２１２は、読み出した分割ＩＤのリストから和集合を算出する（Ｓ１０２）。すなわち、特定部２１２は、命令列１２０に含まれる各命令に対応付けられた分割ＩＤの和集合（利用分割ＩＤ集合）を利用資源群とする。
【００３６】
続いて、決定部２１３は、テストＩＤの組み合わせの中から、利用分割ＩＤ集合を含むもののうち最小集合をテスト集合（対象資源群）として求める（Ｓ１０３）。ここで、「最小集合」とは、テストＩＤの組み合わせに対応する分割ＩＤの集合のうち、分割ＩＤの要素数が最小の集合をいう。具体的には、まず、決定部２１３は、テスト資源対応表１４を参照し、全てのテストＩＤの組み合わせについて、分割ＩＤの和集合を求める。そして、求められた和集合の中で、ステップＳ１０２で算出された和集合に含まれる分割ＩＤを全て含むもの（テスト集合の候補）に絞り込む。このとき、テスト集合の候補として複数の和集合が該当する場合もある。そのため、絞り込まれたテスト集合の候補のうち、分割ＩＤの数が最小となる和集合を最小集合として求める。つまり、決定部２１３は、最小集合をテスト集合（対象資源群）として決定する。
【００３７】
その後、出力部２１４は、ステップＳ１０３で求めたテスト集合に対応するテストＩＤの組み合わせをテストリスト１５として出力する（Ｓ１０４）。
【００３８】
＜具体例＞
図９は、本実施の形態１にかかる目的プログラムの命令列と利用分割ＩＤ集合（利用資源群）、及び、テスト集合（対象資源群）の例を示す図である。まず、ステップＳ１０１では、コンパイル部２１１により生成されたオブジェクトプログラム１２に命令列１２０が含まれているものとする。その場合、ステップＳ１０２では、特定部２１２は、図７の命令資源対応表１３から、命令列１２０により利用される分割ＩＤの和集合（利用分割ＩＤ集合）１２０ＵＳを求める。そして、ステップＳ１０３では、決定部２１３は、複数のテストＩＤの組み合わせに対応する複数の和集合の中から、利用分割ＩＤ集合１２０ＵＳを含むもの（テスト集合の候補）のうち最小集合（テスト集合１２０ＴＳ、テスト分割ＩＤ集合１２０ＴＩＳ）を求める。つまり、この例では、テスト集合１２０ＴＳ｛Ｔ２、Ｔ３、Ｔ４｝がテストリスト１２として出力される。尚、図９では、利用分割ＩＤ集合（利用資源群）１２０ＵＳとテスト分割ＩＤ集合（対象資源群）１２０ＴＩＳとは分割ＩＤが等しい場合を示すが、少なくともテスト分割ＩＤ集合は、利用分割ＩＤ集合を包含していればよい。
【００３９】
その後、診断対象装置２２は、オブジェクトプログラム１２の実行前に、テストリスト１５を入力として自己診断プログラム１６を実行する。すなわち、診断対象装置２２は、テストリスト１５に指定されたテストＩＤについて自己診断プログラム１６内のテスト関数を実行する。そのため、テスト集合に含まれる領域についてのみ自己診断が行われる。例えば、診断対象装置２２は、テストリスト１５として｛Ｔ２、Ｔ３、Ｔ４｝を自己診断プログラム１６の入力とするため、ｔｅｓｔＢ（）、ｔｅｓｔＣ（）、ｔｅｓｔＤ（）のみが実行される。一方、上記テストリスト１５に含まれないＴ１に対応するｔｅｓｔＡ（）は実行されないこととなる。
【００４０】
＜実施の形態１の効果＞
そのため、自己診断プログラム１６により全てのテスト関数を実行する場合に比べて、本実施の形態１では一部のテスト関数のみを実行するため、自己診断プログラム１６の実行時間を短縮することができる。すなわち、本実施の形態１では、コンパイラ２１０が生成する命令列１２０に基づいて、直後に実行されるユーザプログラムで実際に利用される資源のみを自己診断プログラム１６において検査させることができる。そのため、自己診断における誤り検出の精度を確保しつつ、自己診断プログラムの実行時間を短くできる。
【００４１】
尚、自己診断の実行時間は対象の回路素子数（領域数）だけで決まるとは限らない。例えば、領域数が相対的に多くても実行時間が最短である場合もあり得る。そのため、実施の形態１（領域数が最小）は一例となる。
【００４２】
＜ハードウェア構成例＞
図１０は、本実施の形態１にかかるコンパイル装置２１のハードウェア構成を示すブロック図である。コンパイル装置２１は、例えば、汎用的なコンピュータシステムにより実現可能である。コンパイル装置２１は、例えば、ＣＰＵ（Central Processing Unit）１０１等の制御装置、ＲＡＭ（Random Access Memory）１０２及びＲＯＭ（Read Only Memory）１０３等のメモリ、ＩＦ部１０４並びにＨＤＤ（Hard Disk Drive）１０５を備えるものである。コンパイル装置２１は、その他図示しない構成として、キーボードやマウス等の入力装置やディスプレイ等の表示装置を備えてもよい。ＩＦ部１０４は、入力装置及び表示装置並びにネットワークを介して外部とのデータの送受信を行うインタフェースである。
【００４３】
ＨＤＤ１０５は、ＯＳ（Operating System）（不図示）、コンパイラプログラム１０６、ソースプログラム１１、オブジェクトプログラム１２、命令資源対応表１３、テスト資源対応表１４、テストリスト１５及び自己診断プログラム１６が記憶されている。コンパイラプログラム１０６は、本実施の形態１にかかるコンパイラ２１０の処理が実装されたコンピュータプログラムである。
【００４４】
ＣＰＵ１０１は、コンパイル装置２１における各種処理、ＲＡＭ１０２、ＲＯＭ１０３、ＩＦ部１０４及びＨＤＤ１０５へのアクセス等を制御する。コンパイル装置２１は、ＣＰＵ１０１がＨＤＤ１０５に記憶されたＯＳ及びコンパイラプログラム１０６を読み込み、実行する。これにより、コンパイル装置２１は、本実施の形態１にかかるコンパイラ２１０の処理を実現する。
【００４５】
（実施の形態２）
本実施の形態２は、上述した実施の形態１の変形例であり、決定した対象資源群に応じて自己診断プログラムを生成するものである。すなわち、前記複数の機能ブロックのそれぞれに対応し、前記自己診断を行うための複数のプログラムモジュールを予め定義し、前記複数のプログラムモジュールの中から、前記決定された対象資源群の組み合わせに対応するプログラムモジュールを選択し、前記選択したプログラムモジュールに基づいて前記自己診断を実行するための自己診断プログラムを生成するものである。これにより、自己診断プログラムのサイズを小さくすることができ、診断対象装置における記憶容量の占有率を下げることができる。
【００４６】
＜自己診断システムの構成＞
図１１は、本実施の形態２にかかる自己診断システム１ａの構成を示すブロック図である。自己診断システム１ａは、実施形態１にかかる自己診断システム１におけるコンパイル装置２１、コンパイラ２１０及び出力部２１４を、コンパイル装置２１ａ、コンパイラ２１０ａ及び出力部２１４ａに置き換えたものである。また、複数のテスト項目に対応する診断処理が実装されたテストモジュール群１６０が予め定義されているものとする。テストモジュール群１６０には、複数のテストモジュール（プログラムモジュール）１６１、１６２・・・が含まれている。テストモジュール１６１等は、例えば、上述したテスト関数ｔｅｓｔＡ（）からｔｅｓｔＤ（）等に相当する。
【００４７】
コンパイラ２１０ａは、出力部２１４ａ以外は、図１のコンパイラ２１０と同等である。出力部２１４ａは、テストモジュール群１６０の中から、決定部２１３により決定された対象資源群の組み合わせに対応するテストモジュールを選択し、選択したテストモジュールに基づいて自己診断プログラム１６ａを生成し、出力する。そのため、自己診断プログラム１６ａには、診断対象装置２２内の領域のうち対象資源群に対応する領域に対する自己診断処理が実装されている。つまり、自己診断プログラム１６ａには、診断対象装置２２内の全領域に対する自己診断処理は実装されていない。よって、自己診断プログラム１６ａは、自己診断プログラム１６と比べてサイズが小さい。尚、自己診断プログラム１６ａは、診断対象装置２２において対象資源群に対する自己診断を実行させるための、対象資源群に基づく情報の一例である。その他の構成は図１と同等であるため、詳細な説明を省略する。
【００４８】
＜処理の流れ＞
図１２は、本実施の形態２にかかるコンパイラの処理の流れを示すフローチャートである。図１２は、上述した実施の形態１にかかる図４のステップＳ１０４をステップＳ２０１に変更したものである。すなわち、出力部２１４ａは、ステップＳ１０３で求めた最小集合に対応するテストＩＤの組み合わせのそれぞれに対応するテストモジュールをテストモジュール群１６０から選択する。そして、出力部２１４ａは、選択したテストモジュールを組み合わせて、自己診断プログラム１６ａを生成し、出力する（Ｓ２０１）。例えば、図９のようにテスト集合１２０ＴＳとして｛Ｔ２，Ｔ３，Ｔ４｝が決定された場合、出力部２１４ａは、テストモジュール群１６０の中からｔｅｓｔＢ（）、ｔｅｓｔＣ（）、ｔｅｓｔＤ（）に相当するテストモジュールを選択し、これらを結合して自己診断プログラム１６ａを生成し、出力する。
【００４９】
＜具体例＞
図１３は、本実施の形態２にかかる生成される自己診断プログラム１６ａの例を示す図である。自己診断プログラム１６ａには、ｔｅｓｔＢ（）、ｔｅｓｔＣ（）、ｔｅｓｔＤ（）のみが実装されている。そのため、診断対象装置２２上で自己診断プログラム１６ａが実行された場合、実施の形態１と同様にｔｅｓｔＢ（）、ｔｅｓｔＣ（）、ｔｅｓｔＤ（）のみが実行され、ｔｅｓｔＡ（）は実行されない。そのため、実施の形態１と同様に自己診断の実行時間を短縮することができる。
【００５０】
＜実施の形態２の効果＞
このように、本実施の形態２では、コンパイル時に自己診断プログラムを生成するものである。そのため、実施の形態１と比べて、自己診断プログラムの実行時にテストリストを読み込む処理がない。また、テストリストから実行するテストを選択する処理もない。そのため、実施の形態１よりもさらに、自己診断プログラムの実行時間を短縮できる。
【００５１】
（実施の形態３）
本実施の形態３は、上述した実施の形態１を変形例であり、特定した利用資源群の全てではなく、所定数以上の資源を含む集合を対象資源群として決定するものである。すなわち、前記複数の機能ブロックの組み合わせの中から、前記利用資源群に属する資源を所定の割合で含む組み合わせを、前記対象資源群として決定するものである。そして、例えば、利用資源群の９０％以上を含む和集合をテスト集合とすることで、一般的な機能安全性の要件を確保できる。
【００５２】
＜コンパイラの構成＞
本実施の形態３にかかるコンパイラ２１０は、決定部２１３に変更を加えることで実現できる。そして、利用資源群に含まれる資源（領域、分割ＩＤ）のうち含まれる資源の閾値を予め設定している。設定される閾値は例えば、９０％であるがこれに限定されない。例えば、割合の代わりに分割ＩＤ数を用いてもよい。
【００５３】
＜処理の流れ＞
図１４は、本実施の形態３にかかるコンパイラの処理の流れを示すフローチャートである。図１４は、上述した実施の形態１にかかる図４のステップＳ１０３をステップＳ３０１に変更したものである。すなわち、決定部２１３は、テストＩＤの組み合わせの中から、ステップＳ１０２で特定された和集合に含まれる分割ＩＤのうち９０％以上を含むものをテスト集合として求める（Ｓ３０１）。具体的には、決定部２１３は、テスト資源対応表１４を参照し、全てのテストＩＤの組み合わせについて、分割ＩＤの和集合を求める。そして、求められた和集合の中で、ステップＳ１０２で算出された和集合に含まれる分割ＩＤのうち９０％以上を含むもの（テスト集合の候補）に絞り込む。このとき、テスト集合の候補として複数の和集合が該当する場合には、上述した最小集合をテスト集合として決定する。
【００５４】
＜具体例＞
図１５は、本実施の形態３にかかる出力されるテスト集合の例を示す図である。まず、ステップＳ１０１では、実施の形態１と同様に、コンパイル部２１１により生成されたオブジェクトプログラム１２には図９の命令列１２０が含まれているものとする。そして、ステップＳ１０２では、特定部２１２は、実施の形態１と同様に、和集合（利用資源群）１２０ＵＳを求めるとする。
【００５５】
ここで、ステップ９０１では、決定部２１３は、最小集合として図１５のテスト集合３２０ＴＳを求める。テスト集合３２０ＴＳから求まる診断対象装置２２のテスト分割ＩＤ集合は３２０ＴＩＳのようになる。この例では、診断対象装置２２において、１３／１６が自己診断される。ここで、診断対象装置２２がオブジェクトプログラム１２を実行した場合に実際に利用される領域に対応する分割ＩＤの数は１４である。そのため、実際に利用される領域に対して、１３／１４＝９３％が検査されることになる。
【００５６】
＜実施の形態３の効果＞
このように、本実施の形態３では、最小集合を求める際に閾値を利用することを特徴とする。これにより、テスト集合をさらに小さくすることができる。その結果、自己診断プログラムの処理時間をさらに短縮することができる。ここで、機能の安全性としては、検出率が９０％以上であればよい場合がある。そのため、検出率９０％を満たすテストのみを実施することで十分な場合には極めて有効である。
【００５７】
尚、本実施の形態３において閾値を１００％とすれば、実施の形態１と同等となる。そのため、実施の形態３は、実施の形態１を含む形態ということもできる。
【００５８】
（実施の形態４）
本実施の形態４は、上述した実施の形態１又は３の変形例であり、テスト集合の候補のうち自己診断の実行時間の予測値が最短となるものを対象資源群として決定するものである。すなわち、前記複数の機能ブロックの組み合わせの中から、前記利用資源群に属する資源を所定の割合で含む組み合わせが複数存在する場合に、前記複数の機能ブロックごとに予め登録された前記自己診断の実行時間の予測値に基づいて、当該複数存在する組み合わせの中から、前記実行時間の予測値の合計が最小となる組み合わせを、前記対象資源群として決定するものである。これは、自己診断の実行時間が自己診断の対象となる資源数の大小で単純に決まるとは限らないためである。つまり、テスト集合の候補のうち、分割ＩＤ数が最小でなくとも、その中では実行時間が最短である集合があり得る。よって、本実施の形態４は、資源数と実行時間の相関が低い場合に特に効果的である。
【００５９】
＜コンパイラの構成＞
本実施の形態４にかかるコンパイラ２１０は、決定部２１３に変更を加えることで実現できる。そして、テストＩＤごとの自己診断処理の実行時間の予測値が予め登録されているものとする。図１６は、本実施の形態４にかかるテストＩＤと実行時間の予測値の対応表１７の例を示す図である。尚、各分割ＩＤにおける領域に対する自己診断処理の実行時間の予測値が予め登録済みで、テスト集合の候補が絞られた後に合計時間の予測値を算出しても良い。また、閾値は任意の値が設定済みであるものとする。
【００６０】
＜処理の流れ＞
図１７は、本実施の形態４にかかるコンパイラの処理の流れを示すフローチャートである。図１７は、上述した実施の形態１にかかる図８のステップＳ１０３をステップＳ４０１に変更したものである。すなわち、決定部２１３は、テストＩＤの組み合わせの中から、ステップＳ１０２で特定された和集合に含まれる分割ＩＤのうち、閾値以上を含むもの、かつ、実行時間の予測値が最も短くなる集合をテスト集合として求める（Ｓ４０１）。具体的には、決定部２１３は、テスト資源対応表１４を参照し、全てのテストＩＤの組み合わせについて、分割ＩＤの和集合を求める。そして、求められた和集合の中で、ステップＳ１０２で算出された和集合（利用分割ＩＤ集合）に含まれる分割ＩＤのうち閾値以上を含むもの（テスト集合の候補）に絞り込む。そして、ここでは、このとき、テスト集合の候補として複数の和集合が該当するものとする。
【００６１】
続いて、決定部２１３は、テスト集合の候補のそれぞれについて、図１６の対応表１７を参照し、実行時間の予測値が最短となるものをテスト集合として決定する。または、領域ごとの自己診断処理の実行時間の予測値が予め登録されている場合には、決定部２１３は、テスト集合の候補のそれぞれについて、該当する自己診断処理の実行時間の予測値を合計して、実行時間の予測値を算出してもよい。
【００６２】
＜具体例＞
図１８は、本実施の形態４にかかる出力されるテスト集合の例を示す図である。まず、ステップＳ１０１において、コンパイル部２１１によりオブジェクトプログラム１２の命令列１７０が生成されたものとする。そして、ステップＳ１０２では、特定部２１２は、命令資源対応表１３を参照し、命令列１７０の命令ｏｐＢと命令ｏｐＥのそれぞれが利用する分割ＩＤがそれぞれ｛３，４，７，８，１１，１２｝と｛１３，１４，１５｝であると特定する。そのため、特定部２１２は、｛３，４，７，８，１１，１２｝と｛１３，１４，１５｝の和集合を取ることにより｛３，４，７，８，１１，１２，１３，１４，１５｝を集合１７０ＵＳとして特定する。
【００６３】
続いて、ステップＳ４０１では、決定部２１３は、テストＩＤの組み合わせのうち、利用分割ＩＤ集合１７０ＵＳを含むテスト集合の候補として、集合Ａ｛Ｔ２，Ｔ３｝と集合Ｂ｛Ｔ３，Ｔ４｝に絞り込む。具体的には、集合Ａ｛Ｔ２，Ｔ３｝の分割ＩＤの集合は、｛３，４，５，６，７，８，９，１０，１１，１２，１３，１４，１５｝である。また、集合Ｂ｛Ｔ３，Ｔ４｝の分割ＩＤの集合は、｛３，４，７，８，１１，１２，１３，１４，１５，１６｝である。つまり、集合Ａ及びＢはいずれも利用分割ＩＤ集合１７０ＵＳを含む。
【００６４】
そこで、決定部２１３は、１７１に示すように、集合Ａと集合Ｂの実行時間の予測値を求める。具体的には、集合Ａの実行時間の予測値はテストＩＤのＴ２とＴ３の実行時間の予測値の和から２５ｎｅｓｃである。また、集合Ｂの実行時間の予測値はＴ３とＴ４の実行時間の予測値の和から３５ｎｓｅｃである。ここで、分割ＩＤの数としては集合Ｂの方が少ないが、実行時間の予測値の和としては、集合Ａの方が短い。よって、本実施の形態４にかかる決定部２１３は、集合Ａを対象資源群として決定する。
【００６５】
＜実施の形態４の効果＞
このように、本実施の形態４では、テスト集合の候補が複数存在する場合、その中から自己診断の実行時間の予測値が最短のものが実行できるものを選択する。その理由は、同じ領域であっても、テスト内容により自己診断時間が異なる場合があり、分割ＩＤごとの実行時間の単純な合計になるとは限らないためである。例えば、積和命令と積命令及び和命令とでは値により実行時間が異なる。これにより、自己診断プログラムの処理時間をより短くすることができる。
【００６６】
（実施の形態５）
本実施の形態５は、上述した実施の形態１又は３の変形例であり、テスト集合の候補のうち重要度の高い領域をより多く含むものを対象資源群として決定するものである。すなわち、前記複数の機能ブロックの組み合わせの中から、前記利用資源群に属する資源を所定の割合で含む組み合わせが複数存在する場合に、前記複数の機能ブロックごとに予め登録された機能の重要度に基づいて、当該複数存在する組み合わせの中から、前記重要度の合計がより高い組み合わせを、前記対象資源群として決定する。これにより、より効果の高い自己診断を優先的に実行できる。
【００６７】
＜コンパイラの構成＞
本実施の形態５にかかるコンパイラ２１０は、決定部２１３に変更を加えることで実現できる。そして、分割ＩＤごとの重要度が予め登録されているものとする。図１９は、本実施の形態５にかかる分割ＩＤと重要度の対応表１８の例を示す図である。対応表１８に示すように、各分割ＩＤは対応する領域内のトランジスタや機能などにより重要度が設定されているものとする。ここで、重要度は、故障による影響の大きさである。例えば、制御系の故障は処理の流れが大きく変わる可能性があり、処理の継続に大きな影響を及ぼす。一方、データ系の故障は計算結果が変わるが、処理順序などが変わる可能性は低い。そのため、場合によってはデータ系の故障は計算誤差として扱うことも可能であり、故障による影響が小さい。このように故障する箇所により影響度が異なっており、そのため、領域によるテストの重要度も異なる。
【００６８】
また、閾値は任意の値が設定済みであるものとする。尚、以下の説明では閾値を８０％として説明するが、これに限定されない。
【００６９】
＜処理の流れ＞
図２０は、本実施の形態５にかかるコンパイラの処理の流れを示すフローチャートである。図２０は、上述した実施の形態３にかかる図１４のステップＳ３０１をステップＳ５０１に変更し、その後にステップＳ５０２を追加したものである。
【００７０】
決定部２１３は、テストＩＤの組み合わせの中から、ステップＳ１０２で特定された和集合に含まれる分割ＩＤのうち８０％以上を含むものをテスト集合として求める（Ｓ５０１）。続いて、決定部２１３は、ステップＳ５０１で求めたテスト集合が複数ある場合に、その中から、重要度が最も大きいものを選択する（Ｓ５０２）。具体的には、決定部２１３は、テスト集合の候補のそれぞれについて、図１９の対応表１８を参照し、重要度の合計値を算出する。そして、決定部２１３は、テスト集合の候補の中で重要度の合計値が最大のものを、テスト集合として決定する。
【００７１】
＜具体例＞
図２１は、本実施の形態５にかかる出力されるテスト集合の例を示す図である。まず、ステップＳ１０１において、コンパイル部２１１によりオブジェクトプログラム１２の命令列１８０が生成されたものとする。そして、ステップＳ１０２では、特定部２１２は、命令資源対応表１３を参照し、命令列１８０が利用する分割ＩＤの和集合（利用分割ＩＤ集合１８０ＵＳ）を以下の式（１）のように求める。
【数１】
0006362970.tif 000002
【００７２】
続いて、ステップＳ５０１では、決定部２１３は、利用分割ＩＤ集合１８０ＵＳを８０％以上含むテスト集合の候補として１８１に示す集合Ｃ｛Ｔ２，Ｔ３｝と１８２に示す集合Ｄ｛Ｔ３，Ｔ４｝を求める。
【００７３】
そして、決定部２１３は、集合Ｃのテスト分割ＩＤ集合Ｃ１と利用分割ＩＤ集合１８０ＵＳの積集合から実効分割ＩＤ集合Ｃ２を求める。ここで、実効分割ＩＤ集合とは、テスト分割ＩＤ集合の中で、オブジェクトプログラム１２により実際に利用される部分であり、実際にテストの効果がある分割ＩＤの集合である。
【００７４】
集合Ｃの実効分割ＩＤ集合Ｃ２と利用分割ＩＤ集合１８０ＵＳと比較すると、集合Ｃ２には分割ＩＤ“１６”が含まれていない。つまり、利用分割ＩＤ集合１８０ＵＳのうち集合Ｃ２に含まれる分割ＩＤの割合は、１１／１２＝９１％となる。
【００７５】
そして、決定部２１３は、実効分割ＩＤ集合Ｃ２に含まれる分割ＩＤから、対照表１８の重要度を合計して集合Ｃの重要度を算出する。ここでは、集合Ｃの重要度は“３９０”であるものとする。
【００７６】
集合Ｄも同様に考えると、分割ＩＤ“９”と“１０”が含まれていない。つまり、分割ＩＤ集合１８０ＵＳのうち集合Ｄ２に含まれる分割ＩＤの割合は、１０／１２＝８３％となる。また、集合Ｄの重要度は“４００”であるものとする。
【００７７】
そのため、ステップＳ５０２では、決定部２１３は、重要度がより高い集合Ｄを対象資源群として選択する。ここで、集合Ｃで実行されない分割ＩＤ“１６”の重要度が“６０”であり、集合Ｄで実行されない分割ＩＤ“９”と“１０”の重要度の和が３０＋２０＝５０である。そのため、分割ＩＤ“１６”の方が重要であるため、分割ＩＤ“１６”を含む集合Ｄが選択されたということを示している。
【００７８】
＜実施の形態５の効果＞
このように、本実施の形態５では、閾値を利用してテスト集合を小さくする場合に、テスト対象とされる部分の重要度に応じてテストを選択することを特徴とする。これにより、同じ故障の検出率であっても、故障発生時の影響を小さくすることができる。
【００７９】
（その他の実施の形態）
実施の形態２は、実施の形態３〜５のいずれかと組み合わせて実施することが可能である。また、実施の形態４は、実施の形態３と組み合わせて実施することが可能である。
【００８０】
尚、上述した各実施の形態は、自己診断方法であると共に、コンパイル方法又は診断対象決定方法ともいえる。
【００８１】
尚、本実施の形態は、次のように表現することもできる。すなわち、ユーザプログラムをコンパイルする際に、生成する命令列から利用するプロセッサの論理回路を調べ、自己診断プログラムの実行時には、利用する資源のみを検査するようにするものである。ユーザプログラムが利用する資源のみを検査するので自己診断時間を短くすることができる。
【００８２】
さらに、本願は上述した実施の形態のみに限定されるものではなく、既に述べた本願の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、上述の実施の形態では、ハードウェアの構成として説明したが、本実施の形態は、これに限定されるものではない。本実施の形態は、上述した処理を、ＣＰＵ（Central Processing Unit）にコンピュータプログラムを実行させることにより実現することも可能である。
【００８３】
上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、ＤＶＤ（Digital Versatile Disc）、ＢＤ(Blu-ray(登録商標) Disc)、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００８４】
尚、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。さらに、上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
【００８５】
（付記）
複数の資源を有し、目的プログラムを実行する診断対象部と、
前記複数の資源の中から、前記目的プログラムに含まれる命令列が利用する資源の集合である利用資源群を特定する特定部と、
前記特定された利用資源群に応じて、前記診断対象部における自己診断の対象となる資源の集合である対象資源群を決定する決定部とを備え、
前記診断対象部は、前記目的プログラムの実行前に、前記決定された対象資源群に対して、前記自己診断を実行する
自己診断システム。
【００８６】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【００８７】
１  自己診断システム
１ａ  自己診断システム
１１  ソースプログラム
１２  オブジェクトプログラム
１２０  命令列
１２１  命令
１２２  命令
１３  命令資源対応表
１３１〜１３６  命令に対応する領域
１４  テスト資源対応表
１４１〜１４４  テストＩＤに対応する領域
１５  テストリスト
１６  自己診断プログラム
１６ａ  自己診断プログラム
１６０  テストモジュール群
１６１  テストモジュール
１６２  テストモジュール
１６Ｘ  テストＩＤとテスト関数の対応関係
２１  コンパイル装置
２１ａ  コンパイル装置
２１０  コンパイラ
２１０ａ  コンパイラ
２１１  コンパイル部
２１２  特定部
２１３  決定部
２１４  出力部
２１４ａ  出力部
２２  診断対象装置
１００  コンパイル装置
１０１  ＣＰＵ
１０２  ＲＡＭ
１０３  ＲＯＭ
１０４  ＩＦ部
１０５  ＨＤＤ
１０６  コンパイラプログラム
１２０ＵＳ  利用分割ＩＤ集合
１２０ＴＳ  テスト集合
１２０ＴＩＳ  テスト分割ＩＤ集合
３２０ＴＳ  テスト集合
３２０ＴＩＳ  テスト分割ＩＤ集合
１７  テストＩＤと実行時間の対応表
１７０  命令列
１７０ＵＳ  利用分割ＩＤ集合
１７１  実行時間の算出例
１８  分割ＩＤと重要度の対応表
１８０  命令列
１８０ＵＳ  利用分割ＩＤ集合
１８１  重要度の算出例
１８２  重要度の算出例
Ｃ  集合
Ｃ１  テスト分割ＩＤ集合
Ｃ２  実効分割ＩＤ集合
Ｄ  集合
Ｄ１  テスト分割ＩＤ集合
Ｄ２  実効分割ＩＤ集合
【図１】
0006362970.tif 000003
【図２】
0006362970.tif 000004
【図３】
0006362970.tif 000005
【図４】
0006362970.tif 000006
【図５】
0006362970.tif 000007
【図６】
0006362970.tif 000008
【図７】
0006362970.tif 000009
【図８】
0006362970.tif 000010
【図９】
0006362970.tif 000011
【図１０】
0006362970.tif 000012
【図１１】
0006362970.tif 000013
【図１２】
0006362970.tif 000014
【図１３】
0006362970.tif 000015
【図１４】
0006362970.tif 000016
【図１５】
0006362970.tif 000017
【図１６】
0006362970.tif 000018
【図１７】
0006362970.tif 000019
【図１８】
0006362970.tif 000020
【図１９】
0006362970.tif 000021
【図２０】
0006362970.tif 000022
【図２１】
0006362970.tif 000023