JP2001109644A - プログラム検証方法及び装置 - Google Patents

プログラム検証方法及び装置

Info

Publication number
JP2001109644A
JP2001109644A JP28656699A JP28656699A JP2001109644A JP 2001109644 A JP2001109644 A JP 2001109644A JP 28656699 A JP28656699 A JP 28656699A JP 28656699 A JP28656699 A JP 28656699A JP 2001109644 A JP2001109644 A JP 2001109644A
Authority
JP
Japan
Prior art keywords
program
verification
processing
executed
route
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.)
Granted
Application number
JP28656699A
Other languages
English (en)
Other versions
JP4098448B2 (ja
Inventor
Norio Shimada
典郎 嶌田
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP28656699A priority Critical patent/JP4098448B2/ja
Priority to US09/593,423 priority patent/US6697965B1/en
Publication of JP2001109644A publication Critical patent/JP2001109644A/ja
Application granted granted Critical
Publication of JP4098448B2 publication Critical patent/JP4098448B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

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

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)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】事前にプログラムを走査し、個々のプログラム
が実現すべき本来の処理仕様を抽出し、その処理仕様に
合致しないプログラムの部分を自動的に抽出するプログ
ラム開発支援システムを提供する。 【解決手段】本発明は、計算機で実行される実行プログ
ラムまたはこの実行プログラムを生成するためのソース
プログラムを検証するものであって、実行プログラムま
たはソースプログラムを検証する仕様に対応したプログ
ラムの部分としての1以上の処理からなるブロックに分
割し、2以上のブロックの組み合わせを、上記検証する
仕様に対応した検証ルートとして複数抽出し、所定数以
上の検証ルートにおいて実行される上記検証する仕様に
対応した処理を他の検証ルートにおいても実行されるべ
き処理としての処理仕様として抽出することにより、プ
ログラムを検証するものである。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プログラム開発を
支援する技術に係り、特にプログラムの欠陥摘出に好適
な検証方法及び検証システムに関するものである。
【0002】
【従来の技術】この種のプログラムの動作を検証するシ
ステムの代表的なものとして、次の2つの技術がある。
1つは、実際にプログラムを動作させてメモリ領域への
不正なアクセス等、障害の要因となるプログラムの動作
の有無をチェックすることにより行うものである。
【0003】もう一つは、この種の検証をプログラムの
実行前に行うもので、例えばUNIXオペレーティングシス
テムにおけるlintコマンドのように、プログラムの記述
が所定のプログラム言語の文法に合致するものであるか
否かをチェックするものである。
【0004】しかし、上記のような従来技術においては
以下のような問題があった。すなわち、実際にプログラ
ムを動作させて検証する方法では、検証対象は、実際に
実行されたプログラムのステップのみであり、すべての
ステップではない。その上、分岐条件のすべての組み合
わせに対してプログラムの検証を行うことは困難であっ
た。また、そのような検証のためのテストデータは通常
人手で準備されるため、重要な箇所の検証漏れ等人為ミ
スも誘発されやすい。
【0005】また、プログラムがプログラム言語の文法
に合致するか否かの検証では、たとえ検証結果が正常で
あっても、それは単にソースプログラムが所定の文法に
従って記述されていることが検証されたにすぎず、プロ
グラムの動作が正常か否かまでを検証するものではな
い。
【0006】このような状況から、個々のプログラムの
要求仕様を計算機に記憶させ、その仕様が正しく反映さ
れているかを自動で検証するシステムが検討されている
が、これらの要求仕様は、個々のプログラムが対象とす
る応用分野と実現すべき機能とに依存しており、プログ
ラムの検証システム(あるいは検証方法)として、汎用
的なシステムの開発は、困難と考えられていた。
【0007】
【発明が解決しようとする課題】本発明は、上記プログ
ラムの要求仕様を計算機で自動的に検証する方法及び装
置に関わるものであり、上記従来技術の問題を解決する
汎用的なプログラム検証技術を提供することを目的とす
る。
【0008】すなわち、本発明は個々のプログラムが持
つ要求仕様の共通部分を予め検証する仕様として規定
し、その検証する仕様に対応した個々のプログラムが持
つ具体的仕様(処理仕様)を自動的に抽出することによ
り、上記問題点の解決を図るものである。
【0009】
【課題を解決するための手段】本発明は上記課題を解決
するために、以下の手段を採用した。すなわち、本発明
は、計算機で実行される実行プログラムまたはこの実行
プログラムを生成するためのソースプログラムを検証す
るものであって、実行プログラムまたはソースプログラ
ムを検証する仕様に対応したプログラムの部分としての
1以上の処理からなるブロックに分割し、2以上のブロ
ックの組み合わせを、前記検証されるべき仕様に対応し
た検証ルートとして複数抽出し、所定数以上の検証ルー
トにおいて実行される前記検証する仕様に対応した処理
を他の検証ルートにおいても実行されるべき処理として
の処理仕様として抽出することにより、プログラムを検
証するものである。
【0010】このような処理仕様として抽出された処理
が実行されない検証ルートをプログラムの欠陥として抽
出してもよい。上記のブロック,検証ルート,処理仕様
として抽出された処理,または処理仕様として抽出され
なかった処理を表示するようにしてもよい。
【0011】このようにして抽出される処理仕様に含ま
れるべき処理に係る情報を補助情報として入力させるよ
うにしてもよい。次に、本発明が使用する方式の機能構
成を、従来方式との比較から説明する。図1は、従来方
式の構成と本発明の方式の構成とを比較するためのイメ
ージ図である。
【0012】ここで、検証すべき仕様の例として、以下
のA,Bを、また対応する処理仕様としてa1,a2及
びb1,b2を挙げる。 A: 一つの関数の中で、特定のプログラム資源を扱う
場合、対となる処理が必要である。 a1:一つの関数の中でデータバッファに対する処理に
は、獲得/開放処理に対応する対となる処理がある。 a2:一つの関数の中で、実行レベル(プログラムを実
行するときの他のプログラムと比較した優先度)を操作
する場合、実行レベルを上げる処理と実行レベルを下げ
る処理とが対となって存在する。 B:個々の関数は、それが呼び出される場合、設定され
なければならない引数の要素は一定である。 b1:関数1が呼び出される場合、引数の要素1,2,
3,...が設定されていなければならない。 b2:関数2が呼び出される場合、引数の要素a,b,
c,...が設定されていなければならない。
【0013】図1から分かるように、従来は個々の処理
仕様を入力値として準備すること、または検証システム
内部に予めそれらを保持することが必要であった。これ
に対し、本発明は、検証すべき仕様として、より汎用的
なものを予め準備し、複数の検証ルートでの比較結果か
ら具体的仕様を検証システム自体が自動的に抽出する方
法を採用している。したがって、従来技術に比べてより
汎用的なシステムの提供が可能となっている。
【0014】
【発明の実施の形態】以下、本発明の実施の形態を図2
から図17の図面に基いて説明する。図2は、本実施の
形態に係るプログラム検証装置のハードウェアの構成図
であり、図3は図2に示すCPU1において実行される
プログラムの構成図であり、図4〜図8は本実施の形態
で取り扱うデータ構造を示す図であり、図9は本実施の
形態の動作を例示するための検証対象となるサンプルプ
ログラムの構造を示す図であり、図10、11、12
は、図9のサンプルプログラムを検証対象として処理し
た際の中間結果を示すものであり、図10はプログラム
のブロック構造、図11はプログラムの検証ルートの抽
出例、図12は検証ルート抽出時に使用するリスト構造
を示す構造図である。図13は図3に示した構成図の検
証ルート抽出部12と処理パターン抽出部13との関連
を示す図であり、図14及び図15は本実施の形態の動
作を例示するためのサンプルプログラム1を示す図であ
り、図16及び図17は図14のサンプルプログラム1
に対する処理結果を示す図である。 <構成>図2は本発明の実施の形態に係るプログラム検
証装置を示すものである。図2に示すように、このプロ
グラム検証装置は、CPU1、メモリ2、ハードディス
ク装置3、表示装置4、キーボード5、及びマウス6を
備えている。
【0015】図3は本実施の形態に係るプログラム検証
装置に備えたCPU1において実行されるプログラムの
構成図である。このプログラムは、検証の対象となるプ
ログラムをブロックに分割するブロック分割部11と、
2以上のブロックを組み合わせて、連続して実行される
文(命令)の集合としての検証ルートを抽出する検証ル
ート抽出部12と、抽出された検証ルートから特定の処
理を実行する文(以下処理パターンという)を抽出する
処理パターン抽出部13と、複数の検証ルートにおいて
抽出された処理パターンを比較して本来実行されるべき
処理としての処理仕様を抽出する処理仕様抽出部14
と、検証を補助する情報を入力するための補助情報入力
部16(入力手段に相当)とを備えている。 <ブロック分割部11の処理>ブロック分割部11は、
処理対象のソースプログラムに含まれる分岐文(分岐命
令)と関数呼び出し文とからプログラムの階層構造を解
析する。分岐文とは、if文、while文、あるいはcase文
等のように、指定された条件に従って、あるいは無条件
にプログラムの実行順を変更する文をいう。一方、関数
呼び出し文とは、プログラムの部品としての関数を呼び
出すための文をいう。関数をサブルーチンともいい、関
数呼び出し文をサブルーチン呼び出し文ともいう。
【0016】本実施の形態のプログラム検証装置では、
このような関数または分岐文の定義の中の’{’及
び’}’または’(’及び’)’で囲まれた範囲には、通
常のソースプログラムの文の他、文と文とを組み合わせ
た複数の文が含まれるので、これをブロックと呼ぶ。
【0017】本実施の形態のプログラム検証装置が処理
対象とするソースプログラムは、複数の分岐文と関数呼
び出し文によって、複数の部分としてのブロックに区分
される。このブロックの中には、さらに分岐文や関数呼
び出し文が存在する。したがって、処理対象となるプロ
グラムは分岐文や関数呼び出し文が組み合わされて、階
層構造をなしている。ブロック分割部11は、分岐文と
関数呼び出し文とによって構成されるこのようなブロッ
ク間の組み合わせ、すなわちプログラムの階層構造を解
析し、図3に示す検証ルート抽出部12において処理可
能なデータ構造として表現する。
【0018】図4〜図8に、ブロック分割部11が生成
するソースプログラムの階層構造(ブロックの組み合わ
せ)を表現するためのデータ構造を示す。図4は、関数
もしくは、分岐文の構造を示す文構造体である。文構造
体は、その文の種類を表す情報と、その種類に依存した
情報とを含む。
【0019】図5は、関数もしくは、分岐文に含まれる
第一階層のブロックの構造を示すブロック構造体であ
る。図5に示すようにこのブロック構造体は、ブロック
情報と、そのブロックに直接含まれる分岐文と関数とを
示す文構造体へのポインタ配列へのポインタからなって
いる。
【0020】図6は、関数を示す文構造体の例である。
この構造体は、図6のように、関数を示す情報、その関
数の定義を含むファイルの名称であるファイル名、この
ファイル内において、その関数が定義されている先頭の
行を示す行番号、及びその関数内の第1階層のブロック
構造へのポインタを含んでいる。
【0021】図7は、if(a)then{b}else{c}という分岐
文の文構造体を示したものである。図7でif文であるこ
とを示す情報は、この文構造体で表現した分岐文がif文
であることを示している。ブロックaに対するブロック
構造体へのポインタとは、if(a)に含まれるブロックaを
表現するブロック構造体(図5で示したもの)へのポイ
ンタである。また、ブロックbに対するブロック構造体
へのポインタとは、if(a)then{b}に含まれるブロックb
を表現するブロック構造体へのポインタである。ブロッ
クcに対するブロック構造体へのポインタも同様であ
る。
【0022】したがって、ブロックa、b、あるいはcに
分岐文が含まれている場合には、上述した図4と図5の
構造を繰り返すことによって、文の階層構造が表現され
ることになる。なお、この文構造体は、図6〜図8に例
示したものの他、case文、for文等プログラミング言語
に現れる他の制御文も同様に表現することができる。
【0023】以上の図4〜図8に示す構造により、関数
内部の関数呼び出し及び分岐文によって区分されるブロ
ックの組み合わせとしての階層構造が表現されることに
なる。
【0024】図9は、ブロック分割部11における処理
を例示するためのサンプルプログラムであり、図10
は、このサンプルプログラムをブロック分割部11が処
理した結果の例である。 <検証ルート抽出部の処理>検証ルート抽出部12は、
上記ブロック分割部11によって認識されたプログラム
の階層構造(図4〜図8)を利用し、分岐文によって実
行を制御されるプログラムの部分(ブロック)の組み合
わせとしての検証ルートを生成する。
【0025】図9のサンプルプログラムは、3個のif文
から構成されており、最初のif(a1)のに含まれるブロッ
クa1が真か偽かによって、ブロックA1またはブロックA2
のいずれかが実行される。同様に、次のif(b1)に含まれ
るb1が真か偽かによって、ブロックB1またはブロックB2
のいずれかが実行される。そして、ブロックB1が実行さ
れる場合には、さらにif(c1)に含まれるブロックc1が真
か偽かによってブロックC1またはブロックC2のいずれか
が実行される。
【0026】検証ルートとは、このような分岐文によっ
て区分されたプログラムの部分(ブロック)を組み合わ
せて得られる連続して実行される文の並びをいう。例え
ば、ブロックa1、b1及びc1のいずれもが真の場合、a1=>
A1=>b1=>B1(c1=>C1)のように実行される。このようなブ
ロックの並びが検証ルートである。
【0027】検証ルート抽出部12は、図10のような
関数のブロック(図4から図8に示すブロック分割部1
1によって作成された階層構造を表すデータ構造)から
プログラムが実行されるすべての検証ルートを作成す
る。
【0028】本実施の形態では、以下に示す走査規則に
従って検証ルートが抽出される。この走査規則は、検証
する仕様に依存にしない一般的走査規則と検証する仕様
に依存して適用される具体的走査規則に区分される。な
お、検証ルートの抽出は、指定により、プログラムを構
成する個々の関数ごとに、または関数を組み合わせたプ
ログラム全体に対して実行される。 <一般的走査規則>以下に検証する仕様に依存しない走
査規則を示す。 (1)1個の分岐文においては、先に現れるブロックが
優先して実行される。例えば、if(a)then{b}else{c}な
る分岐において、ブロックbとブロックcとでは、ブロ
ックbが優先されて検証ルートが作成される。 (2)同一階層中にある分岐文は、実行順序が後ろにあ
る分岐文のルートの判定を優先して変化させて検証ルー
トが網羅される。 (3)複数階層に渡る分岐文の組み合わせにおいては、
最も深い階層の分岐文の判定を優先して変化させて検証
ルートが網羅される。
【0029】以上の規則に従って図9のサンプルプログ
ラムから生成した検証ルートを図11に示す。まず、最
初の検証ルート1)は、上記規則(1)に従って最初に
現れるブロックを優先して生成したものである。次の検
証ルート2)は、上記規則(2)(3)に従って、実行
順序が後ろにあって、かつ、最も深い階層構造のif(c1)
then{C1}else{C2}の判定を変更して検証ルートをC1から
C2に変更したものである。3)以下は同様の手順で生成し
たものである。
【0030】このようにして生成される検証ルートを表
現するためのデータ構造を図12に示す。図12はリス
ト構造と呼ばれるデータ構造により図11の検証ルート
1)を表現したものである。リスト構造とは、複数の要
素を矢印で示されるポインタで連結したもので、各要素
に値を格納することで、格納された値の順序を保持する
ことができる。図12では、a1=>A1=>b1=>B1(c1=>C1)に
従って値(この場合は、ブロックa1等へのポインタ)が
保持されるので、検証ルートとしてのブロックの順序に
関する情報が保持される。 <具体的走査規則>上記抽出した検証ルートに沿って、
プログラムを走査する場合は、検証する仕様に対応して
より詳細な具体的走査規則が必要になる。以下に検証仕
様1とそれに対応する具体的走査規則とを示す。
【0031】検証仕様1:一つの関数の中で、特定のプ
ログラム資源を扱う場合、対となる処理(例えば資源の
獲得/資源の開放)が必要である。具体的走査規則: (1)個々の関数内部の先頭から走査を開始し、他の関
数呼び出しが存在しても呼び出し先の関数内部までは走
査しない。 (2)複数の分岐文が同一レベルで組み合わされている
場合、すべての組み合わせを網羅して検証ルートを走査
する。例えば、2分岐のif文と4分岐のcase文があった
場合、2×4=8個の検証ルートを走査する。 (3)ループ文(for文、while文)については、そのル
ープ処理部を一度だけ走査する。 (4)ループ内にbreak文を検出した場合、ループ処理
部から抜ける。 (5)return文検出時は、その関数から抜けるものとす
る。 <処理パターン抽出部及び処理仕様抽出部の処理>処理
パターン抽出部13は、上記の検証する仕様に対応する
処理パターンが各検証ルートに含まれているか否かを調
査し、含まれている処理パターンを各検証ルートごとに
処理仕様抽出部14に報告する。
【0032】一方、処理仕様抽出部14は、処理パター
ン抽出部13の報告に基づいて、各検証ルートごとにど
の処理パターンが含まれるかを集計し、その結果として
上記検証する仕様に対応する処理仕様が成立するか否か
を判断する。この処理仕様が一定数以上の検証ルートで
成立する場合、これを他の検証ルートでも成立すべき処
理仕様として決定する。また、上記決定された処理仕様
が成立しない検証ルートについて、プログラム上の欠陥
とみなし、当該検証ルートと成立しない処理仕様及び処
理仕様が成立しない原因となった処理パターンを提示す
る。従って、本実施の形態では、処理仕様抽出部14
が、欠陥検出部を兼ねている。
【0033】以下に、検証する仕様が上記検証仕様1の
場合、処理パターン抽出部の抽出規則における対となる
パターンを示す。 −獲得パターン ・関数内で、変数に具体的値が設定されている部分が該
当する(関数の引数となる変数は、その関数の先頭で、
関数の呼び出し元から値を獲得しているとみなす)。
【0034】・変数が、関数の復帰値を値として受け取
る部分が該当する。−開放パターン ・変数が、関数呼び出し時の引数となる部分が該当す
る。
【0035】・変数の値が、制御テーブルに記憶される
部分が該当する。なお、これらのパターン抽出規則を適
用した場合、検証仕様1に対応する処理仕様には以下の
ものがある。 処理仕様1:一つの関数の中でデータバッファに対する
処理には、獲得/開放処理に対応する対となる処理があ
る。 処理仕様2:一つの関数の中で、実行レベル(プログラ
ムを実行するときの他のプログラムと比較した優先度)
を操作する場合、実行レベルを上げる処理と実行レベル
を下げる処理とが対となって存在する。 処理仕様3:一つの関数の中で資源の排他制御をする場
合、リザーブ(資源の占有)とフリー(資源の開放)と
が対となって存在する。 <動作例>検証する仕様が上記検証仕様1の場合の検証
ルート抽出部12、処理パターン抽出部13、及び処理
仕様抽出部14の関係を図13に詳細に示す。処理パタ
ーン抽出部13は、検証ルート抽出部12から指示され
た検証ルート(今このルートをaとする)について、獲
得パターンと開放パターンの存在を調査する。処理仕様
抽出部は、獲得パターンαと開放パターンβとが存在し
て、検証仕様1が適用できる場合、検証ルートaの獲得
パターンαの処理を共有する他のすべての検証ルート
(これを検証ルートaの獲得パターンαを基準にした補
ルートという)について、開放パターンが存在するか否
かを判定する。
【0036】以上の検証ルート抽出部12、処理パター
ン抽出部13、及び処理仕様抽出部14の動作を図14
に示すサンプルプログラム(プログラム1)を例にして
説明する。プログラム1は、通信プロトコルの一階層を
実現するための機能を簡易化して記述したものである。
このプログラムは、図15に示すようにプロトコルの下
位層から関数として呼び出され、プロトコルの上位層を
実現するプログラムに下位層から通知された情報をsndm
sg()という関数の呼び出し(実際にはOSの機能の実
行)によって通知するものである。このプログラム1で
はstruct buf及びstruct ctlで定義された構造体変数へ
のポインタが獲得パターンと開放パターンの調査の対象
にあてはまる。なお、プログラム1は、本発明の説明の
ため、ブロックA1とC2とで、bufpの開放処理(relb
uf(bufp))漏れが発生するように記述してある。
【0037】このプログラム1から検証ルート抽出部1
2が抽出した検証ルート及び上記検証仕様1に基づいて
抽出した獲得と開放の処理パターンを図16に示す。ま
た、これらの獲得、開放パターンを抽出する場合の処理
の流れを図17に示す。
【0038】図17では、プログラム1のルート1、す
なわち、a1=>A1から走査が開始される。獲得パタ
ーンとして、bufp、ctlp、及びbuf2p=getbuf()が検出さ
れ、開放パターンとしてreturn(buf2p)が検出されてい
る。そのため、buf2pの獲得パターンを共有する他の検
証ルートに開放パターンが存在するかが検証され、ルー
ト2、3、及び4においてbuf2pの開放パターンが検出
され正常と判定されている。
【0039】ルート1に続いて、ルート2の走査が行わ
れる。bufp、ctlp及びbuf2pの獲得パターンと開放パタ
ーンとが検出されているが、buf2pについては、すでに
ルート1の走査において検証済みであるので、bufpとct
lpとについて他の検証ルートの検証が行われる。その結
果、ルート1とルート4とでbufp及びctlpの開放パター
ンがないことが判明する。以下同様にルート4まで走査
がなされ、最終的にルート1とルート4とにおいて、bu
fpとctlpの開放処理の漏れが検出される。
【0040】一方、実際のプログラム1のバグは、上述
のように、ルート1(ブロックA1)とルート4(ブロ
ックC2)とで、bufpの開放処理が漏れていることだけ
であり、ctlpについては、開放処理は必要ない。この結
果は、ctlpが仕様的には、獲得/開放処理の対象になら
ないが、上記のパターンの抽出規則の条件を満たしたた
めに発生したことである。このような結果は、後から人
が確認すれば容易にチェックできることであるが、この
例で示したctlpのように、予め特定の資源について開放
処理の必要がないことが分かっているような場合には、
処理パターン抽出時の補助情報として、事前に判定対象
外の資源を指定できるようにしておけば、上記のような
無用の情報の検出を防止することができる(処理仕様に
含まれる処理に係る情報を補助情報として入力すること
に相当)。
【0041】このように本実施の形態のプログラム検証
装置は、種々のプログラムに共通に必要とされる一般的
な規則を検証する仕様として規定し、その検証する仕様
に対応した検証ルートをプログラムから抽出し、一定数
以上の検証ルート(上述では1以上の検証ルート)にお
いて成立している、そのプログラムが持つ検証する仕様
に対応した具体的な仕様を、そのプログラムの全体で成
立する仕様(処理仕様)であると判定するものである。
そして、その結果、本来満たすべき処理仕様が成立して
いない検証ルートをプログラムのバグの可能性がある部
分として抽出する機能を提供するものである。
【0042】本実施の形態によれば、個々のプログラム
独自の要求仕様や複雑な文法規則を用いることなく、プ
ログラム開発上の汎用的な規則としての検証する仕様に
基づき、プログラムの正当性を検証することができる。 <変形例>上記実施の形態では、図14のサンプルプロ
グラムに対して、検証する仕様として検証仕様1を適用
した例を示したが、本発明の実施は検証仕様1には限定
されない。他の検証する仕様の例として、以下に検証仕
様2とこれに対応する具体的走査規則を示す。 検証仕様2:個々の関数はプログラム上のどのルートで
呼び出されても、その関数の引数となる要素のうちで、
設定が必要なものは一定である。具体的走査規則: (1)検証ルートの走査の開始点(具体的には、コマン
ドの入り口、一次割り込みの入り口となるもの)を外部
から指定させる。 (2)複数の分岐文が同一レベルで組み合わされている
場合、すべての組み合わせを網羅して検証ルートを走査
する。例えば、2分岐のif文と4分岐のcase文があった
場合、2×4=8個の検証ルートが走査される。 (3)ループ文(for文、while文)については、そのル
ープ処理部を一度だけ走査する。 (4)関数内部で他の関数を呼び出す場合、呼び出し先
の関数まで検証ルートを走査する。ただし、走査済みの
検証ルートですでに走査されている関数を再度走査する
ことはしない。 (5)ループ内にbreak文を検出した場合、ループ処理
部から抜ける。 (6)return文検出時は、その関数から抜けるものとす
る。
【0043】以下に、検証する仕様が上記検証仕様2の
場合、処理パターン抽出部の抽出規則を示す。 (1)検証対象のプログラムを構成するすべての関数を
抽出する。 (2)1つの関数に対して、上記具体的走査規則に従っ
て抽出したすべてのルートにおけるその関数の呼び出し
位置に対して、その関数呼び出し時にどれだけの情報
(引数となっている構造体の要素)が設定されているか
を抽出する。
【0044】以上の走査の結果、各関数に対して、呼び
出されるときに設定されている要素が、一定以上の検証
ルートで同一のとき、その要素がその関数呼び出し時に
設定が必要な要素であると判断される。
【0045】上記実施の形態では、ソースプログラムを
検証対象としたが、本発明はソースプログラムの検証に
限るものではない。すなわち、本発明は、検証ルートと
その検証ルートに含まれる処理パターンを抽出できるプ
ログラム一般に適用できるので、その処理対象のプログ
ラムの形式がソースプログラムのようにテキスト形式で
あるか、コンパイルされたバイナリ形式であるかには依
存しない。例えば、上述した実施の形態において、文を
命令に置き換え、ブロックを命令列に置き換えて、図4
の行番号をファイルのアドレスに変更すれば、本発明を
バイナリ形式のプログラムにもそのまま適用できる。
【0046】
【発明の効果】以上説明したように、本発明によれば、
計算機で実行される実行プログラムまたはこの実行プロ
グラムを生成するためのソースプログラムを検証する仕
様に対応したプログラムの部分としての1以上の処理か
らなるブロックに分割し、2以上のブロックの組み合わ
せを、前記検証する仕様に対応した検証ルートとして複
数抽出し、所定数以上の検証ルートにおいて実行される
検証する仕様に対応した処理を他の検証ルートにおいて
も実行されるべき処理としての処理仕様として抽出する
ことによりプログラムを検証するので、個々のプログラ
ムが実現すべき本来の処理仕様を抽出し、その処理仕様
に合致しないプログラムの部分を自動的に抽出すること
ができる
【図面の簡単な説明】
【図1】本発明の概念を示す図
【図2】本発明の実施の形態におけるハードウェアの構
成図
【図3】本発明の実施の形態におけるプログラムの構成
【図4】文構造体を示す図
【図5】ブロック構造体を示す図
【図6】文構造体例1
【図7】文構造体例2
【図8】文構造体例3
【図9】サンプルプログラムを示す図
【図10】文の階層構造を示す図
【図11】検証ルートの例を示す図
【図12】検証ルートを表現するためのデータ構造を示
す図
【図13】検証ルート抽出部、処理パターン抽出部及び
処理仕様抽出部の関係を示す図
【図14】サンプルプログラムを示す図
【図15】サンプルプログラムを示す図
【図16】検証ルートから獲得パターンと開放パターン
を抽出した例を示す図
【図17】本発明の一実施の形態の処理を示す図
【符号の説明】
1 CPU 2 メモリ 11 ブロック分割部 12 検証ルート抽出部 13 処理パターン抽出部 14 処理仕様抽出部

Claims (9)

    【特許請求の範囲】
  1. 【請求項1】計算機で実行される実行プログラムまたは
    この実行プログラムを生成するためのソースプログラム
    の検証方法であって、 実行プログラムまたはソースプログラムを検証する仕様
    に対応したプログラムの部分としての1以上の処理から
    なるブロックに分割し、 2以上の前記ブロックの組み合わせを、前記検証する仕
    様に対応した検証ルートとして複数抽出し、所定数以上
    の検証ルートにおいて実行される前記検証する仕様に対
    応した処理を他の検証ルートにおいても実行されるべき
    処理としての処理仕様として抽出する実行プログラムま
    たはソースプログラムの検証方法。
  2. 【請求項2】前記処理仕様として抽出された処理が実行
    されない検証ルートをプログラムの欠陥として抽出する
    請求項1記載の実行プログラムまたはソースプログラム
    の検証方法。
  3. 【請求項3】前記ブロック,前記検証ルート,処理仕様
    として抽出された処理,または処理仕様として抽出され
    なかった処理を表示する請求項1記載の実行プログラム
    またはソースプログラムの検証方法。
  4. 【請求項4】前記処理仕様に含まれる処理に係る情報を
    補助情報として入力させる請求項1記載の実行プログラ
    ムまたはソースプログラムの検証方法。
  5. 【請求項5】計算機で実行される実行プログラムまたは
    この実行プログラムを生成するためのソースプログラム
    の検証装置であって、 実行プログラムまたはソースプログラムを検証する仕様
    に対応したプログラムの部分としての1以上の処理から
    なるブロックに分割するブロック分割部と、 2以上の前記ブロックの組み合わせを、前記検証する仕
    様に対応した検証ルートとして複数抽出する検証ルート
    抽出部と、 前記抽出された検証ルートに対して、所定数以上の検証
    ルートにおいて実行される処理を他の検証ルートにおい
    ても実行されるべき前記検証する仕様に対応した処理と
    しての処理仕様として抽出する処理仕様抽出部とを備え
    た実行プログラムまたはソースプログラムの検証装置。
  6. 【請求項6】前記処理仕様として抽出された処理が実行
    されない検証ルートをプログラムの欠陥として検出する
    欠陥検出部をさらに備えた請求項5記載の実行プログラ
    ムまたはソースプログラムの検証装置。
  7. 【請求項7】前記ブロック,前記検証ルート,処理仕様
    として抽出された処理,または処理仕様として抽出され
    なかった処理を表示する表示手段をさらに備えた請求項
    5記載の実行プログラムまたはソースプログラムの検証
    装置。
  8. 【請求項8】前記処理仕様に含まれる処理に係る情報を
    補助情報として入力させる入力手段をさらに備えた請求
    項5記載の実行プログラムまたはソースプログラムの検
    証装置。
  9. 【請求項9】計算機で実行される実行プログラムまたは
    この実行プログラムを生成するためのソースプログラム
    を検証するプログラムであって、 実行プログラムまたはソースプログラムを検証する仕様
    に対応したプログラムの部分としての1以上の処理から
    なるブロックに分割し、 2以上の前記ブロックの組み合わせを、前記検証する仕
    様に対応した検証ルートとして複数抽出し、 所定数以上の検証ルートにおいて実行される処理を他の
    検証ルートにおいても実行されるべき処理としての処理
    仕様として抽出して実行プログラムまたはソースプログ
    ラムを検証するプログラムを記録したコンピュータ読み
    取り可能な記録媒体。
JP28656699A 1999-07-10 1999-10-07 プログラム検証方法及び装置 Expired - Fee Related JP4098448B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP28656699A JP4098448B2 (ja) 1999-10-07 1999-10-07 プログラム検証方法及び装置
US09/593,423 US6697965B1 (en) 1999-07-10 2000-06-14 Program verifying method and system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP28656699A JP4098448B2 (ja) 1999-10-07 1999-10-07 プログラム検証方法及び装置

Publications (2)

Publication Number Publication Date
JP2001109644A true JP2001109644A (ja) 2001-04-20
JP4098448B2 JP4098448B2 (ja) 2008-06-11

Family

ID=17706079

Family Applications (1)

Application Number Title Priority Date Filing Date
JP28656699A Expired - Fee Related JP4098448B2 (ja) 1999-07-10 1999-10-07 プログラム検証方法及び装置

Country Status (2)

Country Link
US (1) US6697965B1 (ja)
JP (1) JP4098448B2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004145381A (ja) * 2002-10-21 2004-05-20 Hitachi Ltd ソースプログラムの静的解析装置
WO2006038394A1 (ja) * 2004-10-04 2006-04-13 Matsushita Electric Industrial Co., Ltd. ソースコード検査器、方法、プログラム及び記憶媒体
JP2006293417A (ja) * 2005-04-05 2006-10-26 Ntt Docomo Inc アプリケーションプログラム検証システム、アプリケーションプログラム検証方法およびコンピュータプログラム
JP2007249765A (ja) * 2006-03-17 2007-09-27 Fujitsu Ltd ソースプログラム中の関数呼出し異常パターン検出プログラム
JP2008226208A (ja) * 2007-03-16 2008-09-25 Hitachi Information Systems Ltd プログラム検証方法とシステムおよびプログラム

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040015820A1 (en) * 2000-09-25 2004-01-22 Edward Balassanian Method and system for dynamic delivery of beads
US6907446B1 (en) * 2000-10-16 2005-06-14 Implicit Networks, Inc. Method and system for dynamic delivery of beads
US20070016692A1 (en) * 2000-10-16 2007-01-18 Edward Balassanian Method and system for dynamic delivery of beads
US6859894B1 (en) * 2001-11-30 2005-02-22 Emc Corporation System and method for risk management of errors in software program code
US7647579B2 (en) * 2004-03-31 2010-01-12 International Business Machines Corporation Method, system and program product for detecting deviation from software development best practice resource in a code sharing system
US7886273B2 (en) * 2005-04-29 2011-02-08 The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration Systems, methods and apparatus for generation and verification of policies in autonomic computing systems
US8726232B1 (en) * 2005-12-02 2014-05-13 The Math Works, Inc. Identification of patterns in modeling environments
JP2007213292A (ja) 2006-02-09 2007-08-23 Nec Electronics Corp マルチプロセッサシステム及びスレーブシステムの起動方法
JP5117495B2 (ja) 2006-07-21 2013-01-16 バークレイズ・キャピタル・インコーポレーテッド ネットワーク上のコンピュータ資産のインベントリを識別し、インベントリ管理を実行するシステム
US9003236B2 (en) * 2012-09-28 2015-04-07 Intel Corporation System and method for correct execution of software based on baseline and real time information

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5721926A (en) * 1993-01-12 1998-02-24 Kabushiki Kaisha Toshiba Correspondence-oriented state-transition-model-based programming systems
JPH08212106A (ja) * 1995-02-01 1996-08-20 Toshiba Corp システム試験支援装置及びシステム試験支援方法
US6192108B1 (en) * 1997-09-19 2001-02-20 Mci Communications Corporation Performing automated testing using automatically generated logs
US6378088B1 (en) * 1998-07-14 2002-04-23 Discreet Logic Inc. Automated test generator
US6128727A (en) * 1998-08-21 2000-10-03 Advanced Micro Devices, Inc. Self modifying code to test all possible addressing modes
JP2000112786A (ja) * 1998-10-05 2000-04-21 Fujitsu Ltd 試験ルート選定方法及び装置
US6449711B1 (en) * 1999-02-04 2002-09-10 Sun Microsystems, Inc. Method, apparatus, and article of manufacture for developing and executing data flow programs
US6421634B1 (en) * 1999-03-04 2002-07-16 Sun Microsystems, Inc. Interface independent test system
US6415396B1 (en) * 1999-03-26 2002-07-02 Lucent Technologies Inc. Automatic generation and maintenance of regression test cases from requirements
US6378087B1 (en) * 1999-06-08 2002-04-23 Compaq Computer Corporation System and method for dynamically detecting unchecked error condition values in computer programs
US6513133B1 (en) * 1999-06-29 2003-01-28 Microsoft Corporation Uniformly distributed induction of exceptions for testing computer software

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004145381A (ja) * 2002-10-21 2004-05-20 Hitachi Ltd ソースプログラムの静的解析装置
WO2006038394A1 (ja) * 2004-10-04 2006-04-13 Matsushita Electric Industrial Co., Ltd. ソースコード検査器、方法、プログラム及び記憶媒体
US8020153B2 (en) 2004-10-04 2011-09-13 Panasonic Corporation Source code checker, source code checking method, program for causing execution of the method, and storage medium for storing the program
JP2006293417A (ja) * 2005-04-05 2006-10-26 Ntt Docomo Inc アプリケーションプログラム検証システム、アプリケーションプログラム検証方法およびコンピュータプログラム
JP4727278B2 (ja) * 2005-04-05 2011-07-20 株式会社エヌ・ティ・ティ・ドコモ アプリケーションプログラム検証システム、アプリケーションプログラム検証方法およびコンピュータプログラム
US8332823B2 (en) 2005-04-05 2012-12-11 Ntt Docomo, Inc. Application program verification system, application program verification method and computer program
JP2007249765A (ja) * 2006-03-17 2007-09-27 Fujitsu Ltd ソースプログラム中の関数呼出し異常パターン検出プログラム
JP2008226208A (ja) * 2007-03-16 2008-09-25 Hitachi Information Systems Ltd プログラム検証方法とシステムおよびプログラム
JP4679540B2 (ja) * 2007-03-16 2011-04-27 株式会社日立情報システムズ プログラム検証方法とシステムおよびプログラム

Also Published As

Publication number Publication date
US6697965B1 (en) 2004-02-24
JP4098448B2 (ja) 2008-06-11

Similar Documents

Publication Publication Date Title
JP4098448B2 (ja) プログラム検証方法及び装置
JP4950454B2 (ja) テスト自動化のスタック階層化
JP4395761B2 (ja) プログラムテスト支援装置およびその方法
US5231691A (en) Speech recognition system including interrupt scheme that avoids operational and interfacing conflicts
JPH10283189A (ja) 内蔵実行可能アプリケーション及びコンピュータ読み取り可能な記憶媒体並びに内蔵実行可能アプリケーションの作成方法及びその作成システム
US7016807B2 (en) Device and method for monitoring a program execution
US20100050257A1 (en) Confirmation method of api by the information at call-stack
US7036111B2 (en) Code verification system and method
JP5303795B2 (ja) アプリケーションの解析方法、解析システム及び解析プログラム
US20030226131A1 (en) Method for semantic verification of supporting programming artefacts
JPWO2011108584A1 (ja) アプリケーション改変部位探索装置およびアプリケーション改変部位探索方法
US8079026B2 (en) Job definition verification system, and method and program thereof
US20040216138A1 (en) Method and system for processing input from a command line interface
US20030217352A1 (en) Script processing apparatus, script processing method, and script processing program
US20220092476A1 (en) Dependence relationship detection device and dependence relationship detection method
JP4929121B2 (ja) ソースプログラム解析装置、ソースプログラム解析方法及びコンピュータプログラム
JP2765549B2 (ja) コンピュータシステムにおける動作評価システム
JP2002288004A (ja) プログラムソース処理装置、プログラムソース処理方法、およびプログラムソース処理プログラム
JPH0962493A (ja) ソフトウェアインストールシステム
JP2002157144A (ja) ソフトウェア自動試験方式
JPH10293683A (ja) プログラムの比較解析装置、プログラムの比較解析方法、及びプログラムの比較解析プログラムを記録した機械読み取り可能な記録媒体
CN112604296B (zh) 一种游戏更新的方法、电子设备和相关系统
JPH10187450A (ja) オブジェクト指向プログラム自動生成装置,自動生成方法およびそのプログラム記憶媒体
JPH07114460A (ja) データ処理システム
CN117873870A (zh) 一种yum源完整性测试方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040824

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20070525

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070619

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070816

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20071204

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080204

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080313

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110321

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110321

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120321

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130321

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130321

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140321

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees