slide - POSL

修正履歴を用いたデバッグ/テスト支援システム
塩塚 大 鵜林 尚靖 (九州工業大学)
• 研究目的
– テスト駆動開発(TDD)の際に発生する関心事(修正履歴,修正理由,
参照したドキュメント)の蓄積と再利用.
① テストの作成手
順を参考にしたい
• アプローチ
②類似したエラー
を参照したい
③過去の修正履
歴を参照したい
– デバッグ関心事グラフ(DCG)の提案.
– 上記の関心事をグラフで表現し,TDDの過程で対話的にグラフを作
成,活用.
– DCGは関心事グラフの概念をTDDに応用.
[1] Martin P. Robillard, Gail C. Murphy, “Concern Graphs: Finding and Describing Concerns Using Structural Program
Dependencies, “ In Proc. of ICSE’02, pp.406-416.
[2] Martin P. Robillard, Gail C. Murphy, “ FEAT A Tool for Locating, Describing, and Analyzing Concerns in Source Code,”
In Proc. of ICSE’03, pp.822-823.
[3] Martin P. Robillard, “Automatic generation of suggestions for program investigation,” In Proc. of ESEC/FSE’05, pp.11-20.
1
デバッグ関心事グラフ(DCG)
TDDプロセス
テスト実行
テスト作成
[蓄積]テスト情報 [蓄積]実行結果
実行時間
テスト失敗
コード修正
[蓄積]エラー情報
失敗回数
[蓄積]差分情報 [蓄積]実行回数
実行時間
DCG
バグ修正の
DCGの作成
テスト成功
[蓄積]成功回数
蓄積
開発者が対話的に作成
バグ修正過程を
登録したい
テスト再実行
類似したバグの修正
方法を利用したい
テスト実行情報
実行回数 実行結果
類似したバグ修正
のDCGの利用
テストプログラム
テストケース
プログラム
・修正理由
・修正履歴
・参照したドキュメント
クラス
・エラー情報,実行回数
・修正理由の確認
・履歴からの修正
リポジトリ
2
DCGの作成
DCG作成のプロセス
DCG名
insertメソッドのバグ修正
DCG作成の動機
・コンパイラを開発中.
・insertメソッド(AST上に式を
挿入)を作成.
・testInsertテストで失敗.
・バグ修正過程を記録したい.
TDD
DCG
a) テスト作成/実行/失敗
①
insertのバグ
修正(ルート)
looks
looks
⑥
説明
adds to
DCGに要素(クラス,メソッド,
テスト,フィールド)を追加.
looks
DCGにコメント,ドキュメントな
どのメモを追加.
succeeds
成功したバージョンのメソッド
を取得.
fails
失敗したバージョンのメソッド
を取得.
error
実行時にエラーが発生した
バージョンのメソッドを取得.
calls
呼び出しているメソッドを取得.
④ insertメソッド(Ver. 0.2)の追加
⑤ 修正理由の追加
⑥ 修正履歴の追加
⑦ 参照したドキュメントの追加
adds to
③
リポジトリ
adds to
testInsert
修正理由
項目名
c) テスト再実行/成功
① 空のDCGの作成
② insertメソッド(Ver. 0.1)の追加
③ testInsertテストの追加
DCG
⑤
b) コード修正
⑦
修正履歴
looks
adds to a)
②
参照したド
キュメント
fails
insert(Ver. 0.1)
b, c)
succeeds
④
insert(Ver. 0.2)
①
⑤
⑥
⑦
②
④
③
(Ver0.1)
(Ver0.2)
IDE上での作成イメージ
追加
3
DCGの利用と成長
DCG利用と成長のプロセス
新規DCG名
replaceメソッドのバグ修正
DCG利用の動機
・testReplaceテストで失敗.
・replaceメソッドとinsertメソッド
は機能上似ている.
・「insertメソッドのバグ修正」
DCGを再利用したい.
・replaceメソッドのバグ修正
過程も記録したい.
looks
TDD
a) テスト作成/実行/失敗
DCG
① 空のDCGの作成
② replaceeメソッド(Ver. 0.1)
の追加
③ testReplaceテストの追加
①
リポジトリ
③
a)
looks
修正履歴
testReplace
fails
②
⑤
looks
参照したド
キュメント
succeeds ⑦
adds to
adds to
testInsert
adds to
looks
b, c)
replace(Ver. 0.2)
replace(Ver. 0.1)
④
insertのバグ修正
⑥
adds to
adds to
⑨
修正履歴
adds to
replaceのバグ
修正(ルート)
looks
looks
c) テスト再実行/成功
④ 「insertメソッドのバグ ⑦ replaceメソッド(Ver. 0.2)
の追加
修正」DCGの参照
⑧
修正理由の共有
⑤ 修正理由の確認
⑥ 修正履歴の取出しと ⑨ 修正履歴の追加
修正方法の決定
DCG
⑧
修正理由
b) コード修正
fails
insert(Ver. 0.1)
succeeds
insert(Ver. 0.2)
今後の予定
・Eclipse上でJUnitと連携させシステムを完成させる.
4