JP5865091B2 - ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム - Google Patents

ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム Download PDF

Info

Publication number
JP5865091B2
JP5865091B2 JP2012010333A JP2012010333A JP5865091B2 JP 5865091 B2 JP5865091 B2 JP 5865091B2 JP 2012010333 A JP2012010333 A JP 2012010333A JP 2012010333 A JP2012010333 A JP 2012010333A JP 5865091 B2 JP5865091 B2 JP 5865091B2
Authority
JP
Japan
Prior art keywords
instruction
source code
inspection
conditional branch
satisfied
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.)
Expired - Fee Related
Application number
JP2012010333A
Other languages
English (en)
Other versions
JP2013149164A (ja
Inventor
成沢 文雄
文雄 成沢
祐 石郷岡
祐 石郷岡
統宙 月舘
統宙 月舘
渉 永浦
永浦  渉
櫻井 康平
康平 櫻井
正裕 松原
正裕 松原
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.)
Hitachi Astemo Ltd
Original Assignee
Hitachi Automotive Systems 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 Hitachi Automotive Systems Ltd filed Critical Hitachi Automotive Systems Ltd
Priority to JP2012010333A priority Critical patent/JP5865091B2/ja
Priority to PCT/JP2013/050503 priority patent/WO2013108730A1/ja
Publication of JP2013149164A publication Critical patent/JP2013149164A/ja
Application granted granted Critical
Publication of JP5865091B2 publication Critical patent/JP5865091B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • G06F8/4435Detection or removal of dead or redundant code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis

Description

本発明は、ソフトウェアのソースコードを検証する作業を支援する技術に関する。
自動車などの制御装置は、マイクロコントローラ(以下マイコンと表記)を用いて制御動作を実行する。マイコンに搭載されるソフトウェアは、一般的には制御処理を実施するアプリケーションプログラムとデータ入出力を実施するデバイスドライバやオペレーティングシステム(OS)などによって構成されている。車両制御装置は、車両乗員の安全性に直接関わる制御を実施するため、高い安全性を要求されている。そのため、制御装置の故障診断を実施し、故障が検出された場合には制御装置を安全な状態へ遷移させる、フェールセーフ処理が用いられている。
また、近年制御の高度化と規模の増大にともない、車両の安全に関わる入出力装置の数が増大し、その診断ソフトウェアの開発工数が課題となっている。
車両制御に用いるソフトウェアは、多くの製品バリエーションに対応するため、複数の製品に亘って再利用することができるように構成されており、これによりソフトウェアの開発効率を高めている。
例えば、ソフトウェアが搭載される環境に依拠して処理内容が異なる部分については、モジュールとして切り離しておき、環境に依拠せず共通する部分を再利用することができるように構成する。また、環境に依拠する部分を切り離したモジュールについても、実行時に引き渡すパラメータを変えることによって各環境に対応した処理を実行することができるように構成し、再利用性を高めている。
上記のようにパラメータによって動作を変えるソフトウェアモジュールは、環境に応じて様々なパラメータを受け取る場合があるため、当該モジュールが想定していないパラメータを受け取る可能性がある。この場合、想定外のパラメータによって当該モジュールが想定外の動作を引き起こさないようにするため、受け取ったパラメータに関連する動作を実行する前に、そのパラメータが適正であるか否かを判定する必要がある。
このようなパラメータの事前検証を実施するためのソフトウェア設計手法として、「防御的プログラミング」と呼ばれる手法がある。防御的プログラミングとは、当該モジュールが想定外の動作条件で呼び出されるかもしれない、との考えに立ち、モジュールが目的とする機能を実施する前に動作条件をチェックし、条件に合致しない場合にはエラー処理などの例外処理を実施する設計手法である。
下記特許文献1には、エンジン制御用ソフトウェアの動作検証に関する技術として、ソースコードにアサーション命令を挿入することにより、ソフトウェアの動作を検証する技術が記載されている。
特開2008−276556号公報
スティーブ・マコネル著,コードコンプリート第2版, 日経BPソフトプレス,2005年
車両制御のようにリアルタイム制御を実施する必要があるソフトウェアは、安全の観点から制御処理の内容が正しいことが要求されるのはもちろんであるが、その制御処理が適正なタイミングで実施されることも同時に求められる。そのため、数マイクロ秒程度の僅かな処理遅延も許されない場合も多い。
一方、上述の防御的プログラミングを採用したソフトウェアモジュールは、想定外のパラメータを用いて呼び出された場合にも想定外の動作をしないように、条件分岐命令を用いてパラメータが所定の条件に合致しているか否かを判定し、条件に合致する場合のみ処理を実行するように構成される。そのため、条件分岐命令に係る条件判定、条件に合致しないときの処理等を記述する必要があり、ソースコードの量が増大する傾向がある。その結果、プログラム容量の増大と実行速度の低下を招きやすい。
本発明は、上記のような課題を解決するためになされたものであり、高い安全性と再利用性を備え、プログラムサイズを抑えることのできるソフトウェアを得るためのソフトウェア検証支援技術を得ることを目的とする。
本発明に係るソフトウェア検証支援装置は、条件分岐命令が記述している条件が必ず成立する場合は、条件が成立したときに実行される命令をソースコード内に残した上で、条件が成立しなかったときに実行される命令をソースコードから削除する。
本発明に係るソフトウェア検証支援装置によれば、不要な条件分岐命令をソースコードから削除することができるので、元のソースコードの再利用性を確保しつつプログラムサイズを抑えることができる。また、必ず成立する条件分岐命令を削除するので、想定外のパラメータが条件分岐命令に引き渡されて不測の結果を生じることはなく、安全性を確保することができる。
本発明に係るソフトウェア検証支援装置が対象とするソフトウェアを搭載する自動車エンジン制御システムの構成例を示す図である。 本発明に係るソフトウェア検証支援装置100の構成を示す図である。 ソフトウェア検証支援装置100が検証対象とするソースコードの例である。 図3のソースコードに検査命令を挿入した例を示す図である。 検査命令生成部120が条件分岐命令1711から条件式部分を抽出する際に用いる条件式パターン1720の例を示す図である。 検査命令生成部120が生成する検査命令のパターンを示す図である。 ソフトウェア検査支援装置100が条件分岐命令を削除した後のソースコード例を示す図である。 ソフトウェア検査支援装置100が検査命令を生成する処理の動作フローを示す図である。 ソフトウェア検査支援装置100がソースコードから条件分岐命令を削除する処理の動作フローを示す図である。 実施形態2において検査実行部140が検査対象のソースコードをコンパイルして実行する際の動作フローである。
<実施の形態1>
図1は、本発明に係るソフトウェア検証支援装置が対象とするソフトウェアを搭載する自動車エンジン制御システムの構成例を示す図である。コントロールユニット200は、エンジンの動作を制御する制御ソフトウェアを実行する装置であり、マイクロコントローラ210、駆動回路220、通信回路230、信号入出力回路240を備える。
信号入出力回路240は、加速度センサ311とヨーレートセンサ312からそれぞれ検出結果を取得し、マイクロコントローラ210に出力する。駆動回路220は、マイクロコントローラ210からの指示にしたがってアクチュエータ320を駆動制御し、これによりエンジンの動作を制御する。通信回路230は、通信線350を介して診断端末330および制御装置340と通信する。
診断端末330は、通信線350を介してコントロールユニット200を診断するための端末である。制御装置340は、コントロールユニット200とは別の制御処理を実施する装置である。
マイクロコントローラ210は、入力回路211、演算装置212、RAM(Random Access Memory)213、ROM(Read Only Memory)214、出力回路215、通信制御装置216を備える。
入力回路211は、信号入出力回路240から各センサの検出結果を受け取り、演算装置212に出力する。演算装置212は、制御処理を記述した制御ソフトウェアを実行する。RAM213は、演算装置212が制御ソフトウェアを実行する際に一時的に使用するデータなどを格納する。ROM214は、演算装置212が実行する制御ソフトウェアを格納している。出力回路215は、駆動回路220に対して制御信号を出力する。通信制御装置216は、通信回路230を介して外部と通信する。
上述の加速度センサ311、ヨーレートセンサ312は、コントロールユニット200に接続されるセンサの1例でありその他のセンサ、例えば温度、電流、その他の物理量を検知するセンサの検出結果を用いて車両を制御するコントロールユニットについても、本発明に係るソフトウェア検証支援装置が対象とするソフトウェアを実行することができることはいうまでもない。
図2は、本発明に係るソフトウェア検証支援装置100の構成を示す図である。ソフトウェア検証支援装置100は、制御部110、検査命令生成部120、検査命令挿入部130、検査実行部140、検査結果取得部150、条件分岐削除部160、記憶部170を備える。
制御部110は、例えばCPU(Central Processing Unit)などの演算装置で構成され、各機能部を制御する。
検査命令生成部120は、ソフトウェアソースコード内の条件分岐命令(典型的には、if−else文)が必ず成立するか否かを検査するための検査命令を生成する。例えば後述するassert命令を、検査命令として用いることができる。検査命令挿入部130は、ソースコード内の条件分岐命令の直前または直後に、検査命令生成部120が生成した検査命令を挿入する。
検査実行部140は、検査命令を挿入したソースコードをコンパイルして実行し、その結果を記憶部170に格納する。検査命令は、検査実行部140が実行すると、条件分岐命令内の条件式が成立するか否かを示すログを記憶部170に格納するように構成されている。したがって、検査実行部140が検査命令を含むソースコードをコンパイルして実行すると、条件分岐命令内の条件式が成立するか否かを示すログが記憶部170に格納される。
検査結果取得部150は、検査実行部140の実行結果を記憶部170から取得し、上述のログにしたがって、条件分岐命令内の条件式が必ず成立するか否かを判定する。
条件分岐削除部160は、条件分岐命令内の条件式が必ず成立する場合は、条件が成立したときに実行される命令(if文内に含まれる命令)をソースコード内に残した上で、条件が成立しなかったときに実行される命令(else文に含まれる命令)をソースコードから削除する。条件分岐命令内の条件式が必ずしも成立しない場合は、上記いずれもソースコード内に残す。
記憶部170は、ソースコード記憶部171、条件式パターン記憶部172、検査命令記憶部173、検査対象ソースコード記憶部174、検査結果記憶部175、資源制約条件記憶部176を備える。
ソースコード記憶部171は、ソフトウェア検査支援装置100が検査対象とするソースコードを記憶する。条件式パターン記憶部172は、検査命令生成部120が検査命令を生成する際に、条件分岐命令から条件式部分を抽出するために用いる抽出パターンを記憶する。詳細は後述する。検査命令記憶部173は、検査命令生成部120が生成した検査命令を記憶する。検査対象ソースコード記憶部174は、検査命令挿入部130が検査命令を挿入したソースコードを記憶する。検査結果記憶部175は、検査実行部140が検査命令を挿入したソースコードをコンパイルして実行した結果を記憶する。資源制約条件記憶部176は、検査実行部140がソースコードをコンパイルして実行する際に必要となるハードウェアリソースなどの制約条件を記述したデータを記憶する。
以上、ソフトウェア検証支援装置100の構成について説明した。次に、ソースコードに検査命令を挿入する処理について、ソースコードの例とともに説明する。
図3は、ソフトウェア検証支援装置100が検証対象とするソースコードの例である。本ソースコードには、条件分岐命令(if{)1711、条件不成立時命令(else{)1712、条件分岐終了命令(})1713が含まれている。
本ソースコードでは、条件分岐命令1711に含まれる部分において、サイズLINITHの配列を確保し、この配列の最初の要素からパラメータiParamが指定する番号の要素までを初期化している。これらの処理は、配列を初期化すべきサイズがソフトウェアを実行する環境によって異なるため、これをパラメータiParamとして汎用化し、任意サイズの配列を初期化することができるように構成して、環境に依拠しない再利用可能なモジュールとすることを図ったものである。
これらの処理においては、パラメータiParamが配列サイズLINITH未満であることを前提としているため、条件分岐命令1711によって、LINITH以上の値を有するiParamを排除している。すなわち、本ソースコードが作成された時点では、いかなる環境を対象として本ソースコードが用いられるか確定していないため、ソフトウェアの動作を不安定にしないように、不確定なパラメータをあらかじめチェックするようにしたものである。これにより、本ソースコードの再利用性を確保しつつ、動作の安全性を確保することができる。このような手法を、前述の防御的プログラミングと呼ぶ。
一方、本ソースコードを利用する環境が確定した以降は、パラメータiParamの値が実行時にとり得る値も確定している場合がある。このような場合には、条件分岐命令1711、条件不成立時命令1712、条件分岐終了命令1713は冗長な記載となり、却ってソフトウェア容量を不要に増大させる原因となる。
そこで本発明では、図3に例示するような条件分岐命令のうち、条件式が必ず成立するものについては、条件分岐命令1711、条件不成立時命令1712、および条件分岐終了命令1713をソースコードから削除し、さらには条件不成立時命令1712内に含まれるエラー処理などの不要な命令も併せて削除することとした。
具体的には、ソフトウェア検証支援装置100は、本ソースコードを利用する環境に固有のパラメータを組み込んだ上で、本ソースコードをコンパイルして実際に実行し、条件分岐命令1711が記述している条件式が実際に成立するか否かを検証する。以下、そのための具体的な手法を説明する。
なお、本ソースコードを利用する環境に固有のパラメータは、例えばC言語のヘッダファイルなどのデータファイルに記述することもできるし、環境固有のパラメータを一括して記述したソースコードを本ソースコードとともにコンパイルして実行モジュール内に組み込むことによって本ソースコード内に取り込むこともできる。
一般にソースコードには、条件分岐命令が複数含まれている。必ずしも全ての条件分岐命令が、上述のような冗長命令であるわけではないので、ソースコードが利用される環境に依拠して変わる可能性がある条件式を記述した部分のみ、削除するか否かを判定すればよい。そこで図3に示すソースコードには、削除するか否かを判定する対象とする条件分岐命令を識別するため、ソースコードの内容に影響しないコメント文として、条件分岐命令識別コメント1714、条件不成立時命令識別コメント1715、条件分岐終了命令識別コメント1716が付与されている。
条件分岐命令識別コメント1714、条件不成立時命令識別コメント1715、条件分岐終了命令識別コメント1716はそれぞれ、条件分岐命令1711、条件不成立時命令1712、および条件分岐終了命令1713が記述されている箇所をソフトウェア検証支援装置100が識別するためのものである。コメント文の形式は任意でよいが、図3では例として、「@CC_if_識別番号」「@CC_else_識別番号」「@CC_endif_識別番号」という形式でコメントを付与した。
条件分岐命令1711が記述している条件式が実際に成立するか否かを検証するためには、ソースコードをコンパイルして実行することに加えて、条件式が成立した際にその旨を何らかのログとして記録することが望ましい。例えば、条件分岐命令1711内に、適当なログを記録する命令を新たに挿入することが考えられる。条件分岐命令1711内の命令は、その条件式が成立した場合に限って実行されるので、条件分岐命令1711内にログ記録命令を挿入しておけば、その命令が実行されたということは条件式が成立したということと等価だからである。
本実施形態1では、これと同様の機能を備えた関数として、ソフトウェアの動作検証においてよく用いられるassert命令を用いる。assert命令は、指定した条件式が成立したときはtrueを返し、成立しなかったときはfalseを返す、またはこれと同様の動作をする関数である。本実施形態1では、次の図4に示す_CPROVER_assertという検査命令を用いることとする。これは、指定した条件式が成立したか否かを示すログを、検査結果記憶部175に格納するように構成された命令である。
図4は、図3のソースコードに検査命令を挿入した例を示す図である。図4において、条件分岐命令1711の直前に、検査命令1717が新たに挿入されている。
検査命令挿入部130は、条件分岐命令識別コメント1714をソースコード内に見つけると、対応する条件分岐命令1711が必ず成立するか否かを検証するための検査命令1717を、条件分岐命令1711の直前(または直後)に挿入する。
検査命令1717は、条件分岐命令1711が成立するか否かを検証するためのものであるため、検査命令1717が指定する条件式は条件分岐命令1711内の条件式と同一である必要がある。検査命令生成部120は、条件分岐命令1711から条件式部分を抽出し、これを条件式として指定した検査命令1717を生成する。
図5は、検査命令生成部120が条件分岐命令1711から条件式部分を抽出する際に用いる条件式パターン1720の例を示す図である。条件式パターンとは、プログラムコード内において条件式が開始または終了する旨を指定する文字列と、条件式そのものを記述した文字列とを抽出するための文字列テンプレートであり、条件式パターン記憶部172内にデータとして記憶されている。例えば正規表現を用いて条件式パターン1720を記述することができるが、これに限られるものではなく、指定した文字列表現に合致する文字列を抽出することができればよい。図5では、正規表現を用いて条件式パターン1720を構成した例を示した。
図5に示す条件式パターン1720は、条件式が開始または終了する旨を指定する文字列を抽出するための定型パターン1721と、定型パターン1721の間に記述されている任意の文字列を抽出するための任意パターン1722とを有する。検査命令生成部120は、条件式パターン1720を用いて、if文内に記述されている条件式(図3〜図4の例では、iParam<LINITH)を抽出することができる。
なお、条件式パターン1720は、複数の抽出パターンを記述することもできる。検査命令生成部120は、いずれかの抽出パターンに合致する文字列を発見したときはその条件式を用いて検査命令1717を生成し、全ての抽出パターンに合致しない条件分岐命令については空の条件を指定して検査命令1717を生成する。
図6は、検査命令生成部120が生成する検査命令のパターンを示す図である。検査命令生成部120は、図6に示す検査命令パターン1730に準じて検査命令を生成し、検査命令記憶部173に格納する。検査命令挿入部130は、検査命令記憶部173が格納している検査命令を読み出し、ソースコードに挿入する。
検査命令パターン1730は、行番号部1731、挿入箇所指示部1732、検査命令固定部1733、条件式部1734を有する。
行番号部1731は、検査命令を挿入すべきソースコード内の行番号を指定する。挿入箇所指示部1732は、行番号部1731が指定する行の直前に検査命令を挿入するか、直後に挿入するかを指定する。検査命令固定部1733は、検査命令を記述した文字列のうち、条件式を除いた固定部分である。条件式部1734は、検査命令生成部120が条件式パターン1720を用いて条件分岐命令から抽出する条件式を埋め込む部分である。
図7は、ソフトウェア検査支援装置100が条件分岐命令を削除した後のソースコード例を示す図である。図3〜図4で例示したソースコードのうち、条件分岐命令1711、条件不成立時命令1712、条件分岐終了命令1713、条件分岐命令識別コメント1714、条件不成立時命令識別コメント1715、条件分岐終了命令識別コメント1716、検査命令1717がソースコードから削除され、さらには条件不成立時命令1712内に含まれるエラー処理などの不要な命令も併せて削除されている。この結果、削除した部分に対応するオブジェクトコードは生成されないので、プログラム容量およびプログラム実行負荷を低減することができる。
以上、ソフトウェア検査支援装置100がソースコードから条件分岐命令を削除する際の基本的な考え方について説明した。以下では、ソフトウェア検査支援装置100の具体的な動作手順を説明する。
図8は、ソフトウェア検査支援装置100が検査命令を生成する処理の動作フローを示す図である。以下、図8の各ステップについて説明する。
(図8:ステップS800)
ソフトウェア検査支援装置100は、検査対象であるソースコードをコンパイルして実行する前に、本動作フローを実行して検査命令を生成する。
(図8:ステップS801)
検査命令生成部120は、ソースコード記憶部171から検査対象であるソースコードを1行分読み出す。また、図6で説明した行番号部1731の値を1加算して更新する。
(図8:ステップS802)
検査命令生成部120は、ステップS801で読み込んだ1行分のソースコード内に、条件分岐命令識別コメント1714(@CC_if_識別番号)が含まれているか否かを判定する。含まれている場合はステップS803へ進み、含まれていない場合はステップS805へスキップする。
(図8:ステップS803)
検査命令生成部120は、条件分岐命令に含まれる条件式を、図5で説明した条件式パターンにしたがって抽出する。
(図8:ステップS804)
検査命令生成部120は、ステップS803で抽出した条件式と、図6で説明した検査命令パターンにしたがって、検査命令を生成し、検査命令記憶部173に格納する。行番号部1731には、ステップS801で更新した行番号を用いる。挿入箇所指示部1732の値は、例えばあらかじめ指定しておけばよい。また、条件分岐命令識別コメント1714に含まれている識別番号を記憶しておき、検査命令の実行結果を検査結果記憶部175に格納する際に、併せて格納する。
(図8:ステップS805)
ステップS801で読み込んだソースコードの終端に達している場合はステップS806へ進み、読み込んでいない行が残っている場合はステップS801に戻って同様の処理を繰り返す。
(図8:ステップS806)
本動作フローが終了した後、検査命令挿入部130は、検査命令生成部120が生成して検査命令記憶部173に格納した検査命令を、行番号部1731が指定する行の直前または直後に挿入し、検査対象ソースコード記憶部174に格納する。検査実行部140は、検査命令が挿入されたソースコードをコンパイルして実行し、検査命令の実行結果を検査結果記憶部175に格納する。また、必要に応じて資源制約条件記憶部176からハードウェアリソースに関する制約条件を取得し、これを満たす範囲内で検査を実施する。
図9は、ソフトウェア検査支援装置100がソースコードから条件分岐命令を削除する処理の動作フローを示す図である。以下、図9の各ステップについて説明する。
(図9:ステップS900)
ソフトウェア検査支援装置100は、検査対象であるソースコードをコンパイルして実行した後に本動作フローを実行し、条件分岐命令をソースコードから削除する。
(図9:ステップS901)
検査結果取得部150は、検査結果記憶部175から検査命令の実行結果を取得する。検査命令の実行結果は、ソースコード内に複数存在する検査命令それぞれの条件式が成立したか否か、および検査命令の識別番号(条件分岐命令識別コメント1714に含まれている識別番号)を含む。検査結果取得部150は、各検査命令を識別番号によって区別した上で、それぞれの検査結果をリストアップする。
(図9:ステップS902)
条件分岐削除部160は、検査命令を挿入したソースコードを、検査対象ソースコード記憶部174から1行ずつ読み出す。
(図9:ステップS903)
条件分岐削除部160は、ステップS902で読み込んだ1行分のソースコード内に、条件分岐命令識別コメント1714が含まれているか否かを判定する。含まれている場合はステップS904に進み、含まれていない場合はステップS911へ進む。
(図9:ステップS904)
条件分岐削除部160は、条件分岐命令識別コメント1714に含まれている識別番号をキーにして、検査結果記憶部175から当該条件分岐命令に対応する検査命令の検査結果を取得する。
(図9:ステップS905)
ステップS904で取得した検査結果が検査成功である場合はステップS906へ進み、検査失敗である場合はステップS911へ進む。
(図9:ステップS905:補足)
本ステップにおける検査結果が検査成功である場合は、対応する条件分岐命令内の条件文が成立していることを示しているので、ステップS906以降のステップに進んで冗長な命令文を削除する。本ステップにおける検査結果が失敗である場合は、ステップS902で読み込んだ条件分岐命令内の条件文が必ずしも成立するとは限らないことを示しているので、ステップS911に進んでその条件分岐命令はソースコード内に残す。
(図9:ステップS906)
条件分岐削除部160は、直前に読み込んだソースコード行の次行を、検査対象ソースコード記憶部174から読み出す。
(図9:ステップS907)
条件分岐削除部160は、ステップS906で読み込んだ1行分のソースコード内に、条件不成立時命令識別コメント1715が含まれているか否かを判定する。含まれている場合はステップS909に進み、含まれていない場合はステップS908へ進む。
(図9:ステップS908)
条件分岐削除部160は、ステップS906で読み込んだ1行分のソースコードを、そのまま検査対象ソースコード記憶部174に書き戻す。本ステップの後はステップS906に戻り、同様の処理を繰り返す。
(図9:ステップS909)
条件分岐削除部160は、直前に読み込んだソースコード行の次行を、検査対象ソースコード記憶部174から読み出す。
(図9:ステップS910)
条件分岐削除部160は、ステップS909で読み込んだ1行分のソースコード内に、条件分岐終了命令識別コメント1716が含まれているか否かを判定する。含まれていない場合はステップS909へ戻って同様の処理を繰り返す。含まれている場合はステップS902に戻って同様の処理を繰り返す。
(図9:ステップS911)
条件分岐削除部160は、ステップS902で読み込んだ1行分のソースコードを、そのまま検査対象ソースコード記憶部174に書き戻す。
(図8:ステップS912)
ソースコードの終端に達している場合は本動作フローを終了し、読み込んでいない行が残っている場合はステップS902に戻って同様の処理を繰り返す。
<実施の形態1:まとめ>
以上のように、本実施形態1に係るソフトウェア検証支援装置100は、検査命令を挿入したソースコードをコンパイルして実行し、条件分岐命令内の条件式が必ず成立することが判明した場合は、冗長な条件分岐命令などをソースコード内から削除する。これにより、不要な条件分岐命令、条件不成立時命令、条件分岐終了命令、および条件不成立時命令内に含まれる命令を除去し、コンパイル後のプログラム容量を抑えることができる。また、冗長な命令を削除することにより、処理負荷を軽減して制御処理のリアルタイム性を高めることができる。
また、本実施形態1に係るソフトウェア検証支援装置100は、検査命令を挿入したソースコードをコンパイルして実行する際に、ソースコードが利用される環境に固有のパラメータを記述したデータファイルを取り込み、検証対象であるソースコードと組み合わせて実行する。これにより、検査対象のソースコードが利用される環境を模擬し、条件分岐命令内の条件式が当該環境下で確実に成立するか否かを、シミュレーション環境下で検証することができる。
<実施の形態2>
実施の形態1では、検査実行部140が検査命令を埋め込んだソースコードをコンパイルして実行することを説明した。一般に、ソースコードをコンパイルして実際に実行することによりソースコードの挙動を検査する処理は、CPU負荷やメモリ使用量などのハードウェアリソースを多大に消費するため、ハードウェアリソースに関する何らかの制約条件が課される場合がある。本発明の実施形態2では、その具体例を説明する。検査実行部140の動作以外については実施形態1と概ね同様であるため、以下では差異点を中心に説明する。
図10は、本実施形態2において検査実行部140が検査対象のソースコードをコンパイルして実行する際の動作フローである。以下、図10の各ステップについて説明する。
(図10:ステップS1000)
検査実行部140は、図8のステップS806において、本動作フローを開始する。
(図10:ステップS1001〜S1002)
検査実行部140は、検査対象ソースコード記憶部174から検査対象のソースコードを読み出す(S1001)。また、資源制約条件記憶部176からハードウェアリソースに関する制約条件を取得する(S1002)。
(図10:ステップS1002:補足)
本実施形態2において、資源制約条件記憶部176が記憶しているハードウェアリソースに関する制約条件は、使用メモリ量の最大値と、検査開始からの最大経過時間である。
(図10:ステップS1003)
検査実行部140は、ステップS1001で読み出した検査対象ソースコードをコンパイルし、実行開始する。本ステップの処理は、一般的なソフトウェア検証ツールを用いて実行することができる。例えば、CBMC(Edmund Clarke著,ANSI−C Bounded Model Checker User Manual,2006年を参照)などのツールを用いることができる。同ツールは、ソフトウェアソースコード内に記載された条件が満たされているか否かを網羅的に検証するソフトウェアである。
(図10:ステップS1004)
検査実行部140は、検査を実行しながら所定時間待機する。
(図10:ステップS1005)
検査実行部140は、現在のメモリ使用量を取得する。メモリ使用量を取得する具体的な方法としては、検査プログラムが動作している計算機のオペレーティングシステムのシステムコールなどを用いればよい。取得したメモリ使用量が資源制約条件記憶部176によって規定されている最大使用量を超えている場合はステップS1007へ進み、超えていない場合はステップS1006へ進む。
(図10:ステップS1006)
検査実行部140は、現在時刻を取得し、検査を開始してからの経過時間を算出する。
(図10:ステップS1007)
検査実行部140は、ステップS1003で開始した検査を中断し、使用メモリ量超過エラー処理を実行する。例えば、検査を中断した時点で実行していたソースコードの行番号を、検査結果記憶部175に格納する。
(図10:ステップS1008)
検査実行部140は、検査を開始してからの経過時間が資源制約条件記憶部176によって規定されている最大経過時間を超えている場合はステップS1010へ進み、超えていない場合はステップS1009へ進む。
(図10:ステップS1009)
検査実行部140は、ステップS1003で開始した検査が終了している場合は本動作フローを終了し、検査途中である場合はステップS1004に戻って同様の処理を繰り返す。
(図10:ステップS1010)
検査実行部140は、ステップS1003で開始した検査を中断し、経過時間超過エラー処理を実行する。例えば、検査を中断した時点で実行していたソースコードの行番号を、検査結果記憶部175に格納する。
(図10:ステップS1011)
本動作フローが終了した後、ソフトウェア検査支援装置100は、図9で説明した動作フローを実行する。ステップS1007またはS1010においてそれぞれの超過処理を実行した旨の検査結果が記録されている場合は、検査を中断した以降のソースコード部分については無条件に残すこととする。条件式が成立するか否かを検証できていないからである。
<実施の形態2:まとめ>
以上のように、本実施形態2に係るソフトウェア検査支援装置100は、検査実行部140がソースコードをコンパイルして実行するために必要なハードウェアリソース量が所定の制約条件を超過したときは、検査を中断してその旨を記録する。これにより、ハードウェア能力不足のため検査がいつまでも終了しないような事態を避けることができる。
また、本実施形態2に係るソフトウェア検査支援装置100は、検査実行部140が検査を途中で中断したときは、それ以降のソースコードを無条件に残す。これにより、冗長であることが確実に判明している条件分岐命令等のみをソースコードから削除することができる。
以上、本発明者によってなされた発明を実施形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
また、上記各構成、機能、処理部などは、それらの全部または一部を、例えば集積回路で設計することによりハードウェアとして実現することもできるし、プロセッサがそれぞれの機能を実現するプログラムを実行することによりソフトウェアとして実現することもできる。各機能を実現するプログラム、テーブルなどの情報は、メモリやハードディスクなどの記憶装置、ICカード、DVDなどの記憶媒体に格納することができる。
100:ソフトウェア検証支援装置、110:制御部、120:検査命令生成部、130:検査命令挿入部、140:検査実行部、150:検査結果取得部、160:条件分岐削除部、170:記憶部、171:ソースコード記憶部、172:条件式パターン記憶部、173:検査命令記憶部、174:検査対象ソースコード記憶部、175:検査結果記憶部、176:資源制約条件記憶部、200:コントロールユニット、210:マイクロコントローラ、211:入力回路、212:演算装置、213:RAM、214:ROM、215:出力回路、216:通信制御装置、220:駆動回路、230:通信回路、240:信号入出力回路、311:加速度センサ、312:ヨーレートセンサ、320:アクチュエータ、330:診断端末、340:制御装置、350:通信線。

Claims (9)

  1. ソフトウェアのソースコードを検証する作業を支援する装置であって、
    前記ソースコード内の条件分岐命令が必ず成立するか否かを検査するための検査命令を前記ソースコード内の前記条件分岐命令の直前または直後に挿入する検査命令挿入部、
    前記ソースコードをコンパイルして実行した結果を取得する検査部、
    前記条件分岐命令が記述している条件が必ず成立するか否かを前記結果にしたがって判定する検査結果取得部、
    前記条件が必ず成立する場合は、前記条件が成立したときに実行される命令を前記ソースコード内に残した上で、前記条件が成立しなかったときに実行される命令を前記ソースコードから削除する条件分岐削除部、
    を備え
    前記検査命令挿入部は、
    前記検査部が前記ソースコードをコンパイルして実行する前に、前記検査命令を前記ソースコード内に挿入し、
    前記検査部は、
    前記条件分岐命令が記述している条件を指定するパラメータのうち、前記ソフトウェアが搭載される環境に固有のものを記述したパラメータデータを、前記ソースコードに組み込んだ上でコンパイルして実行した結果を取得し、
    前記検査結果取得部は、
    前記パラメータデータを組み込んだ前記ソースコードの実行結果を取得することにより、前記環境において前記条件が必ず成立するか否かを判定する
    ことを特徴とするソフトウェア検証支援装置。
  2. 前記ソフトウェア検証支援装置はさらに、前記ソースコードをコンパイルして実行した結果を記述したログを記憶する記憶部を備え、
    前記検査命令は、
    前記検査部が前記検査命令を実行したとき、前記条件分岐命令が成立したか否かを示すログを前記記憶部に格納するように構成されており、
    記検査結果取得部は、
    前記記憶部に格納されている前記検査命令のログに基づき、前記条件が必ず成立するか否かを判定する
    ことを特徴とする請求項1記載のソフトウェア検証支援装置。
  3. 前記検査命令挿入部は、
    前記検査命令を挿入すべき条件分岐命令が記述されている箇所を示す前記ソースコード内のコメント文にしたがって、前記検査命令を挿入する
    ことを特徴とする請求項記載のソフトウェア検証支援装置。
  4. 前記検査部は、
    前記ソースコードをコンパイルして実行するために必要なハードウェアリソース量が所定の上限値を超えたときは前記実行を中断し、
    前記検査結果取得部は、
    前記条件分岐命令のうち前記中断時点で既に実行されたもの以外については、前記条件が必ず成立するか否か不確定であるものと判定し、
    前記条件分岐削除部は、
    前記条件が必ず成立するか否か不確定である前記条件分岐命令、その条件が成立したときに実行される命令、およびその条件が成立しなかったときに実行される命令については、前記ソースコードから削除せずに残したままにする
    ことを特徴とする請求項1記載のソフトウェア検証支援装置。
  5. 前記検査部は、
    前記ソースコードをコンパイルして実行する際に消費するメモリ容量が所定の上限値を超えたときは前記実行を中断する
    ことを特徴とする請求項記載のソフトウェア検証支援装置。
  6. 前記検査部は、
    前記ソースコードをコンパイルして実行することを開始してからの経過時間が所定の上限値を超えたときは前記実行を中断する
    ことを特徴とする請求項記載のソフトウェア検証支援装置。
  7. 前記検査部は、
    前記実行を中断したときはその時点で実行しようとしていた前記ソースコードの行番号を前記記憶部に格納する
    ことを特徴とする請求項記載のソフトウェア検証支援装置。
  8. ソフトウェアのソースコードを検証する作業を支援する方法であって、
    前記ソースコード内の条件分岐命令が必ず成立するか否かを検査するための検査命令を前記ソースコード内の前記条件分岐命令の直前または直後に挿入する検査命令挿入ステップ、
    前記ソースコードをコンパイルして実行した結果を取得する検査ステップ、
    前記条件分岐命令が記述している条件が必ず成立するか否かを前記結果にしたがって判定する検査結果取得ステップ、
    前記条件が必ず成立する場合は、前記条件が成立したときに実行される命令を前記ソースコード内に残した上で、前記条件が成立しなかったときに実行される命令を前記ソースコードから削除するステップ、
    を有し、
    前記検査命令挿入ステップにおいては、
    前記検査ステップで前記ソースコードをコンパイルして実行する前に、前記検査命令を前記ソースコード内に挿入し、
    前記検査ステップにおいては、
    前記条件分岐命令が記述している条件を指定するパラメータのうち、前記ソフトウェアが搭載される環境に固有のものを記述したパラメータデータを、前記ソースコードに組み込んだ上でコンパイルして実行した結果を取得し、
    前記検査結果取得ステップにおいては、
    前記パラメータデータを組み込んだ前記ソースコードの実行結果を取得することにより、前記環境において前記条件が必ず成立するか否かを判定する
    ことを特徴とするソフトウェア検証支援方法。
  9. 請求項記載のソフトウェア検証支援方法をコンピュータに実行させることを特徴とするソフトウェア検証支援プログラム。
JP2012010333A 2012-01-20 2012-01-20 ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム Expired - Fee Related JP5865091B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012010333A JP5865091B2 (ja) 2012-01-20 2012-01-20 ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム
PCT/JP2013/050503 WO2013108730A1 (ja) 2012-01-20 2013-01-15 ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012010333A JP5865091B2 (ja) 2012-01-20 2012-01-20 ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム

Publications (2)

Publication Number Publication Date
JP2013149164A JP2013149164A (ja) 2013-08-01
JP5865091B2 true JP5865091B2 (ja) 2016-02-17

Family

ID=48799155

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012010333A Expired - Fee Related JP5865091B2 (ja) 2012-01-20 2012-01-20 ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム

Country Status (2)

Country Link
JP (1) JP5865091B2 (ja)
WO (1) WO2013108730A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6364332B2 (ja) * 2014-11-19 2018-07-25 株式会社エヌ・ティ・ティ・データ 仕様生成方法、仕様生成装置、及びプログラム
WO2018096588A1 (ja) * 2016-11-22 2018-05-31 三菱電機株式会社 情報処理装置、情報処理方法及び情報処理プログラム
JP7447044B2 (ja) * 2021-03-18 2024-03-11 株式会社日立製作所 プログラム分析装置、プログラム分析方法およびトレース処理追加装置

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5193190A (en) * 1989-06-26 1993-03-09 International Business Machines Corporation Partitioning optimizations in an optimizing compiler
JPH05181685A (ja) * 1992-01-07 1993-07-23 Oki Electric Ind Co Ltd コンパイル実行方法
JPH0744397A (ja) * 1993-07-30 1995-02-14 Nec Corp プログラム処理高速化方式
AU2003286131A1 (en) * 2002-08-07 2004-03-19 Pact Xpp Technologies Ag Method and device for processing data
JP2006164294A (ja) * 2005-12-26 2006-06-22 Fujitsu Ltd Jitコンパイラを備えた仮想計算機
JP4737624B2 (ja) * 2006-03-06 2011-08-03 株式会社日立ソリューションズ アプリケーションの障害原因の特定作業支援システム
JP2008015665A (ja) * 2006-07-04 2008-01-24 Hitachi Ltd プログラム解析方法及びプログラム解析装置
JP2011100420A (ja) * 2009-11-09 2011-05-19 Toshiba Corp テストプログラム作成装置
JP5458829B2 (ja) * 2009-11-26 2014-04-02 富士通株式会社 検査装置、サーバ装置及び検査プログラム

Also Published As

Publication number Publication date
WO2013108730A1 (ja) 2013-07-25
JP2013149164A (ja) 2013-08-01

Similar Documents

Publication Publication Date Title
US20160092181A1 (en) Automatic source code generation for accelerated function calls
JP5865091B2 (ja) ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム
US9129137B2 (en) Method, computer program and device for providing security for intermediate programming code for its execution by a virtual machine
JP2007199845A (ja) メモリ破壊検出方法および装置
US8700380B2 (en) Method for generating performance evaluation model
JP2009211503A (ja) ソースコード検証装置、及びソースコード検証方法
JP5233355B2 (ja) プロパティ生成システムおよびプロパティ検証システム
JP4915362B2 (ja) 静的検証ツールのアノテーション自動挿入方法
JP2016031622A (ja) ソフトウェア検証システムおよび制御装置
CN107864073B (zh) 一种swift报文批量发送方法和装置
US20110022373A1 (en) Model checking of liveness property in a phase abstracted model
JP2005108007A (ja) Lsi設計検証装置及びlsi設計検証方法
US20100077383A1 (en) Simulation method and storage medium for storing program
US9632912B1 (en) Method and system for debugging a program
WO2016103229A1 (en) A method for verifying a safety logic in an industrial process
JP5093508B2 (ja) ループ最適化システム、ループ最適化方法、及びループ最適化用プログラム
JP2005174045A (ja) ソースプログラム変換装置、ソースプログラム変換方法、ソースプログラム変換プログラム、および、プログラム記録媒体
JP6724673B2 (ja) テスト支援プログラム、テスト支援方法及びテスト支援装置
JP5233354B2 (ja) プロパティ検証システム、プロパティ検証方法、及びプログラム
US10534691B2 (en) Apparatus and method to improve accuracy of performance measurement for loop processing in a program code
JP2009217720A (ja) プログラム生成装置およびプログラム生成方法
CN117236277B (zh) 用于检查寄存器的方法及装置、电子设备
CN114153750B (zh) 代码检查方法及装置、代码编写方法、电子设备
JP2012059202A (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム
JP2007034650A (ja) ソフトウェア開発システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140825

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150507

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150706

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151208

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151225

R150 Certificate of patent or registration of utility model

Ref document number: 5865091

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees