JP5865091B2 - ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム - Google Patents
ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
- G06F8/4435—Detection or removal of dead or redundant code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
Description
図1は、本発明に係るソフトウェア検証支援装置が対象とするソフトウェアを搭載する自動車エンジン制御システムの構成例を示す図である。コントロールユニット200は、エンジンの動作を制御する制御ソフトウェアを実行する装置であり、マイクロコントローラ210、駆動回路220、通信回路230、信号入出力回路240を備える。
(図8:ステップS800)
ソフトウェア検査支援装置100は、検査対象であるソースコードをコンパイルして実行する前に、本動作フローを実行して検査命令を生成する。
(図8:ステップS801)
検査命令生成部120は、ソースコード記憶部171から検査対象であるソースコードを1行分読み出す。また、図6で説明した行番号部1731の値を1加算して更新する。
検査命令生成部120は、ステップS801で読み込んだ1行分のソースコード内に、条件分岐命令識別コメント1714(@CC_if_識別番号)が含まれているか否かを判定する。含まれている場合はステップS803へ進み、含まれていない場合はステップS805へスキップする。
(図8:ステップS803)
検査命令生成部120は、条件分岐命令に含まれる条件式を、図5で説明した条件式パターンにしたがって抽出する。
検査命令生成部120は、ステップS803で抽出した条件式と、図6で説明した検査命令パターンにしたがって、検査命令を生成し、検査命令記憶部173に格納する。行番号部1731には、ステップS801で更新した行番号を用いる。挿入箇所指示部1732の値は、例えばあらかじめ指定しておけばよい。また、条件分岐命令識別コメント1714に含まれている識別番号を記憶しておき、検査命令の実行結果を検査結果記憶部175に格納する際に、併せて格納する。
(図8:ステップS805)
ステップS801で読み込んだソースコードの終端に達している場合はステップS806へ進み、読み込んでいない行が残っている場合はステップS801に戻って同様の処理を繰り返す。
本動作フローが終了した後、検査命令挿入部130は、検査命令生成部120が生成して検査命令記憶部173に格納した検査命令を、行番号部1731が指定する行の直前または直後に挿入し、検査対象ソースコード記憶部174に格納する。検査実行部140は、検査命令が挿入されたソースコードをコンパイルして実行し、検査命令の実行結果を検査結果記憶部175に格納する。また、必要に応じて資源制約条件記憶部176からハードウェアリソースに関する制約条件を取得し、これを満たす範囲内で検査を実施する。
(図9:ステップS900)
ソフトウェア検査支援装置100は、検査対象であるソースコードをコンパイルして実行した後に本動作フローを実行し、条件分岐命令をソースコードから削除する。
(図9:ステップS901)
検査結果取得部150は、検査結果記憶部175から検査命令の実行結果を取得する。検査命令の実行結果は、ソースコード内に複数存在する検査命令それぞれの条件式が成立したか否か、および検査命令の識別番号(条件分岐命令識別コメント1714に含まれている識別番号)を含む。検査結果取得部150は、各検査命令を識別番号によって区別した上で、それぞれの検査結果をリストアップする。
条件分岐削除部160は、検査命令を挿入したソースコードを、検査対象ソースコード記憶部174から1行ずつ読み出す。
(図9:ステップS903)
条件分岐削除部160は、ステップS902で読み込んだ1行分のソースコード内に、条件分岐命令識別コメント1714が含まれているか否かを判定する。含まれている場合はステップS904に進み、含まれていない場合はステップS911へ進む。
条件分岐削除部160は、条件分岐命令識別コメント1714に含まれている識別番号をキーにして、検査結果記憶部175から当該条件分岐命令に対応する検査命令の検査結果を取得する。
(図9:ステップS905)
ステップS904で取得した検査結果が検査成功である場合はステップS906へ進み、検査失敗である場合はステップS911へ進む。
(図9:ステップS905:補足)
本ステップにおける検査結果が検査成功である場合は、対応する条件分岐命令内の条件文が成立していることを示しているので、ステップS906以降のステップに進んで冗長な命令文を削除する。本ステップにおける検査結果が失敗である場合は、ステップS902で読み込んだ条件分岐命令内の条件文が必ずしも成立するとは限らないことを示しているので、ステップS911に進んでその条件分岐命令はソースコード内に残す。
条件分岐削除部160は、直前に読み込んだソースコード行の次行を、検査対象ソースコード記憶部174から読み出す。
(図9:ステップS907)
条件分岐削除部160は、ステップS906で読み込んだ1行分のソースコード内に、条件不成立時命令識別コメント1715が含まれているか否かを判定する。含まれている場合はステップS909に進み、含まれていない場合はステップS908へ進む。
条件分岐削除部160は、ステップS906で読み込んだ1行分のソースコードを、そのまま検査対象ソースコード記憶部174に書き戻す。本ステップの後はステップS906に戻り、同様の処理を繰り返す。
(図9:ステップS909)
条件分岐削除部160は、直前に読み込んだソースコード行の次行を、検査対象ソースコード記憶部174から読み出す。
条件分岐削除部160は、ステップS909で読み込んだ1行分のソースコード内に、条件分岐終了命令識別コメント1716が含まれているか否かを判定する。含まれていない場合はステップS909へ戻って同様の処理を繰り返す。含まれている場合はステップS902に戻って同様の処理を繰り返す。
(図9:ステップS911)
条件分岐削除部160は、ステップS902で読み込んだ1行分のソースコードを、そのまま検査対象ソースコード記憶部174に書き戻す。
(図8:ステップS912)
ソースコードの終端に達している場合は本動作フローを終了し、読み込んでいない行が残っている場合はステップS902に戻って同様の処理を繰り返す。
以上のように、本実施形態1に係るソフトウェア検証支援装置100は、検査命令を挿入したソースコードをコンパイルして実行し、条件分岐命令内の条件式が必ず成立することが判明した場合は、冗長な条件分岐命令などをソースコード内から削除する。これにより、不要な条件分岐命令、条件不成立時命令、条件分岐終了命令、および条件不成立時命令内に含まれる命令を除去し、コンパイル後のプログラム容量を抑えることができる。また、冗長な命令を削除することにより、処理負荷を軽減して制御処理のリアルタイム性を高めることができる。
実施の形態1では、検査実行部140が検査命令を埋め込んだソースコードをコンパイルして実行することを説明した。一般に、ソースコードをコンパイルして実際に実行することによりソースコードの挙動を検査する処理は、CPU負荷やメモリ使用量などのハードウェアリソースを多大に消費するため、ハードウェアリソースに関する何らかの制約条件が課される場合がある。本発明の実施形態2では、その具体例を説明する。検査実行部140の動作以外については実施形態1と概ね同様であるため、以下では差異点を中心に説明する。
(図10:ステップS1000)
検査実行部140は、図8のステップS806において、本動作フローを開始する。
(図10:ステップS1001〜S1002)
検査実行部140は、検査対象ソースコード記憶部174から検査対象のソースコードを読み出す(S1001)。また、資源制約条件記憶部176からハードウェアリソースに関する制約条件を取得する(S1002)。
(図10:ステップS1002:補足)
本実施形態2において、資源制約条件記憶部176が記憶しているハードウェアリソースに関する制約条件は、使用メモリ量の最大値と、検査開始からの最大経過時間である。
検査実行部140は、ステップS1001で読み出した検査対象ソースコードをコンパイルし、実行開始する。本ステップの処理は、一般的なソフトウェア検証ツールを用いて実行することができる。例えば、CBMC(Edmund Clarke著,ANSI−C Bounded Model Checker User Manual,2006年を参照)などのツールを用いることができる。同ツールは、ソフトウェアソースコード内に記載された条件が満たされているか否かを網羅的に検証するソフトウェアである。
(図10:ステップS1004)
検査実行部140は、検査を実行しながら所定時間待機する。
検査実行部140は、現在のメモリ使用量を取得する。メモリ使用量を取得する具体的な方法としては、検査プログラムが動作している計算機のオペレーティングシステムのシステムコールなどを用いればよい。取得したメモリ使用量が資源制約条件記憶部176によって規定されている最大使用量を超えている場合はステップS1007へ進み、超えていない場合はステップS1006へ進む。
(図10:ステップS1006)
検査実行部140は、現在時刻を取得し、検査を開始してからの経過時間を算出する。
検査実行部140は、ステップS1003で開始した検査を中断し、使用メモリ量超過エラー処理を実行する。例えば、検査を中断した時点で実行していたソースコードの行番号を、検査結果記憶部175に格納する。
(図10:ステップS1008)
検査実行部140は、検査を開始してからの経過時間が資源制約条件記憶部176によって規定されている最大経過時間を超えている場合はステップS1010へ進み、超えていない場合はステップS1009へ進む。
検査実行部140は、ステップS1003で開始した検査が終了している場合は本動作フローを終了し、検査途中である場合はステップS1004に戻って同様の処理を繰り返す。
(図10:ステップS1010)
検査実行部140は、ステップS1003で開始した検査を中断し、経過時間超過エラー処理を実行する。例えば、検査を中断した時点で実行していたソースコードの行番号を、検査結果記憶部175に格納する。
本動作フローが終了した後、ソフトウェア検査支援装置100は、図9で説明した動作フローを実行する。ステップS1007またはS1010においてそれぞれの超過処理を実行した旨の検査結果が記録されている場合は、検査を中断した以降のソースコード部分については無条件に残すこととする。条件式が成立するか否かを検証できていないからである。
以上のように、本実施形態2に係るソフトウェア検査支援装置100は、検査実行部140がソースコードをコンパイルして実行するために必要なハードウェアリソース量が所定の制約条件を超過したときは、検査を中断してその旨を記録する。これにより、ハードウェア能力不足のため検査がいつまでも終了しないような事態を避けることができる。
Claims (9)
- ソフトウェアのソースコードを検証する作業を支援する装置であって、
前記ソースコード内の条件分岐命令が必ず成立するか否かを検査するための検査命令を前記ソースコード内の前記条件分岐命令の直前または直後に挿入する検査命令挿入部、
前記ソースコードをコンパイルして実行した結果を取得する検査部、
前記条件分岐命令が記述している条件が必ず成立するか否かを前記結果にしたがって判定する検査結果取得部、
前記条件が必ず成立する場合は、前記条件が成立したときに実行される命令を前記ソースコード内に残した上で、前記条件が成立しなかったときに実行される命令を前記ソースコードから削除する条件分岐削除部、
を備え、
前記検査命令挿入部は、
前記検査部が前記ソースコードをコンパイルして実行する前に、前記検査命令を前記ソースコード内に挿入し、
前記検査部は、
前記条件分岐命令が記述している条件を指定するパラメータのうち、前記ソフトウェアが搭載される環境に固有のものを記述したパラメータデータを、前記ソースコードに組み込んだ上でコンパイルして実行した結果を取得し、
前記検査結果取得部は、
前記パラメータデータを組み込んだ前記ソースコードの実行結果を取得することにより、前記環境において前記条件が必ず成立するか否かを判定する
ことを特徴とするソフトウェア検証支援装置。 - 前記ソフトウェア検証支援装置はさらに、前記ソースコードをコンパイルして実行した結果を記述したログを記憶する記憶部を備え、
前記検査命令は、
前記検査部が前記検査命令を実行したとき、前記条件分岐命令が成立したか否かを示すログを前記記憶部に格納するように構成されており、
前記検査結果取得部は、
前記記憶部に格納されている前記検査命令のログに基づき、前記条件が必ず成立するか否かを判定する
ことを特徴とする請求項1記載のソフトウェア検証支援装置。 - 前記検査命令挿入部は、
前記検査命令を挿入すべき条件分岐命令が記述されている箇所を示す前記ソースコード内のコメント文にしたがって、前記検査命令を挿入する
ことを特徴とする請求項2記載のソフトウェア検証支援装置。 - 前記検査部は、
前記ソースコードをコンパイルして実行するために必要なハードウェアリソース量が所定の上限値を超えたときは前記実行を中断し、
前記検査結果取得部は、
前記条件分岐命令のうち前記中断時点で既に実行されたもの以外については、前記条件が必ず成立するか否か不確定であるものと判定し、
前記条件分岐削除部は、
前記条件が必ず成立するか否か不確定である前記条件分岐命令、その条件が成立したときに実行される命令、およびその条件が成立しなかったときに実行される命令については、前記ソースコードから削除せずに残したままにする
ことを特徴とする請求項1記載のソフトウェア検証支援装置。 - 前記検査部は、
前記ソースコードをコンパイルして実行する際に消費するメモリ容量が所定の上限値を超えたときは前記実行を中断する
ことを特徴とする請求項4記載のソフトウェア検証支援装置。 - 前記検査部は、
前記ソースコードをコンパイルして実行することを開始してからの経過時間が所定の上限値を超えたときは前記実行を中断する
ことを特徴とする請求項4記載のソフトウェア検証支援装置。 - 前記検査部は、
前記実行を中断したときはその時点で実行しようとしていた前記ソースコードの行番号を前記記憶部に格納する
ことを特徴とする請求項2記載のソフトウェア検証支援装置。 - ソフトウェアのソースコードを検証する作業を支援する方法であって、
前記ソースコード内の条件分岐命令が必ず成立するか否かを検査するための検査命令を前記ソースコード内の前記条件分岐命令の直前または直後に挿入する検査命令挿入ステップ、
前記ソースコードをコンパイルして実行した結果を取得する検査ステップ、
前記条件分岐命令が記述している条件が必ず成立するか否かを前記結果にしたがって判定する検査結果取得ステップ、
前記条件が必ず成立する場合は、前記条件が成立したときに実行される命令を前記ソースコード内に残した上で、前記条件が成立しなかったときに実行される命令を前記ソースコードから削除するステップ、
を有し、
前記検査命令挿入ステップにおいては、
前記検査ステップで前記ソースコードをコンパイルして実行する前に、前記検査命令を前記ソースコード内に挿入し、
前記検査ステップにおいては、
前記条件分岐命令が記述している条件を指定するパラメータのうち、前記ソフトウェアが搭載される環境に固有のものを記述したパラメータデータを、前記ソースコードに組み込んだ上でコンパイルして実行した結果を取得し、
前記検査結果取得ステップにおいては、
前記パラメータデータを組み込んだ前記ソースコードの実行結果を取得することにより、前記環境において前記条件が必ず成立するか否かを判定する
ことを特徴とするソフトウェア検証支援方法。 - 請求項8記載のソフトウェア検証支援方法をコンピュータに実行させることを特徴とするソフトウェア検証支援プログラム。
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)
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)
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 | 富士通株式会社 | 検査装置、サーバ装置及び検査プログラム |
-
2012
- 2012-01-20 JP JP2012010333A patent/JP5865091B2/ja not_active Expired - Fee Related
-
2013
- 2013-01-15 WO PCT/JP2013/050503 patent/WO2013108730A1/ja active Application Filing
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 |