JP5365846B2 - プログラム検証装置、プログラム検証方法、及び検証機能実行用プログラム - Google Patents

プログラム検証装置、プログラム検証方法、及び検証機能実行用プログラム Download PDF

Info

Publication number
JP5365846B2
JP5365846B2 JP2009049724A JP2009049724A JP5365846B2 JP 5365846 B2 JP5365846 B2 JP 5365846B2 JP 2009049724 A JP2009049724 A JP 2009049724A JP 2009049724 A JP2009049724 A JP 2009049724A JP 5365846 B2 JP5365846 B2 JP 5365846B2
Authority
JP
Japan
Prior art keywords
verification
program
behavior
statement
assertion
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
JP2009049724A
Other languages
English (en)
Other versions
JP2010204954A (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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2009049724A priority Critical patent/JP5365846B2/ja
Publication of JP2010204954A publication Critical patent/JP2010204954A/ja
Application granted granted Critical
Publication of JP5365846B2 publication Critical patent/JP5365846B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

本発明は、プログラム検証装置に関し、特にプログラムと表明を入力としたプログラムの検証を行うプログラム検証装置に関する。
プログラムの正しさを検証するために、プログラムの実行前に成り立つ性質(事前条件)とプログラムの実行後に成り立つ性質(事後条件)を表明として定義し、事前条件の元でプログラムが実行された場合に、プログラムの途中で実行時エラーを発生するかどうかやプログラム実行後に事後条件が成り立つかどうかを確認する手法がある。
該手法に基づいたツールとして、C言語プログラムを検証する「Caduceus」(非特許文献1)や「Frama−C」(非特許文献2)、Java(登録商標)プログラムを検証する「ESC/Java2」(非特許文献3)等がある。これらのツールは、プログラムとプログラムの構成要素である関数・メソッド単位に対して各ツール固有の方法で定義した表明を入力とし、プログラムの正しさを検証する。
ここで、「ACSL: ANSI/ISO C Specification Language」(非特許文献4)のように、プログラムの正しさを検証するためにプログラムの実行前に成り立つ性質(事前条件)とプログラムの実行後に成り立つ性質(事後条件)を表明として定義する時、与えられた条件によってプログラムの振る舞いが変わる場合には、その振る舞い毎にインタフェース条件(事前条件と、それに対する事後条件の組)を定義する記法を用いて表明を記述することができる。
例えば、図1に示す関数「f」に対する表明は、図2のようになる。なお、ここで「@behavior」は振る舞いを表すキーワード、「@requires」、「@ensures」はそれぞれ事前条件、事後条件を表すキーワード、「@assume」は該関数を呼び出す時の制約とはならない事前条件を表すキーワード、「¥valid()」は括弧内に示されたポインタ変数が有効である場合に真を、無効である場合に偽を返すキーワードである。この表明では、関数「f」は「read_from_param」、「read_from_ext」という2つの正常系の振る舞いと、「mode_error」という異常系の振る舞いを持ち、それぞれの振る舞いでのインタフェース条件が明確に定義されている。
これにより、複数の振る舞いを持つプログラムのインタフェース条件を明確に表すことができる。また、それに伴い、特定の振る舞いのみについてプログラムの正しさを検証することもできる。例えば、「read_from_ext」の事前条件である「mode==M_EXT」及び「¥valide(outp)」を前提としてプログラムの動作を検証し事後条件「¥return==E_OK」及び「*OUTP>=0」が満たされれば、関数「f」は振舞い「read_from_ext」において正しいと言える。
しかし、プログラムの振る舞いが、呼び出し時点での動作コンテキストでは決定されない振る舞い(非決定的な振る舞い)をする外部関数の戻り値や副作用により決まる場合には、前述の記法だけではプログラムの振る舞い毎のインタフェース条件を定義することはできない。例えば、図3に示す関数「f」は、非決定的な振る舞いをする外部関数「ext_init」の戻り値により正常系と異常系といった異なった振舞いをするが、それらについてのインタフェース条件を前述の記法のみを用いて区別し定義することはできない。
関連する技術として、特開2002−342115号公報(特許文献1)にデバッガ、デバッグ方法、プログラムが開示されている。この関連技術では、端末よりデバッガにモジュールの条件分岐における任意の変数の値を表示するデバックコマンドを指定されると、デバッガは現在中断している行以降のすべての条件分岐の真の処理、偽の処理のアドレス/ソース行番号/ソースファイル名をデバッグ情報から求め、デバッガに制御を戻す命令を分岐中の処理に埋め込む。モジュールの実行時に実行された分岐中の処理からデバッガが呼ばれることで、デバッガは指定された変数のアドレスをデバッグ情報からもとめ、変数の値を取り出すことで端末に実行された行及び条件分岐行をソースファイルを読み込んで表示及び変数の値を表示する。
また、特開2007−011690号公報(特許文献2)にプログラムの検証プログラム、プログラムの検証装置、プログラムの検証方法が開示されている。この関連技術では、モデル生成部は、ソースコード分類処理の結果をモデルに変換する。モデルの種類は、検証処理で用いる技術により異なる。ここでは、検証処理にモデルチェックを用い、モデルとしてFSMを用いる。モデル生成部は、ソースコード分類処理の結果のうち、基本ブロック単位または共有変数を参照するブロック単位で状態を割り付け、更に状態最適化を行う。状態最適化は、マークが付いた部分が含まれない状態を1つの状態にまとめるものであり、State Minimizationアルゴリズムの応用により実現可能である。次に、検証部は、モデル生成処理の結果を用いて検証処理を行う。検証処理の方法として、モデルチェック、ルールベースチェック等がある。
また、特開2008−203977号公報(特許文献3)にソフトウェア検証装置、ソフトウェア検証方法およびソフトウェア検証プログラムが開示されている。この関連技術では、ソフトウェア検証装置は、中央処理装置と、出力装置と、一次記憶装置と、二次記憶装置とを備える。中央処理装置は、二次記憶装置が記憶する検証対象ソフトウェアのソースコードを読み取って検証処理を行い、検証結果を出力装置に出力する。ここでは、中央処理装置は、起点モジュールmsから、前条件無しで性質pが守られるか否かを判定する。判定不能の場合、性質pを含むモジュールを呼び出す可能性がある下位モジュールを起点モジュールmsとして、前条件無しで性質pが守られるか否かを判定する。性質pが守られないと判定した場合、性質pが守られないための条件Cfを求め、最上位のモジュールから検証対象のモジュールの開始時までの処理結果において、条件Cfが成り立つか否かを判定する。条件Cfが成り立たないと判定した場合、検証対象のモジュールの検証結果を「性質pは守られる」とする。全ての下位モジュールに対して性質pが守られると判定した場合、msの検証結果Rsを「性質pは守られる」とする。
また、特開2008−210059号公報(特許文献4)に情報処理装置、デバッグ支援方法及びプログラムが開示されている。この関連技術では、予め形式的に記述しておいた仕様(例えばメソッドの事前条件と事後条件)に従って、プログラムの動作状況を自動的に検証、プログラム内の誤っている箇所の範囲、つまり挙動を確認すべき範囲を自動的に絞り込む。このとき、ソースコード内の関数に付与された表明に関する注釈を解析し、デバッガ上で評価可能な式を生成する。
特開2002−342115号公報 特開2007−011690号公報 特開2008−203977号公報 特開2008−210059号公報
Caduceus <http://caduceus.lri.fr/> Frama−C <http://frama−c.cea.fr/index.html> ESC/Java2 <http://kind.ucd.ie/products/opensource/ESCJava2/> ACSL: ANSI/ISO C Specification Language <http://frama−c.cea.fr/download/acsl_1.4.pdf>
本発明の目的は、プログラムと表明を入力としたプログラムの検証において、呼び出し時点での動作コンテキストでは決定されない振る舞い(非決定的な振る舞い)をする外部関数の呼び出しがある場合においても、検証対象プログラムの特定の振る舞いに関連したコードのみについて部分的に検証することを可能にするプログラム検証装置を提供することである。
本発明のプログラム検証装置は、検証対象のプログラムを記憶するプログラム記憶手段と、検証対象プログラムの振る舞いと振る舞い毎のインタフェース条件定義を含む表明を記憶する表明記憶手段と、表明、及び、ユーザにより指定された振る舞いに基づき、検証対象プログラム中に振る舞いに関連したコードを埋め込み、振る舞いに関連したコードを検証するための検証用モデルを作成する検証用モデル作成手段と、検証用モデルを用いて検証を行い、呼び出し時点での動作コンテキストでは決定されない振る舞い(非決定的な振る舞い)をする外部関数の呼び出しがある場合において、検証対象プログラムの特定の振る舞いに関連したコードについて部分的に検証する検証手段とを具備する。
本発明のプログラム検証方法では、プログラム記憶手段に、検証対象のプログラムを保持する。また、表明記憶手段に、検証対象プログラムの振る舞いと振る舞い毎のインタフェース条件定義を含む表明を保持する。また、表明、及び、ユーザにより指定された振る舞いに基づき、検証対象プログラム中に振る舞いに関連したコードを埋め込み、振る舞いに関連したコードを検証するための検証用モデルを作成する。また、検証用モデルを用いて検証を行い、呼び出し時点での動作コンテキストでは決定されない振る舞い(非決定的な振る舞い)をする外部関数の呼び出しがある場合において、検証対象プログラムの特定の振る舞いに関連したコードについて部分的に検証する。
本発明の検証機能実行用プログラムは、プログラム記憶手段に、検証対象のプログラムを保持するステップと、表明記憶手段に、検証対象プログラムの振る舞いと振る舞い毎のインタフェース条件定義を含む表明を保持するステップと、表明、及び、ユーザにより指定された振る舞いに基づき、検証対象プログラム中に振る舞いに関連したコードを埋め込み、振る舞いに関連したコードを検証するための検証用モデルを作成するステップと、検証用モデルを用いて検証を行い、呼び出し時点での動作コンテキストでは決定されない振る舞い(非決定的な振る舞い)をする外部関数の呼び出しがある場合において、検証対象プログラムの特定の振る舞いに関連したコードについて部分的に検証するステップとをコンピュータに実行させるためのプログラムである。
非決定的な振る舞いをする外部関数の戻り値・副作用により振る舞いが決まるプログラムに対して、振る舞い毎にプログラムの振舞いを明確に定義し、振る舞い毎の部分的な検証をすることができる。
第1の検証対象プログラムの例を示す図である。 第1の検証対象プログラムに対する表明の例を示す図である。 第2の検証対象プログラムの例を示す図である。 第2の検証対象プログラムに対する表明の例を示す図である。 本発明の第1実施形態におけるプログラム検証装置の構成例を示すブロック図である。 中央処理装置が行う動作を示すフローチャートである。 検証用モデル作成部が行う動作を示すフローチャートである。 実施例に用いるC言語プログラムの例を示す図である。 本発明の第2実施形態におけるプログラム検証装置の構成例を示すブロック図である。 本発明の第3実施形態におけるプログラム検証装置の構成例を示すブロック図である。
<概説>
本発明では、ユーザがプログラムのコード内に挿入した振る舞いを表すタグに注目して部分検証用モデルを作成する。具体的には、プログラム中の分岐文で分岐する先のブロックに対し振る舞いを表すタグを埋め込む。また、検証時に検証の対象とする振る舞いを指定し、ブロックに埋め込まれたタグと指定された振る舞いから検証すべきブロックを通過するための変数・式の値の範囲を特定する。そして、特定された範囲を検証範囲とすることで、特定の振る舞いに関連したコードのみについて部分的に検証する。なお、検証範囲は、検証に、プログラムの任意時点で取りうる変数・式の値の範囲である。
例えば、図3に示す関数「f」に対する表明は、図4のようになる。図3に示す関数「f」に対しては、表明の作成にあわせて17行目のif文の分岐する先のif節、及びelse節の各ブロックに対して、振る舞いに対応したタグを埋め込む(図4の29行と32行)。振る舞い「read_from_ext」に関連したコードのみを部分的に検証する場合には、if文のある28行時点で、if文の分岐する先のブロックのうち「read_from_ext」のタグが埋め込まれているelse節のブロック(図4の32−35行目)を通過するための条件「ext_init()」が偽になる変数・式の範囲(この場合は関数「ext_init」の戻り値が0)を検証範囲として検証する。
<第1実施形態>
以下に、本発明の第1実施形態について添付図面を参照して説明する。
図5は、本発明のプログラム検証装置の構成例を示す図である。
本発明のプログラム検証装置は、二次記憶装置11と、中央処理装置12と、入力装置13と、出力装置14を備える。
二次記憶装置11の例として、メモリ等の半導体記憶装置、ハードディスク等の外部記憶装置(ストレージ)、又は、記憶媒体(メディア)等が考えられる。また、二次記憶装置11は、プログラム検証装置の本体に内蔵された記憶装置に限らず、周辺機器(外付けHDD等)や外部のサーバ(ストレージサーバ等)に設置された記憶装置、或いは、NAS(Network Attached Storage)でも良い。但し、実際には、これらの例に限定されない。
中央処理装置12の例として、CPU(Central Processing Unit)やマイクロプロセッサ(microprocessor)等の処理装置、又は同様の機能を有する半導体集積回路(Integrated Circuit(IC))等が考えられる。但し、実際には、これらの例に限定されない。
入力装置13の例として、キーボードやキーパッド、画面上のキーパッド、タッチパネル(touch panel)、タブレット(tablet)、又は、QRコード(登録商標)やICチップ、記憶媒体(メディア)等の読取装置等が考えられる。或いは、入力装置13は、外部の入力装置や記憶装置から情報を取得するためのインターフェース(I/F:interface)でも良い。すなわち、入力装置13は、他の記憶装置でも良い。但し、実際には、これらの例に限定されない。
出力装置14の例として、LCD(液晶ディスプレイ)やPDP(プラズマディスプレイ)、有機ELディスプレイ(organic electroluminescence display)等の表示装置、又は、表示内容を壁やスクリーンに投影するプロジェクタ等の映写装置、表示内容を用紙等に印刷するプリンタ等の印刷装置等が考えられる。或いは、出力装置14は、外部の表示装置や記憶装置に情報を出力するためのインターフェース(I/F:interface)でも良い。すなわち、出力装置14は、何らかの出力装置であれば良い。但し、実際には、これらの例に限定されない。
二次記憶装置11は、プログラム記憶部111と、表明記憶部112を備える。
プログラム記憶部111は、検証対象のプログラムを記憶している。
表明記憶部112は、検証対象プログラムの振る舞いと振る舞い毎のインタフェース条件定義(事前条件、事後条件)を含む表明を記憶している。
中央処理装置12は、プログラム入力部121と、表明入力部122と、動作モード入力部123と、検証用モデル作成部124と、検証部125を備える。
プログラム入力部121は、ユーザ操作あるいは自動処理設定等に応じて、入力装置13から検証対象のプログラムを読み取り、二次記憶装置11のプログラム記憶部111に格納する。
表明入力部122は、入力装置13からユーザが定義した表明を読み取り、二次記憶装置11の表明記憶部112に格納する。
動作モード入力部123は、入力装置13から振る舞いを読み取り、検証用モデル作成部124に振る舞いを出力する。
検証用モデル作成部124は、プログラム記憶部111から検証対象プログラムを読み取り、表明記憶部112から表明を読み取る。検証用モデル作成部124は、読み取られた検証対象プログラム及び表明と、動作モード入力部123から入力された振る舞いに基づき、該振る舞いに関連したコードのみを検証するための検証用モデルを作成し、検証部125に検証用モデルを出力する。
検証部125は、検証用モデル作成部124から入力された検証用モデルを用いて検証を行い、出力装置14に検証結果を出力する。
図6のフローチャートを用いて、中央処理装置12が行う動作を説明する。
(1)ステップST101
プログラム入力部121は、入力装置13から検証対象のプログラムを読み取り、二次記憶装置11のプログラム記憶131に格納する。
(2)ステップST102
表明入力部122は、入力装置13からユーザが定義した表明を読み取り、二次記憶装置11の表明記憶部112に格納する。
(3)ステップST103
動作モード入力部123は、入力装置13から検証対象の振る舞い「bt」を読み取り検証用モデル作成部124に出力する。
(4)ステップST104
検査用モデル作成部124は、動作モード入力部123から振る舞い「bt」を受け取ると、プログラム記憶部111から検証対象プログラムを読み取り、表明記憶部112から検証対象プログラムの表明を読み取り、振る舞い「bt」に合わせた部分検証用モデルを作成し、検証部125に出力する。
(5)ステップST105
検証部125は、検証用モデル作成部124から検証用モデルを受け取ると、該検証用モデルを用いて検証を行う。
(6)ステップST106
検証部125は、検証結果を出力装置14に出力し、終了する。
次に、図7のフローチャートを用いて、検証用モデル作成部124が行う動作を説明する。すなわち、図7のフローチャートは、ステップST104の詳細を示す。
(1)ステップST201
検査用モデル作成部124は、動作モード入力部123から振る舞い「bt」を受け取ると、プログラム記憶部111から検証対象プログラムを読み取る。
(2)ステップST202
検査用モデル作成部124は、表明記憶部112から検証対象プログラムの表明を読み取る。
(3)ステップST203
検査用モデル作成部124は、読み取った表明中から振る舞い「bt」に対応したインタフェース条件の定義を探し出し、該定義中の事前条件に合わせた初期値を検証用モデルに追加する。
(4)ステップST204
検査用モデル作成部124は、読み取ったプログラムの最初の文を「stmt(Statement:命令文)」とする。
(5)ステップST205
検査用モデル作成部124は、「stmt」が分岐文かどうか判断する。
(6)ステップST206
検査用モデル作成部124は、「stmt」が分岐文の場合、分岐先ブロックのいずれかに振る舞いを表すタグがあるかどうか調べる。
(7)ステップST207
検査用モデル作成部124は、分岐先ブロックのいずれかに振る舞いを表すタグがある場合、検証対象として指定された振る舞い「bt」と同じタグがあるかどうか調べる。
(8)ステップST208
検査用モデル作成部124は、検証対象として指定された振る舞い「bt」と同じタグがある場合、振る舞い「bt」と同じタグがある分岐先ブロックのみを通過する変数・式の値の制約を検証用モデルに追加する。
(9)ステップST209
検査用モデル作成部124は、検証対象として指定された振る舞い「bt」と同じタグがない場合、振る舞い「bt」と同じタグがある分岐先ブロックを通過しない変数・式の値の制約を検証用モデルに追加する。
(10)ステップST210
検査用モデル作成部124は、「stmt」の内容に関係なく、「stmt」を検証用モデルに追加する。
(11)ステップST211
検査用モデル作成部124は、「stmt」がプログラムの終わりの文であるか確認する。
(12)ステップST212
検査用モデル作成部124は、「stmt」がプログラムの終わりの文でなければ、次の文を「stmt」とし、その「stmt」が分岐文かどうか判断し、同様の処理を繰り返す。
(13)ステップST213
検査用モデル作成部124は、「stmt」がプログラムの終わりの文であれば、検証用モデルを検証部125に出力し、終了する。
<第1実施形態における実施例>
次に、図8に示すC言語プログラムを例に、図6及び図7のフローチャートを参照し、実際のデータを用いて詳細に説明する。
ここでは、図8に示すC言語プログラムの関数「g」に対して、振る舞い「p_changed」に関連したコードを対象とし、プログラム終了後に事後条件が成立するかどうかを検証することとする。
(1)ステップST101
プログラム入力部121は、入力装置13から、図8に示すC言語プログラム(図8の12〜31行目)を読み取り、二次記憶装置11のプログラム記憶131に格納する。
(2)ステップST102
表明入力部122は、入力装置13から表明(図8の1〜11行目)を読み取り、二次記憶装置11の表明記憶部112に格納する。
(3)ステップST103
次に、動作モード入力部123は、入力装置13から検証対象の振る舞いとして「p_changed」を読み取り、読み取られた「p_changed」を振る舞い「bt」として、検証用モデル作成部124に出力する。
(4)ステップST104
検査用モデル作成部124は、動作モード入力部123から振る舞い「bt」として「p_changed」を受け取ると、振る舞い「bt」に合わせた部分検証用モデルの作成処理として、以下の処理を行なう。
(5)ステップST201
検査用モデル作成部124は、動作モード入力部123から振る舞い「bt」を受け取ると、プログラム記憶部111から検証対象プログラムを読み取る。
(6)ステップST202
検査用モデル作成部124は、表明記憶部112から検証対象プログラムの表明を読み取る。
(7)ステップST203
次に、検査用モデル作成部124は、読み取った表明中から振る舞い「bt」に対応したインタフェース条件の定義を探しだすと、該表明中の振る舞い「p_changed」の定義は3〜5行目になる。ところが、ここの定義には事前条件が存在しないので、全振る舞い共通の(振る舞い定義の前にある)1〜2行目の事前条件のみが振る舞い「p_changed」の事前条件となり、ポインタ引数「p」、「q」が有効となるような初期値を検証用モデルに追加する。
(8)ステップST204
次に、検査用モデル作成部124は、読み取ったプログラム(図8の12〜31行目)の最初の文である12行目を「stmt」する。
(9)ステップST205
検査用モデル作成部124は、「stmt」(12行目)が分岐文かどうか判断する。
(10)ステップST210
検査用モデル作成部124は、「stmt」は分岐文ではないので、「stmt」を検証用モデルに追加する。
(11)ステップST211
検査用モデル作成部124は、「stmt」がプログラムの終わりの文であるか確認する。
(12)ステップST212
検査用モデル作成部124は、「stmt」がプログラムの終わりの文ではないので、次の13行目を「stmt]とする。ここでは、検査用モデル作成部124は、13行目も分岐文ではないので同様の処理を繰り返し、次の14行目を「stmt」とする。
(13)ステップST205
検査用モデル作成部124は、「stmt」(14行目)が分岐文かどうか判断する。
(14)ステップST206
検査用モデル作成部124は、14行目は分岐文なので、分岐先のブロックに振る舞いを表すタグがあるかどうか調べる。
(15)ステップST207
検査用モデル作成部124は、14行目のif文の分岐先ブロックは15〜16行目のif節だけであり、15行目は振る舞いを表すタグを含むので、検証対象として指定された振る舞い「p_changed」と同じタグがあるかどうか調べる。
(16)ステップST209
検査用モデル作成部124は、15行目のタグは「p_changed」とは違うので、15〜16行目のif節ブロックを通過しないよう、14行目の時点で「!ext_is_valid()」が偽になる制約を検証用モデルに追加する。
(17)ステップST210
その後、検査用モデル作成部124は、「stmt」を検証用モデルに追加する。
(18)ステップST211
検査用モデル作成部124は、「stmt」がプログラムの終わりの文であるか確認する。
(19)ステップST212
検査用モデル作成部124は、「stmt」がプログラムの終わりの文ではないので、次の15行目を「stmt」とする。検査用モデル作成部124は、同様の処理を繰り返し、19行目のif文を「stmt」とする。
(20)ステップST205
検査用モデル作成部124は、19行目のif文が「stmt」となった場合、「stmt」(19行目)が分岐文かどうか判断する。
(21)ステップST206
検査用モデル作成部124は、19行目は分岐文なので、分岐先のブロックに振る舞いを表すタグがあるかどうか調べる。
(22)ステップST207
検査用モデル作成部124は、19行目のif文の分岐先ブロックは20〜21行目のif節と23〜24行目のelse節であり、20、23行目は振る舞いを表すタグを含むので、検証対象として指定された振る舞い「p_changed」と同じタグがあるかどうか調べる。
(23)ステップST209
検査用モデル作成部124は、20行目のタグは「p_changed」と同じであり、23行目のタグは違うので、20〜21行目のif節ブロックを通過し23〜24行目のelse節ブロックを通過しないよう、19行目の時点で「n>0」が真になる制約を検証用モデルに追加する。
(24)ステップST210
その後、検査用モデル作成部124は、「stmt」を検証用モデルに追加する。
(25)ステップST211
検査用モデル作成部124は、「stmt」がプログラムの終わりの文であるか確認する。
(26)ステップST212
検査用モデル作成部124は、「stmt」がプログラムの終わりの文ではないので、次の20行目を「stmt」とする。検査用モデル作成部124は、同様の処理を繰り返し、26行目のif文を「stmt」とする。
(27)ステップST205
検査用モデル作成部124は、26行目のif文が「stmt」となった場合、「stmt」(26行目)が分岐文かどうか判断する。
(28)ステップST206
検査用モデル作成部124は、26行目は分岐文なので、分岐先のブロックに振る舞いを表すタグがあるかどうか調べる。
(29)ステップST210
その後、検査用モデル作成部124は、26行目のif文の分岐先ブロックは27行目のif節と29行目のelse節であり、いずれも振る舞いを表すタグを含まないので、そのまま「stmt」を検証用モデルに追加する。
(30)ステップST211
検査用モデル作成部124は、「stmt」がプログラムの終わりの文であるか確認する。
(31)ステップST212
検査用モデル作成部124は、「stmt」がプログラムの終わりの文ではないので、次の27行目を「stmt」とする。検査用モデル作成部124は、同様の処理を繰り返し、31行目のif文を「stmt」とする。
(32)ステップST205
検査用モデル作成部124は、31行目のif文が「stmt」となった場合、「stmt」(31行目)が分岐文かどうか判断する。
(33)ステップST206
検査用モデル作成部124は、31行目は分岐文なので、分岐先のブロックに振る舞いを表すタグがあるかどうか調べる。
(34)ステップST210
その後、検査用モデル作成部124は、31行目のif文の分岐先ブロックは27行目のif節と29行目のelse節であり、いずれも振る舞いを表すタグを含まないので、そのまま「stmt」を検証用モデルに追加する。
(35)ステップST211
検査用モデル作成部124は、「stmt」がプログラムの終わりの文であるか確認する。
(36)ステップST213
検査用モデル作成部124は、31行目はプログラムの終わりの文になるので、検証用モデルを検証部125に出力する。
(37)ステップST105
検証部125は、検証用モデル作成部124から検証用モデルを受け取ると、該検証用モデルを用いて検証を行う。
該検証用モデルは、前述の検証用モデル作成部124の処理で15〜16行目のif節ブロック、23〜24行目のelse節ブロックを通過せず他の部分を実行するようになっているので、21行目で「*p」の値は「n」の値と等しく、「n」は正値であり、「*p」、「*q」の値によらず27行目もしくは29行目で戻り値が0以上になるので、振る舞い「p_changed」の事後条件「*p>0」、「¥return>=0」はどちらも成立する。
(38)ステップST106
検証部125は、この検証結果を出力装置14に出力し、終了する。
本発明の第1の効果は、非決定的な振る舞いをする外部関数の戻り値・副作用により振る舞いが決まるプログラムに対して、振る舞い毎のプログラムのインタフェース条件を明確に定義できることにある。その理由は、プログラム中の分岐文に対応した分岐先ブロックに対してタグを埋め込むことにより、非決定的な振る舞いをする外部関数の戻り値・副作用に依存した分岐に対して、振る舞いを対応付けられるためである。
また、本発明の第2の効果は、非決定的な振る舞いをする外部関数の戻り値・副作用により振る舞いが決まるプログラムに対して、振る舞い毎の部分的な検証ができることにある。その理由は、上記の第1の効果により、振る舞い毎にプログラムの振舞いを明確に定義できるためである。
<第2実施形態>
以下に、本発明の第2実施形態について説明する。
図5に示す第1実施形態のプログラム検証装置の構成において、入力装置13、プログラム入力部121、表明入力部122、動作モード入力部123が無くても良い。その場合、検証対象プログラム、表明、検証対象の振る舞いは二次記憶装置11に事前に格納されており(例えば、二次記憶装置12がリポジトリとして使われている等)、二次記憶装置11から直接読み取られる。
図9は、本実施形態におけるプログラム検証装置の構成例を示す図である。
本発明のプログラム検証装置は、二次記憶装置11と、中央処理装置12と、出力装置14を備える。
二次記憶装置11は、プログラム記憶部111と、表明記憶部112と、振る舞い記憶部113を備える。
プログラム記憶部111は、予め(事前に)検証対象のプログラムを記憶している。
表明記憶部112は、予め検証対象プログラムの振る舞いと振る舞い毎のインタフェース条件定義(事前条件、事後条件)を含む表明を記憶している。
振る舞い記憶部113は、予めユーザが検証対象のプログラムのコード内に挿入した振る舞いを記憶している。これにより、入力装置13から振る舞いを読み取る必要が無くなるため、入力装置13、プログラム入力部121、表明入力部122、動作モード入力部123が不要となる。
中央処理装置12は、検証用モデル作成部124と、検証部125を備える。
検証用モデル作成部124は、プログラム記憶部111から検証対象プログラムを読み取り、表明記憶部112から表明を読み取り、振る舞い記憶部113から振る舞いを読み取る。検証用モデル作成部124は、読み取られた検証対象プログラム、表明、及び振る舞いに基づき、該振る舞いに関連したコードのみを検証するための検証用モデルを作成し、検証部125に検証用モデルを出力する。
検証部125は、検証用モデル作成部124から入力された検証用モデルを用いて検証を行い、出力装置14に検証結果を出力する。
<第3実施形態>
以下に、本発明の第3実施形態について説明する。
図5に示す第1実施形態のプログラム検証装置の構成において、検証用モデル作成部124が検証部125と分離しておらず、統合されていても良い。ここでは、検証用モデル作成部124及び検証部125が統合されたものを、「検証実行部」と呼ぶ。その場合、図6のフローチャートのステップST103、ST104、ST105、ST106、及び図7のフローチャートの全ステップは全て、統合された検証実行部が行うことになる。その際、検証モデル作成と検証が同時に行われても良い。
図10は、本実施形態におけるプログラム検証装置の構成例を示す図である。
本発明のプログラム検証装置は、二次記憶装置11と、中央処理装置12と、入力装置13と、出力装置14を備える。
二次記憶装置11は、プログラム記憶部111と、表明記憶部112を備える。
プログラム記憶部111は、検証対象のプログラムを記憶している。
表明記憶部112は、検証対象プログラムの振る舞いと振る舞い毎のインタフェース条件定義(事前条件、事後条件)を含む表明を記憶している。
中央処理装置12は、プログラム入力部121と、表明入力部122と、動作モード入力部123と、検証実行部126を備える。
プログラム入力部121は、入力装置13から検証対象のプログラムを読み取り、二次記憶装置11のプログラム記憶部111に格納する。
表明入力部122は、入力装置13からユーザが定義した表明を読み取り、二次記憶装置11の表明記憶部112に格納する。
動作モード入力部123は、入力装置13から振る舞いを読み取り、検証用モデル作成部124に振る舞いを出力する。
検証実行部126は、検証用モデル作成部124と検証部125を統合したものである。すなわち、検証実行部126は、検証用モデル作成部124と検証部125の両方の機能を有する単一の装置又は回路である。あるいは、検証実行部126は、検証用モデル作成部124と検証部125の両方の機能をコンピュータに実行させるためのプログラムである。検証実行部126は、プログラム記憶部111から検証対象プログラムを読み取り、表明記憶部112から表明を読み取る。検証実行部126は、読み取られた検証対象プログラム及び表明と、動作モード入力部123から入力された振る舞いに基づき、該振る舞いに関連したコードのみを検証するための検証用モデルを作成し、作成された検証用モデルを用いて検証を行い、出力装置14に検証結果を出力する。
また、本実施形態においても、第2実施形態と同じく、入力装置13、プログラム入力部121、表明入力部122、動作モード入力部123が無くても良い。
なお、上記の各実施形態は、組み合わせて実施することも可能である。
以上のように、本発明は、プログラムと表明を入力としたプログラムの検証において、呼び出し時点での動作コンテキストでは決定されない振る舞い(非決定的な振る舞い)をする外部関数の呼び出しがある場合においても、検証対象プログラムの特定の振る舞いに関連したコードのみについて部分的に検証することを可能にする。
本発明は、非決定的な振る舞いをする外部関数を呼び出すプログラムに対する、振る舞い毎の部分検証に適用できる。
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
11… 二次記憶装置
111… プログラム記憶部
112… 表明記憶部
113… 振る舞い記憶部
12… 中央処理装置
121… プログラム入力部
122… 表明入力部
123… 動作モード入力部
124… 検証用モデル作成部
125… 検証部
126… 検証実行部
13… 入力装置
14… 出力装置

Claims (15)

  1. 検証対象プログラムを記憶するプログラム記憶手段と、
    前記検証対象プログラムの振る舞いと振る舞い毎のインタフェース条件定義を含む表明を記憶する表明記憶手段と、
    前記表明、及び、ユーザにより指定された振る舞いに基づき、前指定された振る舞いに関連したコードを検証するための検証用モデルを作成する検証用モデル作成手段と
    び出し時点での動作コンテキストでは決定されない振る舞いをする外部関数の呼び出しが前記検証対象プログラム中にある場合に前記検証用モデルを用いて、前記検証対象プログラムの特定の振る舞いに関連したコード部分的に検証する検証手段と
    を具備し、
    前記検証用モデル作成手段は、
    前記検証用モデルの作成にあたって、前記指定された振る舞いに関連した部分を通過して前記検証対象プログラムの前記特定の振る舞いに関連したコードを前記検証手段が処理するように、前記指定された振る舞いに関連したコードを前記検証対象プログラム中に埋め込む
    プログラム検証装置。
  2. 請求項1に記載のプログラム検証装置であって、
    入力装置から前記指定された振る舞いを読み取り、前記検証用モデル作成手段に出力する動作モード入力手段
    を更に具備し、
    前記検証用モデル作成手段は、前記動作モード入力手段から前記指定された振る舞いを受け取ると、前記プログラム記憶手段から前記検証対象プログラムを読み取り、前記表明記憶手段から前記表明を読み取り、前記検証対象プログラム、前記表明、及び前記指定された振る舞いに基づいて前記検証用モデルを作成し、前記検証手段に出力する
    プログラム検証装置。
  3. 請求項1に記載のプログラム検証装置であって、
    前記指定された振る舞いを記憶する振る舞い記憶手段
    を更に具備し、
    前記検証用モデル作成手段は、
    前記プログラム記憶手段から前記検証対象プログラムを読み取り、前記表明記憶手段から前記検証対象プログラムの表明を読み取り、前記振る舞い記憶手段から前記指定された振る舞いを読み取り、前記検証対象プログラム、前記表明、及び前記指定された振る舞いに基づいて前記検証用モデルを作成し、前記検証手段に出力する
    プログラム検証装置。
  4. 請求項1乃至3のいずれか一項に記載のプログラム検証装置であって、
    前記検用モデル作成手段は、
    前記表明中から前記指定された振る舞いに対応したインタフェース条件の定義を探し出し、前記探し出した定義中の事前条件に合わせた初期値を前記検証用モデルに追加する手段と、
    前記検証対象プログラムの最初の文を命令文とする手段と、
    前記命令文が分岐文かどうか判断する手段と、
    前記命令文が分岐文の場合、分岐先ブロックのいずれかに振る舞いを表すタグがあるかどうか調べる手段と、
    前記分岐先ブロックのいずれかに振る舞いを表すタグがある場合、前記指定された振る舞いと同じタグがあるかどうか調べる手段と、
    前記指定された振る舞いと同じタグがある場合、前記指定された振る舞いと同じタグがある分岐先ブロックのみを通過する変数・式の値の制約を前記検証用モデルに追加する手段と、
    前記指定された振る舞いと同じタグがない場合、前記指定された振る舞いと同じタグがある分岐先ブロックを通過しない変数・式の値の制約を前記検証用モデルに追加する手段と、
    前記命令文を前記検証用モデルに追加する手段と、
    前記命令文が前記検証対象プログラムの終わりの文であるか確認する手段と、
    前記命令文が前記検証対象プログラムの終わりの文でなければ、次の文を新規の命令文とし、前記新規の命令文に対して、前記命令文と同様の処理を繰り返す手段と、
    前記命令文が前記検証対象プログラムの終わりの文であれば、前記検証用モデルを前記検証手段に出力する手段と
    を具備する
    プログラム検証装置。
  5. 請求項1乃至4のいずれか一項に記載のプログラム検証装置であって、
    前記検証用モデル作成手段及び前記検証手段を統合した検証実行手段
    を更に具備する
    プログラム検証装置。
  6. プログラム記憶手段に、検証対象プログラムを保持し、
    表明記憶手段に、前記検証対象プログラムの振る舞いと振る舞い毎のインタフェース条件定義を含む表明を保持し、
    前記表明、及び、ユーザにより指定された振る舞いに基づき、前指定された振る舞いに関連したコードを検証するための検証用モデルを作成し
    び出し時点での動作コンテキストでは決定されない振る舞いをする外部関数の呼び出しが前記検証対象プログラム中にある場合において前記検証用モデルを用いて、前記検証対象プログラムの特定の振る舞いに関連したコード部分的に検証し、
    前記検証用モデルの作成にあたっては、
    前記指定された振る舞いに関連した部分を通過して前記検証対象プログラムの前記特定の振る舞いに関連したコードが処理されるように、前記指定された振る舞いに関連したコードを前記検証対象プログラム中に埋め込む
    プログラム検証方法。
  7. 請求項6に記載のプログラム検証方法であって、
    入力装置から前記指定された振る舞いを読み取り、
    前記指定された振る舞いを受け取ると、前記プログラム記憶手段から前記検証対象プログラムを読み取り、
    前記表明記憶手段から前記表明を読み取り、
    前記検証対象プログラム、前記表明、及び前記振る舞いに基づいて前記検証用モデルを作成する
    プログラム検証方法。
  8. 請求項6に記載のプログラム検証方法であって、
    振る舞い記憶手段に、前記指定された振る舞いを保持し、
    前記プログラム記憶手段から前記検証対象プログラムを読み取り、
    前記表明記憶手段から前記検証対象プログラムの表明を読み取り、
    前記振る舞い記憶手段から前記指定された振る舞いを読み取り、
    前記検証対象プログラム、前記表明、及び前記指定された振る舞いに基づいて前記検証用モデルを作成する
    プログラム検証方法。
  9. 請求項6乃至8のいずれか一項に記載のプログラム検証方法であって、
    前記表明中から前記指定された振る舞いに対応したインタフェース条件の定義を探し出し、前記探し出した定義中の事前条件に合わせた初期値を前記検証用モデルに追加し、
    前記検証対象プログラムの最初の文を命令文とし、
    前記命令文が分岐文かどうか判断し、
    前記命令文が分岐文の場合、分岐先ブロックのいずれかに振る舞いを表すタグがあるかどうか調べ、
    前記分岐先ブロックのいずれかに振る舞いを表すタグがある場合、前記指定された振る舞いと同じタグがあるかどうか調べ、
    前記指定された振る舞いと同じタグがある場合、前記指定された振る舞いと同じタグがある分岐先ブロックのみを通過する変数・式の値の制約を前記検証用モデルに追加し、
    前記指定された振る舞いと同じタグがない場合、前記指定された振る舞いと同じタグがある分岐先ブロックを通過しない変数・式の値の制約を前記検証用モデルに追加し、
    前記命令文を前記検証用モデルに追加し、
    前記命令文が前記検証対象プログラムの終わりの文であるか確認し、
    前記命令文が前記検証対象プログラムの終わりの文でなければ、次の文を新規の命令文とし、前記新規の命令文に対して、前記命令文と同様の処理を繰り返し、
    前記命令文が前記検証対象プログラムの終わりの文であれば、前記検証用モデルを用いて検証を行う準備をする
    プログラム検証方法。
  10. 請求項6乃至9のいずれか一項に記載のプログラム検証方法であって、
    前記検証用モデルの作成及び検証に係る処理を統合して、一連の処理として実行する
    プログラム検証方法。
  11. プログラム記憶手段に、検証対象プログラムを保持するステップと、
    表明記憶手段に、前記検証対象プログラムの振る舞いと振る舞い毎のインタフェース条件定義を含む表明を保持するステップと、
    前記表明、及び、ユーザにより指定された振る舞いに基づき、前記振る舞いに関連したコードを検証するための検証用モデルを作成するステップと
    び出し時点での動作コンテキストでは決定されない振る舞いをする外部関数の呼び出しが前記検証対象プログラム中にある場合において前記検証用モデルを用いて、前記検証対象プログラムの特定の振る舞いに関連したコード部分的に検証するステップと
    をコンピュータに実行させ、
    前記検証用モデルを作成するステップでは、
    前記指定された振る舞いに関連した部分を通過して前記検証対象プログラムの前記特定の振る舞いに関連したコードが前記部分的に検証するステップで処理されるように、前記指定された振る舞いに関連したコードを前記検証対象プログラム中に埋め込むことをコンピュータに実行させるための
    検証機能実行用プログラム。
  12. 請求項11に記載の検証機能実行用プログラムであって、
    入力装置から前記指定された振る舞いを読み取るステップと、
    前記振る舞いを受け取ると、前記プログラム記憶手段から前記検証対象プログラムを読み取るステップと、
    前記表明記憶手段から前記表明を読み取るステップと、
    前記検証対象プログラム、前記表明、及び前記振る舞いに基づいて前記検証用モデルを作成するステップと
    を更にコンピュータに実行させるための
    検証機能実行用プログラム。
  13. 請求項11に記載の検証機能実行用プログラムであって、
    振る舞い記憶手段に、前記指定された振る舞いを保持するステップと、
    前記プログラム記憶手段から前記検証対象プログラムを読み取るステップと、
    前記表明記憶手段から前記検証対象プログラムの表明を読み取るステップと、
    前記振る舞い記憶手段から前記指定された振る舞いを読み取るステップと、
    前記検証対象プログラム、前記表明、及び前記振る舞いに基づいて前記検証用モデルを作成するステップと
    を更にコンピュータに実行させるための
    検証機能実行用プログラム。
  14. 請求項11乃至13のいずれか一項に記載の検証機能実行用プログラムであって、
    前記表明中から前記指定された振る舞いに対応したインタフェース条件の定義を探し出し、前記探し出した定義中の事前条件に合わせた初期値を前記検証用モデルに追加するステップと、
    前記検証対象プログラムの最初の文を命令文とするステップと、
    前記命令文が分岐文かどうか判断するステップと、
    前記命令文が分岐文の場合、分岐先ブロックのいずれかに振る舞いを表すタグがあるかどうか調べるステップと、
    前記分岐先ブロックのいずれかに振る舞いを表すタグがある場合、前記指定された振る舞いと同じタグがあるかどうか調べるステップと、
    前記指定された振る舞いと同じタグがある場合、前記指定された振る舞いと同じタグがある分岐先ブロックのみを通過する変数・式の値の制約を前記検証用モデルに追加するステップと、
    前記指定された振る舞いと同じタグがない場合、前記指定された振る舞いと同じタグがある分岐先ブロックを通過しない変数・式の値の制約を前記検証用モデルに追加するステップと、
    前記命令文を前記検証用モデルに追加するステップと、
    前記命令文が前記検証対象プログラムの終わりの文であるか確認するステップと、
    前記命令文が前記検証対象プログラムの終わりの文でなければ、次の文を新規の命令文とし、前記新規の命令文に対して、前記命令文と同様の処理を繰り返すステップと、
    前記命令文が前記検証対象プログラムの終わりの文であれば、前記検証用モデルを前記検証手段に出力するステップと
    を更にコンピュータに実行させるための
    検証機能実行用プログラム。
  15. 請求項11乃至14のいずれか一項に記載の検証機能実行用プログラムであって、
    前記検証用モデルの作成及び検証に係る処理を統合して、一連の処理として実行するステップと
    を更にコンピュータに実行させるための
    検証機能実行用プログラム。
JP2009049724A 2009-03-03 2009-03-03 プログラム検証装置、プログラム検証方法、及び検証機能実行用プログラム Expired - Fee Related JP5365846B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009049724A JP5365846B2 (ja) 2009-03-03 2009-03-03 プログラム検証装置、プログラム検証方法、及び検証機能実行用プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009049724A JP5365846B2 (ja) 2009-03-03 2009-03-03 プログラム検証装置、プログラム検証方法、及び検証機能実行用プログラム

Publications (2)

Publication Number Publication Date
JP2010204954A JP2010204954A (ja) 2010-09-16
JP5365846B2 true JP5365846B2 (ja) 2013-12-11

Family

ID=42966373

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009049724A Expired - Fee Related JP5365846B2 (ja) 2009-03-03 2009-03-03 プログラム検証装置、プログラム検証方法、及び検証機能実行用プログラム

Country Status (1)

Country Link
JP (1) JP5365846B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10915427B2 (en) 2017-02-22 2021-02-09 Mitsubishi Electric Corporation Equivalence verification apparatus and computer readable medium

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0217547A (ja) * 1988-07-06 1990-01-22 Fujitsu Ltd テストデータ作成支援処理方式
JP2000267888A (ja) * 1999-03-19 2000-09-29 Ntt Communicationware Corp ソフトウェア試験実施網羅率測定方法、ソフトウェア試験実施網羅率測定装置および記録媒体
JP4872357B2 (ja) * 2006-01-19 2012-02-08 日本電気株式会社 プログラムテスト支援システム、方法及びプログラム

Also Published As

Publication number Publication date
JP2010204954A (ja) 2010-09-16

Similar Documents

Publication Publication Date Title
US8578344B2 (en) Incremental compositional dynamic test generation
JP5786512B2 (ja) インジェクション攻撃を検出するためのセキュリティ・ソフトウェア・モジュールを検証するためのハイブリッド制約条件の求解
JP5786511B2 (ja) ソフトウェア・モジュールの仕様要件を検証するためのハイブリッド制約条件の求解
US8645761B2 (en) Precise fault localization
WO2015159501A1 (ja) 検証性質統合装置、検証性質統合方法および検証性質統合プログラムが記録された記憶媒体
US10095512B2 (en) Program development support device, non-transitory storage medium storing thereon computer-readable program development support program, and program development support method
v. Gleissenthall et al. Solver-aided constant-time hardware verification
US20110131031A1 (en) Dynamic generation of tests
JP5440287B2 (ja) シンボリック実行支援プログラム、方法及び装置
JP5365846B2 (ja) プログラム検証装置、プログラム検証方法、及び検証機能実行用プログラム
WO2021183382A1 (en) Graph-based method for inductive bug localization
JP5163172B2 (ja) ソフトウェアテスト項目編集支援装置およびソフトウェアテスト項目編集支援方法
JP5170555B2 (ja) エラートレース簡略化システム、エラートレース簡略化方法、及びプログラム
KR102378377B1 (ko) 스마트 컨트랙트 내의 취약 트랜잭션 시퀀스 획득 장치 및 방법
JP5811859B2 (ja) ソースコードの静的解析装置、システム、方法、及びそのためのプログラム
CN112346780B (zh) 一种信息处理方法、装置和存储介质
JP5093508B2 (ja) ループ最適化システム、ループ最適化方法、及びループ最適化用プログラム
JP2022052542A (ja) Ffu検査装置及びffu検査用プログラム
JP2017041085A (ja) プログラム仕様推定装置、推定方法、および推定プログラム
JP2007041777A (ja) 言語処理方法
CN116361748B (zh) 一种软件供应链安全检测方法和装置
JP2014106770A (ja) 型チェック装置、型チェック方法および型チェックプログラム
JP2022177585A (ja) エラーチェックプログラム、情報処理装置およびエラーチェック方法
US7822953B2 (en) Protection of a program against a trap
CN117573520A (zh) 程序异常检测方法、装置、设备及存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120210

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130515

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130529

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130729

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: 20130815

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130828

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees