実行履歴に基づいたシーケンス図生成手法のデバッグ

シーケンス図を用いて実行履歴を
可視化するデバッグ環境の試作
大阪大学基礎工学部情報科学科
井上研究室
淺利 勇太
研究の背景
デバッグプロセス
Step1: テストで発見された不具合の再現
Step2: 不具合の原因であるバグ位置の特定
Step3: バグ修正
Step2が最もコストを必要とする作業であり、
デバッガによる支援が行われている
2
デバッガの機能


ブレークポイントによる、プログラムの実行
の一時停止
ステップ実行による、文単位の実行
一時停止状態では、停止した時点のス
タック内の各変数の値を取得できる
3
オブジェクト指向プログラムの
デバッグの難しさ
OOPでは、動的束縛のために、ソースコー
ド上のメソッド呼び出しの記述と、実際
のメソッド呼び出しの動作が異なる


オブジェクト群がどのような相互作用(状
態)を経て現在に至ったか
特定のオブジェクトに対するメソッド呼び
出し履歴
4
研究の目的


通常のデバッガでは得られない、メソッド呼
び出し履歴をシーケンス図として表示する
ことで、デバッグ支援を行う
対象:Javaプログラム
シーケンス図: オブジェクト間のメッセージのやり取りを時間に沿って表
すための図
5
シーケンス図の生成方法
Amida: 実行履歴からシーケンス図を生成するツール
A(1).a(){
B(2).b(){
}
B(2).b(){
}
}
B[2]
A[1]
a()
b()
b()
2
b()
谷口、 石尾、 神谷、 楠本、 井上: "Javaプログラムの実行履歴に基づくシーケンス図の作成"、 ソフトウェア
工学の基礎XI、日本ソフトウェア科学会FOSE2004、pp.5-15(2004).
6
シーケンス図からのバグ位置の
特定

プログラムの設計と、生成されたシーケンス
図の比較



設計では呼び出す(呼び出されない)はずのメ
ソッドが実際は呼ばれていない(呼ばれている)
メソッド呼び出しの順序
不具合が見つかったオブジェクトに対しての
メソッド呼び出し履歴の調査
7
設計と生成されたシーケンス図
との比較
設計時に作成したシーケンス図
A[1]
a1()
B[2]
C[3]
実行履歴から生成されたシーケンス図
A[1]
B[2]
C[3]
a1()
b1()
b2()
b2()
c1()
c1()
c2()
c3()
c3()
c2()
8
シーケンス図からのバグ位置の
特定

プログラムの設計と、生成されたシーケンス
図の比較



設計では呼び出す(呼び出されない)はずのメ
ソッドが実際は呼ばれていない(呼ばれている)
メソッド呼び出しの順序
不具合が見つかったオブジェクトに対しての
メソッド呼び出し履歴の調査
9
不具合が見つかったオブジェクト
についてのメソッド呼び出し履歴
実行履歴から生成されたシーケンス図
A[1]
B[2]
C[3]
b1()
a1()
b2()
b3()
c1()
不正な値の変数
ブレークポイントでの停止位置
10
開発環境への実装

シーケンス図生成機能を、統合開発環境
Eclipseのプラグインとして組み込み、デ
バッグ環境を試作



デバッグ時に実行履歴の取得
ブレークポイントでの停止時・実行終了時に実
行履歴をシーケンス図として表示・更新
シーケンス図からソースコードへの参照
11
実行画面
スタックトレース
エディタ
シーケンス図表示部
12
適用例
試作した環境でドローツールを開発
バグの特定作業にシーケンス図生成機能を利用

直線、長方形、楕円の配置





マウスによる配置
パラメータ設定エリアからの座標入力による配置
と着色
配置済みの図形のリスト表示
図形の重なりの順序変更
図形の削除
不具合:マウスによる図形配置の際に、頂点の座標
が別の値に変更されてしまう
13
適用例: 正常な図形配置動作
追加
図形リスト
頂点座標をセット
パラメータ設定エリア
図形描画部
14
適用例: 不具合
追加
不正な頂点座標をセット
15
適用例: 設計と生成されたシー
ケンス図との比較
実行履歴から生成されたシーケンス図
図形配置の処理設計
キャンバス
キャンバス
図形オブジェクト
図形オブジェクト
ドラッグの終了()
頂点2の座標設定()
図形の配置と
パラメータ設定エリアの更新()
設計にはない
バグ
16
考察



シーケンス図から実際の動作を把握し、バグ位
置の特定をすることができた
設計と実際の動作との比較は、デバッグに有効
であると確認できた
有効に使うには、対象のプログラムについての
設計情報が利用できることが必要


全体の大まかな設計についての知識
クラス名、メソッド名から処理内容が分かること
17
まとめ
主な結果


デバッグ支援のため、プログラム実行履歴から
シーケンス図を生成する機能を持つデバッグ環境
を試作した
Javaプログラムの実際の開発に使用し、デバッグ
における有効性を確認した
今後の課題

より多くのソフトウェア開発への適用
18