JP2006331027A - 検査装置、検査方法、及び検査プログラム - Google Patents

検査装置、検査方法、及び検査プログラム Download PDF

Info

Publication number
JP2006331027A
JP2006331027A JP2005152961A JP2005152961A JP2006331027A JP 2006331027 A JP2006331027 A JP 2006331027A JP 2005152961 A JP2005152961 A JP 2005152961A JP 2005152961 A JP2005152961 A JP 2005152961A JP 2006331027 A JP2006331027 A JP 2006331027A
Authority
JP
Japan
Prior art keywords
protection
statement
protection state
function
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2005152961A
Other languages
English (en)
Inventor
Miwako Hasegawa
美和子 長谷川
Mitsuhiko Kikuchi
光彦 菊池
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nissan Motor Co Ltd
Original Assignee
Nissan Motor Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nissan Motor Co Ltd filed Critical Nissan Motor Co Ltd
Priority to JP2005152961A priority Critical patent/JP2006331027A/ja
Publication of JP2006331027A publication Critical patent/JP2006331027A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】命令の実行順序が一意に決まらないプログラムであっても、保護区間が正しく設定されていないプログラム中の欠陥箇所を確実に検出できるようにする。
【解決手段】検査対象のプログラムPRにおける各ステートメントの実行順序を示すコントロールフローを求めるプログラムコントロールフロー解析部11と、求めたコントロールフローに基づいて、全てのステートメントについて保護状態を解析する保護状態解析部12と、求めた各ステートメントの保護状態の解析結果から、保護状態が曖昧な箇所を検出して欠陥箇所として出力する欠陥箇所検出部13とを備える。
【選択図】図1

Description

本発明は、プログラムの欠陥を検査する検査装置、検査方法、及び検査プログラムに関し、特に、割り込み処理が実行されるプログラム中に記述される割り込み禁止命令や割り込み許可命令によって定義される保護区間の設定ミスを検査する技術に関する。
近年、自動車等の車両は、複数のモジュールによって構成された各種プログラムを実行する電子制御装置(Electronic Control Unit;ECU)を搭載し、各種電装品の制御を行っている。かかるECUにおいては、制御応答性や安全性の確保等を図るため、所定の処理をリアルタイムに実行する必要がある。そのため、ECUにおいては、リアルタイムに実行する必要がある処理を、他の処理よりも優先順位の高い割り込み処理やタスクとして行わせるのが一般的である。
ここで、優先順位の異なる複数のタスクによって構成されるプログラムにおいては、あるタスクを実行中に、優先順位の高い他のタスクの起動要求が発生すると、実行中の優先順位の低いタスクを中断し、優先順位の高いタスクを実行する。したがって、かかるプログラムにおいては、例えば、優先順位の低いタスクと優先順位の高いタスクで、共有の変数に対する読み出しや書き込みを行う場合には、意図しない動作をする場合がある。
このような事態を回避する方策として、優先順位の低いタスクの特定の区間を、優先順位の高いタスクによって中断されないような保護区間とする命令を記述する方法がある。また、割り込みレベルの異なる複数の割り込み処理を用いる場合や、BGJ(Back Ground Job)と割り込み処理とから構成される場合も同様である。具体的には、燃料噴射量を算出する場合にエンジンの回転数や吸入空気量を検出する処理等のように、あるタスク間に他のタスクを割り込ませて処理が行われると、正確な演算を行うことができない処理においては、タスク間に他のタスクの割り込みが行われないように保護区間を設定している。
このような保護区間は、一連のタスクの前後に、割り込み禁止命令及び割り込み許可命令を挿入したり、セマフォの開始命令及び終了命令を挿入したりすることによって設定される。すなわち、保護区間は、2つの対応する命令を対で記述することによって実現される。そのため、2つの命令のうち、いずれかが欠けた場合には、保護区間が設定されない事態や、保護区間から抜け出さず優先順位の高い処理が実行されなくなる事態等が生じ、プログラムが設計者の意図どおりの振る舞いをしなくなるという問題がある。
このような保護区間の設定ミスは、プログラムの欠陥としてそれを検出して何らかの警告を行う必要がある。このようなプログラムの欠陥を自動的に検査する装置としては、例えば特許文献1に記載されたものがある。
特開2001−117793号公報
しかしながら、上述した特許文献1に記載された従来の技術においては、プログラム中の命令の記述を順に判断することにより、割り込み禁止命令及び割り込み許可命令が、その順序で対になって記述されているか否かを判断するものである。そのため、この従来技術においては、割り込み禁止命令と割り込み許可命令とがこの順序で対になって記述されている限りは警告が行われないことになり、例えば、割り込み禁止命令の後に条件分岐があり且つ片方の分岐にのみ割り込み許可命令が挿入されている場合のように、条件式等のプログラム中の処理記述(ステートメント)の実行順序を制御する記述により、割り込み禁止命令又は許可命令が実行される場合と実行されない場合とがあるような構造を有するプログラムの場合には、その命令の実行順序が一意に決まらないことから、保護区間の設定ミスを正確に解析することができないという問題があった。
本発明は、以上のような従来技術の問題点を解消すべく創案されたものであって、保護区間が正しく設定されていないプログラム中の欠陥箇所を確実に検出することができる検査装置、検査方法、及び検査プログラムを提供することを目的とする。
本発明は、前記目的を達成するために、検査対象となるプログラムにおける各ステートメントの実行順序を示すコントロールフローを求め、求めたコントロールフローに基づいて、各ステートメントの実行順序の前後関係を解析し、全てのステートメントについて、割り込み処理が禁止されている保護区間内のステートメントであるか否かを示す保護状態を解析し、求めた各ステートメントの保護状態の解析結果から、保護状態が曖昧な箇所を検出して、当該箇所を欠陥箇所として出力する。
本発明によれば、各ステートメントの実行順序の前後関係に従って解析された保護状態が曖昧な箇所が欠陥箇所として出力されるので、命令の実行順序が一意に決まらないプログラムであっても、保護区間が正しく設定されていない箇所を確実に検出することができる。
以下、本発明を適用した検査装置の具体的な実施形態について、図面を参照しながら詳細に説明する。この検査装置は、例えば、車両に搭載される電子制御装置(Electronic Control Unit;ECU)等により実行されるプログラム中の欠陥、特に、プログラムの中の保護区間の設定ミスを検査するものである。
(第1の実施形態)
まず、本発明を適用した第1の実施形態の検査装置について説明する。
本実施形態の検査装置は、図1に示すように、検査対象となるプログラムPRを読み込んでこれを解析し、このプログラムPR中で保護区間が正しく設定されていない欠陥箇所を、結果ファイルFLにて出力するものであり、プログラムコントロールフロー解析部11と、保護状態解析部12と、欠陥箇所検出部13とを備える。これらプログラムコントロールフロー解析部11、保護状態解析部12、欠陥箇所検出部13は、典型的には、コンピュータで本発明の検査プログラムを実行することによって、コンピュータの1機能としてソフトウェア的に実現されるが、勿論、ハードウェア的に構成してもよい。
プログラムコントロールフロー解析部11は、検査対象となるプログラムPRを読み込んで、このプログラムPRのコントロールフローを求めるものである。ここで、コントロールフローとは、検査対象となるプログラムPRにおける各ステートメント(処理記述)の実行順序を示すものである。
保護状態解析部12は、プログラムコントロールフロー解析部11によって求められたコントロールフローに基づいて、全てのステートメントについての保護状態を解析するものである。ここで、保護状態とは、優先順位の低いタスクの特定の区間が優先順位の高いタスクによって中断されない保護区間、つまり割り込み処理が禁止されている区間内に記述されているステートメントであるか否かを示すものであり、各ステートメントの実行順序の前後関係を解析することで求められる。
欠陥箇所検出部13は、保護状態解析部12によって求められた各ステートメントの保護状態の解析結果から、保護状態が一意に定まらない曖昧な箇所を検出して、欠陥箇所として出力するものである。検査対象となるプログラムPR中で保護状態が曖昧な箇所は、保護区間が正しく設定されていないことによるプログラムPR中の欠陥箇所である。欠陥箇所検出部13は、このような保護状態が曖昧な箇所を検出して、その箇所を欠陥箇所として記載した結果ファイルFLを出力する。
本実施形態の検査装置では、以上の各部の働きにより、例えば、割り込み禁止命令及び割り込み許可命令といった対となる命令の記述により設定される保護区間の設定ミスを正確に検出することが可能となる。ここで、本実施形態の検査装置の各部における処理について、図2に示すプログラムPRを検査対象とする場合を例として挙げながら、詳細に説明する。
図2に示すプログラムPRは、従来技術として示した特開2001−117793号公報記載の技術では保護区間の設定ミスを正確に検出することが困難な条件分岐をともなうプログラムの例であり、7つのステートメントを含むタスクTask1からなるものである。同図中、「DISABLE」は、割り込み禁止命令を示し、「ENABLE」は、割り込み許可命令を示すものである。すなわち、このプログラムPRでは、同図中3行目のステートメント1を実行した後、同図中4行目のステートメント2として、優先順位の高いタスクの割り込みを禁止する命令を実行する。続いて、このプログラムPRでは、同図中5行目のステートメント3として、条件の判定を行う。ここで、条件が成立した場合には、同図中7行目のステートメント4を実行し、その後、同図中8行目のステートメント5として、優先順位の高いタスクの割り込みを許可する命令を実行する。一方、条件が成立しない場合には、同図中12行目のステートメント6を実行する。そして、最後に、同図中14行目のステートメント7を実行して終了する。すなわち、このプログラムPRは、同図中5行目に示す条件式が成立するか否かに応じて、処理の実行順序が変化するものであり、5行目→7行目→8行目→14行目の順序で処理する場合と、5行目→12行目→14行目の順序で処理する場合とがあり、条件分岐の一方のみで優先順位の高いタスクの割り込みを許可する命令が実行されることになる。したがって、このプログラムPRには保護区間の設定に誤りがあるが、従来技術として示した特開2001−117793号公報記載の技術では、その欠陥を検出することができない。
本実施形態の検査装置では、このようなプログラムPRをプログラムコントロールフロー解析部11によって読み込むと、以下に説明する各種処理を行う。
まず、プログラムコントロールフロー解析部11による処理について説明する。
プログラムコントロールフロー解析部11は、プログラムPRを読み込むと、当該プログラムPRを解析し、そのコントロールフローを求める。このとき、プログラムコントロールフロー解析部11は、各ステートメントについて、実行順序の前のステートメント(以下、「前ステートメント」という。)と後ろのステートメント(以下、「後ろステートメント」という。)を内部データとして管理する。
図3に、プログラムコントロールフロー解析部11によって求められるコントロールフローの内部データの例を示す。同図中「S」は、関数の開始部に対する内部データであり、「E」は、関数の終了部に対する内部データである。以下、このようなプログラムコントロールフロー解析部11の内部データを「ステートメントの前後関係テーブル」と称するものとする。
同図に示すステートメントの前後関係テーブルは、図2に示すプログラムPRのコントロールフローを解析した結果の例である。ステートメント「S」についての前ステートメント番号欄には、当該ステートメント「S」よりも先に実行されるステートメントが存在しないため、「存在しない」という意味のマーク(図3においては「−」)が付与される。また、ステートメント「S」についての後ろステートメント番号欄には、当該ステートメント「S」の次に実行されるステートメントのステートメント番号が記述される。図2に示すプログラムPRにおいては、ステートメント「S」の次に実行されるステートメントがステートメント1であることから、当該ステートメント「S」についての後ろステートメント番号欄には、「1」が記述される。さらに、ステートメント「3」についての後ろステートメント番号欄には、当該ステートメント3は条件文であり、条件成立時と不成立時とに応じて、次に実行されるステートメントが変化することから、条件成立時及び不成立時のそれぞれのステートメントである「4,6」が記述される。さらにまた、ステートメント「7」についての前ステートメント番号欄には、当該ステートメント7は条件成立時及び不成立時のいずれにおいても実行されるものであることから、条件成立時及び不成立時のそれぞれについての直前のステートメントである「5,6」が記述される。このように、プログラムコントロールフロー解析部11は、プログラムPRを解析し、各ステートメントについて、前ステートメント及び後ろステートメントを求め、ステートメントの前後関係テーブルを作成する。
本実施形態の検査装置では、このようにしてプログラムコントロールフロー解析部11によって作成されたステートメントの前後関係テーブルが、次の保護状態解析部12へと送られることになる。
次に、保護状態解析部12による処理について説明する。
保護状態解析部12は、プログラムコントロールフロー解析部11によって作成されたステートメントの前後関係テーブルを読み込むと、各ステートメントについての保護状態を求める。このとき、保護状態解析部12は、例えば図4に示すように、各ステートメント毎に、そのステートメントが「保護区間内である」ことを表す変数P(以下、「保護区間内変数P」という。)と、「保護区間外である」ことを表す変数U(以下、「保護区間外変数U」いう。)と、「保護区間内である」又は「保護区間外である」か否かを1回以上判定したか否かを表す変数F1(以下、「判定済みフラグF1」という。)と、「保護区間内である」又は「保護区間外である」か否かを全てのパスについて判定したか否かを表す変数F2(以下、「確定フラグF2」という。)とを、内部データとして管理する。以下、このような保護状態解析部12の内部データを「保護状態テーブル」と称するものとする。なお、同図に示す保護状態テーブルは、図2に示すプログラムPR及び図3に示すステートメントの前後関係テーブルを解析した結果の例である。
すなわち、保護状態解析部12は、ステートメントを「保護区間内である」と判定した場合には、保護区間内変数Pとして「1」を記述するとともに、保護区間外変数Uとして「0」を記述する。また、保護状態解析部12は、ステートメントを「保護区間外である」と判定した場合には、保護区間内変数Pとして「0」を記述するとともに、保護区間外変数Uとして「1」を記述する。さらに、保護状態解析部12は、ステートメントを「保護区間内である」場合と「保護区間外である」場合とがあると判定した場合には、保護区間内変数Pとして「1」を記述するとともに、保護区間外変数Uとして「1」を記述する。
具体的には、保護状態解析部12は、図5及び図6に示すような一連の手順にしたがって、各ステートメントの保護状態を解析する処理を行って、保護状態テーブルを作成する。
まず、保護状態解析部12は、図5に示すように、ステップS1において、保護状態テーブルの全てのセルに初期値として「0」を記述し、ステップS2において、関数の開始部「S」の保護状態を設定する。ここで、関数の開始部「S」の保護状態は、関数起動時の保護状態によって決まるものである。例えば、BGJ(Back Ground Job)の関数の開始部「S」の保護状態は、ECUの割り込みの発生を制御するレジスタの初期値によって決定される。保護状態解析部12は、図2に示すプログラムPRについて、タスクTask1が起動されるときの保護状態が、割り込み許可状態、すなわち、「保護区間外である」場合には、保護状態テーブルにおける関数の開始部「S」についての保護区間内変数Pとして「0」を記述するとともに、保護区間外変数Uとして「1」を記述する。さらに、保護状態解析部12は、ステップS3において、関数の開始部「S」についての判定済みフラグF1及び確定フラグF2として「1」を記述する。例えば、保護状態解析部12は、図2に示すプログラムPRの場合には、保護状態テーブルにおける関数の開始部「S」についての判定済みフラグF1として「1」を記述するとともに、確定フラグF2として「1」を記述する。
そして、保護状態解析部12は、ステップS4以降において、1番目のステートメントから順次、各ステートメントの保護状態の判定を行う。ステートメントの保護状態は、前ステートメントの保護状態を継承することから、保護状態解析部12は、前ステートメントの保護状態の判定が終了している場合、すなわち、前ステートメントの判定済みフラグF1が「1」であると判定した場合に、保護状態の判定を行う。具体的には、保護状態解析部12は、ステップS5において、前ステートメントの判定済みフラグF1が「1」でないと判定した場合には、ステップS4からの処理を繰り返す一方で、前ステートメントの判定済みフラグF1が「1」であると判定した場合には、保護状態の判定を行う。
なお、保護状態解析部12は、前ステートメントが複数存在する場合には、複数の前ステートメントのうちの少なくとも1つの保護状態の判定が終了している場合に、保護状態の判定を行う。例えば、保護状態解析部12は、図2に示すプログラムPRにおけるステートメント7について保護状態の判定を行う場合には、その前ステートメントが、図3に示すステートメントの前後関係テーブルに基づいてステートメント5及びステートメント6であると決定され、ステートメント5の判定済みフラグF1又はステートメント6の判定済みフラグF1の少なくとも一方が「1」であると判定した場合には、当該ステートメント7の保護状態判定を実行する。
このように、保護状態解析部12は、前ステートメントのうちの少なくとも1つの保護状態の判定が終了している場合には、図6中ステップS7へと処理を移行し、前ステートメントの保護状態に基づいて、当該ステートメントの保護状態を判定する。なお、前ステートメントが複数存在するステートメントについては、全ての前ステートメントについて保護状態の判定が行われた後に、当該ステートメントの状態を判定することで最終的な保護状態が確定する。そのため、保護状態解析部12は、全てのステートメントの保護状態が確定するまで、保護状態の判定を繰り返し行う。保護状態解析部12は、保護状態の判定を繰り返し行う場合には、ステートメントの保護状態が確定していない場合、すなわち、確定フラグF2が「0」である場合に、保護状態の判定を行う。具体的には、保護状態解析部12は、ステップS6において、確定フラグF2が「0」でないと判定した場合には、図5中ステップS4からの処理を繰り返す一方で、確定フラグF2が「0」であると判定した場合には、図6中ステップS7へと処理を移行し、保護状態の判定を行う。そして、保護状態解析部12は、ステップS8において、全ての前ステートメントについて保護状態の判定が行われたことを確認した上で、ステートメントの保護状態を確定する。なお、これらステップS7及びステップS8における保護状態の判定処理及び確定処理については、後に詳述するものとする。
保護状態解析部12は、このようにして1番目のステートメントから順次、状態の判定を行い、ステップS9において、関数の終了部「E」まで状態の判定が終了した場合には、ステップS10において、全てのステートメントの保護状態が確定しているか否かを判定し、全てのステートメントの保護状態が確定している場合には、保護状態の解析を終了する。なお、このステップS10における終了判定処理については、後に詳述するものとする。
以下、ステップS7における保護状態の判定処理、ステップS8における保護状態の確定処理、及びステップS10における終了判定処理について、より詳細に説明する。
まず、ステップS7における保護状態の判定処理について説明する。保護状態解析部12は、図7に示す一連の手順にしたがって、図6中ステップS7における保護状態の判定処理を行う。
すなわち、保護状態解析部12は、図7に示すように、まずステップS11において、前ステートメントが複数存在するか否かを判定する。
ここで、保護状態解析部12は、前ステートメントが1つしか存在しないと判定した場合には、判定対象のステートメントが保護区間に関する命令か否かに応じて、保護状態を判定する。すなわち、保護状態解析部12は、ステップS12において、判定対象のステートメントが保護区間の開始命令であると判定した場合には、ステップS19において、保護区間内変数Pとして「1」を記述するとともに、保護区間外変数Uとして「0」を記述する。また、保護状態解析部12は、ステップS12において、判定対象のステートメントが保護区間の開始命令でないと判定し、ステップS13において、判定対象のステートメントが保護区間の終了命令であると判定した場合には、ステップS20において、保護区間内変数Pとして「0」を記述するとともに、保護区間外変数Uとして「1」を記述する。さらに、保護状態解析部12は、ステップS13において、判定対象のステートメントが保護区間の終了命令でないと判定した場合、すなわち、判定対象のステートメントが保護区間に関する命令でない場合には、ステップS21において、前ステートメントの保護区間内変数Pの値を当該ステートメントの保護区間内変数Pとして継承するとともに、前ステートメントの保護区間外変数Uの値を当該ステートメントの保護区間外変数Uとして継承する。
一方、保護状態解析部12は、ステップS11において、前ステートメントが複数存在すると判定した場合には、前ステートメントの保護状態の論理和に応じて、保護状態を判定する。すなわち、保護状態解析部12は、ステップS14において、前ステートメントに保護区間内変数Pが「1」であるものが1つ以上あると判定した場合には、ステップS17において、保護区間内変数Pとして「1」を記述する。また、保護状態解析部12は、ステップS15において、前ステートメントに保護区間外変数Uとして「1」であるものが1つ以上あると判定した場合には、ステップS18において、保護区間外変数Uとして「1」を記述する。
保護状態解析部12は、このようにして保護区間内変数P及び保護区間外変数Uの値を記述すると、ステップS16において、判定が終了した旨を示す判定済みフラグF1として「1」を記述し、一連の保護状態の判定処理を終了する。
次に、図6中ステップS8における保護状態の確定処理について説明する。保護状態解析部12は、図8に示す一連の手順にしたがって、図6中ステップS8における保護状態の確定処理を行う。
すなわち、保護状態解析部12は、図8に示すように、まずステップS31において、前ステートメントが複数存在するか否かを判定する。
ここで、保護状態解析部12は、前ステートメントが複数存在すると判定した場合には、全ての前ステートメントの状態が判定されている場合、すなわち、全ての前ステートメントの判定済みフラグF1が「1」である場合に状態を確定する。すなわち、保護状態解析部12は、ステップS32において、全ての前ステートメントの判定済みフラグF1が「1」であると判定した場合には、ステップS34において、確定フラグF2として「1」を記述し、一連の保護状態の確定処理を終了する。
一方、保護状態解析部12は、ステップS31において、前ステートメントが1つしか存在しないと判定した場合には、ステップS33へと処理を移行する。そして、保護状態解析部12は、ステップS33において、ステートメントが保護区間に関する命令であると判定した場合には、ステップS35において、確定フラグF2として「1」を記述し、一連の保護状態の確定処理を終了する。一方、保護状態解析部12は、ステートメントが保護区間に関する命令でないと判定した場合には、ステップS36において、前ステートメントの確定状態を継承する、すなわち、保護状態テーブルにおける前ステートメントの確定フラグF2の値を当該ステートメントの確定フラグF2として継承し、一連の保護状態の確定処理を終了する。
次に、図6中ステップS10における終了判定処理について説明する。保護状態解析部12は、図9に示す一連の手順にしたがって、図6中ステップS10における終了判定処理を行う。
すなわち、保護状態解析部12は、図9に示すように、まずステップS41において、関数の開始部「S」へと対象を移動し、ステップS42において、当該関数の開始部「S」についての確定フラグF2が「1」であるか否かを確認する。保護状態解析部12は、確定フラグF2が「1」でないと判定した場合には、図6中ステップS7へと処理を移行し、再度、保護状態の判定処理を行う。一方、保護状態解析部12は、確定フラグF2が「1」であると判定した場合には、ステップS43において、次のステートメントへと対象を移動し、確定フラグF2が「1」であるか否かを確認する。このように、保護状態解析部12は、関数の開始部「S」から順次、確定フラグF2が「1」であるか否かを確認していき、全てのステートメントについての確定フラグF2が「1」であると判定した場合、すなわち、ステップS44において、処理の対象が関数の終了部「E」であると判定した場合に、一連の保護状態の解析を終了する。
保護状態解析部12は、以上のようにして、検査対象となるプログラムPRにおける各ステートメントの保護状態の解析を行う。具体的な例を挙げて説明すると、例えば図2に示したプログラムPRの解析を行う場合には、保護状態解析部12は、以下のような処理を行うことになる。
すなわち、保護状態解析部12は、図2に示すプログラムPRのステートメント2について保護状態の判定処理を行う場合には、前ステートメントがステートメント1のみであることから、図7中ステップS12へと処理を移行し、当該ステートメント2が割り込み禁止命令、すなわち、保護区間の開始命令であることから、ステップS19へと処理を移行する。そして、保護状態解析部12は、ステップS19において、ステートメント2についての保護状態テーブルの保護区間内変数Pとして「1」を記述するとともに、保護区間外変数Uとして「0」を記述し、ステップS16において、判定済みフラグF1として「1」を記述し、一連の保護状態の判定処理を終了する。保護状態解析部12は、このようにしてステートメント2についての保護状態の判定処理を終了すると、図8に示す当該ステートメント2についての保護状態の確定処理を実行する。
保護状態解析部12は、ステートメント2について保護状態の確定処理に移行すると、前ステートメントがステートメント1のみであることから、図8中ステップS33へと処理を移行し、当該ステートメント2が割り込み禁止命令、すなわち、保護区間の開始命令であることから、ステップS35へと処理を移行する。そして、保護状態解析部12は、ステップS35において、ステートメント2についての保護状態テーブルの確定フラグF2として「1」を記述し、一連の保護状態の確定処理を終了する。保護状態解析部12は、このようにしてステートメント2についての保護状態の確定処理を終了すると、図6中ステップS9において、当該ステートメント2が関数の終了部であるか否かを判定し、関数の終了部であると判定した場合には、ステップS10における終了判定処理を実行する。また、保護状態解析部12は、図6中ステップS9において、当該ステートメント2が関数の終了部でないと判定した場合には、ステップS4において、次のステートメントへと処理を移行し、ステップS5乃至ステップS9の処理を繰り返す。
なお、保護状態解析部12は、ステートメント2の場合には、関数の終了部「E」ではないことから、図6中ステップS4へと処理を移行し、次のステートメント3を判定対象とする。この場合、保護状態解析部12は、ステートメント3の前ステートメントがステートメント2であり、ステートメント2の判定フラグF1が「1」であり、確定フラグF2が「0」であることから、図7に示すステートメント3についての保護状態の判定処理を実行する。
ここで、保護状態解析部12は、ステートメント3の前ステートメントがステートメント2のみであることから、図7中ステップS12へと処理を移行し、当該ステートメント3が保護区間の開始命令でないことから、ステップS21へと処理を移行する。そして、保護状態解析部12は、ステップS21において、前ステートメントであるステートメント2についての保護状態テーブルの保護区間内変数Pの値「1」を、ステートメント3の保護区間内変数Pとして継承する。同様に、保護状態解析部12は、前ステートメントであるステートメント2についての保護状態テーブルの保護区間内変数Uの値「0」を、ステートメント3の保護区間内変数Uとして継承する。そして、保護状態解析部12は、ステップS16において、ステートメント3についての判定済みフラグF1として「1」を記述し、一連の保護状態の判定処理を終了する。保護状態解析部12は、このようにしてステートメント3についての保護状態の判定処理を終了すると、図8に示す当該ステートメント3についての保護状態の確定処理を実行する。
保護状態解析部12は、ステートメント3について保護状態の確定処理に移行すると、前ステートメントがステートメント2のみであることから、図8中ステップS33へと処理を移行し、当該ステートメント3が保護区間の開始命令でないことから、ステップS36へと処理を移行する。そして、保護状態解析部12は、ステップS36において、ステートメント3についての保護状態テーブルの確定フラグF2として、ステートメント2の確定フラグF2の値「1」を継承し、一連の保護状態の確定処理を終了する。
保護状態解析部12は、このような処理をステートメント4、ステートメント5、ステートメント6についても同様に実行する。そして、保護状態解析部12は、ステートメント7についての保護状態の判定処理に移行すると、前ステートメントがステートメント5及びステートメント6の2つであることから、図7中ステップS14へと処理を移行する。この場合、保護状態解析部12は、ステートメント6の保護区間内変数Pが「1」であることから、ステップS17へと処理を移行し、ステートメント7についての保護区間内変数Pとして「1」を記述する。また、保護状態解析部12は、ステートメント5についての保護区間外変数Uが「1」であることから、ステップS18へと処理を移行し、ステートメント7についての保護区間外変数Uとして「1」を記述し、ステップS16において、当該ステートメント7についての判定済みフラグF1として「1」を記述し、一連の保護状態の判定処理を終了する。保護状態解析部12は、このようにしてステートメント7についての保護状態の判定処理を終了すると、図8に示す当該ステートメント7についての保護状態の確定処理を実行する。
保護状態解析部12は、ステートメント7について保護状態の確定処理に移行すると、前ステートメントがステートメント5及びステートメント6の2つであることから、図8中ステップS32へと処理を移行し、前ステートメントであるステートメント5及びステートメント6についての判定済みフラグF1が「1」であることから、ステップS34へと処理を移行する。そして、保護状態解析部12は、ステップS34において、ステートメント7についての保護状態テーブルの確定フラグF2として「1」を記述し、一連の保護状態の確定処理を終了する。
保護状態解析部12は、このようにしてステートメント7についての保護状態の確定処理を終了すると、次のステートメントである関数の終了部「E」を判定対象とし、図5中ステップS5乃至図6中ステップS8を実行する。
保護状態解析部12は、このようにして先に図4に示したような保護状態テーブルを作成する。そして、保護状態解析部12は、図6中ステップS9において、関数の終了部「E」であると判定した上で、図9に示す終了判定処理を実行する。この場合、保護状態解析部12は、保護状態テーブルに基づいて、全てのステートメントについての確定フラグF2が「1」であることを確認し、終了判定処理を終了する。これにより、保護状態解析部12は、一連の保護状態解析処理を終了する。
本実施形態の検査装置では、このようにして保護状態解析部12によって作成された保護状態テーブルが、次の欠陥箇所検出部13へと送られることになる。
次に、欠陥箇所検出部13による処理について説明する。
欠陥箇所検出部13は、保護状態解析部12によって作成された保護状態テーブルを読み込むと、保護状態が曖昧な箇所を検出して、当該箇所を欠陥箇所として出力する。具体的には、欠陥箇所検出部13は、保護区間内変数Pが「1」であり且つ保護区間外変数Uが「1」であるステートメントについて、プログラム中の記述箇所を特定することができる情報を出力する。なお、ここでの出力とは、例えば、結果ファイルFLとして所定の記憶手段に出力することを意味し、出力先は特に限定されるものではない。欠陥箇所検出部13は、図2に示したプログラムPRの場合には、図4に示した保護状態テーブルに基づいて、保護区間内変数Pが「1」であり且つ保護区間外変数Uが「1」であるステートメントとして、ステートメント7及び関数の終了部「E」を検出し、これらステートメント7及び関数の終了部「E」に関する情報を、例えば図10に示すような結果ファイルFLとして出力する。
以上詳細に説明したように、本実施形態の検査装置においては、プログラムコントロールフロー解析部11によって解析対象のプログラムPRにおける各ステートメントの実行順序を示すコントロールフローを求め、求めたコントロールフローに基づいて、保護状態解析部12によって全てのステートメントについての保護状態を解析し、求めた各ステートメントの保護状態の解析結果から、欠陥箇所検出部13によって保護状態が曖昧な箇所を検出して、当該箇所を欠陥箇所として出力する。
これにより、この検査装置においては、検査対象となるプログラムPRについて、各ステートメントの実行順序の前後関係に従って解析された保護状態が曖昧な箇所が欠陥箇所として出力されるので、命令の実行順序が一意に決まらないプログラムであっても、保護区間が正しく設定されていない欠陥箇所を確実に検出することができる。
(第2の実施形態)
次に、本発明を適用した第2の実施形態の検査装置について説明する。
本実施形態の検査装置は、1つのタスクが複数の関数から構成されているプログラムについて、タスク全体の保護状態を決定する処理に特徴を有するものである。本実施形態の検査装置におけるその他の部分は、基本的には上述した第1の実施形態の検査装置と同様であるので、以下、この第2の実施形態の説明において、第1の実施形態の説明と同様の部分については図中同一符号を付して、詳細な説明を省略する。
1つのタスクが複数の関数から構成されているプログラムにおいては、関数内に別の関数を呼び出す(コールする)ステートメントが存在する。前ステートメントが関数コールであるステートメントの保護状態は、コールされる関数の終了部の状態によって決定されることになる。そこで、本実施形態の検査装置においては、かかるプログラムの場合には、関数のコールツリーから、関数が呼び出されるまでの経由関数の数の最大値(以下、「深さ」という。)を示すテーブルを作成し、深さが大きい関数から順に当該関数の開始部の保護状態に対する終了部の保護状態の対応表を作成した後に、深さが小さい関数から順に当該関数の開始部の保護状態を解析して求めることにより、タスク全体の保護状態を決定できるようにしている。ここでは、図11に示すようなプログラムPRを検査対象とした場合を例に挙げて、本実施形態の検査装置での処理について具体的に説明する。
この図11に示すプログラムPRは、コールする関数として、3つの関数Func21,Func22,Func23があるタスクTask2からなるものである。関数Func21は、保護区間の開始命令を実行するものである。また、関数Func22は、同図中13行目に示す条件式が成立した場合に、保護区間の終了命令を実行し、条件式が成立しない場合には何もせず、変数V21に値を書き込むものである。さらに、関数Func23は、変数V22に値を書き込むものである。
本実施形態の検査装置では、このようなプログラムPRをプログラムコントロールフロー解析部11によって読み込むと、以下に説明する各種処理を行う。
まず、プログラムコントロールフロー解析部11は、解析対象のプログラムPRを読み込むと、当該プログラムPRを解析し、そのコントロールフローを求める。このとき、プログラムコントロールフロー解析部11は、関数単位でコントロールフローを作成する。具体的には、プログラムコントロールフロー解析部11は、図11に示すプログラムPRの場合には、図12に示すように、関数Func21,Func22がこの順で並ぶタスクTask2のコントロールフローを作成する。また、プログラムコントロールフロー解析部11は、図13に示すように、割り込み禁止命令と関数Func23とがこの順で並ぶ関数Func21のコントロールフローを作成する。さらに、プログラムコントロールフロー解析部11は、図14に示すように、条件式c、割り込み許可命令、及び変数V21=10の書き込み処理がこの順で並ぶ関数Func22のコントロールフローを作成する。さらにまた、プログラムコントロールフロー解析部11は、図15に示すように、変数V22=10からなる関数Func23のコントロールフローを作成する。
検査装置においては、このようにしてプログラムコントロールフロー解析部11によって関数単位でコントロールフローを作成すると、保護状態解析部12により、関数コールツリーを作成する。図11に示したプログラムPRの関数コールツリーの例を図16に示す。すなわち、この関数コールツリーは、「タスクTask2は、関数Func21,Func22をコールする」、「関数Func21は、関数Func23をコールする」ということを表している。
また、本実施形態の検査装置において、保護状態解析部12は、関数が呼び出されるまでの経由関数の数を表した深さテーブルを作成する。図11に示したプログラムPRの深さテーブルの例を図17に示す。すなわち、図11に示すプログラムPRにおいては、関数Func21は、Task2→Func21という経路でコールされ、この場合における関数Func21の深さは、「1」である。また、関数Func23は、Task2→Func21→Func23という経路でコールされ、この場合における関数Func23の深さは、「2」である。本実施形態の検査装置においては、複数の関数からコールされる場合、すなわち、複数の深さを有する場合には、その最大値を深さとする。
そして、保護状態解析部12は、関数の深さが大きい順に、関数の開始部「S」の保護状態が、保護区間内変数Pが「1」であり且つ保護区間外変数Uが「0」である場合、保護区間内変数Pが「0」であり且つ保護区間外変数Uが「1」である場合、及び保護区間内変数Pが「1」であり且つ保護区間外変数Uが「1」である場合について保護状態を解析し、さらに、関数の終了部「E」の保護状態を解析し、関数の開始部「S」に対する終了部「E」の保護状態の対応表(以下、「終了部保護状態テーブル」という。)を作成する。この終了部保護状態テーブルの例を図18に示す。保護状態解析部12は、このような終了部保護状態テーブルを用いて、関数の開始部「S」の保護状態に対する終了部「E」の保護状態を管理する。なお、図18に示す終了部保護状態テーブルは、図11に示すプログラムPRにおける関数Func22についてのものを示している。すなわち、関数Func22の終了部「E」の保護状態は、開始部「S」の保護状態が、保護区間内変数Pが「1」であり且つ保護区間外変数Uが「0」である場合には、保護区間内変数Pが「1」となり且つ保護区間外変数Uが「1」となり、保護区間内変数Pが「0」であり且つ保護区間外変数Uが「1」である場合には、保護区間内変数Pが「0」となり且つ保護区間外変数Uが「1」となり、保護区間内変数Pが「1」であり且つ保護区間外変数Uが「1」である場合には、保護区間内変数Pが「1」となり且つ保護区間外変数Uが「1」となる。
保護状態解析部12は、このような終了部保護状態テーブルを用いて、例えば図19にコントロールフローと保護状態とを対応付けて示すように、関数のコール箇所を、保護区間内変数Pを「1」とし且つ保護区間外変数Uを「0」とする命令、保護区間内変数Pを「0」とし且つ保護区間外変数Uを「1」とする命令、及び保護区間内変数Pを「1」とし且つ保護区間外変数Uを「1」とする命令に置き換え、ステートメントの保護状態を解析する。このように、保護状態解析部12は、関数の深さが大きい順に保護状態を解析することにより、全ての関数の終了部保護状態テーブルを作成することができる。
また、保護状態解析部12は、全ての関数の終了部保護状態テーブルを作成した後、例えば図20にコントロールフローと保護状態とを対応付けて示すように、関数の深さが小さい順に各ステートメントの保護状態を解析し、ステートメントが関数コールである場合には、当該ステートメントの前ステートメントの状態を、当該関数の開始部「S」の保護状態記録テーブル(以下、「開始部保護状態記録テーブル」という。)に記録する。保護状態解析部12は、より深さが大きい関数の保護状態を解析する際には、開始部保護状態記録テーブルに基づいて当該関数の開始部「S」の保護状態を設定することにより、全てのステートメントの保護状態を解析することができる。このとき、保護状態解析部12は、各ステートメントの保護状態を、終了部保護状態テーブルを作成した際の解析結果を用いてもよい。
開始部保護状態記録テーブルの例を図21に示す。保護状態解析部12は、このような開始部保護状態記録テーブルを用いて、各関数の開始部「S」に設定される保護状態を管理する。なお、図21に示す開始部保護状態記録テーブルは、図11に示すプログラムPRにおける関数Func21についてのものを示している。すなわち、この開始部保護状態記録テーブルは、関数Func21の開始部「S」の保護状態として、保護区間内変数Pが「1」であり且つ保護区間外変数Uが「0」である状態が設定され、保護区間内変数Pが「0」であり且つ保護区間外変数Uが「1」である状態と、保護区間内変数Pが「1」であり且つ保護区間外変数Uが「1」である状態とは設定されないということを表している。また、この開始部保護状態記録テーブルは、関数Func22及び関数Func23の開始部「S」の保護状態も同様に、保護区間内変数Pが「1」であり且つ保護区間外変数Uが「0」である状態が設定され、保護区間内変数Pが「0」であり且つ保護区間外変数Uが「1」である状態と、保護区間内変数Pが「1」であり且つ保護区間外変数Uが「1」である状態は設定されないということを表している。
本実施形態の検査装置においては、このようにして終了部保護状態テーブル及び開始部保護状態記録テーブルを作成し、保護状態を解析すると、欠陥箇所検出部13により、保護区間内変数Pが「1」であり且つ保護区間外変数Uが「1」であるステートメントについて、プログラム中の記述箇所を特定することができる情報を出力する。また、欠陥箇所検出部13は、関数の開始部「S」の保護状態が複数ある場合には、いずれかの場合において保護区間内変数Pが「1」となり、且つ、いずれかの場合において保護区間外変数Uが「1」となるステートメントについて、プログラム中の記述箇所を特定することができる情報を出力する。なお、ここでの出力とは、例えば、図22に示すような結果ファイルFLとして所定の記憶手段に出力することを意味し、出力先は特に限定されるものではない。
以上詳細に説明したように、本実施形態の検査装置においては、プログラムコントロールフロー解析部11によって関数単位でコントロールフローを求め、保護状態解析部12により、関数が呼び出されるまでの経由関数の数の最大値が大きい関数から順に当該関数の開始部「S」の保護状態に対する終了部「E」の保護状態を対応付けて求めた後、最大値が小さい関数から順に当該関数の開始部「S」の保護状態を解析して、保護状態が曖昧な箇所を検出する。
これにより、この検査装置においては、1つのタスクが複数の関数から構成され、関数内に別の関数を呼び出すステートメントが存在するプログラムPRを検査対象とした場合であっても、保護区間が正しく設定されていない欠陥箇所を確実に検出することができる。
(第3の実施形態)
次に、本発明を適用した第3の実施形態の検査装置について説明する。
本実施形態の検査装置は、ある関数のコール箇所が保護区間内と保護区間外との両方に存在する場合に、一意に決まらない保護区間を解析可能とする点に特徴を有するものである。本実施形態の検査装置におけるその他の部分は、基本的には上述した第1の実施形態の検査装置と同様であるので、以下、この第3の実施形態の説明において、第1の実施形態の説明と同様の部分については図中同一符号を付して、詳細な説明を省略する。
従来技術として示した特開2001−117793号公報記載の技術においては、関数等の単位プログラム毎に、割り込み禁止命令及び割り込み許可命令が、この順序で対になって記述されているか否かを判断するという構成になっていたことから、ある関数のコール箇所が、保護区間内と保護区間外との両方に存在する場合には、その関数の開始部「S」の保護状態が一意に決まらず、かかるステートメントであることを解析することができない。
このようなプログラムとしては、例えば図23に示すようなものが挙げられる。すなわち、この図23に示すプログラムPRは、同図中4行目に示すように、タスクTask31が保護区間内で関数Func31をコールし、同図中6行目に示すように、保護区間外で再度、関数Func31をコールする。そして、このプログラムPRは、関数Func31を実行し、同図中10行目に示すように、変数V32,V33を読み込んで所定の演算を実行し、結果を変数V31として書き込む。
このようなプログラムPRにおいては、同図中10行目に示す関数Func31内の処理としての変数V31の書き込み、及び変数V32,V33の読み込みに対する保護区間が、保護区間内で実行される場合と保護区間外で実行される場合とがあり、一意に決まらない。従来技術として示した特開2001−117793号公報記載の技術においては、このような箇所を解析することができない。
ここで、このようなプログラムPRにおいては、関数Func31がコールされる前のステートメントの保護状態が全て同じ状態であるか否かに応じて、保護区間が一意に決まるか否かが決定されることになる。そこで、本実施形態の検査装置においては、保護状態解析部12により、関数がコールされる前のステートメントの状態を記録したテーブル(以下、「コール時保護状態テーブル」という。)を作成することにより、保護区間が正しく設定されていない箇所を抽出できるようにしている。
図24に、コール時保護状態テーブルの例を示す。ここでは、関数毎に、関数のコール箇所とコール時保護状態との関係を示している。なお、図24に示すコール時保護状態テーブルは、図23に示すプログラムPRにおける関数Func31についてのものを示している。すなわち、関数Func31は、図23中4行目でコールされ、その前のステートメント(3行目)の保護区間内変数Pが「1」であり、保護区間外変数Uが「0」である。また、関数Func31は、同図中6行目でもコールされ、その前のステートメント(5行目)の保護区間内変数Pが「0」であり、保護区間外変数Uが「1」である。
本実施形態の検査装置において、保護状態解析部12は、このようなコール時保護状態テーブルを用いて、関数がコールされる前のステートメントの保護状態が全て同じであるか否かを確認する。
本実施形態の検査装置においては、このようにして保護状態解析部12がコール時保護状態テーブルを作成し、関数がコールされる前のステートメントの保護状態を解析すると、欠陥箇所検出部13により、関数がコールされる前のステートメントの保護状態が全て同じでない関数を、保護区間が一意に決まらない関数として出力する。なお、ここでの出力とは、例えば、図25に示すような結果ファイルFLとして所定の記憶手段に出力することを意味し、出力先は特に限定されるものではない。
以上詳細に説明したように、本実施形態の検査装置においては、保護状態解析部12によってプログラムPRを構成する関数が呼び出される前のステートメントの保護状態が全て同じであるか否かを確認し、欠陥箇所検出部13によって関数が呼び出される前のステートメントの保護状態が全て同じでない関数を検出して、当該箇所を欠陥箇所として出力することから、保護区間が正確に設定されない箇所を正確に検出することができるとともに、プログラム中の条件式の値によって保護状態が一意に決まらないという危険な箇所も正確に検出することができる。また、この検査装置においては、1つの関数中の保護区間と禁止区間との両方から関数がコールされている場合であっても、正確に解析することができる。さらに、この検査装置においては、複数のタスクの保護区間と禁止区間との両方から関数がコールされている場合であっても、正確に解析することができる。
なお、以上説明した検査装置は本発明の一適用例であり、本発明が以上の例に限定されるものではなく、本発明に係る技術的思想を逸脱しない範囲であれば具体的な処理の内容等において種々の変更が可能であることは勿論である。
例えば、保護区間の設定が必要となるのは、優先順位の高いタスクと優先順位の低いタスクとに対して同じ変数の書き込み又は読み込みを行う場合である。したがって、本発明を適用した検査装置においては、解析対象のプログラムPRから、複数のタスクによって共有している変数の書き込み箇所及び読み込み箇所、保護区間に関する命令箇所、条件式等のプログラムの流れを制御する箇所、及び関数のコール箇所のみを抽出した中間ファイルを作成し、この中間ファイルを用いて、コントロールフロー及び保護状態を解析するようにしてもよい。
本発明を適用した第1の実施形態の検査装置の概略構成を示すブロック図である。 第1の実施形態の検査装置による検査対象として例示したプログラムの内容を示す図である。 ステートメントの前後関係テーブルの例を示す図である。 保護状態テーブルの例を示す図である。 保護状態解析部による保護状態解析処理の一連の手順を示すフローチャートである。 保護状態解析部による保護状態解析処理の一連の手順を示すフローチャートであり、図5に続く処理を示す図である。 保護状態解析処理の中の保護状態の判定処理の詳細を示すフローチャートである。 保護状態解析処理の中の保護状態確定処理の詳細を示すフローチャートである。 保護状態解析処理の中の終了判定処理の詳細を示すフローチャートである。 第1の実施形態の検査装置によって出力される結果ファイルの例を示す図である。 本発明を適用した第2の実施形態の検査装置による検査対象として例示したプログラムの内容を示す図である。 第2の実施形態の検査装置によって作成されるタスクTask2のコントロールフローを示す図である。 第2の実施形態の検査装置によって作成される関数Func21のコントロールフローを示す図である。 第2の実施形態の検査装置によって作成される関数Func22のコントロールフローを示す図である。 第2の実施形態の検査装置によって作成される関数Func23のコントロールフローを示す図である。 第2の実施形態の検査装置によって作成される関数コールツリーの例を示す図である。 第2の実施形態の検査装置によって作成される深さテーブルの例を示す図である。 第2の実施形態の検査装置によって作成される終了部保護状態テーブルの例を示す図である。 第2の実施形態の検査装置によって作成されるコントロールフローと関数の終了部の保護状態との対応を示す図である。 第2の実施形態の検査装置によって作成されるコントロールフローと関数の開始部の保護状態との対応を示す図である。 第2の実施形態の検査装置によって作成される開始部保護状態記録テーブルの例を示す図である。 第2の実施形態の検査装置によって出力される結果ファイルの例を示す図である。 本発明を適用した第3の実施形態の検査装置による検査対象として例示したプログラムの内容を示す図である。 第3の実施形態の検査装置によって作成されるコール時保護状態テーブルの例を示す図である。 第3の実施形態の検査装置によって出力される結果ファイルの例を示す図である。
符号の説明
11 プログラムコントロールフロー解析部
12 保護状態解析部
13 欠陥箇所検出部
PR 解析対象のプログラム
FL 結果ファイル

Claims (5)

  1. プログラムの欠陥を検査する検査装置において、
    前記プログラムにおける各ステートメントの実行順序を示すコントロールフローを求めるプログラムコントロールフロー解析手段と、
    前記プログラムコントロールフロー解析手段によって求められたコントロールフローに基づいて、各ステートメントの実行順序の前後関係を解析し、全てのステートメントについて、割り込み処理が禁止されている保護区間内のステートメントであるか否かを示す保護状態を解析する保護状態解析手段と、
    前記保護状態解析手段によって求められた各ステートメントの保護状態の解析結果から、保護状態が曖昧な箇所を検出し、当該箇所を欠陥箇所として出力する欠陥箇所検出手段とを備えることを特徴とする検査装置。
  2. 前記プログラムは、1つのタスクが複数の関数から構成され、関数内に別の関数を呼び出すステートメントが存在するものであり、
    前記プログラムコントロールフロー解析手段は、関数単位でコントロールフローを求め、
    前記保護状態解析手段は、関数が呼び出されるまでの経由関数の数の最大値が大きい関数から順に当該関数の開始部となるステートメントの保護状態に対する終了部となるステートメントの保護状態を対応付けて求めた後、前記最大値が小さい関数から順に当該関数の開始部となるステートメントの保護状態を解析することを特徴とする請求項1に記載の検査装置。
  3. 前記保護状態解析手段は、前記プログラムを構成する関数が呼び出される前のステートメントの保護状態が全て同じであるか否かを確認し、
    前記欠陥箇所検出手段は、関数が呼び出される前のステートメントの保護状態が全て同じでない関数を検出して、当該関数を欠陥箇所として出力することを特徴とする請求項1に記載の検査装置。
  4. プログラムの欠陥を検査する検査方法において、
    前記プログラムにおける各ステートメントの実行順序を示すコントロールフローを求めるステップと、
    求めたコントロールフローに基づいて、各ステートメントの実行順序の前後関係を解析し、全てのステートメントについて、割り込み処理が禁止されている保護区間内のステートメントであるか否かを示す保護状態を解析するステップと、
    求めた各ステートメントの保護状態の解析結果から、保護状態が曖昧な箇所を検出し、当該箇所を欠陥箇所として出力するステップとを有することを特徴とする検査方法。
  5. コンピュータに、
    検査対象となるプログラムにおける各ステートメントの実行順序を示すコントロールフローを求める機能と、
    求めたコントロールフローに基づいて、各ステートメントの実行順序の前後関係を解析し、全てのステートメントについて、割り込み処理が禁止されている保護区間内のステートメントであるか否かを示す保護状態を解析する機能と、
    求めた各ステートメントの保護状態の解析結果から、保護状態が曖昧な箇所を検出し、当該箇所を欠陥箇所として出力する機能とを実現させることを特徴とするコンピュータ実行可能な検査プログラム。
JP2005152961A 2005-05-25 2005-05-25 検査装置、検査方法、及び検査プログラム Pending JP2006331027A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005152961A JP2006331027A (ja) 2005-05-25 2005-05-25 検査装置、検査方法、及び検査プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005152961A JP2006331027A (ja) 2005-05-25 2005-05-25 検査装置、検査方法、及び検査プログラム

Publications (1)

Publication Number Publication Date
JP2006331027A true JP2006331027A (ja) 2006-12-07

Family

ID=37552661

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005152961A Pending JP2006331027A (ja) 2005-05-25 2005-05-25 検査装置、検査方法、及び検査プログラム

Country Status (1)

Country Link
JP (1) JP2006331027A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014112317A1 (ja) * 2013-01-21 2014-07-24 日産自動車株式会社 変数アクセス一貫性検査装置、変数アクセス一貫性検査方法、変数アクセス一貫性検査プログラム
WO2014112304A1 (ja) * 2013-01-21 2014-07-24 日産自動車株式会社 排他制御検査装置、排他制御検査方法、排他制御検査プログラム
WO2014112316A1 (ja) * 2013-01-21 2014-07-24 日産自動車株式会社 フラグアクセス不具合検査装置、フラグアクセス不具合検査方法、フラグアクセス不具合検査プログラム
WO2014112303A1 (ja) * 2013-01-21 2014-07-24 日産自動車株式会社 データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム
JP2015038724A (ja) * 2013-08-19 2015-02-26 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 状態遷移経路の算出によるスリープ・ウェークアッププロトコル検証のための方法およびシステム

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104937559A (zh) * 2013-01-21 2015-09-23 日产自动车株式会社 标志访问缺陷检查装置、标志访问缺陷检查方法以及标志访问缺陷检查程序
WO2014112304A1 (ja) * 2013-01-21 2014-07-24 日産自動車株式会社 排他制御検査装置、排他制御検査方法、排他制御検査プログラム
WO2014112316A1 (ja) * 2013-01-21 2014-07-24 日産自動車株式会社 フラグアクセス不具合検査装置、フラグアクセス不具合検査方法、フラグアクセス不具合検査プログラム
WO2014112303A1 (ja) * 2013-01-21 2014-07-24 日産自動車株式会社 データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム
CN104885060A (zh) * 2013-01-21 2015-09-02 日产自动车株式会社 数据漏更新检查装置、数据漏更新检查方法、数据漏更新检查程序
WO2014112317A1 (ja) * 2013-01-21 2014-07-24 日産自動車株式会社 変数アクセス一貫性検査装置、変数アクセス一貫性検査方法、変数アクセス一貫性検査プログラム
CN104937558A (zh) * 2013-01-21 2015-09-23 日产自动车株式会社 变量访问一贯性检查装置、变量访问一贯性检查方法、变量访问一贯性检查程序
JP5962779B2 (ja) * 2013-01-21 2016-08-03 日産自動車株式会社 フラグアクセス不具合検査装置、フラグアクセス不具合検査方法、フラグアクセス不具合検査プログラム
JP5979250B2 (ja) * 2013-01-21 2016-08-24 日産自動車株式会社 排他制御検査装置、排他制御検査方法、排他制御検査プログラム
CN104937559B (zh) * 2013-01-21 2016-10-26 日产自动车株式会社 标志访问缺陷检查装置和标志访问缺陷检查方法
JP6015778B2 (ja) * 2013-01-21 2016-10-26 日産自動車株式会社 変数アクセス一貫性検査装置、変数アクセス一貫性検査方法、変数アクセス一貫性検査プログラム
CN104937558B (zh) * 2013-01-21 2016-11-09 日产自动车株式会社 变量访问一贯性检查装置、变量访问一贯性检查方法
JP2015038724A (ja) * 2013-08-19 2015-02-26 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 状態遷移経路の算出によるスリープ・ウェークアッププロトコル検証のための方法およびシステム

Similar Documents

Publication Publication Date Title
US8397104B2 (en) Creation of test plans
US20080313602A1 (en) Bounded program failure analysis and correction
KR102537875B1 (ko) 차량 ecu 소프트웨어 검증을 위한 동적 결함 주입 방법 및 장치
JP5904989B2 (ja) 制御装置を調整するための方法および調整ユニット
JP2006331027A (ja) 検査装置、検査方法、及び検査プログラム
US20080201618A1 (en) Method for Running a Computer Program on a Computer System
CN111124921B (zh) 内存越界的检测方法、装置、设备和存储介质
JP6891703B2 (ja) 自動ソフトウェアプログラム修復
JP2009169828A (ja) テストケース生成装置及びテストケース生成プログラム
CN101551773B (zh) 符号错误和赋值截断的二进制漏洞检测定位装置
EP3765965B1 (en) Static software analysis tool approach to determining breachable common weakness enumerations violations
JP6053854B2 (ja) 制御プログラムに対するインタラクション方法
CN111143851B (zh) 适用于操作***内核对象地址泄露的检测方法及***
JP2013222465A (ja) 階層的蓄積型妥当性確認システム及び方法
JP7446544B1 (ja) 情報処理装置、および、情報処理方法
Johansson et al. Concurrency defect localization in embedded systems using static code analysis: An evaluation
Shan Testing methods of computer software
JP2010079516A (ja) シミュレーション方法およびシミュレーションプログラム
JP2004306624A (ja) 電子制御装置の情報書き換えシステム
JP2007257397A (ja) 競合状態検出処理追加プログラム、競合状態検出処理追加装置、競合状態検出処理追加方法
JP6037034B2 (ja) ソフトウェア検査装置、ソフトウェア検査方法、ソフトウェア検査プログラム
Ball et al. Deconstructing concurrency heisenbugs
CN115617677A (zh) 自动驾驶车辆的匝道测试方法及装置
Sahoo et al. Concurrent Bug Detection Using Invariant Analysis
CN117312137A (zh) 一种面向中断驱动程序的原子性违反缺陷检测方法及装置