狠狠撸

狠狠撸Share a Scribd company logo
Reducing Confounding Bias
      in Predicate-Level
Statistical Debugging Metrics
 Ross Gore and Paul F. Reynolds, Jr.



                                       1
背景?问题?贡献
    Predicate-level Statistical Debugging(後述)
     プログラム中に条件式(x > 0など)を埋め込みテスト実行
背
景
     テストの成功/失敗と条件の真偽から欠陥位置推定
     (i.e., テスト失敗時に真となることの多い条件が怪しい)

  2つのバイアスに影響される(後述)
問
題 ? 制御フロー依存バイアス
  ? 失敗フローバイアス

貢 それぞれに対する既存手法を拡張し
献 バイアスを軽減した欠陥位置推定のための回帰モデル
                                                2
Predicate-Level Statistical Debugging
1 // 一次元距離を求める               行 条件式     2, 5, 5, -4, 1, 従来法 提案法
2 int distance(int x, int y)           2 4 1 -2 0
3 {                          5 diff == 0 T   F   F   F   F   4   3
4 int diff = x – y;          5 diff > 0  F   T   F   F   T   1   1
5 if (diff <= 1) {      欠陥:正しくはdiff <= F
                             5 diff < 0  0   F T     T   F   4   3
6      int dist = 0;         6 dist == 0 T   T T     T   T   3   3
7      dist = y – x;         6 dist > 0  F   F   F   F   F   4   3
8      return dist;          6 dist < 0  F   F   F   F   F   4   3
9 }                          7 dist == 0 T   F   F   F   F   4   3
10 int dist = 0;             7 dist > 0  F   F   T   T   F   4   3
11 dist = x – y;             7 dist < 0  F   T   F   F   T   1   2
12 return dist;              テスト結果       S   F   S   S   F
13 }
 5行目に欠陥を含むプログラム                                                  3
Predicate-Level Statistical Debugging
1 // 一次元距離を求める                  行 条件式           2, 5, 5, -4, 1, 従来法 提案法
2 int distance(int x, int y)                    2 4 1 -2 0
3 {                             5   diff == 0   T F   F   F   F   4   3
4 int diff = x – y;             5   diff > 0    F T   F   F   T   1   1
5 if (diff <= 1) {              5   diff < 0    F F T     T   F   4   3
6      int dist = 0;            6   dist == 0   T T T     T   T   3   3
7      dist = y – x;            6   dist > 0    F F   F   F   F   4   3
8      return dist;             6   dist < 0    F F   F   F   F   4   3
9 }                             7   dist == 0   T F   F   F   F   4   3
10 int dist = 0;                7   dist > 0    F F   T   T   F   4   3
11 dist = x – y;                7   dist < 0    F T   F   F   T   1   2
12 return dist;                1. 文中の変数
                                  テスト結果         S F   S   S   F
13 }                               に対し
                                条件文生成
 5行目に欠陥を含むプログラム                                                       4
Predicate-Level Statistical Debugging
                                                  x, yの値
1 // 一次元距離を求める                  行 条件式           2, 5, 1, -4, 1, 従来法 提案法
2 int distance(int x, int y)                    2 4 5 -2 0
3 {                             5   diff == 0   T F   F   F   F   4   3
4 int diff = x – y;             5   diff > 0    F T   F   F   T   1   1
5 if (diff <= 1) {              5   diff < 0    F F T     T   F   4   3
6      int dist = 0;            6   dist == 0   T T T     T   T   3   3
7      dist = y – x;            6   dist > 0    F F   F   F   F   4   3
8      return dist;             6   dist < 0    F F   F   F   F   4   3
9 }                             7   dist == 0   T F   F   F   F   4   3
10 int dist = 0;                7   dist > 0    F F   T   T   F   4   3
11 dist = x – y;                7   dist < 0    F T   F   F   T   1   2
12 return dist;                1. 文中の変数
                                  テスト結果         S F   S   S   F
13 }                               に対し          2. テストを実行
                                条件文生成             ?条件真偽
 5行目に欠陥を含むプログラム                                   ?テスト結果              5
Predicate-Level Statistical Debugging
                                        x, yの値
1 // 一次元距離を求める              行 条件式     2, 5, 1, -4, 1, 従来法 提案法
2 int distance(int x, int y)          2 4 5 -2 0
3 {                      欠陥に関連する文?条件に高い優先度 4
                                5 diff == 0 T F F F F          3
4 int diff = x – y;             5 diff > 0  F T F F T   1      1
5 if (diff <= 1) {              5 diff < 0  F F T T F   4      3
6      int dist = 0;            6 dist == 0 T T T T T   3      3
7      dist = y – x;            6 dist > 0  F F F F F   4      3
8      return dist;             6 dist < 0  F F F F F   4      3
9 }                             7 dist == 0 T F F F F   4      3
10 int dist = 0;                7 dist > 0  F F T T F   4      3
11 dist = x – y;                7 dist < 0  F T F F T   1      2
12 return dist;              1. 文中の変数 S F S S F
                                テスト結果
13 }                             に対し        2. テストを実行 3. 欠陥に
                          条件文生成         ?条件真偽       関連しそうな
 5行目に欠陥を含むプログラム                         ?テスト結果      文?条件推定
                                                         6
2つのバイアス
1 // 一次元距離を求める           行 条件式    2, 5, 1, -4, 1, 従来法 提案法
2 int distance(int x, int y)      2 4 5 -2 0
3 {                      欠陥に関連する文?条件に高い優先度 4
                               5 diff == 0 T F F F F   3
4 int diff = x – y;            5 diff > 0  F T F F T 1 1
5 if (diff <= 1) {             5 diff < 0  F F T T F 4 3
6      int dist = 0;           6 dist == 0 T T T T T 3 3
7      dist = y – x;     2. 失敗フローバイアス F F F
                               6 dist > 0  F F       4 3
8      return dist;          対象: 欠陥の発現後に実行される文 3
                               6 dist < 0  F F F F F 4
9 }                            7 dist == 0 T F F F F 4 3
10 int dist = 0;               7 dist > 0  F F T T F 4 3
11 dist = x – y;               7 dist < 0  F T F F T 1 2
12 return dist;          1. 制御フロー依存バイアスS F
                               テスト結果       S F S
13 }                         対象: 欠陥を含む文と依存関係を持つ文
              (e.g., 5行目でdiff > 0 なら 7行目でdist < 0)
 5行目に欠陥を含むプログラム
                                                           7
制御フロー依存バイアスの検出

ステートメントレベルでの既存手法*                     int diff = x – y;
 制御フローを解析して直前の分岐文を判別
          → 制御フロー依存する文
                                                           !(diff <= 1)
                                       If (diff <= 1)
             貢献:
             条件式レベルに拡張                         diff <= 1
                                                    制御フロー依存
直前の分岐文の条件式と,その否定を考える int dist = 0;
e.g., (diff <= 1), (!(diff <= 1)) dist = y – x;
注目する式に到達するために                     return dist;
成立すべきものが,制御フロー依存する条件式

                        *本論文参考文献[10, 11]                       8
失敗フローバイアスへの対応
 既存手法(本論文参考文献[1, 2])
  ヒューリスティックに基づく式で,バイアスの影響を軽減

              貢献:
              バックドア基準を満たすような回帰モデル

                             失敗フローバイアスの考慮
 TestResult = αp + τpTp + βpCp + ωpDp+ εp
                制御フロー依存バイアスの考慮

TestResult: テスト失敗なら1, 成功なら0, αp, τp, βp, ωp: 係数, εp:誤差
Tp: テスト時に条件式pが真なら1,それ以外は0
Cp: pの制御フロー依存条件式が真なら1, それ以外は0
Dp: 条件式pが評価された時1, それ以外は0                                 9
実験:欠陥に関連する条件文発見効率
最小二乗法で求めたτpを利用して,既存のメトリクスを書き換え
2種類のpredicate-level statistical debugger(赤,白)それぞれ利用時の
「欠陥に関連する条件文へのランク付け」の相対的性能向上

              180プログラム中                  180プログラム中
              性能向上: 94                   性能向上: 68
              横ばい: 84                    横ばい: 112
              性能低下: 2                    性能低下: 0




従来法 vs. 制御フロー依存バイアスのみ考慮      制御フロー依存バイアスのみ考慮
                              vs. 失敗フローバイアスも考慮 10
資料用
4分間という制約のため,わかりやすさを重視して,以下の点を論文と書き換えている

   変更箇所の例)
   ? Motivating Exampleプログラム
      ? コメントの追加
      ? !(diff > 1)) → (diff <= 1)
      ? 8行目”print(dist)” -> “return dist”
   ? Motivating Example表
      ? 8行目に対応する部分の削除
      ? 順位付けを,下(12位)からつけているのを,上(1位)からつけている

   ? 和訳
      ? Predicate → 条件式
      ? Control flow confounding bias → 制御フロー依存バイアス
      ? Failure flow confounding bias → 失敗フローバイアス


                                                      11
資料用2 (論文の誤り)

論文の内容で,明らかに誤りと思われる部分を著者に問い合わせたところ,
やはり誤りであるとの返信を得たので,ここに公開しておく.

1) Motivating Exampleの表,3列目は(5, 1)に対する結果ではなく(1, 5)に対する結果
2) ESPの結果が赤で,CBIの結果が白
3) Motivating Exampleのコード,8行目はprint(dist)ではなく,return dist




                                                     12
时间の関係で削除

    Predicate-Level Statistical Debugging
1 // 一次元距離を求める
2 int distance(int x, int y)   ①各文に出現する変数に対し
3 {                            条件式を自動生成
4 int diff = x – y;             (diff < 0), (diff == 0), (diff > 0)
5 if (diff <= 1) {
6      int dist = 0;
7      dist = y – x;           ②テストケース実行
8      return dist;            条件の成立と,テストの成功を記録
9 }
10 int dist = 0;               ③結果を分析,
11 dist = x – y;               欠陥を含みそうな場所を調べる
12 return dist;                (条件?が成立かつ失敗したテストの数)
13 }                           (条件?が成立したすべてのテストの数)
 5行目に欠陥を含むプログラム                                                       13

More Related Content

Reducing Confounding Bias in Predicate-Level Statistical Debugging Metrics 4分説明用

  • 1. Reducing Confounding Bias in Predicate-Level Statistical Debugging Metrics Ross Gore and Paul F. Reynolds, Jr. 1
  • 2. 背景?问题?贡献 Predicate-level Statistical Debugging(後述) プログラム中に条件式(x > 0など)を埋め込みテスト実行 背 景 テストの成功/失敗と条件の真偽から欠陥位置推定 (i.e., テスト失敗時に真となることの多い条件が怪しい) 2つのバイアスに影響される(後述) 問 題 ? 制御フロー依存バイアス ? 失敗フローバイアス 貢 それぞれに対する既存手法を拡張し 献 バイアスを軽減した欠陥位置推定のための回帰モデル 2
  • 3. Predicate-Level Statistical Debugging 1 // 一次元距離を求める 行 条件式 2, 5, 5, -4, 1, 従来法 提案法 2 int distance(int x, int y) 2 4 1 -2 0 3 { 5 diff == 0 T F F F F 4 3 4 int diff = x – y; 5 diff > 0 F T F F T 1 1 5 if (diff <= 1) { 欠陥:正しくはdiff <= F 5 diff < 0 0 F T T F 4 3 6 int dist = 0; 6 dist == 0 T T T T T 3 3 7 dist = y – x; 6 dist > 0 F F F F F 4 3 8 return dist; 6 dist < 0 F F F F F 4 3 9 } 7 dist == 0 T F F F F 4 3 10 int dist = 0; 7 dist > 0 F F T T F 4 3 11 dist = x – y; 7 dist < 0 F T F F T 1 2 12 return dist; テスト結果 S F S S F 13 } 5行目に欠陥を含むプログラム 3
  • 4. Predicate-Level Statistical Debugging 1 // 一次元距離を求める 行 条件式 2, 5, 5, -4, 1, 従来法 提案法 2 int distance(int x, int y) 2 4 1 -2 0 3 { 5 diff == 0 T F F F F 4 3 4 int diff = x – y; 5 diff > 0 F T F F T 1 1 5 if (diff <= 1) { 5 diff < 0 F F T T F 4 3 6 int dist = 0; 6 dist == 0 T T T T T 3 3 7 dist = y – x; 6 dist > 0 F F F F F 4 3 8 return dist; 6 dist < 0 F F F F F 4 3 9 } 7 dist == 0 T F F F F 4 3 10 int dist = 0; 7 dist > 0 F F T T F 4 3 11 dist = x – y; 7 dist < 0 F T F F T 1 2 12 return dist; 1. 文中の変数 テスト結果 S F S S F 13 } に対し 条件文生成 5行目に欠陥を含むプログラム 4
  • 5. Predicate-Level Statistical Debugging x, yの値 1 // 一次元距離を求める 行 条件式 2, 5, 1, -4, 1, 従来法 提案法 2 int distance(int x, int y) 2 4 5 -2 0 3 { 5 diff == 0 T F F F F 4 3 4 int diff = x – y; 5 diff > 0 F T F F T 1 1 5 if (diff <= 1) { 5 diff < 0 F F T T F 4 3 6 int dist = 0; 6 dist == 0 T T T T T 3 3 7 dist = y – x; 6 dist > 0 F F F F F 4 3 8 return dist; 6 dist < 0 F F F F F 4 3 9 } 7 dist == 0 T F F F F 4 3 10 int dist = 0; 7 dist > 0 F F T T F 4 3 11 dist = x – y; 7 dist < 0 F T F F T 1 2 12 return dist; 1. 文中の変数 テスト結果 S F S S F 13 } に対し 2. テストを実行 条件文生成 ?条件真偽 5行目に欠陥を含むプログラム ?テスト結果 5
  • 6. Predicate-Level Statistical Debugging x, yの値 1 // 一次元距離を求める 行 条件式 2, 5, 1, -4, 1, 従来法 提案法 2 int distance(int x, int y) 2 4 5 -2 0 3 { 欠陥に関連する文?条件に高い優先度 4 5 diff == 0 T F F F F 3 4 int diff = x – y; 5 diff > 0 F T F F T 1 1 5 if (diff <= 1) { 5 diff < 0 F F T T F 4 3 6 int dist = 0; 6 dist == 0 T T T T T 3 3 7 dist = y – x; 6 dist > 0 F F F F F 4 3 8 return dist; 6 dist < 0 F F F F F 4 3 9 } 7 dist == 0 T F F F F 4 3 10 int dist = 0; 7 dist > 0 F F T T F 4 3 11 dist = x – y; 7 dist < 0 F T F F T 1 2 12 return dist; 1. 文中の変数 S F S S F テスト結果 13 } に対し 2. テストを実行 3. 欠陥に 条件文生成 ?条件真偽 関連しそうな 5行目に欠陥を含むプログラム ?テスト結果 文?条件推定 6
  • 7. 2つのバイアス 1 // 一次元距離を求める 行 条件式 2, 5, 1, -4, 1, 従来法 提案法 2 int distance(int x, int y) 2 4 5 -2 0 3 { 欠陥に関連する文?条件に高い優先度 4 5 diff == 0 T F F F F 3 4 int diff = x – y; 5 diff > 0 F T F F T 1 1 5 if (diff <= 1) { 5 diff < 0 F F T T F 4 3 6 int dist = 0; 6 dist == 0 T T T T T 3 3 7 dist = y – x; 2. 失敗フローバイアス F F F 6 dist > 0 F F 4 3 8 return dist; 対象: 欠陥の発現後に実行される文 3 6 dist < 0 F F F F F 4 9 } 7 dist == 0 T F F F F 4 3 10 int dist = 0; 7 dist > 0 F F T T F 4 3 11 dist = x – y; 7 dist < 0 F T F F T 1 2 12 return dist; 1. 制御フロー依存バイアスS F テスト結果 S F S 13 } 対象: 欠陥を含む文と依存関係を持つ文 (e.g., 5行目でdiff > 0 なら 7行目でdist < 0) 5行目に欠陥を含むプログラム 7
  • 8. 制御フロー依存バイアスの検出 ステートメントレベルでの既存手法* int diff = x – y; 制御フローを解析して直前の分岐文を判別 → 制御フロー依存する文 !(diff <= 1) If (diff <= 1) 貢献: 条件式レベルに拡張 diff <= 1 制御フロー依存 直前の分岐文の条件式と,その否定を考える int dist = 0; e.g., (diff <= 1), (!(diff <= 1)) dist = y – x; 注目する式に到達するために return dist; 成立すべきものが,制御フロー依存する条件式 *本論文参考文献[10, 11] 8
  • 9. 失敗フローバイアスへの対応 既存手法(本論文参考文献[1, 2]) ヒューリスティックに基づく式で,バイアスの影響を軽減 貢献: バックドア基準を満たすような回帰モデル 失敗フローバイアスの考慮 TestResult = αp + τpTp + βpCp + ωpDp+ εp 制御フロー依存バイアスの考慮 TestResult: テスト失敗なら1, 成功なら0, αp, τp, βp, ωp: 係数, εp:誤差 Tp: テスト時に条件式pが真なら1,それ以外は0 Cp: pの制御フロー依存条件式が真なら1, それ以外は0 Dp: 条件式pが評価された時1, それ以外は0 9
  • 10. 実験:欠陥に関連する条件文発見効率 最小二乗法で求めたτpを利用して,既存のメトリクスを書き換え 2種類のpredicate-level statistical debugger(赤,白)それぞれ利用時の 「欠陥に関連する条件文へのランク付け」の相対的性能向上 180プログラム中 180プログラム中 性能向上: 94 性能向上: 68 横ばい: 84 横ばい: 112 性能低下: 2 性能低下: 0 従来法 vs. 制御フロー依存バイアスのみ考慮 制御フロー依存バイアスのみ考慮 vs. 失敗フローバイアスも考慮 10
  • 11. 資料用 4分間という制約のため,わかりやすさを重視して,以下の点を論文と書き換えている 変更箇所の例) ? Motivating Exampleプログラム ? コメントの追加 ? !(diff > 1)) → (diff <= 1) ? 8行目”print(dist)” -> “return dist” ? Motivating Example表 ? 8行目に対応する部分の削除 ? 順位付けを,下(12位)からつけているのを,上(1位)からつけている ? 和訳 ? Predicate → 条件式 ? Control flow confounding bias → 制御フロー依存バイアス ? Failure flow confounding bias → 失敗フローバイアス 11
  • 12. 資料用2 (論文の誤り) 論文の内容で,明らかに誤りと思われる部分を著者に問い合わせたところ, やはり誤りであるとの返信を得たので,ここに公開しておく. 1) Motivating Exampleの表,3列目は(5, 1)に対する結果ではなく(1, 5)に対する結果 2) ESPの結果が赤で,CBIの結果が白 3) Motivating Exampleのコード,8行目はprint(dist)ではなく,return dist 12
  • 13. 时间の関係で削除 Predicate-Level Statistical Debugging 1 // 一次元距離を求める 2 int distance(int x, int y) ①各文に出現する変数に対し 3 { 条件式を自動生成 4 int diff = x – y; (diff < 0), (diff == 0), (diff > 0) 5 if (diff <= 1) { 6 int dist = 0; 7 dist = y – x; ②テストケース実行 8 return dist; 条件の成立と,テストの成功を記録 9 } 10 int dist = 0; ③結果を分析, 11 dist = x – y; 欠陥を含みそうな場所を調べる 12 return dist; (条件?が成立かつ失敗したテストの数) 13 } (条件?が成立したすべてのテストの数) 5行目に欠陥を含むプログラム 13