(57)【要約】【課題】命令の実行順序が一意に決まらないプログラムであっても、保護区間が正しく設定されていないプログラム中の欠陥箇所を確実に検出できるようにする。【解決手段】検査対象のプログラムＰＲにおける各ステートメントの実行順序を示すコントロールフローを求めるプログラムコントロールフロー解析部１１と、求めたコントロールフローに基づいて、全てのステートメントについて保護状態を解析する保護状態解析部１２と、求めた各ステートメントの保護状態の解析結果から、保護状態が曖昧な箇所を検出して欠陥箇所として出力する欠陥箇所検出部１３とを備える。【選択図】図１
2006331027.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの欠陥を検査する検査装置において、
前記プログラムにおける各ステートメントの実行順序を示すコントロールフローを求めるプログラムコントロールフロー解析手段と、
前記プログラムコントロールフロー解析手段によって求められたコントロールフローに基づいて、各ステートメントの実行順序の前後関係を解析し、全てのステートメントについて、割り込み処理が禁止されている保護区間内のステートメントであるか否かを示す保護状態を解析する保護状態解析手段と、
前記保護状態解析手段によって求められた各ステートメントの保護状態の解析結果から、保護状態が曖昧な箇所を検出し、当該箇所を欠陥箇所として出力する欠陥箇所検出手段とを備えることを特徴とする検査装置。
【請求項２】
前記プログラムは、１つのタスクが複数の関数から構成され、関数内に別の関数を呼び出すステートメントが存在するものであり、
前記プログラムコントロールフロー解析手段は、関数単位でコントロールフローを求め、
前記保護状態解析手段は、関数が呼び出されるまでの経由関数の数の最大値が大きい関数から順に当該関数の開始部となるステートメントの保護状態に対する終了部となるステートメントの保護状態を対応付けて求めた後、前記最大値が小さい関数から順に当該関数の開始部となるステートメントの保護状態を解析することを特徴とする請求項１に記載の検査装置。
【請求項３】
前記保護状態解析手段は、前記プログラムを構成する関数が呼び出される前のステートメントの保護状態が全て同じであるか否かを確認し、
前記欠陥箇所検出手段は、関数が呼び出される前のステートメントの保護状態が全て同じでない関数を検出して、当該関数を欠陥箇所として出力することを特徴とする請求項１に記載の検査装置。
【請求項４】
プログラムの欠陥を検査する検査方法において、
前記プログラムにおける各ステートメントの実行順序を示すコントロールフローを求めるステップと、
求めたコントロールフローに基づいて、各ステートメントの実行順序の前後関係を解析し、全てのステートメントについて、割り込み処理が禁止されている保護区間内のステートメントであるか否かを示す保護状態を解析するステップと、
求めた各ステートメントの保護状態の解析結果から、保護状態が曖昧な箇所を検出し、当該箇所を欠陥箇所として出力するステップとを有することを特徴とする検査方法。
【請求項５】
コンピュータに、
検査対象となるプログラムにおける各ステートメントの実行順序を示すコントロールフローを求める機能と、
求めたコントロールフローに基づいて、各ステートメントの実行順序の前後関係を解析し、全てのステートメントについて、割り込み処理が禁止されている保護区間内のステートメントであるか否かを示す保護状態を解析する機能と、
求めた各ステートメントの保護状態の解析結果から、保護状態が曖昧な箇所を検出し、当該箇所を欠陥箇所として出力する機能とを実現させることを特徴とするコンピュータ実行可能な検査プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの欠陥を検査する検査装置、検査方法、及び検査プログラムに関し、特に、割り込み処理が実行されるプログラム中に記述される割り込み禁止命令や割り込み許可命令によって定義される保護区間の設定ミスを検査する技術に関する。
【背景技術】
【０００２】
近年、自動車等の車両は、複数のモジュールによって構成された各種プログラムを実行する電子制御装置（Electronic Control Unit；ＥＣＵ）を搭載し、各種電装品の制御を行っている。かかるＥＣＵにおいては、制御応答性や安全性の確保等を図るため、所定の処理をリアルタイムに実行する必要がある。そのため、ＥＣＵにおいては、リアルタイムに実行する必要がある処理を、他の処理よりも優先順位の高い割り込み処理やタスクとして行わせるのが一般的である。
【０００３】
ここで、優先順位の異なる複数のタスクによって構成されるプログラムにおいては、あるタスクを実行中に、優先順位の高い他のタスクの起動要求が発生すると、実行中の優先順位の低いタスクを中断し、優先順位の高いタスクを実行する。したがって、かかるプログラムにおいては、例えば、優先順位の低いタスクと優先順位の高いタスクで、共有の変数に対する読み出しや書き込みを行う場合には、意図しない動作をする場合がある。
【０００４】
このような事態を回避する方策として、優先順位の低いタスクの特定の区間を、優先順位の高いタスクによって中断されないような保護区間とする命令を記述する方法がある。また、割り込みレベルの異なる複数の割り込み処理を用いる場合や、ＢＧＪ（Back Ground Job）と割り込み処理とから構成される場合も同様である。具体的には、燃料噴射量を算出する場合にエンジンの回転数や吸入空気量を検出する処理等のように、あるタスク間に他のタスクを割り込ませて処理が行われると、正確な演算を行うことができない処理においては、タスク間に他のタスクの割り込みが行われないように保護区間を設定している。
【０００５】
このような保護区間は、一連のタスクの前後に、割り込み禁止命令及び割り込み許可命令を挿入したり、セマフォの開始命令及び終了命令を挿入したりすることによって設定される。すなわち、保護区間は、２つの対応する命令を対で記述することによって実現される。そのため、２つの命令のうち、いずれかが欠けた場合には、保護区間が設定されない事態や、保護区間から抜け出さず優先順位の高い処理が実行されなくなる事態等が生じ、プログラムが設計者の意図どおりの振る舞いをしなくなるという問題がある。
【０００６】
このような保護区間の設定ミスは、プログラムの欠陥としてそれを検出して何らかの警告を行う必要がある。このようなプログラムの欠陥を自動的に検査する装置としては、例えば特許文献１に記載されたものがある。
【特許文献１】特開２００１−１１７７９３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した特許文献１に記載された従来の技術においては、プログラム中の命令の記述を順に判断することにより、割り込み禁止命令及び割り込み許可命令が、その順序で対になって記述されているか否かを判断するものである。そのため、この従来技術においては、割り込み禁止命令と割り込み許可命令とがこの順序で対になって記述されている限りは警告が行われないことになり、例えば、割り込み禁止命令の後に条件分岐があり且つ片方の分岐にのみ割り込み許可命令が挿入されている場合のように、条件式等のプログラム中の処理記述（ステートメント）の実行順序を制御する記述により、割り込み禁止命令又は許可命令が実行される場合と実行されない場合とがあるような構造を有するプログラムの場合には、その命令の実行順序が一意に決まらないことから、保護区間の設定ミスを正確に解析することができないという問題があった。
【０００８】
本発明は、以上のような従来技術の問題点を解消すべく創案されたものであって、保護区間が正しく設定されていないプログラム中の欠陥箇所を確実に検出することができる検査装置、検査方法、及び検査プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、前記目的を達成するために、検査対象となるプログラムにおける各ステートメントの実行順序を示すコントロールフローを求め、求めたコントロールフローに基づいて、各ステートメントの実行順序の前後関係を解析し、全てのステートメントについて、割り込み処理が禁止されている保護区間内のステートメントであるか否かを示す保護状態を解析し、求めた各ステートメントの保護状態の解析結果から、保護状態が曖昧な箇所を検出して、当該箇所を欠陥箇所として出力する。
【発明の効果】
【００１０】
本発明によれば、各ステートメントの実行順序の前後関係に従って解析された保護状態が曖昧な箇所が欠陥箇所として出力されるので、命令の実行順序が一意に決まらないプログラムであっても、保護区間が正しく設定されていない箇所を確実に検出することができる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明を適用した検査装置の具体的な実施形態について、図面を参照しながら詳細に説明する。この検査装置は、例えば、車両に搭載される電子制御装置（Electronic Control Unit；ＥＣＵ）等により実行されるプログラム中の欠陥、特に、プログラムの中の保護区間の設定ミスを検査するものである。
【００１２】
（第１の実施形態）
まず、本発明を適用した第１の実施形態の検査装置について説明する。
【００１３】
本実施形態の検査装置は、図１に示すように、検査対象となるプログラムＰＲを読み込んでこれを解析し、このプログラムＰＲ中で保護区間が正しく設定されていない欠陥箇所を、結果ファイルＦＬにて出力するものであり、プログラムコントロールフロー解析部１１と、保護状態解析部１２と、欠陥箇所検出部１３とを備える。これらプログラムコントロールフロー解析部１１、保護状態解析部１２、欠陥箇所検出部１３は、典型的には、コンピュータで本発明の検査プログラムを実行することによって、コンピュータの１機能としてソフトウェア的に実現されるが、勿論、ハードウェア的に構成してもよい。
【００１４】
プログラムコントロールフロー解析部１１は、検査対象となるプログラムＰＲを読み込んで、このプログラムＰＲのコントロールフローを求めるものである。ここで、コントロールフローとは、検査対象となるプログラムＰＲにおける各ステートメント（処理記述）の実行順序を示すものである。
【００１５】
保護状態解析部１２は、プログラムコントロールフロー解析部１１によって求められたコントロールフローに基づいて、全てのステートメントについての保護状態を解析するものである。ここで、保護状態とは、優先順位の低いタスクの特定の区間が優先順位の高いタスクによって中断されない保護区間、つまり割り込み処理が禁止されている区間内に記述されているステートメントであるか否かを示すものであり、各ステートメントの実行順序の前後関係を解析することで求められる。
【００１６】
欠陥箇所検出部１３は、保護状態解析部１２によって求められた各ステートメントの保護状態の解析結果から、保護状態が一意に定まらない曖昧な箇所を検出して、欠陥箇所として出力するものである。検査対象となるプログラムＰＲ中で保護状態が曖昧な箇所は、保護区間が正しく設定されていないことによるプログラムＰＲ中の欠陥箇所である。欠陥箇所検出部１３は、このような保護状態が曖昧な箇所を検出して、その箇所を欠陥箇所として記載した結果ファイルＦＬを出力する。
【００１７】
本実施形態の検査装置では、以上の各部の働きにより、例えば、割り込み禁止命令及び割り込み許可命令といった対となる命令の記述により設定される保護区間の設定ミスを正確に検出することが可能となる。ここで、本実施形態の検査装置の各部における処理について、図２に示すプログラムＰＲを検査対象とする場合を例として挙げながら、詳細に説明する。
【００１８】
図２に示すプログラムＰＲは、従来技術として示した特開２００１−１１７７９３号公報記載の技術では保護区間の設定ミスを正確に検出することが困難な条件分岐をともなうプログラムの例であり、７つのステートメントを含むタスクＴａｓｋ１からなるものである。同図中、「ＤＩＳＡＢＬＥ」は、割り込み禁止命令を示し、「ＥＮＡＢＬＥ」は、割り込み許可命令を示すものである。すなわち、このプログラムＰＲでは、同図中３行目のステートメント１を実行した後、同図中４行目のステートメント２として、優先順位の高いタスクの割り込みを禁止する命令を実行する。続いて、このプログラムＰＲでは、同図中５行目のステートメント３として、条件の判定を行う。ここで、条件が成立した場合には、同図中７行目のステートメント４を実行し、その後、同図中８行目のステートメント５として、優先順位の高いタスクの割り込みを許可する命令を実行する。一方、条件が成立しない場合には、同図中１２行目のステートメント６を実行する。そして、最後に、同図中１４行目のステートメント７を実行して終了する。すなわち、このプログラムＰＲは、同図中５行目に示す条件式が成立するか否かに応じて、処理の実行順序が変化するものであり、５行目→７行目→８行目→１４行目の順序で処理する場合と、５行目→１２行目→１４行目の順序で処理する場合とがあり、条件分岐の一方のみで優先順位の高いタスクの割り込みを許可する命令が実行されることになる。したがって、このプログラムＰＲには保護区間の設定に誤りがあるが、従来技術として示した特開２００１−１１７７９３号公報記載の技術では、その欠陥を検出することができない。
【００１９】
本実施形態の検査装置では、このようなプログラムＰＲをプログラムコントロールフロー解析部１１によって読み込むと、以下に説明する各種処理を行う。
【００２０】
まず、プログラムコントロールフロー解析部１１による処理について説明する。
【００２１】
プログラムコントロールフロー解析部１１は、プログラムＰＲを読み込むと、当該プログラムＰＲを解析し、そのコントロールフローを求める。このとき、プログラムコントロールフロー解析部１１は、各ステートメントについて、実行順序の前のステートメント（以下、「前ステートメント」という。）と後ろのステートメント（以下、「後ろステートメント」という。）を内部データとして管理する。
【００２２】
図３に、プログラムコントロールフロー解析部１１によって求められるコントロールフローの内部データの例を示す。同図中「Ｓ」は、関数の開始部に対する内部データであり、「Ｅ」は、関数の終了部に対する内部データである。以下、このようなプログラムコントロールフロー解析部１１の内部データを「ステートメントの前後関係テーブル」と称するものとする。
【００２３】
同図に示すステートメントの前後関係テーブルは、図２に示すプログラムＰＲのコントロールフローを解析した結果の例である。ステートメント「Ｓ」についての前ステートメント番号欄には、当該ステートメント「Ｓ」よりも先に実行されるステートメントが存在しないため、「存在しない」という意味のマーク（図３においては「−」）が付与される。また、ステートメント「Ｓ」についての後ろステートメント番号欄には、当該ステートメント「Ｓ」の次に実行されるステートメントのステートメント番号が記述される。図２に示すプログラムＰＲにおいては、ステートメント「Ｓ」の次に実行されるステートメントがステートメント１であることから、当該ステートメント「Ｓ」についての後ろステートメント番号欄には、「１」が記述される。さらに、ステートメント「３」についての後ろステートメント番号欄には、当該ステートメント３は条件文であり、条件成立時と不成立時とに応じて、次に実行されるステートメントが変化することから、条件成立時及び不成立時のそれぞれのステートメントである「４，６」が記述される。さらにまた、ステートメント「７」についての前ステートメント番号欄には、当該ステートメント７は条件成立時及び不成立時のいずれにおいても実行されるものであることから、条件成立時及び不成立時のそれぞれについての直前のステートメントである「５，６」が記述される。このように、プログラムコントロールフロー解析部１１は、プログラムＰＲを解析し、各ステートメントについて、前ステートメント及び後ろステートメントを求め、ステートメントの前後関係テーブルを作成する。
【００２４】
本実施形態の検査装置では、このようにしてプログラムコントロールフロー解析部１１によって作成されたステートメントの前後関係テーブルが、次の保護状態解析部１２へと送られることになる。
【００２５】
次に、保護状態解析部１２による処理について説明する。
【００２６】
保護状態解析部１２は、プログラムコントロールフロー解析部１１によって作成されたステートメントの前後関係テーブルを読み込むと、各ステートメントについての保護状態を求める。このとき、保護状態解析部１２は、例えば図４に示すように、各ステートメント毎に、そのステートメントが「保護区間内である」ことを表す変数Ｐ（以下、「保護区間内変数Ｐ」という。）と、「保護区間外である」ことを表す変数Ｕ（以下、「保護区間外変数Ｕ」いう。）と、「保護区間内である」又は「保護区間外である」か否かを１回以上判定したか否かを表す変数Ｆ１（以下、「判定済みフラグＦ１」という。）と、「保護区間内である」又は「保護区間外である」か否かを全てのパスについて判定したか否かを表す変数Ｆ２（以下、「確定フラグＦ２」という。）とを、内部データとして管理する。以下、このような保護状態解析部１２の内部データを「保護状態テーブル」と称するものとする。なお、同図に示す保護状態テーブルは、図２に示すプログラムＰＲ及び図３に示すステートメントの前後関係テーブルを解析した結果の例である。
【００２７】
すなわち、保護状態解析部１２は、ステートメントを「保護区間内である」と判定した場合には、保護区間内変数Ｐとして「１」を記述するとともに、保護区間外変数Ｕとして「０」を記述する。また、保護状態解析部１２は、ステートメントを「保護区間外である」と判定した場合には、保護区間内変数Ｐとして「０」を記述するとともに、保護区間外変数Ｕとして「１」を記述する。さらに、保護状態解析部１２は、ステートメントを「保護区間内である」場合と「保護区間外である」場合とがあると判定した場合には、保護区間内変数Ｐとして「１」を記述するとともに、保護区間外変数Ｕとして「１」を記述する。
【００２８】
具体的には、保護状態解析部１２は、図５及び図６に示すような一連の手順にしたがって、各ステートメントの保護状態を解析する処理を行って、保護状態テーブルを作成する。
【００２９】
まず、保護状態解析部１２は、図５に示すように、ステップＳ１において、保護状態テーブルの全てのセルに初期値として「０」を記述し、ステップＳ２において、関数の開始部「Ｓ」の保護状態を設定する。ここで、関数の開始部「Ｓ」の保護状態は、関数起動時の保護状態によって決まるものである。例えば、ＢＧＪ（Back Ground Job）の関数の開始部「Ｓ」の保護状態は、ＥＣＵの割り込みの発生を制御するレジスタの初期値によって決定される。保護状態解析部１２は、図２に示すプログラムＰＲについて、タスクＴａｓｋ１が起動されるときの保護状態が、割り込み許可状態、すなわち、「保護区間外である」場合には、保護状態テーブルにおける関数の開始部「Ｓ」についての保護区間内変数Ｐとして「０」を記述するとともに、保護区間外変数Ｕとして「１」を記述する。さらに、保護状態解析部１２は、ステップＳ３において、関数の開始部「Ｓ」についての判定済みフラグＦ１及び確定フラグＦ２として「１」を記述する。例えば、保護状態解析部１２は、図２に示すプログラムＰＲの場合には、保護状態テーブルにおける関数の開始部「Ｓ」についての判定済みフラグＦ１として「１」を記述するとともに、確定フラグＦ２として「１」を記述する。
【００３０】
そして、保護状態解析部１２は、ステップＳ４以降において、１番目のステートメントから順次、各ステートメントの保護状態の判定を行う。ステートメントの保護状態は、前ステートメントの保護状態を継承することから、保護状態解析部１２は、前ステートメントの保護状態の判定が終了している場合、すなわち、前ステートメントの判定済みフラグＦ１が「１」であると判定した場合に、保護状態の判定を行う。具体的には、保護状態解析部１２は、ステップＳ５において、前ステートメントの判定済みフラグＦ１が「１」でないと判定した場合には、ステップＳ４からの処理を繰り返す一方で、前ステートメントの判定済みフラグＦ１が「１」であると判定した場合には、保護状態の判定を行う。
【００３１】
なお、保護状態解析部１２は、前ステートメントが複数存在する場合には、複数の前ステートメントのうちの少なくとも１つの保護状態の判定が終了している場合に、保護状態の判定を行う。例えば、保護状態解析部１２は、図２に示すプログラムＰＲにおけるステートメント７について保護状態の判定を行う場合には、その前ステートメントが、図３に示すステートメントの前後関係テーブルに基づいてステートメント５及びステートメント６であると決定され、ステートメント５の判定済みフラグＦ１又はステートメント６の判定済みフラグＦ１の少なくとも一方が「１」であると判定した場合には、当該ステートメント７の保護状態判定を実行する。
【００３２】
このように、保護状態解析部１２は、前ステートメントのうちの少なくとも１つの保護状態の判定が終了している場合には、図６中ステップＳ７へと処理を移行し、前ステートメントの保護状態に基づいて、当該ステートメントの保護状態を判定する。なお、前ステートメントが複数存在するステートメントについては、全ての前ステートメントについて保護状態の判定が行われた後に、当該ステートメントの状態を判定することで最終的な保護状態が確定する。そのため、保護状態解析部１２は、全てのステートメントの保護状態が確定するまで、保護状態の判定を繰り返し行う。保護状態解析部１２は、保護状態の判定を繰り返し行う場合には、ステートメントの保護状態が確定していない場合、すなわち、確定フラグＦ２が「０」である場合に、保護状態の判定を行う。具体的には、保護状態解析部１２は、ステップＳ６において、確定フラグＦ２が「０」でないと判定した場合には、図５中ステップＳ４からの処理を繰り返す一方で、確定フラグＦ２が「０」であると判定した場合には、図６中ステップＳ７へと処理を移行し、保護状態の判定を行う。そして、保護状態解析部１２は、ステップＳ８において、全ての前ステートメントについて保護状態の判定が行われたことを確認した上で、ステートメントの保護状態を確定する。なお、これらステップＳ７及びステップＳ８における保護状態の判定処理及び確定処理については、後に詳述するものとする。
【００３３】
保護状態解析部１２は、このようにして１番目のステートメントから順次、状態の判定を行い、ステップＳ９において、関数の終了部「Ｅ」まで状態の判定が終了した場合には、ステップＳ１０において、全てのステートメントの保護状態が確定しているか否かを判定し、全てのステートメントの保護状態が確定している場合には、保護状態の解析を終了する。なお、このステップＳ１０における終了判定処理については、後に詳述するものとする。
【００３４】
以下、ステップＳ７における保護状態の判定処理、ステップＳ８における保護状態の確定処理、及びステップＳ１０における終了判定処理について、より詳細に説明する。
【００３５】
まず、ステップＳ７における保護状態の判定処理について説明する。保護状態解析部１２は、図７に示す一連の手順にしたがって、図６中ステップＳ７における保護状態の判定処理を行う。
【００３６】
すなわち、保護状態解析部１２は、図７に示すように、まずステップＳ１１において、前ステートメントが複数存在するか否かを判定する。
【００３７】
ここで、保護状態解析部１２は、前ステートメントが１つしか存在しないと判定した場合には、判定対象のステートメントが保護区間に関する命令か否かに応じて、保護状態を判定する。すなわち、保護状態解析部１２は、ステップＳ１２において、判定対象のステートメントが保護区間の開始命令であると判定した場合には、ステップＳ１９において、保護区間内変数Ｐとして「１」を記述するとともに、保護区間外変数Ｕとして「０」を記述する。また、保護状態解析部１２は、ステップＳ１２において、判定対象のステートメントが保護区間の開始命令でないと判定し、ステップＳ１３において、判定対象のステートメントが保護区間の終了命令であると判定した場合には、ステップＳ２０において、保護区間内変数Ｐとして「０」を記述するとともに、保護区間外変数Ｕとして「１」を記述する。さらに、保護状態解析部１２は、ステップＳ１３において、判定対象のステートメントが保護区間の終了命令でないと判定した場合、すなわち、判定対象のステートメントが保護区間に関する命令でない場合には、ステップＳ２１において、前ステートメントの保護区間内変数Ｐの値を当該ステートメントの保護区間内変数Ｐとして継承するとともに、前ステートメントの保護区間外変数Ｕの値を当該ステートメントの保護区間外変数Ｕとして継承する。
【００３８】
一方、保護状態解析部１２は、ステップＳ１１において、前ステートメントが複数存在すると判定した場合には、前ステートメントの保護状態の論理和に応じて、保護状態を判定する。すなわち、保護状態解析部１２は、ステップＳ１４において、前ステートメントに保護区間内変数Ｐが「１」であるものが１つ以上あると判定した場合には、ステップＳ１７において、保護区間内変数Ｐとして「１」を記述する。また、保護状態解析部１２は、ステップＳ１５において、前ステートメントに保護区間外変数Ｕとして「１」であるものが１つ以上あると判定した場合には、ステップＳ１８において、保護区間外変数Ｕとして「１」を記述する。
【００３９】
保護状態解析部１２は、このようにして保護区間内変数Ｐ及び保護区間外変数Ｕの値を記述すると、ステップＳ１６において、判定が終了した旨を示す判定済みフラグＦ１として「１」を記述し、一連の保護状態の判定処理を終了する。
【００４０】
次に、図６中ステップＳ８における保護状態の確定処理について説明する。保護状態解析部１２は、図８に示す一連の手順にしたがって、図６中ステップＳ８における保護状態の確定処理を行う。
【００４１】
すなわち、保護状態解析部１２は、図８に示すように、まずステップＳ３１において、前ステートメントが複数存在するか否かを判定する。
【００４２】
ここで、保護状態解析部１２は、前ステートメントが複数存在すると判定した場合には、全ての前ステートメントの状態が判定されている場合、すなわち、全ての前ステートメントの判定済みフラグＦ１が「１」である場合に状態を確定する。すなわち、保護状態解析部１２は、ステップＳ３２において、全ての前ステートメントの判定済みフラグＦ１が「１」であると判定した場合には、ステップＳ３４において、確定フラグＦ２として「１」を記述し、一連の保護状態の確定処理を終了する。
【００４３】
一方、保護状態解析部１２は、ステップＳ３１において、前ステートメントが１つしか存在しないと判定した場合には、ステップＳ３３へと処理を移行する。そして、保護状態解析部１２は、ステップＳ３３において、ステートメントが保護区間に関する命令であると判定した場合には、ステップＳ３５において、確定フラグＦ２として「１」を記述し、一連の保護状態の確定処理を終了する。一方、保護状態解析部１２は、ステートメントが保護区間に関する命令でないと判定した場合には、ステップＳ３６において、前ステートメントの確定状態を継承する、すなわち、保護状態テーブルにおける前ステートメントの確定フラグＦ２の値を当該ステートメントの確定フラグＦ２として継承し、一連の保護状態の確定処理を終了する。
【００４４】
次に、図６中ステップＳ１０における終了判定処理について説明する。保護状態解析部１２は、図９に示す一連の手順にしたがって、図６中ステップＳ１０における終了判定処理を行う。
【００４５】
すなわち、保護状態解析部１２は、図９に示すように、まずステップＳ４１において、関数の開始部「Ｓ」へと対象を移動し、ステップＳ４２において、当該関数の開始部「Ｓ」についての確定フラグＦ２が「１」であるか否かを確認する。保護状態解析部１２は、確定フラグＦ２が「１」でないと判定した場合には、図６中ステップＳ７へと処理を移行し、再度、保護状態の判定処理を行う。一方、保護状態解析部１２は、確定フラグＦ２が「１」であると判定した場合には、ステップＳ４３において、次のステートメントへと対象を移動し、確定フラグＦ２が「１」であるか否かを確認する。このように、保護状態解析部１２は、関数の開始部「Ｓ」から順次、確定フラグＦ２が「１」であるか否かを確認していき、全てのステートメントについての確定フラグＦ２が「１」であると判定した場合、すなわち、ステップＳ４４において、処理の対象が関数の終了部「Ｅ」であると判定した場合に、一連の保護状態の解析を終了する。
【００４６】
保護状態解析部１２は、以上のようにして、検査対象となるプログラムＰＲにおける各ステートメントの保護状態の解析を行う。具体的な例を挙げて説明すると、例えば図２に示したプログラムＰＲの解析を行う場合には、保護状態解析部１２は、以下のような処理を行うことになる。
【００４７】
すなわち、保護状態解析部１２は、図２に示すプログラムＰＲのステートメント２について保護状態の判定処理を行う場合には、前ステートメントがステートメント１のみであることから、図７中ステップＳ１２へと処理を移行し、当該ステートメント２が割り込み禁止命令、すなわち、保護区間の開始命令であることから、ステップＳ１９へと処理を移行する。そして、保護状態解析部１２は、ステップＳ１９において、ステートメント２についての保護状態テーブルの保護区間内変数Ｐとして「１」を記述するとともに、保護区間外変数Ｕとして「０」を記述し、ステップＳ１６において、判定済みフラグＦ１として「１」を記述し、一連の保護状態の判定処理を終了する。保護状態解析部１２は、このようにしてステートメント２についての保護状態の判定処理を終了すると、図８に示す当該ステートメント２についての保護状態の確定処理を実行する。
【００４８】
保護状態解析部１２は、ステートメント２について保護状態の確定処理に移行すると、前ステートメントがステートメント１のみであることから、図８中ステップＳ３３へと処理を移行し、当該ステートメント２が割り込み禁止命令、すなわち、保護区間の開始命令であることから、ステップＳ３５へと処理を移行する。そして、保護状態解析部１２は、ステップＳ３５において、ステートメント２についての保護状態テーブルの確定フラグＦ２として「１」を記述し、一連の保護状態の確定処理を終了する。保護状態解析部１２は、このようにしてステートメント２についての保護状態の確定処理を終了すると、図６中ステップＳ９において、当該ステートメント２が関数の終了部であるか否かを判定し、関数の終了部であると判定した場合には、ステップＳ１０における終了判定処理を実行する。また、保護状態解析部１２は、図６中ステップＳ９において、当該ステートメント２が関数の終了部でないと判定した場合には、ステップＳ４において、次のステートメントへと処理を移行し、ステップＳ５乃至ステップＳ９の処理を繰り返す。
【００４９】
なお、保護状態解析部１２は、ステートメント２の場合には、関数の終了部「Ｅ」ではないことから、図６中ステップＳ４へと処理を移行し、次のステートメント３を判定対象とする。この場合、保護状態解析部１２は、ステートメント３の前ステートメントがステートメント２であり、ステートメント２の判定フラグＦ１が「１」であり、確定フラグＦ２が「０」であることから、図７に示すステートメント３についての保護状態の判定処理を実行する。
【００５０】
ここで、保護状態解析部１２は、ステートメント３の前ステートメントがステートメント２のみであることから、図７中ステップＳ１２へと処理を移行し、当該ステートメント３が保護区間の開始命令でないことから、ステップＳ２１へと処理を移行する。そして、保護状態解析部１２は、ステップＳ２１において、前ステートメントであるステートメント２についての保護状態テーブルの保護区間内変数Ｐの値「１」を、ステートメント３の保護区間内変数Ｐとして継承する。同様に、保護状態解析部１２は、前ステートメントであるステートメント２についての保護状態テーブルの保護区間内変数Ｕの値「０」を、ステートメント３の保護区間内変数Ｕとして継承する。そして、保護状態解析部１２は、ステップＳ１６において、ステートメント３についての判定済みフラグＦ１として「１」を記述し、一連の保護状態の判定処理を終了する。保護状態解析部１２は、このようにしてステートメント３についての保護状態の判定処理を終了すると、図８に示す当該ステートメント３についての保護状態の確定処理を実行する。
【００５１】
保護状態解析部１２は、ステートメント３について保護状態の確定処理に移行すると、前ステートメントがステートメント２のみであることから、図８中ステップＳ３３へと処理を移行し、当該ステートメント３が保護区間の開始命令でないことから、ステップＳ３６へと処理を移行する。そして、保護状態解析部１２は、ステップＳ３６において、ステートメント３についての保護状態テーブルの確定フラグＦ２として、ステートメント２の確定フラグＦ２の値「１」を継承し、一連の保護状態の確定処理を終了する。
【００５２】
保護状態解析部１２は、このような処理をステートメント４、ステートメント５、ステートメント６についても同様に実行する。そして、保護状態解析部１２は、ステートメント７についての保護状態の判定処理に移行すると、前ステートメントがステートメント５及びステートメント６の２つであることから、図７中ステップＳ１４へと処理を移行する。この場合、保護状態解析部１２は、ステートメント６の保護区間内変数Ｐが「１」であることから、ステップＳ１７へと処理を移行し、ステートメント７についての保護区間内変数Ｐとして「１」を記述する。また、保護状態解析部１２は、ステートメント５についての保護区間外変数Ｕが「１」であることから、ステップＳ１８へと処理を移行し、ステートメント７についての保護区間外変数Ｕとして「１」を記述し、ステップＳ１６において、当該ステートメント７についての判定済みフラグＦ１として「１」を記述し、一連の保護状態の判定処理を終了する。保護状態解析部１２は、このようにしてステートメント７についての保護状態の判定処理を終了すると、図８に示す当該ステートメント７についての保護状態の確定処理を実行する。
【００５３】
保護状態解析部１２は、ステートメント７について保護状態の確定処理に移行すると、前ステートメントがステートメント５及びステートメント６の２つであることから、図８中ステップＳ３２へと処理を移行し、前ステートメントであるステートメント５及びステートメント６についての判定済みフラグＦ１が「１」であることから、ステップＳ３４へと処理を移行する。そして、保護状態解析部１２は、ステップＳ３４において、ステートメント７についての保護状態テーブルの確定フラグＦ２として「１」を記述し、一連の保護状態の確定処理を終了する。
【００５４】
保護状態解析部１２は、このようにしてステートメント７についての保護状態の確定処理を終了すると、次のステートメントである関数の終了部「Ｅ」を判定対象とし、図５中ステップＳ５乃至図６中ステップＳ８を実行する。
【００５５】
保護状態解析部１２は、このようにして先に図４に示したような保護状態テーブルを作成する。そして、保護状態解析部１２は、図６中ステップＳ９において、関数の終了部「Ｅ」であると判定した上で、図９に示す終了判定処理を実行する。この場合、保護状態解析部１２は、保護状態テーブルに基づいて、全てのステートメントについての確定フラグＦ２が「１」であることを確認し、終了判定処理を終了する。これにより、保護状態解析部１２は、一連の保護状態解析処理を終了する。
【００５６】
本実施形態の検査装置では、このようにして保護状態解析部１２によって作成された保護状態テーブルが、次の欠陥箇所検出部１３へと送られることになる。
【００５７】
次に、欠陥箇所検出部１３による処理について説明する。
【００５８】
欠陥箇所検出部１３は、保護状態解析部１２によって作成された保護状態テーブルを読み込むと、保護状態が曖昧な箇所を検出して、当該箇所を欠陥箇所として出力する。具体的には、欠陥箇所検出部１３は、保護区間内変数Ｐが「１」であり且つ保護区間外変数Ｕが「１」であるステートメントについて、プログラム中の記述箇所を特定することができる情報を出力する。なお、ここでの出力とは、例えば、結果ファイルＦＬとして所定の記憶手段に出力することを意味し、出力先は特に限定されるものではない。欠陥箇所検出部１３は、図２に示したプログラムＰＲの場合には、図４に示した保護状態テーブルに基づいて、保護区間内変数Ｐが「１」であり且つ保護区間外変数Ｕが「１」であるステートメントとして、ステートメント７及び関数の終了部「Ｅ」を検出し、これらステートメント７及び関数の終了部「Ｅ」に関する情報を、例えば図１０に示すような結果ファイルＦＬとして出力する。
【００５９】
以上詳細に説明したように、本実施形態の検査装置においては、プログラムコントロールフロー解析部１１によって解析対象のプログラムＰＲにおける各ステートメントの実行順序を示すコントロールフローを求め、求めたコントロールフローに基づいて、保護状態解析部１２によって全てのステートメントについての保護状態を解析し、求めた各ステートメントの保護状態の解析結果から、欠陥箇所検出部１３によって保護状態が曖昧な箇所を検出して、当該箇所を欠陥箇所として出力する。
【００６０】
これにより、この検査装置においては、検査対象となるプログラムＰＲについて、各ステートメントの実行順序の前後関係に従って解析された保護状態が曖昧な箇所が欠陥箇所として出力されるので、命令の実行順序が一意に決まらないプログラムであっても、保護区間が正しく設定されていない欠陥箇所を確実に検出することができる。
【００６１】
（第２の実施形態）
次に、本発明を適用した第２の実施形態の検査装置について説明する。
【００６２】
本実施形態の検査装置は、１つのタスクが複数の関数から構成されているプログラムについて、タスク全体の保護状態を決定する処理に特徴を有するものである。本実施形態の検査装置におけるその他の部分は、基本的には上述した第１の実施形態の検査装置と同様であるので、以下、この第２の実施形態の説明において、第１の実施形態の説明と同様の部分については図中同一符号を付して、詳細な説明を省略する。
【００６３】
１つのタスクが複数の関数から構成されているプログラムにおいては、関数内に別の関数を呼び出す（コールする）ステートメントが存在する。前ステートメントが関数コールであるステートメントの保護状態は、コールされる関数の終了部の状態によって決定されることになる。そこで、本実施形態の検査装置においては、かかるプログラムの場合には、関数のコールツリーから、関数が呼び出されるまでの経由関数の数の最大値（以下、「深さ」という。）を示すテーブルを作成し、深さが大きい関数から順に当該関数の開始部の保護状態に対する終了部の保護状態の対応表を作成した後に、深さが小さい関数から順に当該関数の開始部の保護状態を解析して求めることにより、タスク全体の保護状態を決定できるようにしている。ここでは、図１１に示すようなプログラムＰＲを検査対象とした場合を例に挙げて、本実施形態の検査装置での処理について具体的に説明する。
【００６４】
この図１１に示すプログラムＰＲは、コールする関数として、３つの関数Ｆｕｎｃ２１，Ｆｕｎｃ２２，Ｆｕｎｃ２３があるタスクＴａｓｋ２からなるものである。関数Ｆｕｎｃ２１は、保護区間の開始命令を実行するものである。また、関数Ｆｕｎｃ２２は、同図中１３行目に示す条件式が成立した場合に、保護区間の終了命令を実行し、条件式が成立しない場合には何もせず、変数Ｖ２１に値を書き込むものである。さらに、関数Ｆｕｎｃ２３は、変数Ｖ２２に値を書き込むものである。
【００６５】
本実施形態の検査装置では、このようなプログラムＰＲをプログラムコントロールフロー解析部１１によって読み込むと、以下に説明する各種処理を行う。
【００６６】
まず、プログラムコントロールフロー解析部１１は、解析対象のプログラムＰＲを読み込むと、当該プログラムＰＲを解析し、そのコントロールフローを求める。このとき、プログラムコントロールフロー解析部１１は、関数単位でコントロールフローを作成する。具体的には、プログラムコントロールフロー解析部１１は、図１１に示すプログラムＰＲの場合には、図１２に示すように、関数Ｆｕｎｃ２１，Ｆｕｎｃ２２がこの順で並ぶタスクＴａｓｋ２のコントロールフローを作成する。また、プログラムコントロールフロー解析部１１は、図１３に示すように、割り込み禁止命令と関数Ｆｕｎｃ２３とがこの順で並ぶ関数Ｆｕｎｃ２１のコントロールフローを作成する。さらに、プログラムコントロールフロー解析部１１は、図１４に示すように、条件式ｃ、割り込み許可命令、及び変数Ｖ２１＝１０の書き込み処理がこの順で並ぶ関数Ｆｕｎｃ２２のコントロールフローを作成する。さらにまた、プログラムコントロールフロー解析部１１は、図１５に示すように、変数Ｖ２２＝１０からなる関数Ｆｕｎｃ２３のコントロールフローを作成する。
【００６７】
検査装置においては、このようにしてプログラムコントロールフロー解析部１１によって関数単位でコントロールフローを作成すると、保護状態解析部１２により、関数コールツリーを作成する。図１１に示したプログラムＰＲの関数コールツリーの例を図１６に示す。すなわち、この関数コールツリーは、「タスクＴａｓｋ２は、関数Ｆｕｎｃ２１，Ｆｕｎｃ２２をコールする」、「関数Ｆｕｎｃ２１は、関数Ｆｕｎｃ２３をコールする」ということを表している。
【００６８】
また、本実施形態の検査装置において、保護状態解析部１２は、関数が呼び出されるまでの経由関数の数を表した深さテーブルを作成する。図１１に示したプログラムＰＲの深さテーブルの例を図１７に示す。すなわち、図１１に示すプログラムＰＲにおいては、関数Ｆｕｎｃ２１は、Ｔａｓｋ２→Ｆｕｎｃ２１という経路でコールされ、この場合における関数Ｆｕｎｃ２１の深さは、「１」である。また、関数Ｆｕｎｃ２３は、Ｔａｓｋ２→Ｆｕｎｃ２１→Ｆｕｎｃ２３という経路でコールされ、この場合における関数Ｆｕｎｃ２３の深さは、「２」である。本実施形態の検査装置においては、複数の関数からコールされる場合、すなわち、複数の深さを有する場合には、その最大値を深さとする。
【００６９】
そして、保護状態解析部１２は、関数の深さが大きい順に、関数の開始部「Ｓ」の保護状態が、保護区間内変数Ｐが「１」であり且つ保護区間外変数Ｕが「０」である場合、保護区間内変数Ｐが「０」であり且つ保護区間外変数Ｕが「１」である場合、及び保護区間内変数Ｐが「１」であり且つ保護区間外変数Ｕが「１」である場合について保護状態を解析し、さらに、関数の終了部「Ｅ」の保護状態を解析し、関数の開始部「Ｓ」に対する終了部「Ｅ」の保護状態の対応表（以下、「終了部保護状態テーブル」という。）を作成する。この終了部保護状態テーブルの例を図１８に示す。保護状態解析部１２は、このような終了部保護状態テーブルを用いて、関数の開始部「Ｓ」の保護状態に対する終了部「Ｅ」の保護状態を管理する。なお、図１８に示す終了部保護状態テーブルは、図１１に示すプログラムＰＲにおける関数Ｆｕｎｃ２２についてのものを示している。すなわち、関数Ｆｕｎｃ２２の終了部「Ｅ」の保護状態は、開始部「Ｓ」の保護状態が、保護区間内変数Ｐが「１」であり且つ保護区間外変数Ｕが「０」である場合には、保護区間内変数Ｐが「１」となり且つ保護区間外変数Ｕが「１」となり、保護区間内変数Ｐが「０」であり且つ保護区間外変数Ｕが「１」である場合には、保護区間内変数Ｐが「０」となり且つ保護区間外変数Ｕが「１」となり、保護区間内変数Ｐが「１」であり且つ保護区間外変数Ｕが「１」である場合には、保護区間内変数Ｐが「１」となり且つ保護区間外変数Ｕが「１」となる。
【００７０】
保護状態解析部１２は、このような終了部保護状態テーブルを用いて、例えば図１９にコントロールフローと保護状態とを対応付けて示すように、関数のコール箇所を、保護区間内変数Ｐを「１」とし且つ保護区間外変数Ｕを「０」とする命令、保護区間内変数Ｐを「０」とし且つ保護区間外変数Ｕを「１」とする命令、及び保護区間内変数Ｐを「１」とし且つ保護区間外変数Ｕを「１」とする命令に置き換え、ステートメントの保護状態を解析する。このように、保護状態解析部１２は、関数の深さが大きい順に保護状態を解析することにより、全ての関数の終了部保護状態テーブルを作成することができる。
【００７１】
また、保護状態解析部１２は、全ての関数の終了部保護状態テーブルを作成した後、例えば図２０にコントロールフローと保護状態とを対応付けて示すように、関数の深さが小さい順に各ステートメントの保護状態を解析し、ステートメントが関数コールである場合には、当該ステートメントの前ステートメントの状態を、当該関数の開始部「Ｓ」の保護状態記録テーブル（以下、「開始部保護状態記録テーブル」という。）に記録する。保護状態解析部１２は、より深さが大きい関数の保護状態を解析する際には、開始部保護状態記録テーブルに基づいて当該関数の開始部「Ｓ」の保護状態を設定することにより、全てのステートメントの保護状態を解析することができる。このとき、保護状態解析部１２は、各ステートメントの保護状態を、終了部保護状態テーブルを作成した際の解析結果を用いてもよい。
【００７２】
開始部保護状態記録テーブルの例を図２１に示す。保護状態解析部１２は、このような開始部保護状態記録テーブルを用いて、各関数の開始部「Ｓ」に設定される保護状態を管理する。なお、図２１に示す開始部保護状態記録テーブルは、図１１に示すプログラムＰＲにおける関数Ｆｕｎｃ２１についてのものを示している。すなわち、この開始部保護状態記録テーブルは、関数Ｆｕｎｃ２１の開始部「Ｓ」の保護状態として、保護区間内変数Ｐが「１」であり且つ保護区間外変数Ｕが「０」である状態が設定され、保護区間内変数Ｐが「０」であり且つ保護区間外変数Ｕが「１」である状態と、保護区間内変数Ｐが「１」であり且つ保護区間外変数Ｕが「１」である状態とは設定されないということを表している。また、この開始部保護状態記録テーブルは、関数Ｆｕｎｃ２２及び関数Ｆｕｎｃ２３の開始部「Ｓ」の保護状態も同様に、保護区間内変数Ｐが「１」であり且つ保護区間外変数Ｕが「０」である状態が設定され、保護区間内変数Ｐが「０」であり且つ保護区間外変数Ｕが「１」である状態と、保護区間内変数Ｐが「１」であり且つ保護区間外変数Ｕが「１」である状態は設定されないということを表している。
【００７３】
本実施形態の検査装置においては、このようにして終了部保護状態テーブル及び開始部保護状態記録テーブルを作成し、保護状態を解析すると、欠陥箇所検出部１３により、保護区間内変数Ｐが「１」であり且つ保護区間外変数Ｕが「１」であるステートメントについて、プログラム中の記述箇所を特定することができる情報を出力する。また、欠陥箇所検出部１３は、関数の開始部「Ｓ」の保護状態が複数ある場合には、いずれかの場合において保護区間内変数Ｐが「１」となり、且つ、いずれかの場合において保護区間外変数Ｕが「１」となるステートメントについて、プログラム中の記述箇所を特定することができる情報を出力する。なお、ここでの出力とは、例えば、図２２に示すような結果ファイルＦＬとして所定の記憶手段に出力することを意味し、出力先は特に限定されるものではない。
【００７４】
以上詳細に説明したように、本実施形態の検査装置においては、プログラムコントロールフロー解析部１１によって関数単位でコントロールフローを求め、保護状態解析部１２により、関数が呼び出されるまでの経由関数の数の最大値が大きい関数から順に当該関数の開始部「Ｓ」の保護状態に対する終了部「Ｅ」の保護状態を対応付けて求めた後、最大値が小さい関数から順に当該関数の開始部「Ｓ」の保護状態を解析して、保護状態が曖昧な箇所を検出する。
【００７５】
これにより、この検査装置においては、１つのタスクが複数の関数から構成され、関数内に別の関数を呼び出すステートメントが存在するプログラムＰＲを検査対象とした場合であっても、保護区間が正しく設定されていない欠陥箇所を確実に検出することができる。
【００７６】
（第３の実施形態）
次に、本発明を適用した第３の実施形態の検査装置について説明する。
【００７７】
本実施形態の検査装置は、ある関数のコール箇所が保護区間内と保護区間外との両方に存在する場合に、一意に決まらない保護区間を解析可能とする点に特徴を有するものである。本実施形態の検査装置におけるその他の部分は、基本的には上述した第１の実施形態の検査装置と同様であるので、以下、この第３の実施形態の説明において、第１の実施形態の説明と同様の部分については図中同一符号を付して、詳細な説明を省略する。
【００７８】
従来技術として示した特開２００１−１１７７９３号公報記載の技術においては、関数等の単位プログラム毎に、割り込み禁止命令及び割り込み許可命令が、この順序で対になって記述されているか否かを判断するという構成になっていたことから、ある関数のコール箇所が、保護区間内と保護区間外との両方に存在する場合には、その関数の開始部「Ｓ」の保護状態が一意に決まらず、かかるステートメントであることを解析することができない。
【００７９】
このようなプログラムとしては、例えば図２３に示すようなものが挙げられる。すなわち、この図２３に示すプログラムＰＲは、同図中４行目に示すように、タスクＴａｓｋ３１が保護区間内で関数Ｆｕｎｃ３１をコールし、同図中６行目に示すように、保護区間外で再度、関数Ｆｕｎｃ３１をコールする。そして、このプログラムＰＲは、関数Ｆｕｎｃ３１を実行し、同図中１０行目に示すように、変数Ｖ３２，Ｖ３３を読み込んで所定の演算を実行し、結果を変数Ｖ３１として書き込む。
【００８０】
このようなプログラムＰＲにおいては、同図中１０行目に示す関数Ｆｕｎｃ３１内の処理としての変数Ｖ３１の書き込み、及び変数Ｖ３２，Ｖ３３の読み込みに対する保護区間が、保護区間内で実行される場合と保護区間外で実行される場合とがあり、一意に決まらない。従来技術として示した特開２００１−１１７７９３号公報記載の技術においては、このような箇所を解析することができない。
【００８１】
ここで、このようなプログラムＰＲにおいては、関数Ｆｕｎｃ３１がコールされる前のステートメントの保護状態が全て同じ状態であるか否かに応じて、保護区間が一意に決まるか否かが決定されることになる。そこで、本実施形態の検査装置においては、保護状態解析部１２により、関数がコールされる前のステートメントの状態を記録したテーブル（以下、「コール時保護状態テーブル」という。）を作成することにより、保護区間が正しく設定されていない箇所を抽出できるようにしている。
【００８２】
図２４に、コール時保護状態テーブルの例を示す。ここでは、関数毎に、関数のコール箇所とコール時保護状態との関係を示している。なお、図２４に示すコール時保護状態テーブルは、図２３に示すプログラムＰＲにおける関数Ｆｕｎｃ３１についてのものを示している。すなわち、関数Ｆｕｎｃ３１は、図２３中４行目でコールされ、その前のステートメント（３行目）の保護区間内変数Ｐが「１」であり、保護区間外変数Ｕが「０」である。また、関数Ｆｕｎｃ３１は、同図中６行目でもコールされ、その前のステートメント（５行目）の保護区間内変数Ｐが「０」であり、保護区間外変数Ｕが「１」である。
【００８３】
本実施形態の検査装置において、保護状態解析部１２は、このようなコール時保護状態テーブルを用いて、関数がコールされる前のステートメントの保護状態が全て同じであるか否かを確認する。
【００８４】
本実施形態の検査装置においては、このようにして保護状態解析部１２がコール時保護状態テーブルを作成し、関数がコールされる前のステートメントの保護状態を解析すると、欠陥箇所検出部１３により、関数がコールされる前のステートメントの保護状態が全て同じでない関数を、保護区間が一意に決まらない関数として出力する。なお、ここでの出力とは、例えば、図２５に示すような結果ファイルＦＬとして所定の記憶手段に出力することを意味し、出力先は特に限定されるものではない。
【００８５】
以上詳細に説明したように、本実施形態の検査装置においては、保護状態解析部１２によってプログラムＰＲを構成する関数が呼び出される前のステートメントの保護状態が全て同じであるか否かを確認し、欠陥箇所検出部１３によって関数が呼び出される前のステートメントの保護状態が全て同じでない関数を検出して、当該箇所を欠陥箇所として出力することから、保護区間が正確に設定されない箇所を正確に検出することができるとともに、プログラム中の条件式の値によって保護状態が一意に決まらないという危険な箇所も正確に検出することができる。また、この検査装置においては、１つの関数中の保護区間と禁止区間との両方から関数がコールされている場合であっても、正確に解析することができる。さらに、この検査装置においては、複数のタスクの保護区間と禁止区間との両方から関数がコールされている場合であっても、正確に解析することができる。
【００８６】
なお、以上説明した検査装置は本発明の一適用例であり、本発明が以上の例に限定されるものではなく、本発明に係る技術的思想を逸脱しない範囲であれば具体的な処理の内容等において種々の変更が可能であることは勿論である。
【００８７】
例えば、保護区間の設定が必要となるのは、優先順位の高いタスクと優先順位の低いタスクとに対して同じ変数の書き込み又は読み込みを行う場合である。したがって、本発明を適用した検査装置においては、解析対象のプログラムＰＲから、複数のタスクによって共有している変数の書き込み箇所及び読み込み箇所、保護区間に関する命令箇所、条件式等のプログラムの流れを制御する箇所、及び関数のコール箇所のみを抽出した中間ファイルを作成し、この中間ファイルを用いて、コントロールフロー及び保護状態を解析するようにしてもよい。
【図面の簡単な説明】
【００８８】
【図１】本発明を適用した第１の実施形態の検査装置の概略構成を示すブロック図である。
【図２】第１の実施形態の検査装置による検査対象として例示したプログラムの内容を示す図である。
【図３】ステートメントの前後関係テーブルの例を示す図である。
【図４】保護状態テーブルの例を示す図である。
【図５】保護状態解析部による保護状態解析処理の一連の手順を示すフローチャートである。
【図６】保護状態解析部による保護状態解析処理の一連の手順を示すフローチャートであり、図５に続く処理を示す図である。
【図７】保護状態解析処理の中の保護状態の判定処理の詳細を示すフローチャートである。
【図８】保護状態解析処理の中の保護状態確定処理の詳細を示すフローチャートである。
【図９】保護状態解析処理の中の終了判定処理の詳細を示すフローチャートである。
【図１０】第１の実施形態の検査装置によって出力される結果ファイルの例を示す図である。
【図１１】本発明を適用した第２の実施形態の検査装置による検査対象として例示したプログラムの内容を示す図である。
【図１２】第２の実施形態の検査装置によって作成されるタスクＴａｓｋ２のコントロールフローを示す図である。
【図１３】第２の実施形態の検査装置によって作成される関数Ｆｕｎｃ２１のコントロールフローを示す図である。
【図１４】第２の実施形態の検査装置によって作成される関数Ｆｕｎｃ２２のコントロールフローを示す図である。
【図１５】第２の実施形態の検査装置によって作成される関数Ｆｕｎｃ２３のコントロールフローを示す図である。
【図１６】第２の実施形態の検査装置によって作成される関数コールツリーの例を示す図である。
【図１７】第２の実施形態の検査装置によって作成される深さテーブルの例を示す図である。
【図１８】第２の実施形態の検査装置によって作成される終了部保護状態テーブルの例を示す図である。
【図１９】第２の実施形態の検査装置によって作成されるコントロールフローと関数の終了部の保護状態との対応を示す図である。
【図２０】第２の実施形態の検査装置によって作成されるコントロールフローと関数の開始部の保護状態との対応を示す図である。
【図２１】第２の実施形態の検査装置によって作成される開始部保護状態記録テーブルの例を示す図である。
【図２２】第２の実施形態の検査装置によって出力される結果ファイルの例を示す図である。
【図２３】本発明を適用した第３の実施形態の検査装置による検査対象として例示したプログラムの内容を示す図である。
【図２４】第３の実施形態の検査装置によって作成されるコール時保護状態テーブルの例を示す図である。
【図２５】第３の実施形態の検査装置によって出力される結果ファイルの例を示す図である。
【符号の説明】
【００８９】
１１  プログラムコントロールフロー解析部
１２  保護状態解析部
１３  欠陥箇所検出部
ＰＲ  解析対象のプログラム
ＦＬ  結果ファイル
【図１】
2006331027.tif 000003
【図２】
2006331027.tif 000004
【図３】
2006331027.tif 000005
【図４】
2006331027.tif 000006
【図５】
2006331027.tif 000007
【図６】
2006331027.tif 000008
【図７】
2006331027.tif 000009
【図８】
2006331027.tif 000010
【図９】
2006331027.tif 000011
【図１０】
2006331027.tif 000012
【図１１】
2006331027.tif 000013
【図１２】
2006331027.tif 000014
【図１３】
2006331027.tif 000015
【図１４】
2006331027.tif 000016
【図１５】
2006331027.tif 000017
【図１６】
2006331027.tif 000018
【図１７】
2006331027.tif 000019
【図１８】
2006331027.tif 000020
【図１９】
2006331027.tif 000021
【図２０】
2006331027.tif 000022
【図２１】
2006331027.tif 000023
【図２２】
2006331027.tif 000024
【図２３】
2006331027.tif 000025
【図２４】
2006331027.tif 000026
【図２５】
2006331027.tif 000027