「Automated Oracle Creation Support, or: How I Learned to Stop Worrying about Fault Propagation and Love Mutation Testing」 slide for lab seminor (Japanese)
研究室輪講用資料です.
発表論文は「Automated Oracle Creation Support, or: How I Learned
to Stop Worrying about Fault Propagation and Love Mutation Testing」で,ICSE2012に採択されています.
1 of 36
Download to read offline
More Related Content
「Automated Oracle Creation Support, or: How I Learned to Stop Worrying about Fault Propagation and Love Mutation Testing」 slide for lab seminor (Japanese)
1. Automated Oracle Creation Support,
or: How I Learned to Stop Worrying
about Fault Propagation and Love
Mutation Testing (ICSE2012)
輪講用資料
対象: コンピュータ科学専攻の修士?博士学生
(ソフトウェア工学専攻とは限らない)
1
発表時間: 25分
2012年 6月 28日
2. 発表論文
“Automated Oracle Creation Support, or: How I Learned
to Stop Worrying about Fault Propagation and Love
Mutation Testing”
- テストオラクル(後述)の選択を自動化する
By. Matt Staats (Korea Advanced Institute of Science & Technology)
Gregory Gay, Mats P. E. Heimdahl (University of Minnesota)
34th International Conference on Software Engineering
(ICSE 2012, Acceptance ratio: 21%)
2
3. テストとは
テスト:実装の正しさを,実行して確かめること
// x2 + |x| + 5を求める
X=3とする int calc(int x) {
int val = x * x;
if (x > 0) {
val += x;
} else {
val -= x;
}
return val + 5;
}
正しいかわからないプログラム
3
4. テストオラクルとは
オラクル
オラクル:正しい振舞いを決めるもの
期待値オラクル
// x2 + |x| + 5を求める
X=3とする int calc(int x) { ? ここでのvalは9である
int val = x * x;
if (x > 0) { ↑本研究の対象
val += x;
} else {
? この分岐は実行されない
val -= x;
}
return val + 5; ? 出力は5以上である
}
出力変数だけでなく,内部変数もオラクルに利用することで, 4
テストの結果が改善できる (Staats, 2011)
8. 前提知識:ミューテーションテスト(2/2)
ミュータント:プログラムの一部を変換して欠陥を埋め込んだもの
テスト1
ミュータント1 欠陥
assertEqual( int doubledDiff(int a, int b) {
成功
1, doubledDiff(1, 0)); int c = a - b;
成功 int d = a – b;
テスト2 return c * d; }
assertEqual( 失敗
ミュータント2
12, doubledDiff(4, 2)); 失敗
int doubledDiff(int a, int b) {
テスト3 int c = a + b;
失敗 int d = a – b;
assertEqual( 成功 return c / d; }
5, doubledDiff(3, 2));
欠陥
8
テスト2が良い(欠陥発見能力が高い)とわかる
11. 1. ミュータントの生成
一般的なミューテーションテスト[1]の手法通り
? 演算子(+, -, *, /, !, ==, など)の置換
? Boolean値の反転
? 定数の置換
など 演算子の置換
int doubledDiff(int a, int b) { int doubledDiff(int a, int b) {
int c = a + b; int c = a - b;
int d = a – b; int d = a – b;
return c * d; } return c * d; }
プログラム ミュータント
11
[1] An analysis and survey of the development of mutation testing,
Yue Jia, Mark Harman(2010, IEEE Software Engineering)
34. 参考文献
ミューテーションテスト
[1] An analysis and survey of the development of mutation testing,
Yue Jia, Mark Harman(2010, IEEE Software Engineering)
がとても詳しい.2010出版で,既に120披引用
マシンパワーの増加もあって,最近流行っている?
集合被覆問題の貪欲法による解法
[2] A Greedy Heuristic for the Set-Covering Problem
V. CHVATAL(1979, Mathematics of Operations Research)
有名な解法なので,ぐぐると日本語資料もたくさんある 34
35. 参考文献
MC/DCカバレッジ
[3] DO-178B, Software Considerations in Airborne Systems and
Equipment Certification
RTCA(Requirements and Technical Concepts for Aviation ), 1992
厳格なテストを必要とした航空業界の人々が提案
構造カバレッジメトリクスを満たすための,
モデル検査器を用いたテストケース自動生成
[4] Coverage Based Test-Case Generation using Model Checkers
Sanjai Rayaduragam, Mats P.E. Heimdahl, 2001,
35
IEEE Int’l Conf. on Engineering of Computer Based Systems
36. 著者(MATT STAATS)による関連研究
[5] “Programs, tests, and oracles: the foundations of
testing revisited” Matt Staats, Michael W. Whalen,
Mats P. E. Heimdahl (ICSE 2011, Distinguished Paper)
- テストオラクルも含めてテスティングの枠組みを再考しよう!
[6] “Better testing through oracle selection” Matt
Staats, Michael W. Whalen, Mats P. E. Heimdahl
(ICSE 2011(New Ideas and Emerging Results Track))
- テストオラクルの選択でテストの欠陥発見能力が変わること
を調べたよ!
36
発表論文は,上記2つの論文を元にしたもの