JP2008090696A - プログラム解析装置及びプログラム解析方法 - Google Patents
プログラム解析装置及びプログラム解析方法 Download PDFInfo
- Publication number
- JP2008090696A JP2008090696A JP2006272454A JP2006272454A JP2008090696A JP 2008090696 A JP2008090696 A JP 2008090696A JP 2006272454 A JP2006272454 A JP 2006272454A JP 2006272454 A JP2006272454 A JP 2006272454A JP 2008090696 A JP2008090696 A JP 2008090696A
- Authority
- JP
- Japan
- Prior art keywords
- variable
- program
- module
- statement
- output
- 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
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
【課題】不具合が発生する可能性があるプログラム中の演算箇所を正確に特定する。
【解決手段】時間差演算モジュール検出部24が、複数のモジュール間で共通して用いられる変数のうち演算周期が異なる複数のタスクにより更新される変数を抽出し、抽出された変数を用いるモジュールのプログラム記述箇所を不具合が発生する可能性があるコンピュータプログラムの記述箇所と判定する。
【選択図】図6
【解決手段】時間差演算モジュール検出部24が、複数のモジュール間で共通して用いられる変数のうち演算周期が異なる複数のタスクにより更新される変数を抽出し、抽出された変数を用いるモジュールのプログラム記述箇所を不具合が発生する可能性があるコンピュータプログラムの記述箇所と判定する。
【選択図】図6
Description
本発明は、演算周期が異なる複数のモジュールにより構成され、モジュールが必要な演算周期に応じて演算周期が異なる複数のタスクにグループ分けされているコンピュータプログラムを解析するためのプログラム解析装置及びプログラム解析方法に関する。
一般に、複数のモジュールにより構成され、所定の演算によってセンサからの入力信号からアクチュエータの出力信号を求めるためのコンピュータプログラム(以下、プログラムと略記)と、このプログラムを実行するマイクロコンピュータとを備える電子制御装置(Electronic Control Unit : ECU)では、プログラムを構成しているモジュールを必要な演算周期毎にグループ化し、演算周期が異なる複数のグループ(以下、タスクと表記)によりプログラムを構成するようにしている。
このような構成を有する電子制御装置では、変数の値が確定するタイミングは変数毎に異なることになるために、複数の変数を入力変数とするモジュールは、異なる時刻に値が確定した変数を読み出し、読み出した変数を組み合わせて演算を行わなければならない。具体的には、2入力1出力のモジュールは、2つの入力変数の値が確定するタイミングが異なる場合、異なる時刻に値が確定した2つの入力変数の値を読み出し,組み合わせて出力変数の値を演算しなければならない。
従って、上記のような構成を有する電子制御装置では、モジュールが演算を実行するタイミングによっては、プログラム設計者が意図しない不具合が発生することがある。このような背景から、複数のモジュールによりアクセスされる変数(以下、共有変数と表記)を抽出することにより、不具合が発生する可能性があるプログラム中の演算箇所を特定しようとするプログラム解析技術が提案されている(特許文献1参照)
特開平11−232086号公報
しかしながら、上記プログラム解析技術によれば、不具合が発生する可能性があるプログラム中の演算箇所を特定するためには、抽出された全ての共有変数に対し解析処理を行わなければならず、多くの労力が必要となる。また、上記プログラム解析技術は、単に共有変数を抽出する構成になっており、共有変数の更新タイミングに着目して共有変数を抽出していないために、不具合が発生する可能性があるプログラム中の演算箇所を正確に特定することはできない。
本発明は、上述の課題を解決するためになされたものであり、その目的は、多くの労力を要することなく、不具合が発生する可能性があるコンピュータプログラム中の演算箇所を正確に特定可能なプログラム解析装置及びプログラム解析方法を提供することにある。
本発明に係るプログラム解析装置及びプログラム解析方法の特徴は、複数のモジュール間で共通して用いられる変数を共有変数として抽出し、抽出された共有変数のうち演算周期が異なる複数のタスクにより更新される変数を抽出し、抽出された変数を用いるモジュールのプログラム記述箇所を不具合が発生する可能性があるコンピュータプログラムの記述箇所と判定出力することにある。
本発明に係るプログラム解析装置及びプログラム解析方法によれば、共有変数の中から更新周期が異なる共有変数を抽出し、抽出された共有変数を用いて不具合が発生する可能性があるコンピュータプログラムの記述箇所を解析するので、多くの労力を要することなく、不具合が発生する可能性があるプログラム中の演算箇所を正確に特定することができる。
本発明に係るプログラム解析装置及びプログラム解析方法は、例えば図1に示すような車両に搭載されるナビゲーション装置の電子制御装置(ECU)内に格納されるコンピュータプログラム(以下、プログラムと略記)の解析処理に適用することができる。
〔電子制御装置の全体構成〕
始めに、図1,2を参照して、本発明に係るプログラム解析装置及びプログラム解析方法が適用される電子制御装置の構成について説明する。
始めに、図1,2を参照して、本発明に係るプログラム解析装置及びプログラム解析方法が適用される電子制御装置の構成について説明する。
本発明に係るプログラム解析装置及びプログラム解析方法が適用される電子制御装置1は、図1に示すように、ラジオモジュール2(f0),携帯モジュール3(f1),音声制御モジュール4(f2),及びアンプモジュール5(f3)を主な構成要素として備え、ラジオユニット11及び携帯電話機12からの入力信号(スイッチ(SW)信号,ステータス信号)に応じてラジオ音と携帯電話機12の着信音との間でスピーカ13への音声出力信号を切り換えるように構成されている。
具体的には、この電子制御装置1は、スピーカ13がラジオ音を出力している時に携帯電話機12が着信状態になった場合、スピーカ13への音声出力信号をラジオ音から携帯電話機12の着信音に切り換える。一方、スピーカ13が携帯電話機12の着信音を出力している時に携帯電話機12が待受(又は通話)状態になった場合には、電子制御装置1は、スピーカ13への音声出力信号を携帯電話機12の着信音からラジオ音に切り換える。
本実施形態では、ラジオモジュール2,携帯モジュール3,及び音声制御モジュール4は、10[mS]の制御周期毎に実行される図2に示すタスクA内において順に実行され、アンプモジュール5は、100[mS]の制御周期毎に実行される図2に示すタスクB内において実行される。
ラジオモジュール2は、例えば図2に示すモジュールCのようなプログラム記述を有し、ラジオユニット11からのSW信号がオン(ON)状態である場合、音声制御モジュール4に対しラジオ音の出力要求信号V0を出力する。
携帯モジュール3は、例えば図2に示すモジュールDのようなプログラム記述を有し、携帯電話機12からのステータス信号が着信状態を示す場合、音声制御モジュール4に対し携帯電話機12の着信音の出力要求信号V1を出力する。
音声制御モジュール4は、例えば図2に示すモジュールEのようなプログラム記述を有し、ラジオモジュール2及び携帯モジュール3からの出力要求信号V0,V1に応じてアンプモジュール5に音声切換要求信号V3(ラジオ音切換/着信音切換)を出力する。また、音声制御モジュール4は、アンプモジュール5から出力される音声出力ステータス信号V2に応じて現在の出力制御状態を示す制御ステータスSTSの内容を更新する。
アンプモジュール5は、例えば図2に示すモジュールFのようなプログラム記述を有し、音声制御モジュール4からの音声切換要求信号V3にしたがってラジオ音と携帯電話機12の着信音との間でスピーカ13への音声出力信号を切り換える。またアンプモジュール5は、スピーカ13に出力している音声出力信号の種別を音声出力ステータス信号V2として音声制御モジュール4に出力する。
〔音声制御モジュールの状態遷移〕
次に、図3を参照して、上記音声制御モジュール4の音声制御状態の遷移について説明する。なお、図3中、符号S1〜S4は音声制御モジュール4の「状態」を表し、符号T1〜T4は状態の「遷移」を示す。また、「遷移」は、条件部と実行部により構成され、“/”の前部分が条件部,“/”の後部分が条件部に記載された条件が満足された場合に実行する処理の内容を示す実行部を表す。
次に、図3を参照して、上記音声制御モジュール4の音声制御状態の遷移について説明する。なお、図3中、符号S1〜S4は音声制御モジュール4の「状態」を表し、符号T1〜T4は状態の「遷移」を示す。また、「遷移」は、条件部と実行部により構成され、“/”の前部分が条件部,“/”の後部分が条件部に記載された条件が満足された場合に実行する処理の内容を示す実行部を表す。
いま、スピーカ13がラジオ音を出力している状態S1(“RadioOut”)にある時に携帯電話機12から着信音の出力要求信号V1がある(遷移T1の条件部である着信音の出力要求信号V1= =“携帯要求あり”になる)と、音声制御モジュール4は音声切り換え要求信号V3を携帯電話機12の着信音に切り換え(遷移T1の実行部であるV3=“着信音へ切り換え”を実行。音声切り換え要求信号V3に“着信音へ切り換え”を代入)、音声制御モジュール4の状態はスピーカ13からラジオ音を出力している状態S1から携帯電話機12の着信音の出力待ち状態S2(“WaitMobileOut”)に移行する。
次に、タスクBの次の実行時にアンプモジュール5が実行されると、アンプモジュール5は、音声出力信号を携帯電話機12の着信音に切り換え、音声出力ステータス信号V2を着信音出力中(遷移T2の条件部であるV2==“着信音出力中”)に設定する。次に、タスクAの次の実行時に音声制御モジュール4が実行されると、音声出力ステータス信号V2が着信音出力中になっているので、音声制御モジュール4の状態は着信音出力中の状態S3(“MobileOut”)に移行する。以後同様にして、携帯電話機12が着信状態から待受(又は通話)状態になった場合、音声制御モジュール4の状態は、ラジオ音の出力待ち状態S4(“WaitRadioOut”)を経由してスピーカ13からラジオ音を出力している状態S1(“RadioOut”)に戻る。
〔問題点〕
次に、上記電子制御装置1が抱える問題点について説明する。
次に、上記電子制御装置1が抱える問題点について説明する。
上述のように音声制御モジュール4の状態が状態S1〜S4間で遷移する場合、携帯電話機12の着信音がスピーカ13から出力されている状態では音声制御モジュール4の状態は状態S3に遷移し、ラジオ音がスピーカ13から出力されている状態では音声制御モジュール4の状態は状態S1に遷移し、電子制御装置1は設計者が意図した通りに動作する。
しかしながら、このような構成を有する電子制御装置1では、100[mS]の制御周期で実行されるアンプモジュール5が実行された後に携帯電話機12が待受(又は通話)状態から着信状態になり、次に再びアンプモジュール5が実行される前に携帯電話機12が再び待受(又は通話)状態に戻った場合には、電子制御装置1は設計者が意図しない動作をしてしまう。以下、図4を参照してこの点をより具体的に説明する。
いま、図4に示す時刻0[mS]において、スピーカ13からラジオ音が出力されている状態、すなわち着信音出力要求なし(着信音出力要求信号V1=携帯要求なし),音声出力ステータスはラジオ音出力中(音声出力ステータス信号V2=ラジオ音出力中),音声切り換え要求信号はラジオ音切り換え(音声切換要求信号V3=ラジオ音切り換え),及び音声制御モジュール5の制御ステータスSTSがラジオ音出力中の状態S1になっており、100[mS]の制御周期のタスクBが時刻T=10[mS]から100[mS]周期毎に実行される場合を考える。
この場合において、図4に示す時刻T=20[mS]に携帯電話機12が着信状態になった場合、次の10[mS]制御周期において、ラジオモジュール2が動作することにより着信音出力要求信号V1は着信音出力要求ありの状態に切り替わり、さらに携帯モジュール3が動作することにより音声切換要求信号V3は着信音への切換要求に切り替わることによって、音声制御モジュール4の制御ステータスSTSは着信音の出力待ち状態S2となる。
そしてこのような状態において、アンプモジュール5が次に実行される前(図4に示す時刻T=100[mS])に携帯電話機12が着信状態から待受(又は通話)状態に戻った場合、次の10[mS]制御周期において、携帯モジュール3が動作することにより着信音出力要求信号V1は着信音出力要求なしの状態に戻るが、音声出力ステータス信号V2はラジオ音出力中の状態であるために、音声制御モジュール4はラジオ音が出力されていると判断し、音声切換要求信号V3は着信音への切換要求の状態のままとなる。
次に、時刻110[mS]の時に100[mS]周期のタスクBが実行されると、スピーカ13への音声出力信号は携帯電話機12の着信音に切り替わり、音声出力ステータス信号V2は着信音出力中の状態となる。そしてこのような状態において次に10[mS]の制御周期のタスクAが実行されると、音声制御モジュール4の制御ステータスSTSは着信音出力中の状態S3となってしまう。
すなわち、着信音出力要求信号V1が着信音出力要求なしの状態になっているのにも係わらず、音声制御モジュール4の制御ステータスSTSは、着信音出力中の状態S3のままとなり、携帯電話機12が次に着信状態から待受(又は通話)状態に切り替わるまでラジオ音ステータス待ちの状態S4及びラジオ音出力中の状態S1に遷移しない状態(スピーカ13への出力音声信号が着信音のままの状態)になってしまう。
以上が不具合の内容にあるが、この不具合の原因は、音声制御モジュール4が10[mS]周期毎に更新される音声制御モジュール4の制御ステータスSTSと100[mS]周期毎に更新される音声出力ステータスV2に従って着信音出力中の状態に遷移したことによって生じる不具合である。すなわち、音声制御モジュール4が更新タイミングが異なる制御ステータスSTSと音声出力ステータスV2を入力として演算したことが不具合の原因である。
なお、従来のプログラム解析技術は、図5に示すように単に共有変数を抽出するだけであり、共有変数の更新タイミングに着目して共有変数を抽出していないために、不具合が発生する可能性があるプログラム中の演算箇所を正確に特定することができない。そこで、本発明に係るプログラム解析装置は、以下に示すように動作することにより、不具合が発生する可能性があるプログラム中の演算箇所を特定する。以下、図面を参照して、本発明の第1及び第2の実施形態となるプログラム解析装置の構成と動作について説明する。
[第1の実施形態]
始めに、図6〜図10を参照して、本発明の第1の実施形態となるプログラム解析装置の構成について説明する。
始めに、図6〜図10を参照して、本発明の第1の実施形態となるプログラム解析装置の構成について説明する。
本発明の第1の実施形態となるプログラム解析装置は、図6に示すように、タスク構成解析部21と、入力変数検出部22と、出力変数検出部23と、時間差演算モジュール検出部24とを主な構成要素として備える。なお、プログラム解析装置の各構成要素は各部の機能を記述したコンピュータプログラムをマイクロコンピュータが実行することにより実現される。そして、このような構成を有するプログラム解析装置は、以下に示すように動作することにより不具合が発生する可能性があるコンピュータプログラム中の演算箇所を特定する。
プログラム解析処理を実行する際、まず始めに、タスク構成解析部21が、解析対象となるソースプログラム25を読み込み、ソースプログラム25からタスク構成表26を作成,出力する。“タスク構成表”とは、他のモジュールから呼び出されることがないモジュールを頂点に配置し、頂点に配置したモジュールから直接的,間接的に呼ばれるモジュール群を頂点以下に配列した樹形図を意味する。
具体的には、図2に示すプログラムについては図7に示すようなタスク構成表が作成される。このタスク構成表では、モジュールTask_10msとモジュールTask_100msが他のモジュールから呼び出されることがないモジュールを示し、それぞれTask1(=タスクA)及びTask2(=タスクB)というタスク名が付けられている。また、モジュールTask_10msから直接的・間接的に呼び出されるモジュールはモジュールf0, f1, f2(=モジュールC,D,E)である。すなわち、タスクTask1を構成するモジュールはモジュールTask_10ms, f0, f1, f2である。また同様に、タスクTask2を構成するモジュールはモジュールTask_100ms, f3(=モジュールD)である。
次に、入力変数検出部22が、ソースプログラム25を読み込み、タスク構成解析部21により作成されたタスク構成表26を参照してソースプログラム25からモジュール毎の入力変数一覧27を作成,出力する。“入力変数一覧”とは、演算式の右辺にある変数、及び条件式で比較評価される変数を入力変数としてモジュール毎に示したものである。具体的には、図2に示すプログラムについては図8に示すような入力変数一覧が作成される。この入力変数一覧では、モジュールTask_10msとモジュールTask_100msについては入力変数が存在しない。一方、モジュールf0は"Radio_SW"、モジュールf1は"Calling", "PrevCall"、モジュールf2は"EventFlg", "V0", "V1", "V2", "STS"、モジュールf3は"V3"をそれぞれ入力変数とする。
次に、出力変数検出部23が、ソースプログラム25を読み込み、ソースプログラム25からモジュール毎の出力変数一覧28を作成,出力する。“出力変数一覧”とは、演算式の左辺にある変数を出力変数としてモジュール毎に示したものである。具体的には、図2に示すプログラムについては図9に示すような出力変数一覧が作成される。この出力変数一覧では、モジュールTask_10msとモジュールTask_100msについては出力変数が存在しない。一方、モジュールf0は"V0"、モジュールf1は"V1", "EventFlg", "PrevCall"、モジュールf2は"STS"、モジュールf3は"V2"をそれぞれ出力変数とする。
最後に、時間差演算モジュール検出部24が、入力変数検出部22及び出力変数検出部23により作成された入力変数一覧27と出力変数一覧28を参照して、入力変数の値を更新するタスクを特定すると共に、特定されたタスクが各モジュールにおいて同一であるか否かを比較判定する。そして、比較判定の結果、1つのモジュールについて特定されたタスクが全て同一である、又は出力変数が存在しない場合、時間差演算モジュール検出部24は、そのモジュールでは時間差演算は行われないと判断し、OKを出力する。一方、異なる複数のタスクから値が更新される場合には、時間差演算モジュール検出部24は、そのモジュールでは時間差演算が行われると判断し、警告(Warning)を出力する。
図2に示すプログラムについてのモジュール毎の警告の例を図10に示す。モジュールTask_10msとモジュールTask_100msについては出力変数が存在しないため、時間差演算モジュール検出部24は、時間差演算は行われないと判断し、OKを出力する。また、モジュールf0については入力変数の値を更新するタスクは特定できないため、時間差演算モジュール検出部24はOKを出力する。また、ワンチップマイコンのデジタルインプットのレジスタを読み込む場合には、ソフトウェアモジュールでは値を更新しないため、時間差演算モジュール検出部24はOKを出力する。
また、モジュールf1については、入力変数を更新するタスクはタスクTask1のみであるため、時間差演算モジュール検出部24はOKを出力する。また、モジュールf3については、入力変数の値を更新するタスクがタスクTask2のみであるため、時間差演算モジュール検出部24はOKを出力する。一方、モジュールf2については、入力変数の値を更新するタスクがタスクTask1とタスクTask2の2つであるため、時間差演算モジュール検出部24は警告を出力する。
このように、本発明の第1の実施形態となるプログラム解析装置1では、時間差演算モジュール検出部24が、複数のモジュール間で共通して用いられる変数のうち演算周期が異なる複数のタスクにより更新される変数を抽出し、抽出された変数を用いるモジュールのプログラム記述箇所を不具合が発生する可能性があるコンピュータプログラムの記述箇所と判定するので、不具合が発生する可能性があるプログラム中の演算箇所を正確に特定することができる。
[第2の実施形態]
次に、図11〜図20を参照して、本発明の第2の実施形態となるプログラム解析装置の構成について説明する。
次に、図11〜図20を参照して、本発明の第2の実施形態となるプログラム解析装置の構成について説明する。
本発明の第2の実施形態となるプログラム解析装置は、図11に示すように、タスク構成解析部21と、出力変数検出部23と、ステートメント番号割付部31と、ステートメント実行順検出部32と、双方向リンク検出部33と、算術式分析部34と、入力変数検出部35と、時間差演算ステートメント検出部36とを主な構成要素として備える。そして、このような構成を有するプログラム解析装置は、以下に示すように動作することにより、不具合が発生する可能性があるプログラム中の演算箇所を特定する。
プログラム解析処理を実行する際、まず始めに、タスク構成解析部21が、解析対象となるソースプログラム25を読み込み、ソースプログラム25からタスク構成表26を作成,出力する。次に、出力変数検出部23が、ソースプログラム25を読み込み、ソースプログラム25からモジュール毎の出力変数一覧28を作成,出力する。
次に、ステートメント番号割付部31が、ソースプログラム25からソースコードを一行ずつ読み込み、読み込んだソースコードを一行ずつ出力することにより図12に示すようなモジュール毎のステートメント番号割付一覧37を作成する。なお、ここではソースコード1行1行の文字解析は重要ではないので、簡略化のためソースコードは1行1ステップを前提条件として記述されている(1ステップとは1処理のことを意味し、条件文の場合、条件式で1ステップ、代入式で1ステップとなる)。また、ステートメント番号はソースコード毎に割り振るものとする。また、“ステートメント番号”とは、各モジュールの各ステートメントを識別するための固有の値である。なお、図2に示すプログラム例中のS1,S2,S3,…はそれぞれステートメント番号1,2,3に対応している。
次に、ステートメント実行順検出部32が、ソースプログラム25とステートメント番号割付一覧37を読み込み、ステートメントの実行順序を示す図13に示すようなステートメント実行順一覧38をモジュール毎に作成する。次に、双方向リンク検出部33が、ステートメント実行順検出部32により作成されたステートメント実行順一覧38を用いてステートメント実行順一覧38に前ステートメント番号と全前ステートメント番号を追加した図14に示すような双方向リンクリスト39を作成する。
なお、“前ステートメント”とは、各ステートメントの1ステップ前に実行されるステートメントに割り振られたステートメント番号を意味する。また、“全前ステートメント番号”とは、各ステートメントを実行する前に実行された全てのステートメントのステートメントに割り振られた番号を意味する。具体的には、図14に示す双方向リンクリスト39では、ステートメント番号1の行は、1ステップ前に実行される可能性があるステートメントは存在しない。この場合、双方向リンク検出部33は、前ステートメント番号及び全前ステートメント番号に“−”を出力する。一方、ステートメント番号2の行は、この1ステップ前にステートメント番号1のステートメントが実行されるので、双方向リンク検出部33は前ステートメント番号及び全前ステートメント番号に“1”を出力する。また、ステートメント番号3の行は、この1ステップ前にステートメント番号2が実行されるので、双方向リンク検出部33は、前ステートメント番号に“2”、全前ステートメント番号に“2,1”を出力する。
次に、算術式分析部34が、双方向リンク検出部33により作成された双方向リンクリスト39を読み込み、双方向リンクリスト39にステートメント毎の参照変数と更新変数を追加した図15に示すようなリスト40を作成する。なお、“参照変数”とは、各ステートメントに入力(又は値の参照)として与えられる変数を意味し、更新変数とは、各ステートメントで出力(又は値の更新)として与えられる変数を意味する。すなわち、ステートメントが条件式である場合、条件式で参照される変数が参照変数となる。また、ステートメントが演算式である場合には、代入演算子“=”の右辺の変数が参照変数となり、左辺の変数が更新変数となる。また、ステートメント中に参照変数若しくは更新変数が存在しない場合には、算術式分析部34は“−”を出力する。算術式分析部34の具体的な動作については後述する。
次に、入力変数検出部35が、算術式分析部34により作成されたリスト40を読み込み、リスト40に各ステートメントの入力変数を追加した図16に示すような入力変数リスト41を作成する。なお、“入力変数”とは、更新変数が存在するステートメントの全前ステートメント番号に対応するステートメント中の参照変数のことを意味する。なお、入力変数検出部35の具体的な動作については後述する。
そして最後に、時間差演算ステートメント検出部36が、出力変数検出部23及び入力変数検出部35により作成された出力変数一覧28と入力変数リスト41を参照して、時間差演算が行われるステートメントを特定し、特定されたステートメントについて警告(Warning)を図17に示すような警告一覧42として出力する。なお、時間差演算ステートメント検出部36の具体的な動作については後述する。
〔算術式分析部の動作〕
次に、図18を参照して、算術式分析部34の動作について詳しく説明する。
次に、図18を参照して、算術式分析部34の動作について詳しく説明する。
図18に示すフローチャートは、双方向リンクリスト39が作成されるのに応じて開始となり、リスト作成処理はステップS1の処理に進む。ステップS1の処理では、算術式分析部34が、ステートメント番号をカウントするプログラムカウンタの値を1に設定する。これにより、ステップS1の処理は完了し、リスト作成処理はステップS2の処理に進む。
ステップS2の処理では、算術式分析部34が、プログラムカウンタの値に対応するステートメント番号が割り付けられたステートメント本文を検索する。これにより、ステップS2の処理は完了し、リスト作成処理はステップS3の処理に進む。
ステップS3の処理では、算術式分析部34が、ステップS2の処理により検索されたステートメント本文中に参照変数があるか否かを判別する。そして、判別の結果、ステートメント本文中に参照変数がある場合、算術式分析部34は、ステップS5の処理としてプログラムカウンタの値に対応するリスト40の参照変数列に参照変数を出力した後、リスト作成処理をステップS6の処理に進める。一方、ステートメント本文中に参照変数がない場合には、算術式分析部34は、ステップS4の処理としてプログラムカウンタの値に対応するリスト40の参照変数列に“−”を出力した後、リスト作成処理をステップS6の処理に進める。
ステップS6の処理では、算術式分析部34が、ステップS2の処理により検索されたステートメント本文中に更新変数があるか否かを判別する。そして、判別の結果、ステートメント本文中に更新変数がある場合、算術式分析部34は、ステップS8の処理としてプログラムカウンタの値に対応するリスト40の更新変数列に更新変数を出力した後、リスト作成処理をステップS9の処理に進める。一方、ステートメント本文中に更新変数がない場合には、算術式分析部34は、ステップS7の処理としてプログラムカウンタの値に対応するリスト40の参照変数列に“−”を出力した後、リスト作成処理をステップS9の処理に進める。
ステップS9の処理では、算術式分析部34が、プログラムカウンタの値が最後のステートメント番号の値であるか否かを判別する。そして判別の結果、プログラムカウンタの値が最後のステートメント番号の値でない場合、算術式分析部34は、全てのステートメント本文について処理を終了していないと判断し、ステップS10の処理としてプログラムカウンタの値を1増数した後、リスト作成処理をステップS2の処理に戻す。一方、プログラムカウンタの値が最後のステートメント番号の値である場合には、算術式分析部34は、全てのステートメント本文について処理が終了したと判断し、一連のリスト作成処理を終了する。
〔入力変数検出部の動作〕
次に、図19を参照して、入力変数検出部35の動作について詳しく説明する。
次に、図19を参照して、入力変数検出部35の動作について詳しく説明する。
図19に示すフローチャートは、リスト40が作成されるのに応じて開始となり、リスト作成処理はステップS21の処理に進む。ステップS21の処理では、入力変数検出部35が、ステートメント番号をカウントするプログラムカウンタの値を1に設定する。これにより、ステップS21の処理は完了し、リスト作成処理はステップS22の処理に進む。
ステップS22の処理では、入力変数検出部35が、プログラムカウンタの値に対応するステートメント番号が割り付けられたステートメント本文の更新変数を検索する。そして検索の結果、更新変数がない場合、入力変数検出部35はリスト作成処理をステップS28の処理に進める。一方、更新変数がある場合には、入力変数検出部35はリスト作成処理をステップS23の処理に進める。
ステップS23の処理では、入力変数検出部35が、プログラムカウンタの値に対応するステートメント番号が割り付けられたステートメント本文の全前ステートメント番号を検索する。これにより、ステップS23の処理は完了し、リスト作成処理はステップS24の処理に進む。
ステップS24の処理では、入力変数検出部35が、ステップS23の処理により全前ステートメント番号が検索されたか否かを判別する。そして判別の結果、全前ステートメント番号が検索されなかった場合、入力変数検出部35はリスト作成処理をステップS28の処理に進める。一方、全前ステートメント番号が検索された場合には、入力変数検出部35はリスト作成処理をステップS25の処理に進める。
ステップS25の処理では、入力変数検出部35が、ステップS23の処理により検索された全前ステートメント番号が割り付けられたステートメント本文中の参照変数を検索する。これにより、ステップS25の処理は完了し、リスト作成処理はステップS26の処理に進む。
ステップS26の処理では、入力変数検出部35が、ステップS25の処理により参照変数が検索されたか否かを判別する。そして判別の結果、参照変数が検索されなかった場合、入力変数検出部35はリスト作成処理をステップS28の処理に進める。一方、参照変数が検索された場合には、入力変数検出部35はリスト作成処理をステップS27の処理に進める。
ステップS27の処理では、入力変数検出部35が、プログラムカウンタの値に対応する入力変数リスト41の入力変数列に参照変数を出力する。これにより、ステップS27の処理は完了し、リスト作成処理はステップS28の処理に進む。
ステップS28の処理では、入力変数検出部35が、プログラムカウンタの値が最後のステートメント番号の値であるか否かを判別する。そして判別の結果、プログラムカウンタの値が最後のステートメント番号の値でない場合、入力変数検出部35は、全てのステートメント本文について処理を終了していないと判断し、ステップS29の処理としてプログラムカウンタの値を1増数した後、リスト作成処理をステップS2の処理に戻す。一方、プログラムカウンタの値が最後のステートメント番号の値である場合には、入力変数検出部35は、全てのステートメント本文について処理が終了したと判断し、一連のリスト作成処理を終了する。
〔時間差演算ステートメント検出部の動作〕
最後に、図18を参照して、時間差演算ステートメント検出部36の動作について詳しく説明する。
最後に、図18を参照して、時間差演算ステートメント検出部36の動作について詳しく説明する。
図18に示すフローチャートは、入力変数リスト41が作成されるのに応じて開始となり、解析処理はステップS31の処理に進む。ステップS31の処理では、時間差演算ステートメント検出部36が、ステートメント番号をカウントするプログラムカウンタの値を1に設定する。これにより、ステップS31の処理は完了し、解析処理はステップS32の処理に進む。
ステップS32の処理では、時間差演算ステートメント検出部36が、入力変数リスト41の中からプログラムカウンタの値に対応するステートメント番号を検索する。これにより、ステップS32の処理は完了し、解析処理はステップS33の処理に進む。
ステップS3の処理では、時間差演算ステートメント検出部36が、ステップS2の処理によりプログラムカウンタの値に対応するステートメント番号が検索されたか否かを判別する。そして、判別の結果、ステートメント番号が検索されなかった場合、時間差演算ステートメント検出部36は解析処理をステップS39の処理に進める。一方、ステートメント番号が検索された場合には、時間差演算ステートメント検出部36は解析処理をステップS34の処理に進める。
ステップS34の処理では、時間差演算ステートメント検出部36が、出力変数一覧28から入力変数リスト41の入力変数が出力変数となっているタスクを検索する。これにより、ステップS34の処理は完了し、解析処理はステップS35の処理に進む。
ステップS35の処理では、時間差演算ステートメント検出部36が、ステップS34の処理により検索されたタスクを図17に示す警告一覧42の入力変数の値を更新するタスク欄に出力する。これにより、ステップS35の処理は完了し、解析処理はステップS36の処理に進む。
ステップS36の処理では、時間差演算ステートメント検出部36が、ステップS34の処理により検索されたタスクが全て同じタスクであるか否かを判別する。そして判別の結果、全て同じタスクでない場合、時間差演算ステートメント検出部36は、ステップS37の処理として警告一覧42の対応する欄に警告(Warning)を出力した後、解析処理をステップS39の処理に進める。一方、全て同じタスクである場合には、時間差演算ステートメント検出部36は、ステップS38の処理として警告一覧42の対応する欄にOKを出力した後、解析処理をステップS39の処理に進める。
ステップS39の処理では、時間差演算ステートメント検出部36が、ステートメント番号をカウントするプログラムカウンタの値が最後のステートメント番号の値であるか否かを判別する。そして判別の結果、プログラムカウンタの値が最後のステートメント番号の値でない場合、時間差演算ステートメント検出部36は、全てのステートメント本文について処理を終了していないと判断し、ステップS40の処理としてプログラムカウンタの値を1増数した後、解析処理をステップS33の処理に戻す。一方、プログラムカウンタの値が最後のステートメント番号の値である場合には、時間差演算ステートメント検出部36は、全てのステートメント本文について処理が終了したと判断し、一連の解析処理を終了する。
このように、本発明の第2の実施形態となるプログラム解析装置1では、時間差演算ステートメント検出部36が、複数のモジュール間で共通して用いられる入力変数のうち演算周期が異なる複数のタスクにより更新される入力変数を抽出し、抽出された入力変数を用いるモジュールのプログラム記述箇所を不具合が発生する可能性があるコンピュータプログラムの記述箇所と判定するので、不具合が発生する可能性があるプログラム中の演算箇所を正確に特定することができる。
以上、本発明者らによってなされた発明を適用した実施の形態について説明したが、この実施の形態による本発明の開示の一部をなす論述及び図面により本発明は限定されることはない。すなわち、この実施の形態に基づいて当業者等によりなされる他の実施の形態、実施例及び運用技術等は全て本発明の範疇に含まれることは勿論であることを付け加えておく。
1:電子制御装置
2:ラジオモジュール
3:携帯モジュール
4:音声制御モジュール
5:アンプモジュール
11:ラジオユニット
12:携帯電話機
13:スピーカ
21:タスク構成解析部
22:入力変数検出部
23:出力変数検出部
24:時間差演算モジュール検出部
25:ソースプログラム
26:タスク構成表
27:入力変数一覧
28:出力変数一覧
31:ステートメント番号割付部
32:ステートメント実行順検出部
33:双方向リンク検出部
34:算術式分析部
35:入力変数検出部
36:時間差演算ステートメント検出部
37:ステートメント番号割付一覧
38:ステートメント実行順一覧
39:双方向リンクリスト
40:リスト
41:入力変数リスト
2:ラジオモジュール
3:携帯モジュール
4:音声制御モジュール
5:アンプモジュール
11:ラジオユニット
12:携帯電話機
13:スピーカ
21:タスク構成解析部
22:入力変数検出部
23:出力変数検出部
24:時間差演算モジュール検出部
25:ソースプログラム
26:タスク構成表
27:入力変数一覧
28:出力変数一覧
31:ステートメント番号割付部
32:ステートメント実行順検出部
33:双方向リンク検出部
34:算術式分析部
35:入力変数検出部
36:時間差演算ステートメント検出部
37:ステートメント番号割付一覧
38:ステートメント実行順一覧
39:双方向リンクリスト
40:リスト
41:入力変数リスト
Claims (6)
- 演算周期が異なる複数のモジュールにより構成され、当該モジュールが必要な演算周期に応じて演算周期が異なる複数のタスクにグループ分けされているコンピュータプログラムを解析するためのプログラム解析装置であって、
前記複数のモジュール間で共通して用いられる変数を共有変数として抽出する第1変数抽出手段と、
前記第1変数抽出手段により抽出された共有変数のうち演算周期が異なる複数のタスクにより更新される変数を抽出する第2変数抽出手段と、
前記第2変数抽出手段により抽出された変数を用いるモジュールのプログラム記述箇所を不具合が発生する可能性があるコンピュータプログラムの記述箇所と判定する判定手段と
を備えることを特徴とするプログラム解析装置。 - 請求項1に記載のプログラム解析装置であって、前記第2変数抽出手段は、各モジュールの入力変数と出力変数を検出し、検出された入力変数と出力変数とを比較することにより演算周期が異なる複数のタスクにより更新される変数を抽出することを特徴とするプログラム解析装置。
- 請求項2に記載のプログラム解析装置であって、前記第2変数抽出手段は、コンピュータプログラムの上流側の代入式に遡って入力変数を検出することを特徴とするプログラム解析装置。
- 請求項2又は請求項3に記載のプログラム解析装置であって、前記第2変数抽出手段はコンピュータプログラムの上流側の条件判定文に遡って入力変数を検出することを特徴とするプログラム解析装置。
- 演算周期が異なる複数のモジュールにより構成され、当該モジュールが必要な演算周期に応じて演算周期が異なる複数のタスクにグループ分けされているコンピュータプログラムを解析するためのプログラム解析方法であって、
前記複数のモジュール間で共通して用いられる変数を共有変数として抽出するステップと、
抽出された共有変数のうち演算周期が異なる複数のタスクにより更新される変数を抽出するステップと、
抽出された複数のタスクにより更新される変数を用いるモジュールのプログラム記述箇所を不具合が発生する可能性があるコンピュータプログラムの記述箇所と判定出力するステップと
を有することを特徴とするプログラム解析方法。 - 演算周期が異なる複数のモジュールにより構成され、当該モジュールが必要な演算周期に応じて演算周期が異なる複数のタスクにグループ分けされているコンピュータプログラムを解析するためのプログラム解析装置であって、
モジュール毎の入力変数を検出する入力変数検出部と、
モジュール毎の出力変数を検出する出力変数検出部と、
前記入力変数検出部及び前記出力変数検出部により検出された入力変数と出力変数を参照して入力変数の値が異なる複数のタスクにより更新されるか否かをモジュール毎に判定し、入力変数の値が異なる複数のタスクにより更新されるモジュールのプログラム記述箇所を不具合が発生する可能性があるコンピュータプログラムの記述箇所と判定出力する時間差演算モジュール検出部と
を備えることを特徴とするプログラム解析装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006272454A JP2008090696A (ja) | 2006-10-04 | 2006-10-04 | プログラム解析装置及びプログラム解析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006272454A JP2008090696A (ja) | 2006-10-04 | 2006-10-04 | プログラム解析装置及びプログラム解析方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008090696A true JP2008090696A (ja) | 2008-04-17 |
Family
ID=39374753
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006272454A Pending JP2008090696A (ja) | 2006-10-04 | 2006-10-04 | プログラム解析装置及びプログラム解析方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008090696A (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014112316A1 (ja) * | 2013-01-21 | 2014-07-24 | 日産自動車株式会社 | フラグアクセス不具合検査装置、フラグアクセス不具合検査方法、フラグアクセス不具合検査プログラム |
WO2014112303A1 (ja) * | 2013-01-21 | 2014-07-24 | 日産自動車株式会社 | データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム |
WO2014112317A1 (ja) * | 2013-01-21 | 2014-07-24 | 日産自動車株式会社 | 変数アクセス一貫性検査装置、変数アクセス一貫性検査方法、変数アクセス一貫性検査プログラム |
WO2014112304A1 (ja) * | 2013-01-21 | 2014-07-24 | 日産自動車株式会社 | 排他制御検査装置、排他制御検査方法、排他制御検査プログラム |
JP2014229074A (ja) * | 2013-05-22 | 2014-12-08 | 株式会社デンソー | ソフトウェアの開発支援装置、開発支援方法およびプログラム |
-
2006
- 2006-10-04 JP JP2006272454A patent/JP2008090696A/ja active Pending
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104937558A (zh) * | 2013-01-21 | 2015-09-23 | 日产自动车株式会社 | 变量访问一贯性检查装置、变量访问一贯性检查方法、变量访问一贯性检查程序 |
WO2014112303A1 (ja) * | 2013-01-21 | 2014-07-24 | 日産自動車株式会社 | データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム |
WO2014112317A1 (ja) * | 2013-01-21 | 2014-07-24 | 日産自動車株式会社 | 変数アクセス一貫性検査装置、変数アクセス一貫性検査方法、変数アクセス一貫性検査プログラム |
WO2014112304A1 (ja) * | 2013-01-21 | 2014-07-24 | 日産自動車株式会社 | 排他制御検査装置、排他制御検査方法、排他制御検査プログラム |
CN104885060A (zh) * | 2013-01-21 | 2015-09-02 | 日产自动车株式会社 | 数据漏更新检查装置、数据漏更新检查方法、数据漏更新检查程序 |
WO2014112316A1 (ja) * | 2013-01-21 | 2014-07-24 | 日産自動車株式会社 | フラグアクセス不具合検査装置、フラグアクセス不具合検査方法、フラグアクセス不具合検査プログラム |
CN104937559A (zh) * | 2013-01-21 | 2015-09-23 | 日产自动车株式会社 | 标志访问缺陷检查装置、标志访问缺陷检查方法以及标志访问缺陷检查程序 |
JP5962779B2 (ja) * | 2013-01-21 | 2016-08-03 | 日産自動車株式会社 | フラグアクセス不具合検査装置、フラグアクセス不具合検査方法、フラグアクセス不具合検査プログラム |
JP5979250B2 (ja) * | 2013-01-21 | 2016-08-24 | 日産自動車株式会社 | 排他制御検査装置、排他制御検査方法、排他制御検査プログラム |
JP6015778B2 (ja) * | 2013-01-21 | 2016-10-26 | 日産自動車株式会社 | 変数アクセス一貫性検査装置、変数アクセス一貫性検査方法、変数アクセス一貫性検査プログラム |
CN104937559B (zh) * | 2013-01-21 | 2016-10-26 | 日产自动车株式会社 | 标志访问缺陷检查装置和标志访问缺陷检查方法 |
CN104937558B (zh) * | 2013-01-21 | 2016-11-09 | 日产自动车株式会社 | 变量访问一贯性检查装置、变量访问一贯性检查方法 |
JP2014229074A (ja) * | 2013-05-22 | 2014-12-08 | 株式会社デンソー | ソフトウェアの開発支援装置、開発支援方法およびプログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9218052B2 (en) | Framework for voice controlling applications | |
US20090150814A1 (en) | Dynamic update of a user interface based on collected user interactions | |
CN103593230A (zh) | 移动终端的后台任务控制方法及移动终端 | |
US8176302B2 (en) | Data processing arrangement comprising a reset facility | |
JP2008090696A (ja) | プログラム解析装置及びプログラム解析方法 | |
CN111309294B (zh) | 一种业务处理方法、装置及电子设备和存储介质 | |
CN107203465A (zh) | ***接口测试方法及装置 | |
CN112597013A (zh) | 一种在线开发以及调试方法及装置 | |
KR20140019167A (ko) | 음성 안내 기능을 제공하기 위한 방법 및 그 전자 장치 | |
CN115686631B (zh) | 一种基于知识基的随机指令生成方法、装置及存储介质 | |
CN114610387A (zh) | 一种分支预测方法、处理器及电子设备 | |
JP2002342114A (ja) | トレースデータ採取可能なプロセッサ | |
JP2014119872A (ja) | 情報処理装置、情報処理装置の制御方法およびコンピュータプログラム | |
JPH1031595A (ja) | シミュレーション装置及びシミュレーション方法 | |
CN111045641B (zh) | 一种电子终端及语音识别方法 | |
CN114237557A (zh) | 调试逻辑***设计的方法、电子设备及存储介质 | |
CN114610324A (zh) | 一种二进制翻译方法、处理器及电子设备 | |
CN107656828A (zh) | 一种检测程序运行偏离路径的方法和装置 | |
KR100330504B1 (ko) | 위치 지시자 자동 이동 제어 방법 | |
CN109918132A (zh) | 一种指令安装方法、装置、电子设备及存储介质 | |
CN113377677B (zh) | 一种单元测试方法及装置 | |
JP2004030228A (ja) | Lsiシミュレータ及びシミュレーション方法 | |
KR100204571B1 (ko) | 마아크로 제어기에 의한 이벤트 신호 제어 회로 | |
CN118093954A (zh) | 自动化设备的数据处理方法、装置、设备及存储介质 | |
JPH08286949A (ja) | プログラム情報表示装置 |