M 刪 01 跚 orS ▲o ▲m I期 r:TVTS ov TaCHHOLOGy Vo1 19
,
No.
1,
1985プ
ログ ラ
ム ・デ
バ ッグ
に
お
け
る
記 号 的 実
行
の応 用
深 沢 良
彰
*・袖 山
欣 大
* *・門 倉 敏 夫
* *An
Application
ofthe
Symbolic
Execution
onProgram
Debugging
Yoshiaki
FuKAzAwA
,
Yoshihiro
SoDEYAMA
andToshio
KADoKuRA
In this paper
,
we describe the program debugging systembased
on the symbolic execution.
Thebasic
idea of the symbolic executionis
to allow variables to take on symbolic vaLues as wellas real values
.
That
is,
each symbolic execution result maybe
equivalent to a large number of usualtest cases
.
But the symbolic execution of whole program is not generally practical because of the vastcornputational 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 simpledata
now
analysis.
Second
,
100p
Inanage・
ment
is
improved
by
the case analysis of thefeature
oHoops.
Program loops are classified into thede丘nite iteration loops
,
the 負nite iteration Ioops and the indefiniteiteration
loops.
And
that,
every loopsare processed 三n terms of this classification respectively
.
The
target language of this system is a subset ofPLII.
Most of this system has been implementedby
PL
!I
underCMS
ofIBM4341
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
.
Theresults 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に発表さ れ てい る記 号 的相 模工業 大 学紀要 第 19 巻 第 1 号 実 行シ ス テムの殆 どが, 実際に は存在 し ない , ま た は使 うに値しない プ卩 グラ ミ ン グ言 語 を対象に した り
,
お よ そ実現 が 不 可能な 程の大規 模なシ ス テム を目指すなど, その 概 念設計に こだ わ りす ぎて , 実 用 性を欠い て い るこ とが挙げられる。 しか し,
我々は記 号 的 実行も,
そ れを 活か すよ う な工夫 さ え してやれ ば, それ を 応 用 して十 分 実用 的 なシ ス テ ムを 作 り得る と考 えてい る。 ま た, 最 近 で は,
記 号 的 実 行の 中 核 を な す 記 号 処 理 を 行 な う環 境が 急 速に整 備さ れ,
加 えて記 号 的 実 行に お い て人工 知能的 な戦 略を行な う部 分の記述も,PROLOG
などの言語の一
般 化に よ っ て非常に容易に なっ て きてい る。 今回試作 し た シ ス テ ム は , この よ うな環境の もとで前 述の よ う な 記 号 的実 行シス テムの欠点を緩 和する目的で 作成 され た もの である。一
方,
テ ス ト,
デバ ッ グ は依 然とし て,
プ ロ グラ ム作 成 過 程に おい て大 きな割 合 を 占め て い る。
すで に発 表さ れてい る多くの テス ト技法の中で, プ卩 グ ラム の実行 経 路の解 析技 法, 即 ちあるテ ス ト入 力 デー
タに よっ て どの よう な経路が実 行され, どの ような 出 力 デー
タが得られ るか , ま た どの よ う な経 路 が 未実行で ある か を調べ るこ と は, 系統的で, 高い 信 頼 性を持つ 技 法 と して大 変有用 で あること が 分かっ てい る。 本 シ ス テム で は,
記 号 的 実 行の適 用 をプ P グラムの デバ ッ グに限定するこ と に よっ て,
手 軽なデバ ヅ グ・
ツー
ル と して, 記号的 実 行シ ス テ ム を用い る こ とを 試み る。 ま た こ の こ と が, 前 述の 記号 的 実 行シ ス テ ム の短 所の解 消に なると考え られ る。 今回 試 作 したシ ス テ ム は,ユー
ザ が, プ ロ グラム ま た は手 続き中の 任 意の ステー
トメ ン トと変 数 を示すこ とに よっ て, プ P グラム または手 続 ぎの最初か ら その ス テー
トメ ン トまで を 記 号的に実 行 し,
指 定された一
つ また は 複 数の変 数の 記 号 的 な値,
お よ びそこに 至 るパ ス をユー
ザに返 す もの である。
こ の シス テムは,
プPtグラム の単 体テス ト の段 階で 主に使用するもの で, プP グラム の制 御構造の誤 りの発 見や, パ ス の分 岐を決定する複数の変 数の,
境 界 値 付 近で の振舞い の分析に特に有効で ある。 また, 本シ ス テム の成果を正確に評価し, 実用 化 する た め に, 本シ ス テ ム に使 用で きる言 語は,
実在の プロ グ ラ ミン グ言 語 (PL !1)に きわめ て 近い もの に設 定し て い る。
表 1 ダイ ナミ ッ ク・
デバ ッ ギ ン ク シ ス テ ム と 記 号的実 行シス テ ム と の比較 ダイ ナ ミ ッ ク ・ デバ ッ ギ ング。
シス テ ム 記 号 的実 行シス テ ム ・ ほ と ん どの プ ロ グラム に つ い て 実 行が可能 。 賄’
鷲 騨
源 を あ ま 喉・
計 算誤差が ない 。・
境 界 値の 分 析 力 が高 い o・
実行さ れ ない バ ス を 発 見 する こ と が で き る。
2.
本シ ステ 厶 の特 微 短 所・
テス ト。
デー
タ を 人 問 が推 測 に よ り生 成 す る の で, 特 殊な ケー
ス で 出る バ グ を 発 見 する こ とが 難 い。。
莫 大 な計 算 機 資源 を 消 費 する。
・
ルー
プ 及 び 配列に 関 する解 析 能 力 が 弱 く,
実 行 で きるプ ロ グラ ム が 限 ら れ る。・
結 果が人 間に とっ て 分か りやす い もの に なる とは 限 らな い。
表1
に,
従 来の記 号 的 実 行 を 使っ た プ卩 グラム のデバ ヅ グ ・ シ ス テ ム と, ダ イナ ミッ ク・
デパ ッ ギン グ。
シ ス テ ム4} との比 較 を 示 す。 た だ し, ダ イナ ミッ ク・
デバ ッ ギ ン グ。
シ ス テ ム と は, プ P グラ ム に具 体 的な値を 入力し, その結 果を追 う ことに よっ てプ 卩 グ ラム の ミ スを探 す よ う な もの を 指 す。
本シ ス テ ム で は,
表 1に示した 記 号 的 実 行シ ス テ ムの3
つ の 欠 点に対 して,
次の ような対 策を 用い てい る。 (a) 計 算 機資 源の浪費 本シ ス テム は, 閉じ た プ ロ グ ラム ま た は手続 き を総て 記号 的実 行する の で は な く,
その最初か ら, ユー
ザが 指 定 し たス テー
トメ ン トまで の , 指 定し た一
つ ま た は数 個 の変 数に つ い て し か 記 号 的 実 行 を 行 なわない。 し た がっ て, 指定 さ れ た変 数に直接関 係 し ない パ ス や変 数を,
予 め簡 単 なデー
タ・
フ ロー
解析を行 な うこ とに よっ て排 除 するこ とに よ り,
計 算 機資源を有効 に利用する こ とが 期 待で きる。 ま た,
記号の ま ま実 行する必 要の 無い変 数につ い て は あ らか じ め その 値を初 期設定す るこ とに よ り, シ ス テム の 負担 を 軽 減 して い る。 (b) ルー
プ,
配列に関する解 析 能 力の弱 さ ルー
プ は, そ れぞれの 性質につ い て 自動 的に場 合 分 け を行なうの で,
『ルー
プは 必 ず 実行 し ない』シ ス テムや 『指 定回の み 回 る』 シス テム に 比べ て プロ グラ ム の解 析 能 力が高い。 ま た, 記号的実行に 際して帰納的 な 表 現 を一 16 一
プロ グラ ム
・
デバ ッ グに お ける記 号 的 実 行の応 用 (深 沢 良 彰。
袖 山 欣大・
門倉敏夫 ) 許したこ とも あい まっ て,
ルー
プや配列に対 する解 析 能 力を上 げる効 果を持た せ てい る。 (C) 結果の見にく さ本シ ス テ ムで は, 記 号 的 実 行を行 なっ た結 果は, 字下 げ を 行 な うなど し て画面上で できるだ け 見 や すい表記方 法を とっ て い る。 また
,
結 果の記 号の一
部に数 値や式 を 代入 し て再び簡略化するこ と もで き,
人間に とっ て分か り や す い 形まで結 果を簡 略化するこ と が 可 能で ある。
3
. 本
システ厶 の実行例
本シ ス テム の 具体的 な実 行例を次に示 す。
(a) ルー
プ が 関与しないプログ ラム図 1の プ P グ ラム を 入力 すると
,
本シ ス テ ム は, まず プ ロ グ ラ ム を最も細か い ス テー
ト メ ン ト の単 位に分 割し 見 や すい よ うに整理 し た後,
番 号をつ け て 画面に表 示 す る。 こ こ で009
のス テー
トメ ン トまで のK
の記 号 的な値 と009 に た ど りつ くまで のパ ス を求め るこ と を指定する と,
本シス テム は図 2の ような 出 力 を 行 なう。 この 例に お い て,
本 シ ス テ ム は,
記 号的 実行 を 行 な う前に デー
タ フ ロー
解 析を行ない , ス テー
トメ ソ 5005 ・006
は 009 に 至 るパ ス に は 無 関係で あること を 察 知し て記号 的実行 を行なわ ない。ま た
,
デー
タ フ ロー
解 析が最も有 効に使わ れた と 思 え OOIOO20030D4 OD50D6007
00BDO9
010
図 1 SAHPLE1 :PI
〜OC (1,
J,
K,
L ).
DCL (1,
」,
K,
L.
H ) INTEGERM ・
.
1十」 ;IF
M=1
THEN DO: K=
1 *亅/2
;L =
・
1 /J
; ENI〕 ; ELSE IF M=2
THEN
DO ; L宦3
1L =
=
L+2
; END ; ELSE K− 2
1END
SAMPLE1
: サ ン プ ル・
プロ グラ ム1
KM condition1
#i+ #j ■ 2
RESULT
1
5
path1
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
THENO
〔}5
X■
A (1 ) ; ELSEoo6
x=o
;OD
?DO
J冨
1 to I ;ooe
A
(J
)=
亅 ; END ; 009 1−・
3 ;END
SAHPLE2
: 図3
サ ンプル。
プ ロ グ ラム2
X=
conditjon1
‡‡i>1
result1
#a 〔# t〕 path1
0
巳1−002−003−OO4−
005
−009
condition2
‡‡i く一1
resu ]t2
0
path2
001−002−
003
一
臼〔〕4−006−
〔}09
図 4 サ ン プル・
プ ロ グラム 2の 実 行 結 果 る 例 の 1つ を次に示す。 図3
の プ卩 グラ ム で,
ス テー
ト メ ソ ト009 ま でのX
の値を 求め るとすると 結 果は図 4 の よ うに なるが,
こ こで は記 号 的 実 行に とっ て最 も処 理の 複雑な007
,008
の ルー
プはX に無関係なの で シス テ ム か らは無視される。相 模工 業大 学 紀 要 第 19 巻 第
1
号 ◎ DO I言1
to 100: ◎DO
I詈JTOKDO
ENDEND
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 ルー
プの 帰納的 表 現の例一
一
プ ロ グラム
・
デバ ッ グにお ける記号 的 実 行の応 用 (深 沢 良 彰・
袖山欣 大・
門倉 敏 夫 ) α )ルー
プ を ユー
ザ が指 定し た回 数 だ け 記 号 実 行 す る。 β)ルー
プを一
回 ごとに ス テッ プ実 行し, 結 果を画 面 に表 示 する。
γ)ルー
プ 変 数 な ど, ルー
プに関係し た値の設 定 を行 ない,
脱 出 条 件 などの手助け を行 なう。 δ) ルー
プ の脱出 条件 を判 断 し て い る 条件 文 を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
の VMCMS
環 境の端末上 で, ユー
ザと対 話 形 式で実 行されるもの である。
シ ス テ ムは 図8 に示すよ うに, 大 きく分けて Pre Processor,
UserInterface
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
HandlerUser Interface Handler をよ, Pre Processor で整 列 化された プ卩 グラ ム に 対して , 求め るス テ
ー
トメ ソ ト や 変数の指示,
その他 初 期 設定を 行 な う もの である。 具 体 的に は,
次の ような もの に対して設 定を行なう。 i) 求めるス テー
トメ ン ト の指 示 求め るス テー
トメ ン トは,Pre
Processor でつ け られたス テー
トメ ソ ト番号で指定 する。 ii) 求め る変数の 指示相模工 業 大 学紀要
第
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) SymbOlicExecuter
SymbOlic
Executer は,
User
Interface
Handler および
Data
FlowAnalyzer
か らの情報 を も とにPre
プロ グ ラム
・
デバ ッ グに お ける記 号 的 実 行の応 用 (深 沢 良 彰・
袖山欣 大・
門倉敏夫) 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トlPLE32300nUO
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: /* ELSEDOI=1
TO NUMBER カー
ドの枚 数の読み込み */ もし カー
ドが なければ */TOP
はNULLIUする */ALLOCATE CARD SET
(P ) ;
/*
構 造 体CARDを割り付 ける
*/
GET 廴IST (cnRD
.
NAME ) ;/*
カ
ー
ドの内 容の護み込み*/
IF I
=
1THEN
/*も しカ
ー
ドが1 枚め だ ? た ら*/
CARD
.
NEXT=NULL
;/ *
CARD.
NEXT はNULUc する*/ ELSE
CARD
.
NEXT=
TOP :/*
さ も なくばチ ェ インする
*/
TOP
=
P ;/*
TOP をカ
ー
ド の先頭の ポ イン タlt */
END
l END snMPLE3 :相模工 業大学紀 要 第
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 ) numberl
P → 〔 i 〕 card}TOP
=
{@i > 窗1
& @ i〈 = (1
)numberl
TOP−
→ 〔@i〕card }cnRD
.
NEXT=
{@i >旨1
& @i 〈零
(1
)number & @i=1
1
〔@i
〕CARD.
NEXT
−
→NULL
1
@i >
=
1 & @i〈豊
(1 )number & @1 ≠11
〔@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 → condition1
(1
) numbe 「=
工 resultl
NULL pathl
OOI−DO2−O
〔13−O
〔}4−005−006−
〔}07−OD8
cendition 2 (
1
) number ≠1
resu 】t1
〔 (i
) number 〕 oard path2 001呻
002−
003−
004−
005−
006−
007−
0臼9−
OlO−
011−
012−
013−
Ol4−
〔}15 図 10 ナ ンプ ル ・プ ロ グラム3
の 記 号実 行過程一
一
プ ロ グラム
・
デバ ッ グに お ける記 号 的 実行の応 用 (深 沢 良彰・
袖山欣大 ・ 門倉敏 夫 ) 内 部 表 現と して の 式の相 互 変 換 を 行 な うもの で ある。
ま た式 が 画 面の 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
董cEvaluater
は, 内部にPROLOG
イン タプリタ を持っ て お り, 上例の iii)などの よ うに , 公理系か
らの マ
ッ チ ン グに よっ て式の簡略化 を 行 な う際に は
PROLOG の持つ 推 論 機 能を利 用 す る こ と が で きる。
Symbolic
Evaluater
に PROLOG イン タプ リタを 利 用し た 理 由は次の とお りで ある。i
) 論理 や事実を 記 述 する だけで,
シス テ ム がある程 度 推 論し, 処 理 して くれる。 し たが っ て , 手 続 き的プ ロ グ ラ ミ ソ グ は最 小 限度で す む。ii
) PROLOG の プ ロ グラ ム は デー
タ ・ フ ァ イル に置 か れ た規則の集合である。 従っ て, 公理系の追加や変更 など,
細か い仕 様 変 更 が 容易であ る。
図 11 に,
PROLOG の プ ロ グ ラ ム と して 書かれた , 論理式に関する公 理の一
部を 示 す。
こ こで , 次の よ う な式を簡 略 化 する こ と を考える。 a十b*O− 3
>−
c & a十c >0
上の式をSymbolic
Evaluater
に かけ る と,
次の よ う な 手 順で簡 略 化を行 な う eva1
(and , tr. X, X ).
eval (andg
fag
X,
fa
).
eva1 (or,
tr,
》〔,tr).
eval (equal gX
,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
で あ る1eva且 (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
プロ グラ ム の 形 で書かれ た 公 理の一
部 (ただ し, 『 』 内は注釈文である)相 模工業大学 紀要 第
19
巻 第 1 号 a +b
*O− 3
>−
c の式を,
不 等 号 よ り左に 記 号を,
右に数 値を集め, 数 値が演 算 可 能 な と きには, その演 算を行な う。
こ の ことで,
a+b
*O−
3>−
c は a+b
* 0十 c>3 に変 形される。 a+b*0+ c の式 を 解 析 し,
「何か ILO
をか けた もの は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 11
1 76472902 30406203 10210080 計67
37 1812
がサ ポー
トして い ない機 能で ある。
7.
今後
の課 題 最後に, 本シ ス テ ムの 今後の課題につ い て以 下に述べ る。 現 在,
本シ ス テ ム は,
独 立し たデバ ッ グ・
シ ス テ ム と して イン プ リメン トを行 なっ てお り,
完 成 時に は, 初心者のPL
/1
プロ グラ ミ ソ グ実 習に活用で きる程 度 の成 果 を 目指し ている。 また,
将 来 的に は本 シ ス テ ム を,
総合 的 な デバ ッ グ環 境の一
部と して位 置づけて既存の デバ ッ グ
・
ツー
ル と結合さ せ, 全体をマ ネー
ジ メ ン ト・
プロ グ ラムが管理 し て, 最 も記 号的 実行が効 果 を発 揮 すると思え る ような 場 合にのみ,
本シ ス テ ム を実 行 する ように し
,
本シ ス テ ムの有用 性を高め る こ と も考え てい る。 本シ ス テム に おい て, 従 来の記 号 的 実 行 シ ス テ ムに おける方 法 と く らべ て,
さほ ど改善の跡 が見られ ない 『不 定 回ルー
プ』に関し て, 知 識工学に基づいた 手 法 に よ り, 解 決で きる部 分 も あるもの と思われる の で,
将 来的に本シ ス テムを拡 張し て行 く方 針で ある。 24一
プ ロ グラム ・ デバ ッ グにお け る記 号 的 実 行の応 用 (深 沢 良 彰
・
袖山欣 大・
門 倉 敏 夫) )1
) 2 }3
) 4 ) 5 ) 6 参 考 文 献W .E .
Howden
:“
Symbolic
Testing and theDISSECT
Symbolic
Evaluation
Syste
叫 ,, IEEETrans
.
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
andMonitoring
System ”,
AFIPSConf.
Pr
.
,34, 1969,
p .
567−580.
S.L .
Hantler
andJ.
C.
King : “AnIntroduc・
tion to Proving the
Correctness
ofPrograms
,,,
CACM ,8,
No .3
, Sept.
1976.
R
.
B.
Dannenberg
and G.
W.
Ernst : “FormalProgram Verification Using SymbOlic Execu
−
tion”
, IEEE Trans
.
Software
Eng .
,
SE−
8,
No.
1
,
1982.
7
) D.
LGood , R.
L 。
London
andW .
W .
Bledsoe
:“
An
Interactive
Program
Veri
員cationSystem ”
,IEEE
Trans .
Software
Eng .
,SE
・
1, No.
1,1975.
8)
A .
J.
Blikle:“
On the Development of CorrectSpecified Programs
”
,
IEEE Trans.
Software
Eng .
,
SE −7,
No .5,
1981, p
.
519−
527.
9) M
.
H.
van Emden : “Programming
withVeri−
fication Conditions”
,
IEEE Trans,
Software
Eng .
,
SE −
5,
No .2,1979
, p.
148−
159.
10)
J.
C .
King
: “Symbolic
Execution
andProgram
Testing
”, CACM
,
19,
No.
7,
July
1976,
p.
385−394.
11) R
.
E.
Fairley
:“
An ExperimentalProgram
Testing
Facility
,
,
,
IEEE Trans.
onSoftware
Eng .
,
SE ・
1,
No .
4, 1975, p.
350−
357.
12)
J.
LWoods : “Path
Selection
for Symbolic ExecutionSystems
”,
UMI
RESEARCH
PRESS,
Computer
Science
System
Programming,
No .
12
.
13> 玉井 哲雄, 福永光