JP5967225B2 - データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム - Google Patents
データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム Download PDFInfo
- Publication number
- JP5967225B2 JP5967225B2 JP2014557376A JP2014557376A JP5967225B2 JP 5967225 B2 JP5967225 B2 JP 5967225B2 JP 2014557376 A JP2014557376 A JP 2014557376A JP 2014557376 A JP2014557376 A JP 2014557376A JP 5967225 B2 JP5967225 B2 JP 5967225B2
- Authority
- JP
- Japan
- Prior art keywords
- update
- variable
- program
- unit
- program 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Description
本発明は、データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラムに関するものである。
1つのセマフォで管理している複数の共有リソース(変数群)のうち、個別のセマフォで管理すべき共有リソースをソースコードの静的解析によって検出するソフトウェア検査装置としては、特許文献1に開示されたソフトウェア検査装置が知られている。特許文献1に開示されたソフトウェア検査装置は、1つのセマフォで保護される変数群を特定する手段を備えており、1つのセマフォで保護された区間で変数群に同時にアクセスしているか否かを確認することができる。
しかし、特許文献1に開示されたソフトウェア検査装置は、セマフォによる保護区間のみを検査対象としているため、セマフォで保護されていない区間を検査することはできない。このため、セマフォで保護されていない区間において、1つの状態あるいは情報を表すために同時にアクセスされる必要がある変数群(複数の変数)に関して、変数の更新漏れを検査することはできない。
本発明は、上記課題に鑑みて成されたものであり、その目的は、1つの状態あるいは情報を表すために同時に更新される必要がある複数の変数に関して、変数の更新漏れの可能性をユーザに気づかせることができるデータ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラムを提供することである。
本発明の一態様に関わる更新漏れ検査装置は、検査対象となるコンピュータプログラムに含まれるステートメントを、複数のプログラムブロックに分類し、プログラムブロック毎に、プログラムブロックの中で更新される変数を抽出し、プログラムブロック毎に対応する更新変数集合を特定し、複数の更新変数集合のうちの少なくとも1つをグループ変数として特定する。プログラムブロックに対応する更新変数集合と、グループ変数の包含関係を用いて、プログラムブロックの同時更新度合いを判断し、その結果を出力する。
本発明の一態様に関わる更新漏れ検査装置は、同時更新度合いが一部であると判断されたプログラムブロックを抽出し、抽出されたプログラムブロックを特定する情報を、判断結果に関連づけて出力することが好ましい。
本発明の一態様に関わる更新漏れ検査装置は、
同時更新度合いが一部であると判断されたプログラムブロックの数と同時更新度合いが完全であると判断されたプログラムブロックの数の和に対する、同時更新度合いが完全であると判断されたプログラムブロックの数の割合を算出し、算出された割合を判断結果に関連づけて出力することが好ましい。
同時更新度合いが一部であると判断されたプログラムブロックの数と同時更新度合いが完全であると判断されたプログラムブロックの数の和に対する、同時更新度合いが完全であると判断されたプログラムブロックの数の割合を算出し、算出された割合を判断結果に関連づけて出力することが好ましい。
本発明の一態様に関わる更新漏れ検査装置は、複数のプログラムブロックの中に、同時更新度合いが一部であると判断されたプログラムブロックがある場合、グループ変数の要素の中から、当該プログラムブロックに対応する更新変数集合に属さない要素を抽出して判断結果に関連づけて出力することが好ましい。
本発明の一態様に関わる更新漏れ検査装置は、複数のプログラムブロックの中に、同時更新度合いが一部であると判断されたプログラムブロックがない場合、グループ変数を特定する情報を、判断結果に関連づけて出力することが好ましい。
図面を参照して、本発明の実施形態を説明する。図面の記載において同一部分には同一符号を付し説明を省略する。
[データ更新漏れ検査装置のハードウェア構成]
本発明の実施形態に係わるデータ更新漏れ検査装置は、例えば車両に搭載される電子制御装置(ECU)により実行されるコンピュータプログラムのデータ更新漏れ検査処理に適用することができる。特に、1つの状態あるいは情報を表すために同時に更新される必要がある複数の変数に関して、変数の更新漏れの可能性を検査するものである。
本発明の実施形態に係わるデータ更新漏れ検査装置は、例えば車両に搭載される電子制御装置(ECU)により実行されるコンピュータプログラムのデータ更新漏れ検査処理に適用することができる。特に、1つの状態あるいは情報を表すために同時に更新される必要がある複数の変数に関して、変数の更新漏れの可能性を検査するものである。
図1を参照して、本発明の第1実施形態に係わるデータ更新漏れ検査装置のハードウェア構成を説明する。データ更新漏れ検査装置のハードウェア構成として、汎用のコンピュータを用いることができる。例えば、データ更新漏れ検査装置は、記憶媒体から検査対象のコンピュータプログラム(ソースコードD01)及び検査に必要なデータ(エントリーポイント一覧D02、ブロックセパレータ一覧D03を含む)を読み込む入出力装置12と、入出力装置12で読み込んだソースコードD01や解析の中間データを格納する記憶装置14と、各種演算を実行してソースコードD01を解析するCPU(中央処理装置)11と、ユーザが解析に必要な情報を入力するための入力装置13と、CPU11から出力される検査結果を表示する表示装置15とを備える。検査結果は、入出力装置12を用いて記憶媒体に書き込むことも可能である。記憶装置14としてはメモリ、ハードディスクなどが挙げられ、記憶装置14とCPU(中央処理装置)11との間で、データの入出力が行われる。
また、データ更新漏れ検査装置は、クライアントサーバモデルとしても実現可能である。例えば、コンピュータネットワークを介して汎用のパーソナルコンピュータ(クライアント)をサーバに接続する。これにより、図1に示すCPU11を備えるリモート環境に置かれたサーバを、コンピュータネットワークを介して、クライアントが備える入出力装置12、入力装置13、記憶装置14、あるいは表示装置15に接続することができる。この場合、データ更新漏れ検査装置は、主にCPU11(サーバ)により構成され、入出力装置12、入力装置13、記憶装置14、あるいは表示装置15はデータ更新漏れ検査装置に含まれない。
図2を参照して、CPU11の機能的構成を説明する。CPU11を備えるコンピュータをデータ更新漏れ検査装置として機能させるためのコンピュータプログラム(データ更新漏れ検査プログラム)を、CPU11を備えるコンピュータにインストールして実行する。これにより、CPU11は、以下に示す各情報処理部として機能する。なお、ここでは、ソフトウェアによってデータ更新漏れ検査装置を実現する例を示すが、もちろん、以下に示す各情報処理を実行するための専用のハードウェアを用意して、データ更新漏れ検査装置を構成することも可能である。
CPU11は、ソースコード入力部21、プログラムブロック分類部22、更新変数抽出部23、グループ変数特定部24、同時性判断部25、及び検査結果出力部29として機能する。プログラムブロック分類部22には、実行関数解析部30と、プログラムブロック特定部31とが含まれる。
ソースコード入力部21は、検査対象となるコンピュータプログラム(ソースコードD01)を入出力装置12あるいは入力装置13から読み取り、記憶装置14に格納する。
実行関数解析部30は、ソースコード入力部21により読み込まれたソースコードD01を解析する。具体的には、入出力装置12あるいは入力装置13から入力されるエントリーポイント一覧D02を用いて、ソースコードD01の中で、直接的および間接的に呼び出される関数を特定する。エントリーポイント一覧D02については、図6を参照して後述する。
プログラムブロック特定部31は、実行関数解析部30で特定された関数の中に含まれるステートメントを、ブロックセパレータを区切れ目として分類する。プログラムブロック特定部31は、ブロックセパレータ一覧D03を参照して、ブロックセパレータを区切れ目としてステートメントを分類する。ブロックセパレータ一覧D03は、入出力装置12あるいは入力装置13から入力される。ユーザがブロックセパレータ一覧D03を入力としてデータ更新漏れ検査装置へ与えない場合、データ更新漏れ検査装置は、図5に示したブロックセパレータ一覧D03をブロックセパレータのデフォルトの値として扱う。ユーザが入力として与えるか、デフォルトのブロックセパレータを使用するかは任意である。ブロックセパレータ一覧D03については、図5を参照して後述する。「ステートメント」とは、ソースコード上の1行ごとの処理単位のことである。
上記した実行関数解析部30及びプログラムブロック特定部31の処理動作によって、プログラムブロック分類部22は、ソースコードD01に含まれる有効な総てのステートメントを、複数のプログラムブロックに分類することができる。ソースコードD01に含まれる有効な総てのステートメントは、複数のプログラムブロックの少なくとも1つのプログラムブロックに属するものとして、もしくは複数のプログラムブロックのいずれか1つのみに属するものとして分類される。
更新変数抽出部23は、プログラムブロックの中で更新される変数を抽出する。更新変数抽出部23は、プログラムブロック分類部22によって分類された複数のプログラムブロックに含まれる各プログラムブロックについて、上記した変数をそれぞれ抽出する。更新変数抽出部23による処理は、プログラムブロック特定部31による処理と同時に行うことができる。
グループ変数特定部24は、プログラムブロック毎に、更新変数抽出部23により抽出された変数(更新変数)を要素とする集合(更新変数集合)をプログラムブロックに対応させて特定し、複数の更新変数集合のうちの少なくとも1つをグループ変数として特定する。なお、実施形態では、複数のプログラムブロックに含まれる総てのプログラムブロックについて、上記したグループ変数を特定する場合について説明する。
同時性判断部25は、プログラムブロック毎に、グループ変数特定部24により特定された更新変数集合に属する要素と、グループ変数特定部24により特定されたグループ変数に属する要素とを比較する。そして、更新変数集合とグループ変数の包含関係を用いて、同時性判断部25は、プログラムブロック毎に、プログラムブロックの同時更新度合いを判断する。判断は、「完全」「一部」「無し」の3段階で行い、その判断の方法は後述する。
検査結果出力部29は、少なくとも同時性判断部25による判断結果を、データ更新漏れ検査結果D04として表示装置15あるいは入出力装置12に挿入された記憶媒体へ出力する。データ更新漏れ検査結果D04については、図15を参照して後述する。
CPU11は、更新漏れ箇所抽出部26として更に機能する。更新漏れ箇所抽出部26は、同時更新度合いが一部であると同時性判断部25により判断されたプログラムブロックを抽出する。検査結果出力部29は、更新漏れ箇所抽出部26により抽出されたプログラムブロックを特定する情報を、同時性判断部25による判断結果に関連づけて出力する。
CPU11は、結合度算出部27として更に機能する。結合度算出部27は、同時更新度合いが一部または完全であると同時性判断部25により判断されたプログラムブロックの数(一部重複ブロック数と完全重複ブロック数の和)を求める。さらに結合度算出部27は、同時更新度合いが完全であると同時性判断部25により判断されたプログラムブロックの数(完全重複ブロック数)を求める。そして、結合度算出部27は、一部重複ブロック数と完全重複ブロック数の和に対する、完全重複ブロック数の割合(「結合度」)を算出する。検査結果出力部29は、結合度算出部27により算出された割合を、同時性判断部25による判断結果に関連づけて出力する。
CPU11は、更新漏れ変数抽出部28として更に機能する。更新漏れ変数抽出部28は、複数のプログラムブロックの中に、同時更新度合いが一部であると同時性判断部25により判断されたプログラムブロックがある場合、グループ変数の要素の中から、当該プログラムブロックに対応する更新変数集合に属さない要素を抽出する。検査結果出力部29は、更新漏れ変数抽出部28により抽出された要素を、判断結果に関連づけて出力する。
複数のプログラムブロックの中に、同時更新度合いが一部であると同時性判断部25により判断されたプログラムブロックがない場合、検査結果出力部29は、グループ変数を特定する情報として、そのグループ変数に属する変数の一覧を、判断結果に関連づけて出力する。
[データ更新漏れ検査装置により実行される情報処理の手順]
次に、図3〜図15を参照して、本発明の実施形態に係わるデータ更新漏れ検査方法の一例として、図1及び図2に示すデータ更新漏れ検査装置によって実行される情報処理の手順を説明する。
次に、図3〜図15を参照して、本発明の実施形態に係わるデータ更新漏れ検査方法の一例として、図1及び図2に示すデータ更新漏れ検査装置によって実行される情報処理の手順を説明する。
図3のフローチャートを参照して説明する。先ず、ステップS01において、ソースコード入力部21は、検査対象となるソースコードD01を例えば入出力装置12から読み込み、記憶装置14に格納する。なお、ソースコードD01は、予め入出力装置12を用いてユーザによりデータ更新漏れ検査装置内に読み込まれ、記憶装置14に格納されていてもよい。この場合、ステップS01の処理は不要である。図4(a)、図4(b)、図4(c)は、読み込まれたソースコードD01として、C言語で記述されたコンピュータプログラムの一例を示す。検査対象となるコンピュータプログラムは、図4(a)、図4(b)、図4(c)に示す3つのファイルに跨って記述されている。図4(a)のファイル名は「File1.c」であり、図4(b)のファイル名は「File2.c」であり、図4(c)のファイル名は「File3.c」である。C言語で記述されたプログラムの一例において、各ファイルの左端部に記載された1から始まる連続番号は、各ファイルの「行番号」を示す。
コンピュータプログラムには、4つの関数が記述されている。図4(a)の「File1.c」の中に、関数「Task1」が記述されている。関数「Task1」は、2つの関数「Func1」及び関数「Func2」を呼び出して終了する。関数「Func1」は図4(b)の「File2.c」の中に記述されている。関数「Func2」は図4(c)の「File3.c」の中に記述されている。図4(c)の「File3.c」の中に、関数「Func3」も記述されている。関数「Func3」は、関数「Task1」により呼び出されないため、実行されない関数である。また、コンピュータプログラム中の、「Sem_Lock(ID1)」とは「ID1」のセマフォによる保護区間の開始命令を示し、「Sem_UnLock(ID1)」とは「ID1」のセマフォによる保護区間の終了命令を示す。
次に、ステップS02において、実行関数解析部30は、エントリーポイント一覧D02を用いて、ソースコードD01の中で、直接的および間接的に呼び出される関数を特定する。特定された関数の各々には関数IDが付される。図6の表は、エントリーポイント一覧D02の一例を示す。「エントリーポイント」は、コンピュータプログラムが開始される箇所を示すものである。車両に搭載される電子制御装置(ECU)により実行されるコンピュータプログラムにおいて、例えば、イグニッションスイッチのオン操作及びエアコンスイッチのオン操作に応じて、複数の異なるエントリーポイントが設定される場合がある。図6に示す表では、エントリーポイントとして関数「Task1」が規定されている。実行関数解析部30は、先ず、関数「Task1」を特定し、次に、サブルーチンコールにより呼び出される関数「Func1」及び関数「Func2」を特定する。関数「Func3」は、関数「Task1」により呼び出されないため、実行関数解析部30は、関数「Func3」を特定しない。実行関数解析部30は、特定した関数「Task1」、「Func1」及び「Func2」に関数IDとして、それぞれ関数ID=1、関数ID=2、関数ID=3を付し、図7に示す実行関数テーブルに登録する。
次に、ステップS03に進み、プログラムブロック特定部31は、関数「Task1」、「Func1」及び「Func2」の中に含まれるステートメントを、ブロックセパレータを区切れ目としてプログラムブロック毎に分類する。分類されたプログラムブロックの各々にはブロックIDが付される。
上記したステップS02の処理によって、実行関数解析部30はソースコードD01に含まれる関数のうちエントリーポイントを基点として呼び出されるすべての関数を特定することができる。さらに、ステップS03の処理によって、プログラムブロック分類部22は、ソースコードD01に含まれる有効な総てのステートメントを読込み、ソースコードD01に含まれる有効な総てのステートメントを、複数のプログラムブロックに分類することができる。
そして、ステップS04に進み、更新変数抽出部23は、プログラムブロック分類部22によって分類された複数のプログラムブロックに含まれる各プログラムブロックについて、プログラムブロックの中で更新される変数を更新変数としてそれぞれ抽出する。
ここで、本例では、図3のフローチャートにおいて符号F01に示すステップS03及びステップS04を同時に実行することができる。ここで図8のフローチャートを参照して、ステップS03及びステップS04の詳細な処理手順の一例を説明する。
先ず、ステップS101において、関数IDを初期化する、すなわち、関数ID=1に設定する。ステップS102において、ブロックIDを初期化する、すなわち、ブロックID=1に設定する。ステップS103へ進み、プログラムブロック特定部31は、ステップS101で初期化された関数IDで特定される関数(対象関数)に含まれるステートメントをメモリ上に読み込む。
S104に進み、プログラムブロック特定部31は、ブロックセパレータ一覧D03を参照して、読み込んだステートメントのうち最初のステートメント(対象ステートメント)がブロックセパレータに合致するか否かを判断する。図5の表は、ブロックセパレータ一覧D03の一例を示す。ブロックセパレータ一覧D03には、セパレータID、処理の内容、及びソースコード記述(ブロックセパレータ)が記載されている。「ブロックセパレータ」には、ソースコードD01の処理の節目となる命令、例えば分岐命令やジャンプ命令が含まれる。プログラムブロック特定部31は、対象ステートメントが、図5の表に記載されたソースコード記述(ブロックセパレータ)に合致するか否かを判断する。
対象ステートメントがブロックセパレータに合致しない場合(ステップS104でNO)、ステップS105に進み、対象ステートメントにブロックIDを付す。ステップS106に進み、更新変数抽出部23は、対象ステートメントにおいて更新される変数を、「更新変数テーブル」に登録する。その後、ステップS109へ進む。
一方、対象ステートメントがブロックセパレータに合致する場合(ステップS104でYES)、ステップS107に進み、次のステートメントがブロックセパレータに合致するか否かを判断する。次のステートメントがブロックセパレータに合致しない場合(ステップS107でNO)、ステップS108でブロックIDをカウントアップしてから、ステップS109へ進む。一方、次のステートメントがブロックセパレータに合致する場合(ステップS107でYES)、ステップS109へ直接進む。
ステップS109において、対象ステートメントが、対象関数に含まれる最後のステートメントでない場合(ステップS109でNO)、次のステートメントを対象ステートメントに設定して(S110)、ステップS104へ戻る。ステップS109において、対象ステートメントが、対象関数に含まれる最後のステートメントである場合(ステップS109でYES)、ステップS111へ進む。ステップS111において、対象関数が、図7に示す最後の関数でない場合(ステップS111でNO)、ステップS112で関数IDをカウントアップする。その後、対象関数を次の関数に設定し、設定された関数の先頭にステートメント読み出し箇所を設定して(ステップS113)、ステップS103へ戻る。対象関数が最後の関数、本実施形態においては図7で示す「Func2」である場合(ステップS111でYES)、図8のフローチャートは終了する。
図9は、図4(a)、図4(b)、図4(c)に示すコンピュータプログラムに含まれるステートメントを複数のプログラムブロックに分類した結果をまとめた表である。各関数に含まれる総てのステートメントについて、関数ID、ファイル名、行番号、ステートメントの内容、及びブロックIDが関連づけされている。図8に示す処理を実行することにより、ブロックセパレータ直後のステートメントから次のブロックセパレータ直前のステートメントまでに同じブロックIDを付すことができる。ブロックセパレータ、又は、連続したブロックセパレータを跨ぐ時点で、ブロックIDをカウントアップする。ブロックセパレータ直後から次のブロックセパレータ直前までのステートメントを1つのプログラムブロックに属するステートメントとして登録することができる。全関数内の全ステートメントについて同様の処理を繰り返すことにより、プログラムブロック分類部22は、解析対象となるソースコードD01中の有効な全てのステートメントをプログラムブロックに分類することができる。
ステートメントの分類と同時に、更新変数抽出部23は、検査対象のステートメントにおいて更新処理が行われる変数を抽出して、更新変数テーブルに登録する(S106)。図10は、図4(a)、図4(b)、図4(c)に示すコンピュータプログラムに含まれるステートメントから抽出された変数を登録した更新変数テーブルの一例を示す表である。更新変数テーブルには、プログラムブロック分類部22により分類されたプログラムブロック毎に、変数が登録されている。図10に示すように、ステップS04で抽出された変数は、抽出された順番で登録される。同じ変数が同一のプログラムブロック内で2回以上抽出された場合、当該変数は、2回以上重複して登録される。更新変数テーブルに登録された変数は、更新変数として取り扱われる。
解析対象となるソースコードD01中の有効な全てのステートメントのプログラムブロックへの分類が完了したときには、ソースコードD01中の有効な全てのステートメントにおける更新処理が行われる変数の抽出が完了する。完了時、抽出された変数は、プログラムブロック毎に分類された状態で、更新変数テーブルにすべて登録された状態となっている。更新変数テーブルは、記憶装置14において格納されていても良いし、CPU11に搭載されているレジストリなどのメモリに格納されていても良い。
再び図3に戻りステップS05に進む。ここでグループ変数特定部24は、図10に示す更新変数テーブルを用いて、プログラムブロック毎に、そのプログラムブロックの中で更新される変数(更新変数)を要素とする集合(「更新変数集合」と呼ぶ)を特定する。より詳細には、グループ変数特定部24は、更新変数テーブルに登録された更新変数の登録の順番を整え、同じ更新変数の重複登録を排除することにより、プログラムブロックの各々について更新変数集合を特定する。各プログラムブロックに対応して特定された更新変数集合を、そのプログラムブロックを指し示すブロックIDを表す変数nを付して、以下、更新変数集合Qnとして表す。更新変数集合Qnは、変数nによって指定されるプログラムブロックにおいて更新される更新変数のみを要素としており、更新変数集合Qnの要素は重複しない。なお変数nは自然数を取り、取りうる値の最大値は、ソースコード内のプログラムブロックの個数に等しい。
次に、更新変数集合Qnを要素とする集合において、重複する要素(更新変数集合Qn)を排除して新たに集合を作成する。この集合の要素は、更新変数集合を要素として有する集合であることに注意する。この新たに作成された集合の要素を、以下では、グループ変数と呼ぶ。各グループ変数にはグループ変数IDを表す変数iを付し、グループ変数Piとして表す。なお変数iは自然数を取り、取りうる値の最大値は、前述した重複を排除して新たに作成した集合の要素数に等しい。
図11において、上記説明した更新変数集合Qnおよびグループ変数Piのグループ変数特定部24による特定についてより具体的に説明する。図11の表に示す例では、更新変数集合Qnとして、Q1={X、Y、Z}、Q2={X、Z}、Q3={X、Y、Z}、Q4={W、X、Z}が特定されている。ここで、ブロックIDがn=1及びn=3のときの更新変数集合Q1とQ3は、同一の更新変数のみを要素として有しているため、更新変数集合Qnを要素とする集合において、更新変数集合Q1と更新変数集合Q3は重複した要素となっている。そのため、この例では更新変数集合Q3を排除する。この作業によって新しく作成された集合の要素をグループ変数Piとして特定する。したがって、図11の表に示す例では、グループ変数特定部24は、グループ変数PiとしてP1={X、Y、Z}、P2={X、Z}、P3={W、X、Z}の3つのグループ変数を特定されている。
ステップS06に進み、同時性判断部25は、ステップS04でプログラムブロック毎に抽出された変数(更新変数集合Qnに属する変数)と、ステップS05で特定されたグループ変数に属する変数とを比較することで、ステップS04で抽出された変数に更新漏れがあるか否かを判断する。換言すれば、同時性判断部25は、各プログラムブロックに対して、グループ変数の同時更新度合い(同時性)を判断する。判断は、「完全」、「一部」、「無し」の3段階で行う。ここで、図12のフローチャートを参照して、ステップS06の詳細な処理手順の一例を説明する。
先ず、ステップS201において、ブロックIDを初期化する。すなわち、n=1に設定する。ステップS202において、ステップS04においてプログラムブロック毎に抽出された変数の集合である更新変数集合Qnを取得する。ステップS203において、グループ変数IDを初期化する、すなわち、i=1に設定する。ステップS204において、ステップS05において特定されたグループ変数Piを取得する。
ステップS205に進み、グループ変数Piが更新変数集合Qnの部分集合であるか否かを判断する。グループ変数Piが更新変数集合Qnの部分集合である場合(S205でYES)、グループ変数Piに属する総ての要素(変数)が、更新変数集合Qnに属する変数と重複する。よって、ステップS206において、同時性判断部25は、同時更新度合いを「完全」と判断する。その後、ステップS210へ進む。
一方、更新変数集合Qnに属さないグループ変数Piの要素(変数)がある場合、すなわちグループ変数Piが更新変数集合Qnの部分集合でない場合(ステップS205でNO)、ステップS207に進む。
ステップS207では、グループ変数Piと更新変数集合Qnの共通部分が空集合(φ)で無いか否かを判断する。グループ変数Piと更新変数集合Qnとの共通部分が空集合で無い場合(ステップS207でYES)、ステップS208において、同時性判断部25は、同時更新度合いを「一部」と判断する。つまり、ステップS207でYESの場合、グループ変数Piに属する一部の要素(変数)のみが、更新変数集合Qnに属する変数と重複しており、更新変数集合Qnに属さないグループ変数Piの要素が存在すると判断できる。よって、同時更新度合いを「一部」と判断する。その後、ステップS210へ進む。
更に、グループ変数Piと更新変数集合Qnとの共通部分が空集合で有る場合(ステップS207でNO)、ステップS209において、同時性判断部25は、同時更新度合いを「無し」と判断する。つまり、ステップS207でNOの場合、グループ変数Piに属するいずれの要素(変数)も、更新変数集合Qnに属する変数と重複していないと判断できる。よって、同時更新度合いを「無し」と判断する。その後、ステップS210へ進む。
ステップS210において、ステップS204で取得されたグループ変数Piが最後のグループ変数であるか否かを判断する。グループ変数Piが最後のグループ変数でなければ(ステップS210でNO)、変数iをカウントアップして(ステップS211)、ステップS204へ戻る。グループ変数IDを表す変数iの値が、その取りうる値の最大値に等しいとき、すなわちグループ変数Piが最後のグループ変数であるとき(ステップS210でYES)、ステップS212に進み、ステップS202で取得された更新変数集合Qnが最後の更新変数集合であるか否かを判断する。すなわち、最後のプログラムブロックに対して同時性判断を行ったか否かを判断する。更新変数集合Qnが最後の更新変数集合でなければ(ステップS212でNO)、変数nをカウントアップして(ステップS213)、ステップS202へ戻る。ブロックIDを表す変数nの値が、その取りうる値の最大値に等しいとき、すなわち更新変数集合Qnが最後の更新変数集合であるとき(ステップS212でYES)、図12に示すフローチャートは終了する。このようにして、総てのプログラムブロック及び総てのグループ変数に関して、ステップS205〜S209の処理を実行することができる。
図12を参照して説明したように、図3のステップS06において、以下の処理を実行することができる。同時性判断部25は、ステップS04で抽出された変数を要素とする集合(更新変数集合Qn)と、ステップS05で特定されたグループ変数Piとを比較する。そして、複数のプログラムブロックの中に、更新変数集合Qnに属する変数がグループ変数Piに属する一部の変数のみと重複するプログラムブロックが有るか否かを判断することができる。
上述した処理内容をまとめると、同時性判断部25は、更新変数集合Qnとグループ変数Piの互いの包含関係によって、判断対象のプログラムブロックの同時更新度合いを判断する。
同時性判断部25は、更新変数集合Qnに属する変数がグループ変数Piに属する一部の変数のみと重複するプログラムブロックを、同時更新度合い「一部」と判断する。すなわち、グループ変数Piに属する一部の変数が、判断対象のプログラムブロックに対応する更新変数集合Qnに属しており、グループ変数Piに属するその他の変数がその更新変数集合Qnに属していない場合に、同時性判断部25はそのプログラムブロックについて、同時更新度合い「一部」と判断する。
また、同時性判断部25は、更新変数集合Qnに属する変数がグループ変数Piに属する総ての変数と重複するプログラムブロックを、同時更新度合い「完全」と判断する。すなわち、グループ変数Piに属する全ての変数が、判断対象のプログラムブロックに対応する更新変数集合Qnに属している場合に、同時性判断部25はそのプログラムブロックについて、同時更新度合い「完全」と判断する。
また、同時性判断部25は、更新変数集合Qnに属する変数がグループ変数Piに属する何れの変数とも重複しないプログラムブロックを、同時更新度合い「無し」と判断する。すなわち、グループ変数Piに属する全ての変数が、判断対象のプログラムブロックに対応する更新変数集合Qnに属していない場合に、同時性判断部25はそのプログラムブロックについて、同時更新度合い「無し」と判断する。
図13の表は、図3のステップS06の処理結果をまとめた「変数更新同時性一覧」を示す。Q1〜Q4は更新変数集合を、P1〜P3はグループ変数をそれぞれ示しており、図10、図11で示すように、更新変数を要素としている。
図3に戻り、ステップS07に進む。ステップS07において、更新漏れ箇所抽出部26は、ステップS06で更新の漏れがあると判断されたプログラムブロックを抽出する。具体的には、ステップS06で同時更新度合い「一部」と判断されたプログラムブロックを抽出する。
これにより、ステップS04で抽出された変数がステップS05で特定されたグループ変数Piに属する一部の要素のみと重複するプログラムブロックを抽出することができる。ここで同時更新度合いを「一部」と判断するステップS06での方法によって理解されるように、「一部の要素のみと重複する」とは、ステップS05で特定されたグループ変数Piに属する一部の変数がステップS04で抽出された変数(抽出する対象のプログラムブロックに対応する更新変数集合Qnに属する変数)と重複し、グループ変数Piに属する一部の変数以外のその他の変数がステップS04で抽出された変数と重複しないことを意味する。
ここで、各グループ変数に対して、同時更新度合い「一部」と判断されたプログラムブロックのブロックIDを「更新漏れがあるブロックID」として定義すると、更新漏れ箇所を特定する情報として利用できる。
ステップS08に進み、結合度算出部27は、ステップS06で同時更新度合い「完全」と判断されたプログラムブロックの数(完全重複ブロック数)を求める。そして、結合度算出部27は、ステップS06で同時更新度合い「一部」と判断されたプログラムブロックの数(一部重複ブロック数)を求める。完全重複ブロック数と一部重複ブロック数の和は、ステップS04で抽出された変数がステップS05で特定されたグループ変数に属する少なくとも一部の変数と重複するプログラムブロックの数を表しており、この和は、同時更新度合い「一部」あるいは「完全」と判断されたプログラムブロックの数を表している。結合度算出部27は、この和に対する、同時更新度合い「完全」と判断されたプログラムブロックの数の割合を「結合度」として算出する。
すなわち、「結合度」の算出において、同時更新度合いが「一部」または「完全」と判断されたプログラムブロックの数のみを使用し、同時更新度合い「無し」と判断されたプログラムブロックの数を除いている。そのため、グループ変数の要素である更新変数に対して更新を行わないプログラムブロックの数は、「結合度」の算出に影響を及ぼさない。その結果、「結合度」は、グループ変数の要素である更新変数の少なくとも一部を更新するプログラムブロックのうち、グループ変数の要素である更新変数のすべてにアクセスするプログラムブロックの割合を示す指標となっている。
ステップS09に進み、更新漏れ変数抽出部28は、同時更新度合い「一部」と判断されたプログラムブロックにおいて、グループ変数に属する要素の中から、当該プログラムブロックに対応する更新変数集合に属さない要素を「更新漏れ変数」として抽出する。
ステップS10に進み、検査結果出力部29は、ステップS06における、更新漏れがあるか否かの判断結果を出力する。この時、検査結果出力部29は、ステップS07で抽出されたプログラムブロックを特定する情報、ステップS08で算出された結合度、及びステップS09で特定された更新漏れ変数を特定する情報のうち少なくともいずれか1つを、ステップS06における判断結果に関連づけて出力することができる。
更新漏れ変数を特定する情報として利用するため、ステップS09において、「更新漏れ変数の集合R」を、グループ変数Piから更新変数集合Qnを引いた差集合(R=Pi\Qn)として定義できる。すなわち、グループ変数Piに属し、更新変数集合Qnに属さない要素の集合として「更新漏れ変数の集合R」を定義できる。
図14の表は、図3のステップS07で抽出された更新漏れ箇所、ステップS08で算出された結合度及びステップS09で抽出された更新漏れ変数を、グループ変数P1〜P3毎にまとめた表である。更新漏れ箇所は「更新漏れがあるブロックID」によって示されており、更新漏れ変数の一覧は、「更新漏れ変数の集合R」によって示されている。上述した「更新漏れがあるブロックID」および「更新漏れ変数の集合R」は、それぞれ更新漏れ箇所、更新漏れ変数を特定する情報の一例にすぎない。
図15の表は、ステップS10で出力される判断結果の一例を示す。検査結果出力部29は、グループ変数P1〜P3毎に更新漏れがあるか否かの判断結果を出力する。「更新漏れの有無」は、更新漏れがあるか否かの判断結果を示す。図15の表は、「結合度」、更新漏れ箇所を特定する情報としての「ブロックID」、「ファイル名」、及び「行数」、及び「更新漏れ変数」が、更新漏れがあるか否かの判断結果に関連づけて出力される例を示す。検査結果出力部29は、少なくとも、グループ変数P1〜P3毎に更新漏れがあるか否かの判断結果を出力すればよい。
また、図15の例では、結合度が100%である、つまり更新漏れ箇所が無いグループ変数P2が出力されている。グループ変数P2に関して更新漏れ箇所が無い。つまり、複数のプログラムブロック(ブロックID:n=1〜4)の中に、グループ変数P2={X、Z}との同時更新度合いが「一部」であると同時性判断部25によって判断されたプログラムブロックが無い。この場合、検査結果出力部29は、グループ変数P2を特定する情報、例えばグループ変数P2に属する変数{X、Z}を、判断結果に関連づけて出力してもよい。
図15に示す出力例に基づいて、ユーザは、図4(a)の9行目の後にYの更新処理を実行するステートメントを追加することができる。またユーザは、図4(c)の4行目に示すWの更新処理についてのステートメントが誤りである可能性に気づいて、必要に応じてWの更新処理からYの更新処理へステートメントを変更する修正を加えることができる。
上述した図4(a)の9行目の後にステートメントの追加、及び図4(c)の4行目に対する修正が行われたソースコードに対して、再度、本願発明であるデータ更新漏れ検査装置による検査を行った場合、図15に示す更新漏れの有無で「有り」と示された箇所がすべて「無し」に変わることが分かる。その結果、グループ変数を構成する変数に対する更新漏れをなくすことができる。
[実施形態による効果]
コンピュータプログラムにおいて、2次元あるいは3次元の座標や住所録など、複数の変数によって一つの状態や情報が表現されるデータを扱う場合、複数の変数を一つのグループ変数として管理及びアクセスするのが一般的である。グループ変数を登録あるいは更新するときは、常にグループ変数に属する総ての要素(変数)を同時に登録あるいは更新する。なぜなら、変数同士の間で値の新鮮さに不整合が起きないようにするためである。ところが、一部の要素(変数)しか更新しない処理が実行されると、その後、グループ変数内で古い時点若しくは地点における更新情報を持つ要素(変数)と、新しい時点若しくは地点における更新情報を持つ要素(変数)が混在してしまう。結果的に、全体として不正な状態あるいは情報を表現することになる。
コンピュータプログラムにおいて、2次元あるいは3次元の座標や住所録など、複数の変数によって一つの状態や情報が表現されるデータを扱う場合、複数の変数を一つのグループ変数として管理及びアクセスするのが一般的である。グループ変数を登録あるいは更新するときは、常にグループ変数に属する総ての要素(変数)を同時に登録あるいは更新する。なぜなら、変数同士の間で値の新鮮さに不整合が起きないようにするためである。ところが、一部の要素(変数)しか更新しない処理が実行されると、その後、グループ変数内で古い時点若しくは地点における更新情報を持つ要素(変数)と、新しい時点若しくは地点における更新情報を持つ要素(変数)が混在してしまう。結果的に、全体として不正な状態あるいは情報を表現することになる。
具体的な事例として、図16に示すコンピュータプログラムの例を用いて説明する。コンピュータプログラム中の、「Sem_Lock(ID1)」とはID1により識別されるセマフォによる保護区間の開始命令、「Sem_UnLock(ID1)」とはID1により識別されるセマフォによる保護区間の終了命令である。図16に示すコンピュータプログラムの例では、変数X、Y、Zを要素とするグループ変数の更新を行っている。本来、総ての要素X、Y、Zは常に同時にアクセスされるべきである。しかし、符号AM1に示すように21行目で「Z」の更新が漏れており、符号AM2に示すように25行目で「Y」の更新が漏れている。
本発明の実施形態に係わるデータ更新漏れ検査装置では、プログラムブロック分類部22が検査対象となるコンピュータプログラムに含まれるステートメントを複数のプログラムブロックに分類し(図9)、更新変数抽出部23がプログラムブロックの各々の中で更新される変数をそれぞれ抽出する(図10)。そしてグループ変数特定部24が、プログラムブロック毎に対応する更新変数集合を特定し、複数の更新変数集合のうちの少なくとも1つをグループ変数として特定する(図11)。同時性判断部25が、プログラムブロックに対応する更新変数集合と、グループ変数の包含関係を用いて、プログラムブロックの同時更新度合いを判断して(図13)、検査結果出力部29がその判断結果をデータ更新漏れ検査結果D04として、入出力装置12もしくは表示装置15に出力する(図15)。判断結果を出力することにより、複数のプログラムブロックの中で、グループ変数に含まれる総ての変数(変数)が同時に更新されないプログラムブロックが有るか否かをユーザ通知することができる。その結果、ユーザは変数の更新漏れの可能性があるプログラムブロックの存在に気づくことができる。
同時更新度合いが一部であると同時性判断部25により判断されたプログラムブロックがある場合、複数のプログラムブロックの中で、グループ変数に含まれる総ての変数(変数)が同時に更新されないプログラムブロックが有ることになる。この場合、1つの状態あるいは情報を表すために同時に更新される必要がある複数の変数に関して、変数の更新漏れの可能性がある。よって、判断結果を出力することにより、意味的結合度の高い変数(即ち、グループ変数)のうち、一部の変数が同時にアクセスされない箇所があることを検出できる。そして正しくコーディングされていない箇所があることをユーザに気づかせることができる。また、膨大なソースコードから、人の目で判断できない変数の更新漏れをユーザに気づかせることができる。レガシーコードのような仕様書が整備されていないコードや、分散開発等により他拠点で開発されたコードなど、変数同士の意味的な結合関係に関する情報が乏しいケースにおいて、ソースコードから自動的に検出できる効果は大きい。
データ更新漏れ検査装置は、同時更新度合いが一部であると同時性判断部25により判断されたプログラムブロックを抽出する(図14)更新漏れ箇所抽出部26を備える。更新漏れ箇所抽出部26により抽出されたプログラムブロックを特定する情報を、前述した判断結果に関連づけて出力する(図15)。複数のプログラムブロックの中で検証すべきプログラムブロックが特定されるので、ユーザによる検証作業の効率を高めることができる。
データ更新漏れ検査装置は、同時更新度合いが一部であると同時性判断部25により判断されたプログラムブロックの数(一部重複ブロック数)と同時更新度合いが完全であると同時性判断部25により判断されたプログラムブロックの数(完全重複ブロック数)の和に対する、同時更新度合いが完全であると同時性判断部25により判断されたプログラムブロックの数(完全重複ブロック数)の割合を結合度として算出する(図14)結合度算出部27を備える。そして、結合度算出部27により算出された割合(結合度)を、前述した判断結果に関連づけて出力する(図15)。そのため、変数の更新漏れの可能性を数値化することができる。ソースコードから自動的に変数同士の意味的結合度を測定することが可能になる。抽出された変数がグループ変数に属する一部の要素のみと重複するプログラムブロックがある場合において、割合(結合度)が高い程、つまり、100%に近い程、変数の更新漏れの可能性が高まる。変数の更新漏れの可能性がある箇所として、複数の集合あるいは複数のプログラムブロックを特定する情報が出力される場合、検証対象としての優先度をユーザに伝えることができるので、ユーザによる検証作業の効率を高めることができる。結合度が100%未満だが極めて100%に近い値のグループ変数を点検することで、レガシーコードの移植ミスや、分散開発されたソースコードの結合ミスにより、一部の要素(変数)の更新が欠落してしまうような問題を、効率よく発見できる。
データ更新漏れ検査装置は、複数のプログラムブロックの中に、同時更新度合いが一部であると同時性判断部25により判断されたプログラムブロックがある場合、グループ変数の要素の中から、当該プログラムブロックに対応する更新変数集合に属さない要素を抽出する(図14)更新漏れ変数抽出部28を備える。そして、更新漏れ変数抽出部28により抽出された変数を、判断結果に関連づけて出力する(図15)。そのため、更新漏れの可能性がある要素(変数)を特定することができる。ユーザは検証すべき箇所を容易に特定できるので、ユーザによる検証作業の効率を高めることができる。
データ更新漏れ検査装置は、複数のプログラムブロックの中に、同時更新度合いが一部であると同時性判断部25により判断されたプログラムブロックがない場合、グループ変数を特定する情報を、前述した判断結果に関連づけて出力する。そのため、検査対象となるコンピュータプログラムにおいて、変数の更新漏れが無い要素(変数)の集合を特定することができる。よって、コンピュータプログラムの仕様として維持あるいは管理するべき情報として有用性の高い情報を容易に得ることができる。
以上、本発明の実施形態について説明したが、これらの実施形態は本発明の理解を容易にするために記載された単なる例示に過ぎず、本発明は当該実施形態に限定されるものではない。本発明の技術的範囲は、上記実施形態で開示した具体的な技術事項に限らず、そこから容易に導きうる様々な変形、変更、代替技術なども含むものである。この開示から当業者には様々な代替実施の形態、実施例及び運用技術が明らかとなろう。
本出願は、2013年1月21日に出願された日本国特許願第2013−008353号に基づく優先権を主張しており、この出願の全内容が参照により本明細書に組み込まれる。
本発明によれば、プログラムブロックの中で更新される変数を抽出して、そのプログラムブロックに対応する更新変数集合を特定し、その更新変数集合の中から少なくとも1つをグループ変数として特定する。そして更新変数集合とグループ変数の包含関係を用いることで、プログラムグループ毎にグループ変数に対する同時更新度合いを判断する。判断結果を出力することにより、1つの状態あるいは情報を表すために同時に更新される必要がある複数の変数に関して、変数の更新漏れの可能性をユーザに気づかせることができる。
21 ソースコード入力部
22 プログラムブロック分類部
23 更新変数抽出部
24 グループ変数特定部
25 同時性判断部
26 更新漏れ箇所抽出部
27 結合度算出部
28 更新漏れ変数抽出部
29 検査結果出力部
30 実行関数解析部
31 プログラムブロック特定部
D01 ソースコード(コンピュータプログラム)
D02 エントリーポイント一覧
D03 ブロックセパレータ一覧
D04 データ更新漏れ検査結果
Pi グループ変数
Qn 更新変数集合
22 プログラムブロック分類部
23 更新変数抽出部
24 グループ変数特定部
25 同時性判断部
26 更新漏れ箇所抽出部
27 結合度算出部
28 更新漏れ変数抽出部
29 検査結果出力部
30 実行関数解析部
31 プログラムブロック特定部
D01 ソースコード(コンピュータプログラム)
D02 エントリーポイント一覧
D03 ブロックセパレータ一覧
D04 データ更新漏れ検査結果
Pi グループ変数
Qn 更新変数集合
Claims (7)
- コンピュータプログラムを検査するデータ更新漏れ検査装置であって、
検査対象となる前記コンピュータプログラムに含まれるステートメントを、複数のプログラムブロックに分類するプログラムブロック分類部と、
前記プログラムブロック毎に、前記プログラムブロックの中で更新される変数を抽出する更新変数抽出部と、
前記プログラムブロック毎に対応する更新変数集合を特定し、前記複数の更新変数集合のうちの少なくとも1つをグループ変数として特定するグループ変数特定部と、
前記プログラムブロックに対応する前記更新変数集合と、前記グループ変数の包含関係を用いて、前記プログラムブロックの同時更新度合いを判断する同時性判断部と、
前記同時性判断部による判断結果を出力する検査結果出力部と
を備えることを特徴とするデータ更新漏れ検査装置。 - 請求項1に記載のデータ更新漏れ検査装置において、
同時更新度合いが一部であると前記同時性判断部により判断されたプログラムブロックを抽出する更新漏れ箇所抽出部を更に備え、
前記検査結果出力部は、前記更新漏れ箇所抽出部により抽出された前記プログラムブロックを特定する情報を、前記判断結果に関連づけて出力することを特徴とするデータ更新漏れ検査装置。 - 請求項1又は2に記載のデータ更新漏れ検査装置において、
同時更新度合いが一部であると前記同時性判断部により判断されたプログラムブロックの数と同時更新度合いが完全であると前記同時性判断部により判断されたプログラムブロックの数の和に対する、同時更新度合いが完全であると前記同時性判断部により判断されたプログラムブロックの数の割合を算出する結合度算出部を更に備え、
前記検査結果出力部は、前記結合度算出部により算出された割合を、前記判断結果に関連づけて出力する
ことを特徴とするデータ更新漏れ検査装置。 - 請求項1乃至3のいずれか一項に記載のデータ更新漏れ検査装置において、
前記複数のプログラムブロックの中に、同時更新度合いが一部であると前記同時性判断部により判断されたプログラムブロックがある場合、前記グループ変数の要素の中から、当該プログラムブロックに対応する更新変数集合に属さない要素を抽出する更新漏れ変数抽出部を更に備え、
前記検査結果出力部は、前記更新漏れ変数抽出部により抽出された要素を、前記判断結果に関連づけて出力する
ことを特徴とするデータ更新漏れ検査装置。 - 請求項1乃至4のいずれか一項に記載のデータ更新漏れ検査装置において、
前記複数のプログラムブロックの中に、同時更新度合いが一部であると前記同時性判断部により判断されたプログラムブロックがない場合、前記検査結果出力部は、前記グループ変数を特定する情報を、前記判断結果に関連づけて出力することを特徴とするデータ更新漏れ検査装置。 - コンピュータプログラムを検査するデータ更新漏れ検査方法であって、
検査対象となる前記コンピュータプログラムに含まれるステートメントを、複数のプログラムブロックに分類し、
前記プログラムブロック毎に、前記プログラムブロックの中で更新される変数を抽出し、
前記プログラムブロック毎に対応する更新変数集合を特定し、前記複数の更新変数集合のうちの少なくとも1つをグループ変数として特定し、
前記プログラムブロックに対応する前記更新変数集合と、前記グループ変数の包含関係を用いて、前記プログラムブロックの同時更新度合いを判断し、
前記判断の結果を出力する
ことを特徴とするデータ更新漏れ検査方法。 - コンピュータプログラムを検査するためのデータ更新漏れ検査プログラムであって、
コンピュータに、
検査対象となる前記コンピュータプログラムに含まれるステートメントを、複数のプログラムブロックに分類する機能と、
前記プログラムブロック毎に、前記プログラムブロックの中で更新される変数を抽出する機能と、
前記プログラムブロック毎に対応する更新変数集合を特定し、前記複数の更新変数集合のうちの少なくとも1つをグループ変数として特定する機能と、
前記プログラムブロックに対応する前記更新変数集合と、前記グループ変数の包含関係を用いて、前記プログラムブロックの同時更新度合いを判断する機能と、
前記判断の結果を出力する機能と、
を実現させることを特徴とするデータ更新漏れ検査プログラム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013008353 | 2013-01-21 | ||
JP2013008353 | 2013-01-21 | ||
PCT/JP2013/084612 WO2014112303A1 (ja) | 2013-01-21 | 2013-12-25 | データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP5967225B2 true JP5967225B2 (ja) | 2016-08-10 |
JPWO2014112303A1 JPWO2014112303A1 (ja) | 2017-01-19 |
Family
ID=51209405
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014557376A Active JP5967225B2 (ja) | 2013-01-21 | 2013-12-25 | データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム |
Country Status (3)
Country | Link |
---|---|
JP (1) | JP5967225B2 (ja) |
CN (1) | CN104885060B (ja) |
WO (1) | WO2014112303A1 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104899616B (zh) * | 2015-04-10 | 2018-09-07 | 中国科学技术大学先进技术研究院 | 一种基于智能工卡的信息管理方法、***和设备 |
CN109725629B (zh) * | 2018-12-29 | 2020-05-22 | 一汽-大众汽车有限公司 | 一种整车控制器刷新测试*** |
CN112612516B (zh) * | 2020-12-30 | 2024-05-03 | 瑞庭网络技术(上海)有限公司 | 一种代码处理方法及装置 |
CN113176889A (zh) * | 2021-04-28 | 2021-07-27 | 维沃移动通信有限公司 | 程序更新方法、装置和电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04237341A (ja) * | 1991-01-21 | 1992-08-25 | Fujitsu Ltd | インタフェース検証処理方式 |
WO2012011145A1 (ja) * | 2010-07-20 | 2012-01-26 | 株式会社 日立製作所 | ソフトウェア保守支援装置及びそれにより検証した電子制御装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003316615A (ja) * | 2002-04-26 | 2003-11-07 | Nissan Motor Co Ltd | 演算順序チェック装置およびその方法 |
CN100565541C (zh) * | 2005-04-21 | 2009-12-02 | 松下电器产业株式会社 | 程序变换装置和变换方法 |
JP2006331027A (ja) * | 2005-05-25 | 2006-12-07 | Nissan Motor Co Ltd | 検査装置、検査方法、及び検査プログラム |
JP2008090696A (ja) * | 2006-10-04 | 2008-04-17 | Nissan Motor Co Ltd | プログラム解析装置及びプログラム解析方法 |
JP4839424B2 (ja) * | 2008-12-15 | 2011-12-21 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムの解析を支援するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム |
JP2010157147A (ja) * | 2008-12-29 | 2010-07-15 | Sharp Corp | ソフトウェア検査装置、ソフトウェア検査方法およびソフトウェア検査プログラム |
-
2013
- 2013-12-25 WO PCT/JP2013/084612 patent/WO2014112303A1/ja active Application Filing
- 2013-12-25 JP JP2014557376A patent/JP5967225B2/ja active Active
- 2013-12-25 CN CN201380069207.8A patent/CN104885060B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04237341A (ja) * | 1991-01-21 | 1992-08-25 | Fujitsu Ltd | インタフェース検証処理方式 |
WO2012011145A1 (ja) * | 2010-07-20 | 2012-01-26 | 株式会社 日立製作所 | ソフトウェア保守支援装置及びそれにより検証した電子制御装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2014112303A1 (ja) | 2014-07-24 |
JPWO2014112303A1 (ja) | 2017-01-19 |
CN104885060A (zh) | 2015-09-02 |
CN104885060B (zh) | 2016-10-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102736978B (zh) | 一种检测应用程序的安装状态的方法及装置 | |
US11048798B2 (en) | Method for detecting libraries in program binaries | |
JP5967225B2 (ja) | データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム | |
CN110688658B (zh) | 未知病毒感染追溯方法、装置及*** | |
CN109101410B (zh) | 一种风险驱动测试方法和装置以及计算机可读存储介质 | |
CN110287696A (zh) | 一种反弹shell进程的检测方法、装置和设备 | |
CN109815697B (zh) | 误报行为处理方法及装置 | |
CN110866258A (zh) | 快速定位漏洞方法、电子装置及存储介质 | |
CN111651768B (zh) | 计算机二进制程序的链接库函数名识别方法及装置 | |
CN105760761A (zh) | 软件行为分析方法和装置 | |
KR101860674B1 (ko) | 크래시 리포트 그룹핑 방법, 서버 및 컴퓨터 프로그램 | |
CN111913878A (zh) | 基于程序分析结果的字节码插桩方法、装置及存储介质 | |
CN114661423A (zh) | 集群配置检测方法、装置、计算机设备及存储介质 | |
CN105701405B (zh) | 对软件程序集的本机图像进行防病毒检查的***和方法 | |
JPWO2018066661A1 (ja) | ログ分析方法、システムおよび記録媒体 | |
CN112463596B (zh) | 测试用例数据的处理方法、装置、设备以及处理设备 | |
CN108829575B (zh) | 测试案例推荐方法、电子装置及可读存储介质 | |
KR102380434B1 (ko) | 도커 파일 분석을 수행하는 도커 이미지 취약점 검사 장치 및 방법 | |
Radu et al. | Grey-box analysis and fuzzing of automotive electronic components via control-flow graph extraction | |
US9396239B2 (en) | Compiling method, storage medium and compiling apparatus | |
US20110047417A1 (en) | Method and system for error detection in pattern definitions | |
KR102256894B1 (ko) | 크래시 리포트 그룹핑 방법, 서버 및 컴퓨터 프로그램 | |
CN110337017B (zh) | 电视机及其日志处理方法、日志处理装置和可读存储介质 | |
Cam et al. | Detect repackaged android applications by using representative graphs | |
CN115658551B (zh) | 代码测试方法、存储介质、电子设备和装置 |
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: 20160607 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160620 |
|
R151 | Written notification of patent or utility model registration |
Ref document number: 5967225 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R151 |