JP6004110B2 - ソフトウェア検査装置、ソフトウェア検査方法、ソフトウェア検査プログラム - Google Patents

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

Info

Publication number
JP6004110B2
JP6004110B2 JP2015527227A JP2015527227A JP6004110B2 JP 6004110 B2 JP6004110 B2 JP 6004110B2 JP 2015527227 A JP2015527227 A JP 2015527227A JP 2015527227 A JP2015527227 A JP 2015527227A JP 6004110 B2 JP6004110 B2 JP 6004110B2
Authority
JP
Japan
Prior art keywords
unit
variable
constant
conditional statement
block
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.)
Active
Application number
JP2015527227A
Other languages
English (en)
Other versions
JPWO2015008575A1 (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.)
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
Application granted granted Critical
Publication of JP6004110B2 publication Critical patent/JP6004110B2/ja
Publication of JPWO2015008575A1 publication Critical patent/JPWO2015008575A1/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、ソフトウェア検査装置、ソフトウェア検査方法、ソフトウェア検査プログラムに関するものである。
従来から、プログラミング言語で記述されたソースプログラムにおける制御の流れやデータの流れを、そのソースプログラムを実行すること無しに解析する、静的解析方法が知られている(特許文献1参照)。
特開平09−282173号公報
ところで、ソフトウェアの処理において仕様の変更が生じた場合、仕様の条件によって同時に更新しなければいけない2以上の定数が存在するケースがある。しかし、ソフトの仕様に関連性のある定数の仕様が記載されていない場合、設計者がその一部の定数しか変更しなかったために不具合に陥るケースが存在する。
特許文献1の静的解析方法によれば、処理内容及び入力と出力の関係を明確にしてプログラムの構造を可視化することはできる。しかし、可視化されたプログラムの構造のうち、定数の変更の一貫性が保たれていないために不具合が発生する可能性がある箇所をユーザに気づかせることはできない。
本発明は、上記課題に鑑みて成されたものであり、その目的は、プログラムの構造のうち、定数の変更の一貫性が保たれていないために不具合が発生する可能性がある箇所をユーザに気づかせることができるソフトウェア検査装置、ソフトウェア検査方法、ソフトウェア検査プログラムを提供することである。
本発明の一態様に係わるソフトウェア検査装置は、検査対象となるコンピュータプログラムの中で用いられる定数を抽出し、抽出された定数が参照される条件文を検出する。そして、条件文の中で定数と比較される変数をベース変数として特定し、ベース変数毎に、比較対象となる定数を分類して出力する。
図1は、本発明の第1実施形態に係わるソフトウェア検査装置のハードウェア構成を示すブロック図である。 図2は、第1実施形態に係わるCPU11aの機能的構成を示すブロック図である。 図3は、本発明の第1〜第3の実施形態に係わるソフトウェア検査装置によって実行される情報処理の流れ及び情報処理の途中で生成される中間データを示すデータフロー図である。 図4は、図3の続きを示すデータフロー図である。 図5(a)、(b)は、検査対象となるソースコードD01として、C言語で記述されたコンピュータプログラムの一例を示す図である。 図6は、定数抽出処理(S01)の結果をまとめた「定数一覧(DO2)」を示す表である。 図7は、条件文検出処理(S02)の結果をまとめた「条件文一覧(DO3)」を示す表である。 図8は、ベース変数特定処理(S03)の結果をまとめた「ベース変数一覧(DO4)」を示す表である。 図9は、定数グループ特定処理(S04)の結果をまとめた「定数グループ一覧(DO5)」を示す表である。 図10は、同じベース変数と比較されているが、同じ値が書き込まれた状態で比較されていないため、同じグループとして分類しないプログラム例を示す図である。 図11は、図5(b)のプログラム例において特定されたブロックB01〜B05を示す図である。 図12は、ブロック特定処理(S05)の結果をまとめた「ブロック行数一覧(DO6)」を示す表である。 図13は、変数特定処理(S06)の結果をまとめた「変数一覧(DO7)」を示す表である。 図14は、グローバル変数特定処理(S07)の結果をまとめた「グローバル変数一覧(DO8)」を示す表である。 図15は、グローバル変数書込、読込箇所特定処理(S08)の結果をまとめた「グローバル変数書込、読込箇所一覧(DO9)」を示す表である。 図16は、第1のグローバル変数書込箇所特定処理(S09)の結果をまとめた「グループ別パラメータ一覧(D10)」を示す表である。 図17は、第2実施形態に係わるCPU11bの機能的構成を示すブロック図である。 図18は、条件文展開処理(S10)の結果をまとめた「条件文展開一覧(D11)」を示す表である。 図19は、第2のグローバル変数書込箇所特定処理(S11)の結果をまとめた「グローバル変数書込箇所一覧(D12)」を示す表である。 図20は、第1の定数分割処理(S12)の結果をまとめた「条件文内定数一覧(D13)」を示す表である。 図21は、第3実施形態に係わるCPU11cの機能的構成を示すブロック図である。 図22は、変数別書込、読込特定処理(S13)の結果をまとめた「変数別書込、読込箇所一覧(D14)」を示す表である。 図23は、変数別グループ特定処理(S14)の結果をまとめた「変数別グループ一覧(D15)」を示す表である。 図24は、アクセス箇所特定処理(S15)の結果をまとめた「データフロー一覧(D16)」を示す表である。 図25は、第2の定数分割処理(S16)の結果をまとめた「データフロー別定数一覧(D17)」を示す表である。
図面を参照して、本発明の実施形態を説明する。図面の記載において同一部分には同一符号を付し説明を省略する。
(第1実施形態)
[ソフトウェア検査装置のハードウェア構成]
本発明の第1実施形態に係わるソフトウェア検査装置は、例えば車両に搭載される電子制御装置(ECU)により実行されるコンピュータプログラムのソフトウェア検査処理に適用することができる。特に、コンピュータプログラムの仕様の条件によって同時に更新しなければいけない2以上の定数に関する不具合が発生する可能性を検査するものである。
図1を参照して、本発明の第1実施形態に係わるソフトウェア検査装置のハードウェア構成を説明する。ソフトウェア検査装置のハードウェア構成として、汎用のコンピュータを用いることができる。例えば、ソフトウェア検査装置は、入出力装置12と、記憶装置14と、CPU(中央処理装置)11と、入力装置13と、表示装置15とを備える。入出力装置12は、記憶媒体から検査対象のコンピュータプログラム(ソースコードD01)を読み込む。記憶装置14は、入出力装置12で読み込んだソースコードD01や解析の中間データを格納する。CPU(中央処理装置)11は、各種演算を実行してソースコードD01を解析する。入力装置13は、ユーザが解析に必要な情報を入力するための装置である。表示装置15は、CPU11から出力される検査結果を表示する。検査結果は、入出力装置12を用いて記憶媒体に書き込むことも可能である。
或いは、ソフトウェア検査装置は、クライアントサーバモデルとしても実現可能である。例えば、汎用のパーソナルコンピュータ(クライアント)をコンピュータネットワークを介してサーバに接続する。これにより、図1に示すCPU11を備えるサーバを、コンピュータネットワークを介して、入出力装置12、入力装置13、記憶装置14、或いは表示装置15に接続することができる。この場合、ソフトウェア検査装置は、主にCPU11(サーバ)により構成され、入出力装置12、入力装置13、記憶装置14、或いは表示装置15はソフトウェア検査装置に含まれない。
図2を参照して、図1のCPU11の機能的構成を説明する。CPU11を備えるコンピュータをソフトウェア検査装置として機能させるためのコンピュータプログラム(ソフトウェア検査プログラム)を、CPU11を備えるコンピュータにインストールして実行する。これにより、CPU11は、以下に示す各情報処理部として機能する。なお、ここでは、ソフトウェアによってソフトウェア検査装置を実現する例を示すが、もちろん、以下に示す各情報処理を実行するための専用のハードウェアを用意して、ソフトウェア検査装置を構成することも可能である。
第1実施形態に係わるCPU11aは、定数抽出部21、条件文検出部22、ベース変数特定部23、及び第1の定数グループ出力部24として機能する。
定数抽出部21は、検査対象となるコンピュータプログラムの中で用いられる定数を抽出する。定数は、プログラミングにおいて特定の値に名前をつけたものであって、変数と異なり、宣言時に決めた値をコードの中で後から変更することができない。但し、定数は、コンピュータプログラムの仕様が変更した場合、仕様の条件によって同時に変更される場合がある。例えばC言語の場合、定数抽出部21は、「#define」或いは「const」で定義された宣言の識別子を特定して、定数を抽出する。定数抽出部21は、予め、「#define」及び「const」による定義パターンの情報を保持し、定義パターンに示した定義に適合する定数を検出する。
条件文検出部22は、コンピュータプログラムの中から、定数抽出部21により抽出された定数が参照される条件文を検出する。条件文検出部22は、例えば、コンピュータプログラムに含まれるif(条件式)、else(条件式)、switch(条件式)のうち、定数抽出部21により抽出された定数が比較されている条件式を検出する。
ベース変数特定部23は、条件文検出部22により検出された条件文の中で、定数抽出部21により抽出された定数と比較される変数をベース変数として特定する。
第1の定数グループ出力部24は、ベース変数特定部23により特定されたベース変数毎に、比較対象となる定数を分類して出力する。具体的には、定数抽出部21により抽出された2以上の定数が同じベース変数と比較されている場合、この2以上の定数を1つのグループとして分類する。第1の定数グループ出力部24は、この定数のグループ分けを、ベース変数毎に実施する。同じベース変数と比較されている2以上の定数は、コンピュータプログラムの仕様上、関連の深い定数同士といえる。よって、第1の定数グループ出力部24は、同じベース変数と比較されている2以上の定数を、CPU11から出力される検査結果として、例えば表示装置15に表示したり、入出力装置12を用いて記憶媒体に書き込む。これにより、仕様の条件によって同時に更新しなければいけない2以上の定数の存在をユーザに提示して、定数の変更の一貫性が保たれていないために不具合が生じる可能性がある箇所をユーザに気づかせることができる。
なお、第1の定数グループ出力部24は、同じ値が書き込まれた状態のベース変数毎に、定数を分類してもよい。同じ変数であっても異なる値が書き込まれた状態で2以上の定数と比較されていれば、この2以上の定数の仕様上の関連性は低い。
CPU11aは、ブロック特定部25、書込箇所特定部26、及び書込ブロック特定部28として更に機能する。
ブロック特定部25は、条件文検出部22により検出された条件文が成立する場合に実行される一群のステートメントからなるブロックを特定する。「ステートメント」とは、ソースコード上の1行ごとの処理単位のことである。ブロックは、例えばC言語の場合、if文又はswitch文の条件判断後のブラケット“{”と“}”で囲まれた範囲を指す。具体的に、ブロック特定部25は、ブラケット“{”と“}”で囲まれた部分の行番号を特定する。
書込箇所特定部26は、コンピュータプログラムの中で、グローバル変数に書き込みを行う箇所を特定する。具体的に、コンピュータプログラムの中で定義されているグローバル変数を抽出し、抽出されたグローバル変数に対して書込が行われている箇所(例えば行番号)を特定する。グローバル変数に書き込んでいる箇所とは算術式の左辺にグローバル変数が登場している箇所である。
書込ブロック特定部28は、ブロック特定部25により特定されたブロックの中から、書込箇所特定部26により特定された箇所が属するブロックを特定する。具体的には、グローバル変数に対して書込が行われている行番号が、ブロックの始点(行番号)から終点(行番号)までの間に含まれている場合、当該ブロックを特定する。
第1の定数グループ出力部24は、ベース変数毎に、ベース変数が比較される条件文の成立により書き込みが行われるグローバル変数を分類して出力する。グローバル変数の書き込みが行われる箇所の関連から仕様上のつながりの強い定数が存在する。そこで、書き込まれているグローバル変数と照らし合わせて、仕様通りの処理がされているかをレビューすることが望ましい。そこで、第1実施形態では、第1の定数グループ出力部24が、ベース変数毎に、ベース変数と比較される定数を分類するのみならず、当該定数が参照される条件文の成立により実行されるブロックの中で書き込みが行われるグローバル変数をも分類して出力する。
[ソフトウェア検査装置により実行される情報処理の手順]
次に、図3〜図16を参照して、本発明の第1実施形態に係わるソフトウェア検査方法の一例として、図1及び図2に示すソフトウェア検査装置によって実行される情報処理の手順を説明する。
先ず、CPU11は、検査対象となるソースコードD01を入出力装置12から読み込む。なお、ソースコードD01は、予め入出力装置12を用いてユーザによりソフトウェア検査装置内に読み込まれ、記憶装置14に格納されていてもよい。図5(a)、(b)は、読み込まれたソースコードD01として、C言語で記述されたコンピュータプログラムの一例を示す。検査対象となるコンピュータプログラムは、図5(a)、(b)に示す2つのファイルに跨って記述されている。図5(a)のファイル名は「sample1.c」であり、図5(b)のファイル名は「sample2.c」である。C言語で記述されたプログラムの一例において、各ファイルの左端部に記載された1から始まる連続番号は、各ステートメントの「行番号」を示す。
定数抽出部21は、図3に示す「定数抽出」処理(S01)を実行する。定数抽出部21は、ソースコードD01の中から、「#define」及び「const」による定義パターンに適合する定数を検出する。図5のプログラム例では、プログラムの2行目から5行目までに#defineで定義された定数、CC1, CC2, CC3, CC4があるため、これを定数として検出する。同時に、それぞれの定数の定義の値も検出する。図6の表は、上記した定数抽出処理(S01)の結果をまとめた「定数一覧(DO2)」を示す。
条件文検出部22は、図3に示す「条件文検出」処理(S02)を実行する。コンピュータプログラムに含まれるif(条件式)、else(条件式)、else if(条件式)、switch(条件式)のうち、定数抽出部21により抽出された定数が比較されている条件式を検出する。
条件文検出部22は、ソースコードD01の中から、定数抽出部21により抽出されたCC1, CC2, CC3, CC4が参照される条件文を検出する。図7の表は、上記した条件文検出処理(S02)の結果をまとめた「条件文一覧(DO3)」を示す。ここでは、条件文そのもの及び条件文の行番号を抽出する。
ベース変数特定部23は、図3に示す「ベース変数特定」処理(S03)を実行する。ベース変数特定部23は、S03で検出された条件文の中で、S01で抽出された定数と比較される変数をベース変数として特定する。図8の表は、上記したベース変数特定処理(S03)の結果をまとめた「ベース変数一覧(DO4)」を示す。図5のプログラム例では、定数CC1, CC2, CC3, CC4が変数v, v1, vFlagの変数群と比較されているため、これらの変数をベース変数として検出している。1つの条件文から2以上のベース変数(v, v1)が特定される場合に、ベース変数毎に、条件文及び比較対象となる定数を特定している。
第1の定数グループ出力部24は、S03で特定されたベース変数を元に、図3に示す「定数グループ特定」処理(S04)を実行する。具体的には、S01で抽出された2以上の定数が同じベース変数と比較されている場合、この2以上の定数を1つのグループとして分類する。図9の表は、上記した定数グループ特定処理(S04)の結果をまとめた「定数グループ一覧(DO5)」を示す。図5のプログラム例では、定数CC1はベース変数vと同じ変数で比較されているため、これを一つのグループとして、第1のグループIDとして「1」を付す。また、定数CC2及びCC3も同じベース変数v1と比較されているため、第1のグループIDとして「2」を付す。定数CC4及びCC2も同じベース変数vFlagと比較されているため、第1のグループIDとして「3」を付す。このように同じ第1のグループIDが付された定数は仕様上関連の深い定数同士であることを明示することができる。
なお、第1の定数グループ出力部24は、同じベース変数であっても異なる値が書き込まれている状態であれば、同じグループとして分類しない。例えば、図10に示すように、ベース変数“a”の値は前の条件文(行番号:1)から次の条件文(行番号:4)までの間に値が書き換わるため、仕様上の関連性が低い。そのため、CC1とCC2は同じベース変数“a”で比較されているが、同じ値が書き込まれた状態でベース変数“a”と比較されていないため、同じグループとして扱わない。
次に、ブロック特定部25は、図3に示す「ブロック特定」処理(S05)を実行する。具体的には、ブロック特定部25は、S02で検出された条件文が成立する場合に実行されるブロックを特定する。詳細には、ブロックの始点となる行番号及び終点となる行番号を特定する。図11は、図5(b)のプログラム例において特定されたブロックB01〜B05を示す。図12の表は、上記したブロック特定処理(S05)の結果をまとめた「ブロック行数一覧(DO6)」を示す。図12では、図9に示す定数グループ一覧(DO5)に対して、特定されたブロックの行番号(ブロックリージョン)を付加している。
書込箇所特定部26は、図3に示す「変数特定」処理(S06)を実行する。具体的には、ソースコードD01の中で定義されている変数を抽出する。図13の表は、上記した変数特定処理(S06)の結果をまとめた「変数一覧(DO7)」を示す。書込箇所特定部26は、変数としてグローバル変数及びローカル変数を抽出する。図5のプログラム例では、グローバル変数としてvFlag, vTemp、ローカル変数としてtemp, temp2が抽出される。
書込箇所特定部26は、図3に示す「グローバル変数特定」処理(S07)を実行する。具体的には、S06で抽出された変数の中から、グローバル変数を抽出する。図14の表は、上記したグローバル変数特定処理(S07)の結果をまとめた「グローバル変数一覧(DO8)」を示す。図5のプログラム例では、グローバル変数としてvFlag, vTempが抽出される。
書込箇所特定部26は、図3に示す「グローバル変数書込、読込箇所特定」処理(S08)を実行する。具体的には、抽出されたグローバル変数に対して書込が行われている行番号を特定する。図15の表は、上記したグローバル変数書込、読込箇所特定処理(S08)の結果をまとめた「グローバル変数書込、読込箇所一覧(DO9)」を示す。図5のプログラム例では、グローバル変数vFlagに対して16行目で書込を行い、31行目で読込を行っている。グローバル変数vTempに対して19行目、23行目、26行目で書込を行い、33行目で読込を行っている。
第1の定数グループ出力部24は、図4に示す「第1のグローバル変数書込箇所特定」処理(S09)を実行する。具体的には、ベース変数毎に、ベース変数が比較される条件文の成立により書き込みが行われるグローバル変数を分類して出力する。図16の表は、上記した第1のグローバル変数書込箇所特定処理(S09)の結果をまとめた「グループ別パラメータ一覧(D10)」を示す。図16では、図12に示す「ブロック行数一覧(DO6)」に対して、書き込まれているグローバル変数を付加している。
例えば、vTemp = 1;というグローバル変数書込個所はsample1.cファイルの19行目であるため、この行番号が属するグループを図12の「ブロック行数一覧(DO6)」の中のブロックリージョンで検索する。その結果、ブロックリージョン“18−20”に該当すると判断できる。
図16に示すように、第1のグループID1で分類されるベース変数「v」は、行番号17及び21の条件文において定数CC1と比較され、行番号17及び21の条件文のブロックでは、グローバル変数vTempに1及び2の書込が行われている、ことが分かる。第1のグループID2で分類されるベース変数「v1」についても同様である。一方、第1のグループID3で分類されるベース変数「vFlag」については、定数CC4, CC2と比較されているが、グローバル変数への書込が行われていない。
以上説明したように、本発明の第1実施形態によれば、以下の作用効果が得られる。
コンフィグレーションパラメータの設定や、キャリブレーションパラメータの設定の例に取り、定数の関連性を検証する必要性についてを示す。先ずは、コンフィグレーションパラメータの例について説明する。本来、インテリジェントキーとイモビライザーの機能は同時にオン或いはオフを設定しなければならない。しかし、設計者がそのことに気付いておらず、片方しか変更していない場合がある。例えば、設計者は仕様がそもそもインテリジェントキーとイモビライザーの機能は独立となっていると勘違いしている場合がある。この場合、単体テストなどの下流のテストにおいて、片方しか変更していないことを発見することができず、これによる不具合につながる。
次に、キャリブレーションパラメータの例について説明する。外部の光量を検出し、検出値に応じて車両に搭載されたライトのオン或いはオフを制御する場合がある。この場合、通常、外部の光量の検出値にヒステリシスを持たせ、ライトのオン・オフの繰り返しによる煩雑さを軽減している。ヒステリシスを変更する場合は制御対象の特性を考え、上限値と下限値を同時に更新しなければならない。しかし、設計者がそのことに気づいていない場合、片方の値しか変更せずに、不具合を発生させてしまう。
このように、本来は2以上の定数を同時に更新しなければならない仕様であるのに、ソフトウェアの定数は個別に設定はできるため、一部の値しか変更せず、不具合が流出してしまう場合がある。すなわち、定数の関連性を検証が必要となる。
そこで、第1実施形態に係わるソフトウェア検査装置は、検査対象となるソースコードD01の中で用いられる定数を抽出し、抽出された定数が参照される条件文を検出する。検出された条件文の中で定数と比較される変数をベース変数として特定し、特定されたベース変数毎に、比較対象となる定数を分類して出力する。これにより、図9に示すように、同じベース変数と比較される定数を分類して出力されるので、ベース変数の共通性という観点から関連性が高い定数群を特定できる。よって、特定された定数群について仕様通りの処理がされているかを容易にレビューすることができる。したがって、仕様の条件によって同時に更新しなければいけない2以上の定数の存在をユーザに提示して、定数の変更の一貫性が保たれていないために不具合が生じる可能性がある箇所をユーザに気づかせることができる。
ソフトウェア検査装置は、検出された条件文が成立する場合に実行されるブロックを特定し、コンピュータプログラムの中でグローバル変数に書き込みを行う箇所を特定する。そして、特定されたブロックの中から、グローバル変数に書き込みを行う箇所が属するブロックを特定し、ベース変数毎に、ベース変数が比較される条件文の成立により書き込みが行われるグローバル変数を分類して出力する。これにより、図16に示すように、グローバル変数の書き込み箇所の関連から仕様上のつながりの強い定数の存在をユーザに提示することができる。ユーザは、書き込まれているグローバル変数と照らし合わせて、仕様通りの処理がされているかレビューすることができる。
第1の定数グループ出力部24は、同じ値が書き込まれた状態のベース変数毎に、定数を分類する。つまり、同じベース変数であっても異なる値が書き込まれている状態であれば、同じグループとして分類しない。これにより、関連性が高い定数群を更に精度良く特定できる。
このように、設計の段階から仕様として処理が抜けている場合や、仕様に定義されていても、単体テストが実施できないようなプログラムの構造の場合、書込処理抜けの不具合を抑制することができる。また、膨大なソースコードから、人の目で判断できない定数変更の一貫性が保たれていないことをユーザに気づかせることができる。また、ソフトウェアプロセスで使用されているテスト(単体テスト、結合テスト、システムテスト)で見つけられないような定数変更一貫性が保たれていないプログラムのバグを未然に防ぐことができる。更に、従来の静的解析ツールでは特定できなかった定数の変更の一貫性が保たれていない箇所を見つることができる。
(第2実施形態)
[ソフトウェア検査装置のハードウェア構成]
第1実施形態では、比較対象となるベース変数の共通性に基づいて関連性の高い定数のグループを特定する例を説明した。第2実施形態では、グローバル変数の書込箇所の共通性に基づいて関連性の高い定数のグループを特定する例を説明する。なお、ソフトウェア検査装置のハードウェア構成は、第1実施形態(図1)と同じであり説明を省略する。
図17を参照して、第2実施形態に係わるCPU11bの機能的構成を説明する。第2実施形態に係わるCPU11bは、定数抽出部21、条件文検出部22、ブロック特定部25、条件文展開部27、書込箇所特定部26、書込ブロック特定部28、及び第2の定数グループ出力部29として機能する。なお、定数抽出部21、条件文検出部22、ブロック特定部25、書込箇所特定部26、及び書込ブロック特定部28は、第1実施形態と同じであり説明を省略する。
条件文展開部27は、条件文検出部22により検出された条件文を展開する。ここでは、ブロック特定部25により特定された各ブロックが実行されるために成立しなければならない条件を全て抽出する。具体的には、if文の条件はそのまま抽出し、else側のブロックについては、if文側の逆の条件が成立したと解釈し、if文側の逆の条件を新たな条件として展開する。展開された各条件文には、条件文が成立する場合に実行されるブロックの範囲(ブロックリージョン)が関連づけられている。
第2の定数グループ出力部29は、展開された条件文に関連付けられたブロックの中から、グローバル変数に書き込みを行う箇所が属するブロックを特定する。展開された条件文の中で参照される定数を抽出する。そして、グローバル変数に書き込みを行う箇所毎に、条件文展開部27により展開された条件文で参照される定数を分類して出力する。
[ソフトウェア検査装置により実行される情報処理の手順]
次に、図3、図4、図18〜図20を参照して、本発明の第2実施形態に係わるソフトウェア検査方法の一例として、図1及び図17に示すソフトウェア検査装置によって実行される情報処理の手順を説明する。
先ず、条件文展開部27は、図4に示す「条件文展開」処理(S10)を実行する。具体的には、図12に示す「ブロック行数一覧(DO6)」に基づいて、総ての条件文を展開する。図18の表は、上記した条件文展開処理(S10)の結果をまとめた「条件文展開一覧(D11)」を示す。if文はそのまま出力し、else文はif文と逆の条件が成立した場合を示す「!」で表記する。例えば、図5(b)の22行目〜24行目のブロックは、17行目の条件の偽と解釈する。図5(b)の26行目〜27行目のブロックは、17行目及び19行目の2つの条件の偽と解釈する。
第2の定数グループ出力部29は、図4に示す「第2のグローバル変数書込箇所特定」処理(S11)を実行する。具体的には、図18の「条件文展開一覧(D11)」及び図15の「グローバル変数書込、読込箇所一覧(DO9)」に基づいて、展開された条件文に関連付けられたブロックの中から、グローバル変数に書き込みを行う箇所が属するブロックを特定する。図19の表は、上記した第2のグローバル変数書込箇所特定処理(S11)の結果をまとめた「グローバル変数書込箇所一覧(D12)」を示す。例えば、図15に示すvTempに1を書き込む19行目は、図18に示すブロックリージョン(18−20)に属すると判断する。ブロックリージョン(32−34)及び(36−38)のように、「条件文展開一覧(D11)」に示すブロックのうち、グローバル変数の書込箇所の行番号が検索されなかったブロックは、除外する。なぜなら、グローバル変数の書込箇所の共通性に基づいて関連性の高い定数を特定できないからである。
第2の定数グループ出力部29は、図4に示す「第1の定数分割」処理(S12)を実行する。具体的には、図19の「グローバル変数書込箇所一覧(D12)」における条件文に含まれる定数を抽出して、抽出された定数毎に異なる行に分割して表示する。図20の表は、上記した第1の定数分割処理(S12)の結果をまとめた「条件文内定数一覧(D13)」を示す。ここでは、グローバル変数に書き込みを行う箇所毎に、第2のグループIDを付して定数を分類している。具体的には、定数CC1, CC2は、グローバル変数vTempに書込を行う19行目が実行されるために必要な条件文の中で参照された定数のグループであるため、第2のグループIDとして「1」を付す。定数CC1, CC2, CC3は、グローバル変数vTempに書込を行う23行目が実行されるために必要な条件文の中で参照された定数のグループであるため、第2のグループIDとして「2」を付す。定数CC1, CC2, CC3は、グローバル変数vTempに書込を行う26行目が実行されるために必要な条件文の中で参照された定数のグループであるため、第2のグループIDとして「3」を付す。
以上説明したように、本発明の第2実施形態によれば、以下の作用効果が得られる。
ソフトウェア検査装置は、検査対象となるソースコードD01の中で用いられる定数を抽出し、抽出された定数が参照される条件文を検出して、検出された条件文を展開する。そして、図20に示すように、グローバル変数に書き込みを行う箇所が属するブロックを特定し、グローバル変数に書き込みを行う箇所毎に、条件文展開部27により展開された条件文で参照される定数を分類して出力する。これにより、グローバル変数に書き込みを行う箇所の共通性という観点から関連性が高い定数群を特定できる。よって、特定された定数群について仕様通りの処理がされているかを容易にレビューすることができる。したがって、仕様の条件によって同時に更新しなければいけない2以上の定数の存在をユーザに提示して、定数の変更の一貫性が保たれていないために不具合が生じる可能性がある箇所をユーザに気づかせることができる。
(第3実施形態)
第3実施形態では、ソースコードD01の中で変数にアクセスする箇所の実行順序に基づいて関連性の高い定数のグループを特定する例を説明する。なお、ソフトウェア検査装置のハードウェア構成は、第1実施形態(図1)と同じであり説明を省略する。
図21を参照して、第3実施形態に係わるCPU11cの機能的構成を説明する。第3実施形態に係わるCPU11cは、定数抽出部21、条件文検出部22、ブロック特定部25、条件文展開部27、アクセス箇所特定部30、アクセスブロック特定部31及び第3の定数グループ出力部32として機能する。なお、定数抽出部21、条件文検出部22、ブロック特定部25、条件文展開部27は、第1実施形態或いは第2実施形態と同じであり説明を省略する。
アクセス箇所特定部30は、ソースコードD01の中で、書き込み及び読み出しが行われる変数、及び当該変数にアクセスする箇所を特定する。具体的には、当該変数にアクセスする行番号、及びアクセスの種類が書込であるか読込であるかを特定する。
アクセスブロック特定部31は、ブロック特定部25により特定されたブロックの中から、アクセス箇所特定部30により特定された箇所が属するブロックを特定する。具体的には、ブロック特定部25により特定されたブロックリージョンのうち、変数にアクセスする行番号が属するブロックリージョンを検索する。
第3の定数グループ出力部32は、アクセス箇所特定部30により特定された変数毎に、アクセス箇所特定部30により特定された箇所の実行順序に従って、条件文展開部27により展開された条件文を並べ替える。そして、アクセス箇所特定部30により特定された変数毎に、当該条件文の中で参照される定数を分類して出力する。
[ソフトウェア検査装置により実行される情報処理の手順]
次に、図3、図4、図22〜図25を参照して、本発明の第3実施形態に係わるソフトウェア検査方法の一例として、図1及び図21に示すソフトウェア検査装置によって実行される情報処理の手順を説明する。
先ず、アクセス箇所特定部30は、図3に示す「変数別書込、読込特定」処理(S13)を実行する。具体的には、図13の「変数一覧(DO7)」に基づいて、変数に書込及び読込を行っている行番号を特定する。図22の表は、上記した変数別書込、読込特定処理(S13)の結果をまとめた「変数別書込、読込箇所一覧(D14)」を示す。ここでは、変数vFlag, v, vTemp, temp, temp2にアクセスする行番号、及びアクセスの種類(書込又は読込)を特定している。なお、変数の読込箇所は、変数が算術式の右辺にある箇所を示し、及び変数の書込個所は、変数が算術式の左辺にある箇所を示す。
アクセス箇所特定部30は、図4に示す「変数別グループ特定」処理(S14)を実行する。具体的には、書込及び読込の両方が行われている変数毎に、変数アクセス箇所を分類する。書込及び読込の一方のみが行われている変数は分類から除外する。図23の表は、上記した変数別グループ特定処理(S14)の結果をまとめた「変数別グループ一覧(D15)」を示す。ここでは、変数vTemp, tempは、書込及び読込の両方が行われているため、それぞれ、第3のグループIDとして「1」及び「2」が付される。一方、変数vFlag, v, temp2は、書込及び読込の一方のみが行われているため、除外される。
アクセスブロック特定部31は、図4に示す「アクセス箇所特定」処理(S15)を実行する。具体的には、変数に書込及び読込を行っている行番号が属するブロックリージョンを特定する。変数に書込及び読込を行っている行番号は、図23の「変数別グループ一覧(D15)」から特定し、ブロックリージョンは、図12の「ブロック行数一覧(DO6)」から特定する。図24の表は、上記したアクセス箇所特定処理(S15)の結果をまとめた「データフロー一覧(D16)」を示す。ここでは、変数にアクセスする行番号、アクセスの種類(書込又は読込)、属するブロックリージョン、及び展開された条件文が、変数毎に分類されている。
第3の定数グループ出力部32は、図4に示す「第2の定数分割」処理(S16)を実行する。図25の表は、上記した第2の定数分割処理(S16)の結果をまとめた「データフロー別定数一覧(D17)」を示す。第3の定数グループ出力部32は、変数別グループ特定処理(S14)で第3のグループIDが付された変数vTemp, temp毎に、変数別書込、読込特定処理(S13)で特定された変数アクセス箇所の実行順序にしたがって、展開された条件文を並べ替える。更に、展開された各条件文に含まれる定数を検索し、定数ごとに行を分割する。S16の処理により、変数の読込が行われる個所までのパスを分析して、総ての条件ごとに、書込及び読込の関係を洗い出すことができる。第3の定数グループ出力部32は、図25の「データフロー別定数一覧(D17)」をユーザに対して出力する。これにより、変数毎に、書込及び読込の処理に関わっている定数を一覧として出力することができ、仕様上の書込及び読込の条件と照らし合わせてチェックすることができる。
以上説明したように、本発明の第3実施形態によれば、以下の作用効果が得られる。
ソフトウェア検査装置は、検査対象となるソースコードD01の中で用いられる定数を抽出し、抽出された定数が参照される条件文を検出して、検出された条件文を展開する。ソースコードD01の中で書き込み及び読み出しが行われる変数、当該変数にアクセスする箇所、当該箇所が属するブロックを特定する。そして、図25に示すように、変数毎に、変数アクセス箇所の実行順序に従って、展開された条件文を並べ替え、且つ当該条件文の中で参照される定数を分類して出力する。これにより、ソースコードD01の中で変数にアクセスする箇所の実行順序に基づいて関連性の高い定数のグループを特定する。よって、特定された定数群について仕様通りの処理がされているかを容易にレビューすることができる。したがって、仕様の条件によって同時に更新しなければいけない2以上の定数の存在をユーザに提示して、定数の変更の一貫性が保たれていないために不具合が生じる可能性がある箇所をユーザに気づかせることができる。
上記のように、本発明の実施形態を記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施の形態、実施例及び運用技術が明らかとなろう。
特願2013−150225号(出願日:2013年7月19日)の全内容は、ここに援用される。
21 定数抽出部
22 条件文検出部
23 ベース変数特定部
24 第1の定数グループ出力部
25 ブロック特定部
26 書込箇所特定部
27 条件文展開部
28 書込ブロック特定部
29 第2の定数グループ出力部
30 アクセス箇所特定部
31 アクセスブロック特定部
32 第3の定数グループ出力部

Claims (7)

  1. コンピュータプログラムを検査するソフトウェア検査装置であって、
    検査対象となる前記コンピュータプログラムの中で用いられる定数を抽出する定数抽出部と、
    前記コンピュータプログラムの中から、前記定数抽出部により抽出された定数が参照される条件文を検出する条件文検出部と、
    前記条件文検出部により検出された条件文の中で前記定数と比較される変数をベース変数として特定するベース変数特定部と、
    前記ベース変数特定部により特定されたベース変数毎に、比較対象となる前記定数を分類して出力する第1の定数グループ出力部と、
    を備えるソフトウェア検査装置。
  2. 前記条件文検出部により検出された条件文が成立する場合に実行される一群のステートメントからなるブロックを特定するブロック特定部と、
    前記コンピュータプログラムの中で、グローバル変数に書き込みを行う箇所を特定する書込箇所特定部と、
    前記ブロック特定部により特定されたブロックの中から、前記書込箇所特定部により特定された箇所が属する前記ブロックを特定する書込ブロック特定部と、を更に備え、
    前記第1の定数グループ出力部は、前記ベース変数毎に、ベース変数が比較される条件文の成立により書き込みが行われるグローバル変数を分類して出力する
    ことを特徴とする請求項1に記載のソフトウェア検査装置。
  3. 前記第1の定数グループ出力部は、同じ値が書き込まれた状態の前記ベース変数毎に、前記定数を分類することを特徴とする請求項1又は2に記載のソフトウェア検査装置。
  4. コンピュータプログラムを検査するソフトウェア検査装置であって、
    検査対象となる前記コンピュータプログラムの中で用いられる定数を抽出する定数抽出部と、
    前記コンピュータプログラムの中から、前記定数抽出部により抽出された定数が参照される条件文を検出する条件文検出部と、
    前記条件文検出部により検出された条件文が成立する場合に実行される一群のステートメントからなるブロックを特定するブロック特定部と、
    前記条件文検出部により検出された条件文を展開する条件文展開部と、
    前記コンピュータプログラムの中で、グローバル変数に書き込みを行う箇所を特定する書込箇所特定部と、
    前記ブロック特定部により特定されたブロックの中から、前記書込箇所特定部により特定された箇所が属する前記ブロックを特定する書込ブロック特定部と、
    前記グローバル変数に書き込みを行う箇所毎に、前記条件文展開部により展開された条件文で参照される定数を分類して出力する第2の定数グループ出力部と、
    を備えるソフトウェア検査装置。
  5. コンピュータプログラムを検査するソフトウェア検査装置であって、
    検査対象となる前記コンピュータプログラムの中で用いられる定数を抽出する定数抽出部と、
    前記コンピュータプログラムの中から、前記定数抽出部により抽出された定数が参照される条件文を検出する条件文検出部と、
    前記条件文検出部により検出された条件文が成立する場合に実行される一群のステートメントからなるブロックを特定するブロック特定部と、
    前記条件文検出部により検出された条件文を展開する条件文展開部と、
    前記コンピュータプログラムの中で、書き込み及び読み出しが行われる変数、及び当該変数にアクセスする箇所を特定するアクセス箇所特定部と、
    前記ブロック特定部により特定されたブロックの中から、前記アクセス箇所特定部により特定された箇所が属する前記ブロックを特定するアクセスブロック特定部と、
    前記アクセス箇所特定部により特定された変数毎に、前記アクセス箇所特定部により特定された箇所の実行順序に従って、前記条件文展開部により展開された条件文を並べ替え、且つ当該条件文の中で参照される定数を分類して出力する第3の定数グループ出力部と、
    を備えるソフトウェア検査装置。
  6. コンピュータプログラムを検査するソフトウェア検査方法であって、
    検査対象となる前記コンピュータプログラムの中で用いられる定数を抽出し、
    前記コンピュータプログラムの中から、抽出された定数が参照される条件文を検出し、
    検出された条件文の中で前記定数と比較される変数をベース変数として特定し、
    特定されたベース変数毎に、比較対象となる前記定数を分類して出力する
    ことを特徴とするソフトウェア検査方法。
  7. コンピュータプログラムを検査するためのソフトウェア検査プログラムであって、
    コンピュータに、
    検査対象となる前記コンピュータプログラムの中で用いられる定数を抽出する機能と、
    前記コンピュータプログラムの中から、抽出された定数が参照される条件文を検出する機能と、
    検出された条件文の中で前記定数と比較される変数をベース変数として特定する機能と、
    特定されたベース変数毎に、比較対象となる前記定数を分類して出力する機能と、
    を実現させることを特徴とするソフトウェア検査プログラム。
JP2015527227A 2013-07-19 2014-06-19 ソフトウェア検査装置、ソフトウェア検査方法、ソフトウェア検査プログラム Active JP6004110B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2013150225 2013-07-19
JP2013150225 2013-07-19
PCT/JP2014/066318 WO2015008575A1 (ja) 2013-07-19 2014-06-19 ソフトウェア検査装置、ソフトウェア検査方法、ソフトウェア検査プログラム

Publications (2)

Publication Number Publication Date
JP6004110B2 true JP6004110B2 (ja) 2016-10-05
JPWO2015008575A1 JPWO2015008575A1 (ja) 2017-03-02

Family

ID=52346048

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015527227A Active JP6004110B2 (ja) 2013-07-19 2014-06-19 ソフトウェア検査装置、ソフトウェア検査方法、ソフトウェア検査プログラム

Country Status (3)

Country Link
JP (1) JP6004110B2 (ja)
CN (1) CN105556484B (ja)
WO (1) WO2015008575A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6572190B2 (ja) * 2016-09-23 2019-09-04 株式会社東芝 ソフトウエア検証用システム及びソフトウエア検証方法
US11237943B2 (en) * 2019-03-08 2022-02-01 Fujitsu Limited Generating inputs for computer-program testing

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03292531A (ja) * 1990-04-11 1991-12-24 Nissan Motor Co Ltd プログラム開発支援装置
JPH09274562A (ja) * 1996-02-08 1997-10-21 Fujitsu Ltd プログラム解析装置およびプログラム解析表示装置
JP2000181700A (ja) * 1998-12-18 2000-06-30 Fujitsu Ltd プログラム解析装置および記録媒体
US6151701A (en) * 1997-09-30 2000-11-21 Ahpah Software, Inc. Method for reconstructing debugging information for a decompiled executable file

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7797690B2 (en) * 2005-03-15 2010-09-14 International Business Machines Corporation System, method and program product to optimize code during run time
KR20120058455A (ko) * 2009-04-28 2012-06-07 인터내셔널 비지네스 머신즈 코포레이션 멀티 스레드 상에서 동작하는 프로그램의 프로그램 코드를 록 충돌이 적은 프로그램 코드로 변환하기 위한 방법, 및 그 컴퓨터 프로그램 및 컴퓨터 시스템

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03292531A (ja) * 1990-04-11 1991-12-24 Nissan Motor Co Ltd プログラム開発支援装置
JPH09274562A (ja) * 1996-02-08 1997-10-21 Fujitsu Ltd プログラム解析装置およびプログラム解析表示装置
US6151701A (en) * 1997-09-30 2000-11-21 Ahpah Software, Inc. Method for reconstructing debugging information for a decompiled executable file
JP2000181700A (ja) * 1998-12-18 2000-06-30 Fujitsu Ltd プログラム解析装置および記録媒体

Also Published As

Publication number Publication date
WO2015008575A1 (ja) 2015-01-22
JPWO2015008575A1 (ja) 2017-03-02
CN105556484B (zh) 2018-02-02
CN105556484A (zh) 2016-05-04

Similar Documents

Publication Publication Date Title
US9772927B2 (en) User interface for selecting tracing origins for aggregating classes of trace data
US8887146B2 (en) System for inspecting information processing unit to which software update is applied
Kapser et al. Aiding comprehension of cloning through categorization
CN110741354B (zh) 呈现代码实体调用之间的差异
CN107766236B (zh) 测试任务自动化管理方法、装置、设备及存储介质
Jiang et al. A framework for studying clones in large software systems
US10241785B2 (en) Determination of production vs. development uses from tracer data
JP6004110B2 (ja) ソフトウェア検査装置、ソフトウェア検査方法、ソフトウェア検査プログラム
KR101979329B1 (ko) 바이너리의 취약점을 유발하는 입력데이터 위치 추적 방법 및 그 장치
CN114461534A (zh) 软件性能测试方法、系统、电子设备及可读存储介质
US20190354468A1 (en) Code coverage module with testing function identifier
JP5963312B2 (ja) 情報処理装置、情報処理方法、及びプログラム
Prazina et al. Methods for Automatic Web Page Layout Testing and Analysis: A Review
JP5967225B2 (ja) データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム
JP6107455B2 (ja) テストスケジュール決定装置、プログラム
CN109491882B (zh) 一种机箱数据处理方法、系统、设备机箱及可读存储介质
US20150199183A1 (en) Program analysis apparatus and program analysis method
KR101583133B1 (ko) 스택 기반 소프트웨어 유사도 평가 방법 및 장치
WO2014112316A1 (ja) フラグアクセス不具合検査装置、フラグアクセス不具合検査方法、フラグアクセス不具合検査プログラム
US20160062744A1 (en) Computer-implemented method for generating control unit program code and message management environment relating thereto
US9852046B1 (en) Method and system for automated debugging memory allocation and memory release
JP6015778B2 (ja) 変数アクセス一貫性検査装置、変数アクセス一貫性検査方法、変数アクセス一貫性検査プログラム
Singh et al. Identifying Various Code-Smells and Refactoring Opportunities in Object-Oriented Software System: A systematic Literature Review
Xu Using Co-evolution of Artefacts in Git Repository to Establish Test-to-Code Traceability Links on Method-Level
Jung et al. Identifying static analysis techniques for finding non-fix hunks in fix revisions

Legal Events

Date Code Title Description
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: 20160809

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160822

R151 Written notification of patent or utility model registration

Ref document number: 6004110

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151