• 検索結果がありません。

プログラム・デバッグにおける記号的実行の応用

N/A
N/A
Protected

Academic year: 2021

シェア "プログラム・デバッグにおける記号的実行の応用"

Copied!
11
0
0

読み込み中.... (全文を見る)

全文

(1)

  M 刪 01 跚 orS ▲o ▲m I期 r:TVTS  ov  TaCHHOLOGy     Vo1 19

 No

1

 1985

グ ラ

ム ・

バ ッ

記 号 的 実

応 用

深 沢 良

・袖 山

欣 大

* *

・門 倉 敏 夫

* *

An

 

Application

 of 

the

 

Symbolic

 

Execution

 on  

Program

 

Debugging

Yoshiaki

 

FuKAzAwA

, 

Yoshihiro

 

SoDEYAMA

 and  

Toshio

 

KADoKuRA

   In this paper

 we  describe the program  debugging  system  

based

 on the symbolic  execution

   The  

basic

 idea of the symbolic  execution  

is

 to allow  variables  to take on  symbolic  vaLues  as  well

as real  values

 

That

 is

 each  symbolic  execution  result may  

be

 equivalent  to a large number  of usual

test cases

  But the symbolic  execution  of whole  program  is not generally practical because of the vast

cornputational  power  and  the poor loop management

   In order  to get over  two kinds of defects above  and  to make  the symbolic  execution  more  practical

our   system   has paid attention  to the following two  points

  First

, this system  symbolically  executes

only  a part of the  program  according  to the user  specification  of necessary  variables

 

Namely ,

 execu

tion paths of no  interest are excluded  by means  of the simple  

data

 

now

 analysis

 

Second

100p

 Inanage

ment  

is

 

improved

 

by

 the case analysis  of the 

feature

 oHoops

  Program  loops are classified into the

de丘nite  iteration loops

 the 負nite  iteration Ioops and  the indefinite 

iteration

 loops

 

And

 that

every  loops

are processed 三n terms of this classification  respectively

  

The

 target language  of this system  is a subset  of 

PLII.

  Most  of this system  has been implemented

by 

PL

I

 under  

CMS

 of 

IBM4341

 processor system

 

One

 part of this system

 symbolic  expression  hand1

ing module

 is processed by a PROLOG  interpreter

    We  have obtained  su 伍 cient  results  by the application   of this  system   to some   error cases

  The

results  are  compared  to those of conventional  debugging  system  and  to those of other  symbolic  execu

tlon system

1.

は じ め に  プ ロ グ ラム の 記号 的実行と は, プロ グ ラ ムに入力 する デ

タを

ある 固有の値で は な く

すべ て の 値を代 表 す るこ との で ぎる記 号の ま まプ 卩 グ ラ ム を実 行 する こ とを 言 う6

13) 。 記 号 的 実 行は, プ P グ ラム に入力する デ

タ を人 間の憶 測に よっ て生 成 するもの で はない の で

理 論 的に プロ ムに起こ り得るてのパ ス を発見 する こ と がで きる と 言 う特徴を持つ

の た め

プロ グラム の テ ス ト, デバ ッ グ時におい て, プロ グ ラム の 制御構造 を 解 析 するツ

ル と して非 常に有 用 なほか

テス トさ れ るブ * 情 報工 学 科   講 師   * * 早 稲田大 学理 工学部 電 気 工 学 科 昭 和

59

11

27

目受付 ロ グラ ムに与 える テス ト

タ の 自動 生 成P) , プ ロ グラ ム がユ

ザの仕 様 どお りにくか を 検 証 する

プロ グ ラムの正 当 性の明5

7

e )な どに も応用 さ れて い る。  記 号 的 実 行に 関 する研 究は

1970 年代の 前 半か ら盛 んに な り,

ろ な研 究 機 関研 究

,King

に よる PL !1 サ ブセ ッ ト の記 号 的 実行シ ス テ ム で あ る

EFFIGYI

°) や

 

Howden

提 唱 FORTRAN の DISSECT1 )な ど が て い 。 し か し

記 号 的実 行が本 質的に持っ て い る と 思わ れる有効性に比ぺ て

実 用 化は進んでい ない

こ の原 因は

まず第 1に記 号 的 実 行シス テム が

その原 理故に , 莫 大な計 算機 資 源 を 浪 費 する割に は

威 力を発 揮する プロ グ ラ ムの類 が 非 常に限 られて い る こと, 第 2に発表さ れ てい る記 号 的

(2)

相 模工業 大 学紀要  第 19 巻  第 1 号 実 行シ ス テムの殆 どが, 実際に は存在 し ない , ま た は使 うにしない プ卩 ラ ミ ン グ言 語 を対象に した り

お よ そ実現 が 不 可能な 程の大規 模なシ ス テム を目指すなど, その 概 念設計に こだ わ りす ぎて 実 用 性を欠い て い るこ とが挙げられる。 しか し

我々は記 号 的 実行も

そ れを 活か すよ う な工夫 さ え してやれ ば, それ を 応 用 して十 分 実用 的 なシ ス テ ムを 作 り得る と考 えてい ま た, 最 近 で は

記 号 的 実 行の 中 核 を な す 記 号 処 理 を 行 な う環 境が 急 速に整 備さ れ

加 えて記 号 的 実 行に お い て人工 知能的 な戦 略を行な う部 分の記述も,

PROLOG

などの言語の

般 化に よ っ て非常に容易に なっ て きてい る。 今回試作 し た シ ス テ ム は この よ うな環境の もとで前 述の よ う な 記 号 的実 行シス テムの欠点を緩 和する目的で 成 され た もの である。  

テ ス ト

デバ グ は依 然とし て

プ ロ ラ ム 成 過 程に おい て大 きな割 合 を 占め て い る

すで に発 表さ れてい る多くの テス ト技法の中で, プ卩 グ ラム の実行 経 路の解 析技 法 即 ちあるテ ス ト入 力 デ

タに よっ て どの よう な経路が実 行され, どの ような 出 力 デ

タが得られ るか ま た どの よ う な経 路 が 未実行で ある か を調べ こ と は, 系統的で, 高い 信 頼 性を持つ 技 法 と して大 変有用 で あること が 分かっ てい る 本 シ ス テム で は

記 号 的 実 行の適 用 をプ P グラムの デバ ッ グに限定するこ と に よっ て

手 軽なデバ

ル と して 記号的 実 行シ ス テ ム を用い る こ とを 試み る。 ま た こ の こ と が, 前 述の 記号 的 実 行シ ス テ ム の短 所の解 消に なると考え られ る。   今回 試 作 したシ ス テ ム

,ユー

ザ が プ ロ グラム ま た は手 続き中の 任 意の ステ

トメ ン トと変 数 を示すこ とに よっ て, プ P グラム または手 続 ぎの最初か ら その ス テ

トメ ン トまで を 記 号的に実 行 し

指 定された

つ また は 複 数の変 数の 記 号 的 な値

お よ びそこに 至 るパ ス をユ

ザに返 す もの である

こ の シス テムは

プPtグラム の 体テス ト の段 階で 主に使用するもの で プP グラム の制 御構造の誤 りの発 見や, パ ス の分 岐を決定する複数の変 数の

境 界 値 付 近で の舞い の分析に効で ある。  また, 本シ ス テム の成果を正確に評価し, 実用 化 する た め に, 本シ ス テ ム に使 用で きる言 語は

実在の プロ グ ラ ミン グ言 語 PL 1に きわめ て 近い もの に設 定し て い る

表 1 ダイ ナミ ッ ク

デバ ッ ギ ン ク  シ ス テ ム と 記       号的実 行シス テ ム と の比較 ダイ ナ ミ ッ ク ・ デバ ッ ギ ング

シス テ ム 記 号 的実 行シス テ ム       ・ と ん どの プ ロ グラム        に つ い 実 行 。 賄

鷲 騨

源 を あ ま 喉

計 算誤差が ない 。

境 界 値の 分 析 力 が高 い o

さ れ ない バ ス 発 見 する こ と が で き   る

2.

本シ ステ 厶 の特 微 短 所

ス ト

タ を 人 問  が推 測 に よ り生 成 す る の で, 特 殊な ケ

ス で 出る バ グ を 発 見 する こ  とが 難 い。

莫 大 な計 算 機 資源 を 消 費 する

プ 及 び 配 する解 析 能 力 が 弱   く

実 行 で きるプ ロ グラ ム が 限 ら れ る。

結 果が人 間に とっ て 分か りやす い もの に なる とは 限 らな い

1

従 来の記 号 的 実 行 を 使っ た プ卩 グラム のデバ ヅ グ ・ シ ス テ ム と, ダ イナ ミッ ク

デパ ッ ギン グ

シ ス テ ム4} との比 較 を 示 す。  た だ し, ダ イナ ミッ ク

デバ ッ ギ ン グ

シ ス テ ム と は, プ P グラ ム に具 体 的な値を 入力し, その結 果を追 う ことに よっ てプ 卩 グ ラム の ミ スを探 す よ う な もの を 指 す

  本シ ス テ ム で は

表 1に示した 記 号 的 実 行シ ス テ ムの

3

欠 点に対 して

次の ような対 策を 用い てい る。 (a) 計 算 機資 源の浪費  本シ ス テム は, 閉じ た プ ロ グ ラム ま た は手続 き を総て 記号 的実 行する の で は な く

その初か ら, ユ

ザが 指 定 し たス テ

トメ ン トまで の , 指 定し た

つ ま た は数 個 の変 数に つ い て し か 記 号 的 実 行 を 行 なわない。 し た がっ て 指定 さ れ た変 数に直接関 係 し ない パ ス や変 数を

予 め簡 単 なデ

フ ロ

行 な うこ とに よっ て排 除 するこ とに よ り

計 算 機資源を有効 に利用する こ とが 期 待で る。  ま た

記号の ま ま実 行する必 要の 無い変 数につ い て は あ らか じ め その を初 期設定す るこ とに よ り, シ ス テム の 負担 を 軽 減 して い る。 (b) ル

配列に関する解 析 能 力の弱 さ  ル

プ は, そ れぞれの 性質につ い て 自動 的に場 合 分 け を行なうの で

『ル

プは 必 ず 実行 し ない』シ ス テムや 『指 定回の み 回 る』 シス テム に 比べ て プロ ラ ム の解 析 能 力が高い。 ま た, 記号的実行に 際して帰納的 な 表 現 を

一 16 一

(3)

プロ グ

デバ ッ グに お ける記 号 的 実 行の応 用 (深 沢 良 彰

袖 山 欣大

門倉敏夫 ) 許したこ とも あい まっ て

プや配列に対 する解 析 能 力を上 げる効 果を持た せ てい る。  (C) 結果の見にく さ

 

本シ ス テ ムで は, 記 号 的 実 行を行 なっ た結 果は, 字下 げ を 行 な うなど し て画面上で できるだ け 見 や すい表記方 法を とっ て い る また

結 果の記 号の

部に数 値や式 を 代入 し て再び簡略化するこ と もで き

人間に とっ て分か り や す い 形まで結 果を簡 略化するこ と が 可 能で ある

3

. 本

システ厶 の

実行例

 本シ ス テム の 具体的 な実 行例を次に示 す

(a) ル

プ が 関与しないプログ ラム

 

図 1の プ P グ ラム を 入力 す

本シ ス テ ム は まず プ ロ グ ラ ム 細か い ス テ

ト メ ン ト の単 位に分 割し 見 や すい よ うに理 し た後

番 号をつ け て 画面に表 示 す る。 こ こ で

009

のス テ

トまで の

K

記 号 的な値 と009 に た ど りつ くまで のパ ス を求め るこ と を指定する と

本シス テム は図 2の ような 出 力 を 行 なう。 この 例に お い て

本 シ ス テ ム は

記 号的 実行 を 行 な う前に デ

タ フ ロ

解 析を行ない ス テ

トメ ソ 5005

006

は 009 に 至 るパ ス に は 無 関係で あること を 察 知し て記号 的実行 を行なわ ない。

 

ま た

タ フ ロ

解 析が最も有 効に使わ れた と 思 え OOIOO20030D4 OD50D6

007

00BDO9

010

図 1 SAHPLE1 :

PI

〜OC   (

1,

J,

K,

L ) 

 DCL  (1

K

L

H ) INTEGER  

M ・

 1十」 ;  

IF

 M

=1

 THEN     DO:        K

1 *亅/

2

 ;        

L =

1 /

J

;    ENI〕 ;   ELSE    IF M 

=2

 

THEN

   DO ;      L

宦3

 1      

L =

L+

2

 ;     END ;   ELSE     K

− 2

 1

END

 

SAMPLE1

 :   サ ン プ ル

プロ グラ ム

1

    KM       condition  

1

        #i+ #

j ■ 2

     

RESULT

 

1

       

5

      path 

1

       

001−002−003−004−007−008−009

図 2 サ ンプ ル

プロ

1

の 実 行 結 果

ODI

      

S

PLE2

 : 

PROC

 (

A

1

)  ;

002

      DCL  A (*)   INTEGER ;

003

         DCL  (1

XrJ ) INTEGER :

004

      1F I>

1

 THEN

O

〔}

5

      X

 A (1 ) ;       ELSE

oo6

      x

=o

 ;

OD

?      

DO

 J

1 to I ;

ooe

     

A

J

亅 ;       END ; 009      1

−・

3 ;        

END

 

SAHPLE2

 :    図

3

サ ンプル

プ ロ グ ラ

2

    X

        conditjon  

1

      ‡‡i>

1

        result  

1

      #a  〔# t〕         path 

1

     

0

1−002−003−OO4−

005

−009

        condition  

2

      ‡‡i く

一1

        resu ]t 

2

     

0

        path 

2

     

001−002−

003

臼〔〕

4−006−

〔}

09

図 4 サ ン プル

プ ロ グラム 2の 実 行 結 果 る 例 の 1つ に示す。 図

3

の プ卩 グラ ム で

ス テ

メ ソ ト009 ま での

X

の値を 求め るとすると 結 果は図 4 の よ うに なるが

こ こで は記 号 的 実 行に とっ て最 も処 理の 複雑な

007

008

の ル

プはX に無関係なの で シス テ ム か らは無視される。

(4)

相 模工 業大 学 紀 要 第 19 巻 第

1

号 ◎   DO I

言1

 to 100: ◎  

DO

 I

詈JTOKDO

END

END

3

IJ ◎

XY

B

DOK

=ITOJ

; DO 騨HILE (自 >B )

END

A =A

C

◎  1

− 1

DO 騨HILE 

1

 〈

100

 

1 =

1

+1 END (た だ し

,・

 は任 意の ステ

トメ ン ト の集 合 を 表わす)       図 5 決定回 実 行され るル

プ の例 (

b

) ル

プが関与 す る プログラ ム

 

プロ グラム中に, DO や

WHILE

などの ル

プが 現 れ, か つ その ル

プ が必 要 として い る変数に関 与して い る ときに は, ル

プを次の ように場 合わ け し て 処 理 す る。  i) 決 定回実 行 されるル

 

これは, ル

プ を実 行する回 数が

計 算機に とっ て 明 らか である場 合で る。 図 5に例を挙 げる。  こ の よ うな場 合, 本シ ス テム は 原 則 と して記 号 実 行 を ル

プの 回数だ け 行な う

し か し

も しル

プ の内部 が 帰納的に表わ せ る よ うな 場合には, 下 記の

ii

)に準 じ

◎    

DO

 

I =

JTOK ;       A (1 )

1 *I      END         END ; 図

6

有 限 回 実行 さ れ る ル

プの 例 帰 納 的 表 記 を 行なう。   ii) 有 限回実 行されるル

プ   これ は, 計 算 機に とっ て明 ら かに有 限回 で脱出で きる こ とは分か っ て い て も

その具 体 的な実行回数 がわ か ら ない ようなル

プである。 図 6 に例を挙 げる。   こ の場合, シ ス テム は

まずル

プを

2

回実 行し て み て

変数 , 常に

定の値 を 示 すか, もしくはル

変 数の関数と して表 される場合に は, そ の記 述 を行なっ て ル

プか ら脱 出 する 図 7に , 帰納 的 記述の例を 示す。

 

ま た

帰 納的 な 記述が 不可 能な場 合に は

iii

)に 準ずる。  iii) 不定回実 行さ れ るル

 

これは, 計 算機に とっ て (人 間に とっ て も)実 行 する 回 数が不 定で ある ようなル

プ でる。

般に使われる WHILE ル

こ の 例にあた る。  シス テ ムが, こ の よ う なル

プ を発見 すると

実 行を

止 し て , ユ

ザに次の項 目の中か らの選 択を要 求 する。 こ のル

で は

{@i >

(変 数J の記 号 的 な 値 ) & @i < 昌 (変 数

K

記 号 的催 )        

la

〔@i〕

@i *

i

が生 成され る。 (@はシステムが 自動 的に 生 成 し た 仮 変 数であ る。 )        図 7 ル

プの 帰納的 表 現の例

(5)

プ ロ グ

デバ ッ グにお ける記号 的 実 行の応 用 (深 沢 良 彰

袖山欣 大

門倉 敏 夫 ) α )ル

プ を

ザ が指 定し た回 数 だ け 記 号 実 行 す    る。 β)ル

プを

回 ごとに ス テッ プ実 行し, 結 果を画 面    に表 示 する

γ)ル

プ 変 数 な ど, ル

プに関係し た値の設 定 を行    ない

脱 出 条 件 などの手助け を行 なう。 δ) ル

プ の脱出 条件 を判 断 し て い る 条件 文 を    

TRUE

または

FALSE

に設定する。

4.

 

対 象 言 語の仕 様  本 言 語は

PLII 言語の サ ブt ッ トであ る が

 PL !

1

で 最 も 良 く使 わ れると思われる言 語 仕 様の大 部分を有して い る。 以 下に , こ の 言 語の

を述べ

PL

1

との主 な 相 違 点のみ     デ

タ の種 類   本言語で 扱 う こ と の 可 能 な 基 本デ

タ 型 は

INTEGER ,

 REAL  

CHARACTER

 BOOLEAN  PTR の 5 種類である。 この 5 種類の基 本 デ

あ れ

使わ れ る プ ロ グラ ム の 殆 ど は, こ の 制 約に よる大 き な障 害は生 じない と思わ れ る。 ま た

こ の制 約は

記 号 的実 行では

型の変換に よ っ て生 じる誤 差を 記 号的に 検 定するこ が非 常に困 難で ある ことに も起因 し て い る

    フ ァ イ ル に対 する操 作は記 述で きない

た だ し

コ ソ ソ

ル に対 する入 出 力 (PUT   LIST ,  GET   LIST 等)は記述可能で ある。   配 列 変 数 が 扱え る以 上

も理 論 的に は扱え る わ け で は あ る が

本シ ス テ ム 稼 動 す機 環 境 (VM  CMS の制 約の た め, 今回は フ ァ イル操 作は 見送 っ 。     再帰手続 き は 記 述で き ない 。  再 帰 手 続 き も

理 論 的にはサ ポ

ト可 能 だが , 仮に再 帰手続 きをサ ポ

トし た と して も, その プ ロ グ ラムを 記 号 的に実 行し た結 果は

ほとん どの ものが非 常に繁 雑に な り

人 間に とっ て デバ ッ グに役 立つ ほ ど有 用なデ

タ を提供で きない と判 断し た

    並 列 実 行に関 する操 作は記 述で き ない。  本シ ス テ ム の よ う な記号的実 行の ア ブ Pt・

チ で は

並 列実 行をサ ポ

るこ とは不可能で ある。      ポ インタ は

,NULL

もしくは具 体 的 な 変 数 名 を 指 す もの とする。 従っ て ポ イ ソ タ変 数に数値を代入 し た り, ADDR 関数を使 うこ とは許され ない。  ポ インタ変 数は

実 際に は ア ドレ ス が格 納さ れて い る が, 概 念 的には ポ イ ン タ変数は具体的 な 変 数 名 を指すべ きであ り, 上 記の ような制約条件を課し た とこ ろ で, プ ロ グラム に とっ て大 き な 障 害は無い と判 断し た

5. 本

シ ス テ ム の

構成

 本シ ス テ ム は,

IBM

の VM  

CMS

環 境の端末上 で, ユ

と対 話 形 式で実 行されるもの である

シ ス テ ムは 図8 に示すよ うに 大 きく分けて Pre Processor

 User

Interface

 

Handler,

 

Data

 

Flow

 

Analyzer,

 

Symbolic

Executer , 

Symbolic

 Evaluater

 Editor の

6

つ の部 分

か ら構成 されてい る。   以 下にそれ ぞれ の機 能を説 明 する

(a Pre Processor  Pre Pr  essor は,  PLfl 言 語の ソ

ス を, 対 象 言 語 の仕 様に合 するよ うに 変 更 するもの で ある

  本シ ステ ム の ユ

イン タ フ ェ

ス は , あ く まで PLII を 仮 定 して い る

。 一

処 理の 都 合上

本シ ス テ ム は前節で述べ た ような 仕 様言 語を対 象とするの で こ の 言 語 間の 変 換を行 な うの が Pre Processor で あ る

 Pre Processor は 大 きけ ての 3つ の機 能を持 つ o   i) 文 字列の換   これは

主に対 象 言 語の扱 える デ

タ型が

,PL ,

il 比較し てっ て い る部分を補う ため および短縮形 など を使 うこ とに よ り, 2 種類 以 上の表 記方法を許 すシ ン ボ ル

種 類に統

する た め に使 う。   ii) 適 合しない文 法 を含む ソ

卩 グ ラム  iii)ソ

プ ロ ラム 最 も細か い単 位の ス テ

ト メ ン ト に分 割し

それに番号をつ て整 列 化 する機能。

(b) 

User

 

Interface

 Handler

  User Interface Handler をよ  Pre Processor 整 列 化された プ卩 グラ ム 求め るス テ

トメ ソ ト や 変数の指示

その他 初 期 設定を 行 な う もの である。 具 体 的に は

次の ような もの に対して設 定を行なう。   i) 求めるス テ

トメ ン ト の指 示      求め るス テ

トメ ン トは,

Pre

 Processor でつ け       られたス テ

トメ ソ ト番号で指定 する。   ii) 求め る変数の

(6)

相模工 業 大 学紀要

 

19

 

1

号       = =⇒被テ ス トプログ ラム の流 れ      

→ デ

タ のれ 図

8

 シ    

   

これは, 複 数で も構わない。 また

配 列 変 数は,      ま と め て

つ の 変数と して扱 う

iii) 変 数の初期 設定

   

設 定値は具体 的な値でも

記 号 を使っ た式ま たは       条件で も 良い。

iv

) プロ に含まれる他の手続 きの呼び出しの       扱い を決め る

  

ア) プロ グ ラム 中に呼び出 す 手 続 き を挿入 する。

  

イ )手 続きの動 作 を 記 号 的に記 述 する。    ウ )手 続 き 呼び出しに よっ て影 響を受 ける変数を 指         定 する

(c > 

Data

 

Flow

 

Analyzer

 Data

 Flow  Analyzer

, 

Pre

 

Processor

か ら出 力さ

れた プロ ム と

, User

 

Interface

 

Handler

か らの諸

情報 を も とにデ

タ フ ロ

記 号 的行 を 行 な うべ ス テ

トメ ソ トと変数 を 探 し て

SymbOlic

Executer

す 機 能 をもつ

 なお, こ こ で行な うデ

タ フ m

解 析は , ス テ

トメ ソ ト間の変数の参照情報を主 な 判 断 材 料に して お り, 比 較的 初 歩 的 な もの で ある。 ま た, 配列 変数は, ま と め て

変 数 と 判 断て い 。 以 下に デ

タ フ 卩

解 析の アル ゴ リ ズ ムを 示 す

 

Pre

 

Processor

で番 号 付 けされたタ

ゲ ッ ト

プ ロ グ ラム の ス テ

ト メン ト番 号を

1

〜 n と し , プロ グ ラム 中 の ある X テ

トメ ン ト k (1≦k≦nで, 定 義される 変 数の集 合 を

DEFV

k

)とす る

ま た, ス テ

トメ ン ト k で 照 さ れ る変 数の合お よ び そ こか ら前に遡っ て最 初に現 れ た 分 岐ス テ

トメ ン ト (

IF

, 

WHILE

等 ) で参 照 さ れる変 数の 集合を REFV (

k

) とし

プ ロ グ ラの ス テ

トメ ン

k

ま で で , 求める 変 数の集合 を

V

とす ると

Data

 

Flow

 

Analyzer

か ら出 力さ れ る, 必要

な ス テ

トメ ソ ト の 集 合

STR

k

, 

V

>は, 次の よ うに 表 わ される。  STR (O, 

V

φ   傷 胆

鰌 飄

。 、       (if DEFV k

V

≠φ〉 (d) SymbOlic  

Executer

 SymbOlic

 Executer は

 

User

 

Interface

 Handler

よび

Data

 Flow  

Analyzer

か らの報 を も とに

Pre

(7)

プロ グ ラ

デバ ッ グに お ける記 号 的 実 行の応 用 (深 沢 良 彰

袖山欣 大

門倉敏夫) Processor か ら出力された プロ グラム の的 実行を行 なう

プの 実行に関し て会 話 的に実 行 を 行 な う必 要 が生じ た ときは, Editor を呼び出し

また

式 を 簡 略 化 するため に常 時

Symbolic

 

Evaluater

を 呼 び 出 す がで きる

  記号的 実行に際し て, プ ロ グラム中に現れる 変数は 次 の よ うに して処 理する。   i) 手 続 き

さ れ る引 数   これは #記 号に続い て変 数 名の小 文 字で表 わ す

た と えば

 

AAA

PROC

ABC ,

 

XYZ

とい うプ P グラム がた と

変 数

ABC

の初 期

値は,

User

 

Interiace

 

Handler

で特別な指 定の 無い 限

#abc に

変 数

XYZ

xyz にな る

 

ii

) 通常の変 数  これは プロ グ ラム 中の条件に よっ て, 複数の値 を持つ こ とがあるの で の よ うに表 わ さ れる。  変 数 名

条 件

1

値, 条 件

1

,…

, 条件

1

値 た だ し

条 件

値とも 原則と して i)の引 数か

もしく は次の iii)で 述べ み込み 変 数の式で表わ され る。

 iii) GET  LIST シス テ ム み こ ま変 数

 た とえば,

GET

 

LIST

文がル

プの中にある場合な ど では , 変 数が 何 回読みこ まれる か不 確定である。 しか し, こ の 変 数 を参照する変 数にとっ て は, 自分の扱っ て い る デ

タが, 何回め に 読み込ま れ た 変数であるか を 把 握 する必 要があるの で 入 力 文に よっ て読み込まれた変 数は次の よ うな形 式を とっ てい る

  変 数 名

(読 み 込 まれた回 数 ) 変 数 名の小 文 字 た とえば

,3

回め に読み込 ま れた変 数

ABC

の値は

  (3)abc と な る。 た だ し, 読みこまれた 回数は, 通常 ii) と同 じ く

複数の条件 と値の組み合わせ で ある。   iv) 動的変 数  動的変 数 も, プロ グ ラ ムに よっ ては実 際の 変 数 として 記 憶 域に割 付 られる数が変 化 する の で

上記の iii) と似 た扱いを する

  変数 名= [憶 域割 付け ら れ た順番

1

変 数 名小文 字  た だ し

こ の [記 憶 域に割付け られた 順番]も, 原 則 として

ii

) とおな じ形 式 を とっ て い る

動 的変数の表記 の具体例を次に 挙 げる。

OOI

 SAトlPLE3

2300nUO

 

0400500E

0700

009UIO

llD12D13

014015

   PROC (TOP ) ;

DCL

  (TOP

P )    

PTR

 : DCL  l CハRD      BASED

     

2

 NAME    CHARACTER

     

2

 NEXT    PTR ; DCL  

1,

NUMBER)   工NTEGER : DCL  NULL       BUILTIN ;

GET 

LIST

 (

NU

卜{BER) ;       /*

IF NU卜IBER 

O THEN       *  ↑GP ・

 NULL        ELSEDO  

I=1

 TO NUMBER カ

ドの枚 数の読み込み */ もし カ

ドが なければ    

TOP

はNULLIUする      */

   

ALLOCATE CARD SET

 

P

 

 

構 造 体CARD付 け

 

   

GET 廴IST (cnRD

NAME ) ;

  

/*

 

ドの内 容の護み込み

 

   

IF I

1 

THEN       

/*

 

も し

ドが1 枚め だ ? た ら

 

*/

   

CARD

NEXT

=NULL

   

/ *

 CARD.

NEXT NULUc

 

     ELSE

   

CARD

NEXT

TOP :

   

/*

 

さ も なくばチ ェ インする

 

*/

   TOP

P ;

        

/*

 

TOP をカ

ド の先頭の ポ イン タlt */

   

END

 l END snMPLE3 

(8)

相模工 業大学紀 要 第

19

巻 第

1

号  [

i

j

11k

1,

 

i

>=

jH

11k

− 1

】abc  これ ら

i

〜iv

)の表 記法を 用い るこ とに よっ て , 本シ ス テ ム で は, 配 列や ポ イン タ をサ ボ

トして い る。  たと えば

図 9の手 続 きに おい て, 手 続 き終 了 時の ポ イン タ 変 数

TOP

の値を求め るこ と を 考え る

こ の手 続 きは, 入力装置か ら, カ

ドを読み込み, そ れ を リス ト に し て先頭の ポ イン タ変数 TOP を返 すもの である。 た だ し, リス トの 末尾は

NULL

になっ て い る。 また , カ

最初 , 枚数が

0

の とき に は

TOP

NULL

が代入 されるもの と なっ て い る。  こ の プ ロ グラ ム を記 号 的に実 行 して ポイγ タ変 数 TOP のを求め る過 程を図 10 に示 す。 (e) Editor  Editor は, 人 間が理 解で き る形の式と, シ ス テム の    ステ

トメ ン ト 

002

vOO5 を実 行

変 数のテ

ブル を 作 る。   ステ

トメ ン ト

DO6

を 実 行 す る と

変数NUMBERは 次のように なる

 bRJMBERi

 (1 ) nunt)er

  ステ

トメン ト 

OOT

ooe

を実 行 す

ンタ変 数

TOP

は次のよ うにな る。

 

TOP

 

   (

1

 ) mumber

O

 

lnull

   ス テ

トメ ン ト 

OO9

015

はル

プ なの で

 

Symbolic

 

Executer

プの性 質 を

調べ

。 そ の結 果, 有 限 回ル

プであ ること が わ か るの で

変 数

P

CARD

, 

TOP

に対 して

次のよ う な 中 闇 結 果 を 作 成 す る

 P 

 {@li >

星1

 &  @i <

 (1 ) number  

l

 P      i 〕 card

 TOP

{@i > 窗

1

&  @ i〈 =

1

number  

l

 TOP

icard }

 cnRD

NEXT

{@i >

旨1

&  @i 〈

1

)number & @i

=1

     

1

 〔@

i

 〕 

CARD.

NEXT

 

 

NULL

      

1

      @i >

1 &  @i〈

(1 )number  &  @1 ≠1      

1

〔@i〕

CARD.

NEXT

1

CARD

c

RD.

NA

E 望

{@

i

零1

&  @

i

D

 riumber  

i 罨1

     

1

  〔@i 〕 CARD

NAHE 

 (  i ) card

na用e

        「

      @i >

=1

&  @

i

1

number &  @

i

1

     

1

〔@i〕cnRD

NAME

(  i)card

name )

   よ フ て

  と   か ら手 続き終了時のTOP は次の ようになる。  TOP →    condition  

1

      (

1

 ) numbe 「

工    result  

l

    NULL    path 

l

     

OOI−DO2−O

13−O

〔}

4−005−006−

〔}

07−OD8

    cendition  2       (

1

 ) number ≠

1

   resu 】t 

1

      〔 (

i

) number 〕 oard    path2      001

002

003

004

005

006

007

0臼9

OlO

011

012

013

Ol4

〔}15              図 10 ナ ンプ ル ・プ ロ

3

の 記 号実 行過程

(9)

プ ロ グ

デバ ッ グに お ける記 号 的 実行の応 用 (深 沢 良彰

袖山欣大 ・ 門倉敏 夫 ) 内 部 表 現と して の 式の相 互 変 換 を 行 な うもの で ある

ま た式 が 画 面の 1 行よ りも長 くな っ た場合に は, 字下 げを 行なっ て式を見 易くする操 作 も行な う

(f) 

Symbolic

 

Evaluater

  Symbolic  Evaluater

数 式

略 化お よ び簡 単 な 定理の 証明 を 行な うものである。 「式 」を簡 略 化 する基 準は

用 途に よっ て多 岐にわ た る が

こ こ で は 結 果 が 『人 間に とっ て』わ か り やすい ものに帰着させ る こ と を 基 準 とし た

 

Symbolic

 

Evaluater

機 能 を 次に示 す

  i) 単純式の簡 略 化     {列:

3

十a十

b

十a十

1

十a 匸> a*

3

b

4

  ii) ド・ モ ル ガ ンの定理 な ど を 用 い た 条件 式の簡略化     {列: 一  (a> 3) ⇒  a≦3        

a >3 & b<5)匚> a≦31b ≧5   m ) 知 識ベ

ス を用いた条件 式の簡 略     例: a>

3

& a >

5

⇒ a >

5

       a

a ⇒   true

 

Symbol

董c 

Evaluater

は, 内部に

PROLOG

イン タプ

リタ を持っ て お り, 上例の iii)などの よ うに , 公理系か

らの マ

ッ チ ン グに よっ て式の簡略化 を 行 な う際に は

PROLOG の持つ 推 論 機 能を利 用 す る こ と が で きる。

 

Symbolic

 

Evaluater

に PROLOG イン タプ リタを 利 用し た 理 由は次の とお りで ある。

 i

) 論理 や事実を 記 述 する だけで

シス テ ム がある 度 推 論し, 処 理 して くれる。 し たが っ て , 手 続 き的プ ロ グ ラ ミ ソ グ は最 小 限度で す む。  

ii

) PROLOG の プ ロ ラ ム は デ

タ ・ フ ァ イル に置 か れ た規則の合である。 従っ て, 公理系の追加や変更 など

細か い仕 様 変 更 が 容易であ る

 図 11 に

PROLOG の プ ロ グ ラ ム と して かれた 論理式に関する公 理の

を 示 す

 こ こで の よ う な式を簡 略 化 する こ と を考える。  a十b*

O− 3

c & a十c >

0

上の式を

Symbolic

 

Evaluater

に かけ る と

次の よ う な 手 順で簡 略 化を行 な う eva 

1

(and , tr. X, X )

eval  (andg  

fag

 

X,

 

fa

 

eva1  (or

 tr 

 》〔,tr) 

eval  (equal  g 

X

, 

X豊

 tr) 「X  X は 式 and X

61

X の and は 偽で あ る」 「X の or は 真 あ る 」 「

x

X

等 しけ れ ば

で ある」 eval (ptus

 A

 O , A )

  「A に

0

を足 し た もの はA で あ る」 eva1 (times

A

0,0

  「

A

O

を かた も

0

あ る1

eva且 (plus , A

 ne8  (B ) 

C) :

eval   (minus

 A

B

C) 

       「A に

Bを 足すと 言 うことは

A

B と 同 じで あ る」

eva1 (and , 

OP1

騨 Op2 g Rs ) :

       Op1 

=.

 〔greater

P1

P2 〕 

       OP2 

置..

 〔greeter,

P1

P3

 ) ,        prove   (P1

Nl ) 

       8r (P2

P3

1〜 ) 

       prove  (R

U ) 

       Rs

=.

 〔8reater

1

,し」〕 

     「

演 算 子 側の式が

P1

P2

, 

P1

P3

の パ タ

ンな ら

結果 は

ま ずP1        の式 を 簡 略 化 し た もの (町 ) と

P2

P3

の う ち

大 きい もの を とっ て

さらに そ       れを簡 略 化 し た も の (日)に よフ て

Wl>闇 と 表 わ せ る。 」 図

11PROLOG

プロ グラ ム の 形 で書かれ た 公 理の

部 (ただ し, 『 』 内は注釈文である)

(10)

相 模工業大学 紀要 第

19

巻 第 1 号   a +

b

O− 3

c の式を

不 等 号 よ り左に 記 号を

  右に数 値を集め, 数 値が演 算 可 能 な と きには, その演   算を行な う

こ の ことで

a+

b

*O

3>

c は a+

b

*   0十 c>3 に変 形される   a+b*0+ c 式 を 解 析 し

「何 IL 

O

 は

0

る』とい う公 理か ら

b

0

0に な る

  a+0+c のを解 析し,

r

何かに 0を たし たもの は

 

その

0

を省くこ とが できる』 とい う公 理に よ り, a+

0

  十C は a十C に る。   & オペ レ

タ の 両 側が

不 等 号 をはさんで

同 じ   よ うな形を して いるこ と か ら

この 2つ の式の簡 略化   を試み る

   ど ちら も左 辺が a + c であるこ と か ら,   『式

1

>数 値

1

& 式

1

>数 値

2

1

MAX

(数   値

1

, 数値

2

)』とい う 公 理 を適用し て, 3 と0を比   較し,

3

の ほ うが

0

よ り大きい の で, a+e >3 & a + c  >

0

は, a+c>

3

に簡略化で きる。

6

本シス テムの評 価 表 2 本シ ス テ ム の 評 価 D

D

S DISSECT 本シ ス       テ ム 完全 にエ

が 発 もの 発 見できる場 合が ある もの 発見 できない もの 19%     19%    

28

% 71%     38%     47 10%    43%    

25

% (た だ し, DD

S

とは, ダイナ ミッ ク

デバ ッ ギ ン グ

シス テ ム の略で あ る

3

 エ

。チ ク リス ト に対する本シ ス テ ム      の評 価       発 見で  場 合に  発見で 件   数         きる    よる    き ない  本シ ス テムは

従 来の ダ イナ ミヅ ク

デバ ッ グ・ シ ス テ ムにべ , 浮 動小数 点演 算に おける誤 差に よるバ グ を 除い て は, 高い エ ラ

発 見能 力を持つ 。 ま た, 従 来の記 号的実 行シ ス テム に 比べ て も, 前 述の 特徴か ら, エ ラ

の発 見 能力は高い。 表

2

に, ダ イ ナ ミッ ク

デバ ッ グ

シ ス テ ム お よび代 表的な記 号 的実 行シ ス テム の

つ であ る DISSECT シ ス テ ム1)との, エ ラ

発見 能 力の 比較を 示 す。 なお, 『プ ロ グ ラム書法 1) , 第6 章の 『よ くある ま ちがい』 を 評価対象と した。  表か ら も分か るよ うに こ こ で は ダ イナ ミッ ク

デバ ッ ギン グ

シ ス テム に お い てエ ラ

が発 見できる場 合が ある ものが他に比べ て非常に多 くなっ て い るが, これ は テス ト・ デ

タを作成 する人 間の能 力に依存する部 分が 多 く

これ 自体で ダ イナ ミッ ク

デバ ッ ギング ・ シ ス テ ム がエ

検 出 能 力優 れてい る と は言 うこと がで な い と考えられる。  ま た, 『プ ロ グラ ム テス トの技 法 3) , 第

3

章の 『検 査 のため のエ

ー ・

ヅ ク リス ト』に対 する本シ ス テ ム の 評 価 を 表

3

に示 す。 文 献 3)

人 手わ な け ぽ な らない と さ れて い る 67 件の チ ェ ッ ク項目に対 し て 本シ ステムで は

この うちの約

55

セ ン トを 自動 的 に検 出で きる。 ま た

発 見 出 来 ない 12 件の項 目中の 8 件は入 力 /出 力に関 するものであり, これは 本シス テム デ

タ 参 照 デ

タ 宣 言 計     算 比      較 制 御 流 れ イ ンタフ ェ

ス 入力 / 出 力 他の チ

ヅ ク 16088185 1    

1

        1 76472902 30406203 10210080 計

67

37 18

12

がサ ポ

トして い ない機 能で ある

7.

の課 題   最後に, 本シ ス テ ムの 今後の課題につ い て以 下に述べ る。   現 在

本シ ス テ ム は

独 立し たデバ

シ ス テ ム   と して イン プ リメン トを行 なっ てお り

完 成 時に は,   初心者の

PL

1

プロ グラ ミ ソ グ実 習に活用で きる程 度  の成 果 を 目指し ている。 また

将 来 的に は本 シ ス テ ム  を

総合 的 な デバ 環 境

と して位 置づけて既

 

存の デバ ッ グ

ル と結合さ せ, 全体をマ ネ

ジ メ  ン ト

プロ グ ラムが管理 し て, 最 も記 号的 実行が効 果  を発 揮 すると思え る ような 場 合にのみ

本シ ス テ ム

 

実 行 する ように し

本シ ス テ ムの有用 性を高め る こ と  も考え てい る。   本シ ス テム に おい て 従 来の記 号 的 実 行 シ ス テ ムに  おける方 法 と く らべ て

さほ ど改善の跡 が見られ ない  『不 定 回ル

プ』に関し て, 知 識工学に基づいた 手 法  に よ り, 解 決で きる部 分 も あるもの と思われる の で

  将 来的に本シ ス テムを拡 張し て行 く方 針で ある。 24

(11)

プ ロ グラム ・ デバ ッ グにお け る記 号 的 実 行の応 用 (深 沢 良 彰

袖山欣 大

門 倉 敏 夫) )

1

) 2 }

3

) 4 ) 5 ) 6 参 考 文 献

W .E .

 

Howden

Symbolic

 Testing and  the

DISSECT

 

Symbolic

 

Evaluation

 

Syste

,, IEEE

Trans

  Software  Eng

  SE

3

 

July

  1977  p

266−278.

B

W

 Kernighan  and  P

J.

 Plauger

木 村泉訳: 「プ ロ グラム書法」第

2

版, 共 立出版

G .J.

 Myers

長 尾  真

, 松 尾正信 訳: 「ソ フ

トウ

テ ス トの 技法」, 近 代 科 学 社, p

27−

36.

R

M ,

 

Balzer

“EXDAMS

−Extendable

 

Debugg −

ing

 and  

Monitoring

 

System ”,

  AFIPS  

Conf.

Pr 

34 1969

 

p .

567

−580.

S.L .

 

Hantler

 and  

J.

 C

 King : “An 

Introduc・

tion to Proving  the 

Correctness

 of 

Programs

,,

CACM ,8,

 

No .3

 Sept

1976.

R

B

 

Dannenberg

 and  G

W

 Ernst : “Formal

Program  Verification Using  SymbOlic  Execu

tion”

, IEEE  Trans

 

Software

 

Eng .

 SE

8

 No

1

1982

7

) D

LGood , R

 

L 。

 

London

 and  

W .

W .

 

Bledsoe

   “

An

 

Interactive

 

Program

 

Veri

cation  

System ”

   IEEE  

Trans .

 

Software

 

Eng .

,SE

1, No

1,1975

8 

A .

J.

 Blikle: 

On  the Development  of Correct

   Specified Programs

 IEEE  Trans

 

Software

   

Eng .

 

SE −7,

 

No .5,

1981

, p

519

527

9) M

H

 van  Emden : “

Programming

 with  

Veri−

   fication  Conditions

  IEEE  Trans

 

Software

   

Eng .

 

SE −

5

 

No .2,1979

 p

148

159

10) 

J.

C .

 

King

: “

Symbolic

 

Execution

 and  

Program

   

Testing

, CACM

19

 No

7

 

July

 

1976,

 p

    

385−394.

11  R

E

 

Fairley

: 

An  Experimental  

Program

   

Testing

 

Facility

 IEEE  Trans

 on 

Software

   

Eng .

 

SE ・

1,

 

No .

4 1975 p

350

357

12)

J.

LWoods : “

Path

 

Selection

 for  Symbolic    Execution  

Systems

 

UMI

 

RESEARCH

 PRESS

   

Computer

 

Science

 

System

 Programming

 

No .

    12

13> 玉井 哲雄, 福永光

: 「記 号 実 行 シス テ ム」

情 報

参照

関連したドキュメント

被保険者証等の記号及び番号を記載すること。 なお、記号と番号の間にスペース「・」又は「-」を挿入すること。

国連海洋法条約に規定される排他的経済水域(以降、EEZ

[r]

レーネンは続ける。オランダにおける沢山の反対論はその宗教的確信に

[r]

ぎり︑第三文の効力について疑問を唱えるものは見当たらないのは︑実質的には右のような理由によるものと思われ

小学校における環境教育の中で、子供たちに家庭 における省エネなど環境に配慮した行動の実践を させることにより、CO 2

3.1.6 横浜火力 横浜火力 横浜火力 横浜火力5 5 5号機 5 号機 号機における 号機 における における における定格蒸気温度 定格蒸気温度 定格蒸気温度 定格蒸気温度の の