«前の日記(2006-11-16) 最新 次の日記(2006-11-19)» 編集

netail.net

自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.

最近のお知らせ (古いものはこちら)


2006-11-17 [長年日記]

_ [論文] プログラムの条件分岐を無理やり変更してデバッグ

Xiangyu Zhang, Neelam Gupta, Rajiv Gupta: Locating Faults Through Automated Predicate Switching.

ICSE 2006, pp.272-281.

プログラム実行中のある時点でデータに誤りが発生した場合,それはそこまでの実行経路に問題がある.直前ないし近い位置の分岐で別方向に進んでいたらプログラムはうまく動いていたかもしれない.だから,そういう条件分岐("critical predicate")がもしあるのなら自動的に見つけよう,という論文です.

critical predicate が見つかれば,入力変数から critical predicate を経由して誤った変数値に到達するまでの経路の chopping を計算することで,バグの位置を普通のスライシングよりも絞れるだろうという見込みがあったりします.

方法自体はわりと単純で,動的解析でどの条件分岐を何回どちらに進んだかを記録しておき,コード書き換え技術を使って「このif文を20回目に通過するときは必ずTRUEだとみなす」というような細工を施してプログラムを再実行するというものです.どの条件分岐を変更するか,という選び方を工夫してます.

実験結果では,それなりに critical predicate を発見できていて(発見できないケースもあり),その結果を使って計算したスライスのサイズも小さくなっている,という評価を行っています.「デバッグの手間」というのは計測しにくいので,普通に計算したスライスのサイズと,critical predicate が分かっている場合のスライスのサイズを比較することで,開発者が調査するであろうコード量を比べています.

この手法は,ひたすらプログラムを再実行するという力技で,面白いやり方だなーと思います.特定の条件分岐を中身を気にせず強制変更するので,無造作にデータ構造を壊したりしないのか,という点は多少気になります.

お名前:
E-mail:
右の画像に書かれている文字列を入力してください:
コメント: