Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Copyright 2018 FUJITSU LABORATORIES LTD.
バグ自動修正ツールって
本当に使えるの?
~自動デバッグ技術の現状と課題~
2018年12月14日
株式会社富士通研究所
徳本 晋
0
自己紹介
 氏名:徳本 晋(とくもと すすむ)
 所属:㈱富士通研究所 ソフトウェア研究所
早稲田大学 招聘研究員
 専門:ソフトウェア工学
 特にソフトウェアテスト、デバッグ
 最近の対外的な活動
 情報処理学会誌 2019年1月...
ソフトウェアデバッグの費用
Copyright 2018 FUJITSU LABORATORIES LTD.
34兆円/年
- Cambridge University
Research Study[2]
7兆円/年
-NIST
Survey ...
バグ自動修正技術を使うと・・・
新しいバグ
の報告
バグのトリアージ バグの割り振り バグ修正
修正確認 アップロード版
の構築
バグ自動修正ツール
手動のプロセス: 数カ月
自動修復: 数時間
従来のバグ修正プロセス新しいバグ修正プロセス
C...
それ本当なの?
Copyright 2018 FUJITSU LABORATORIES LTD.4
Copyright 2018 FUJITSU LABORATORIES LTD.
 修正パターンからパッチを探索的に生成し、
テストがすべて通るパッチを出力する
どうやってバグを見つけて直すのか?
バグ局所化
パッチ生成
パッチ検査
バグを含...
バグ局所化では何をやっているか?
Copyright 2018 FUJITSU LABORATORIES LTD.
バグ局所化
バグを含む
プログラム
バグ個所を
絞り込み
int mid(int x,
int y,
int z){
S1 in...
パッチ生成では何をやっているか?
Copyright 2018 FUJITSU LABORATORIES LTD.
パッチ生成
プログラム
を変更
変更タイプ1:ステートメントレベル
if(a==0){
exit(0);
}
foo(b);
i...
パッチ検査では何をしているか?
Copyright 2018 FUJITSU LABORATORIES LTD.
パッチ検査
テストスイート
(失敗含む) 正しい
パッチ
成功
誤った
パッチ
(テスト
漏れ)
バグ局所化
失敗
8
Copyright 2018 FUJITSU LABORATORIES LTD.
 修正パターンからパッチを探索的に生成し、
テストがすべて通るパッチを出力する
どうやってバグを見つけて直すのか?
バグ局所化
パッチ生成
パッチ検査
バグを含...
Copyright 2018 FUJITSU LABORATORIES LTD.
 富士通研で定義したバグ自動修正レベル
どのようなバグが直せるのか?直せないのか?
レベ
ル
名称 定義 自動修復タ
スクの実施
システム
出力
バグの
原因箇...
バグ自動修正技術の現在の実力
小規模バグのみ修正可能
ただし誤った修正を行う場合もあり
•修正はされるが、他の動作への意図しない副作用が発生
主な技術的課題:パッチ探索の時間
内部でテストを繰り返し実行しながら修正を試みるため
1回の...
直せるバグの例
 企業システムで使われているJavaプログラム(215KLOC)に
対してバグ自動修正ツールGenProgを用いて修正できた例
Copyright 2018 FUJITSU LABORATORIES LTD.
内藤他, “企業...
直せないバグの例
• 例:メモリリーク、性能・ユーザビリティなどの問題
• 例:テストで通ってない箇所、期待値設定が不十分な場合
• 失敗テストを手掛かりに探索的にパッチを生成するため
自動テストで
検出できないバグ
• 組合せ爆発が起こるため...
9月にFacebookがバグ自動修正ツールを発表
Copyright 2018 FUJITSU LABORATORIES LTD.14
一部で話題に・・・
Copyright 2018 FUJITSU LABORATORIES LTD.15
SapFixはどうやってバグを直しているか?
Copyright 2018 FUJITSU LABORATORIES LTD.
修正テンプレートから
パッチを生成する
バグ混入前の版に戻すバグ混入前の版に戻す 単純な変更を
網羅的に試す
(わか...
富士通でもバグ自動修正技術やってます!
Copyright 2018 FUJITSU LABORATORIES LTD.17
ELIXIR: AIを活用したバグ自動修正ツール
Copyright 2018 FUJITSU LABORATORIES LTD.
バグを含む
プログラム
(Java 7 or 8
& Maven)
バグ
修正済み
プログラム
テスト失敗
(J...
ELIXIRはどのようにパッチを生成するのか
Copyright 2018 FUJITSU LABORATORIES LTD.
バグを含む
プログラム
(Java 7 or 8
& Maven)
テスト失敗
(JUnit)
ELIXIR
バグ修...
Elixirはどれだけバグを直せるか?
 82件の小規模バグのうち、26件を正しく修正(世界トップ)
 計231KLOCの複数のOSSを用いた実験結果
Copyright 2018 FUJITSU LABORATORIES LTD.
26/...
ELIXIR適用事例(ELIXIR自身への適用)
Copyright 2018 FUJITSU LABORATORIES LTD.
開発者による
パッチ
Elixirが生成した
パッチ
0 10 20 30 40 50 60 70
Elixir...
自分のPJでも使ってみたい!
Copyright 2018 FUJITSU LABORATORIES LTD.22
あなたのPJはどれだけ「バグ自動修正」readyか
チェックしてみよう!
1. 自動テストがある
2. 自動テストのカバレッジに基準を設けている(〇〇%以上)
3. 単体テストと結合テストの両方でテストを自動化している
4. CIを取り入れてい...
テストコードの品質を測定しよう!
Copyright 2018 FUJITSU LABORATORIES LTD.
富士通研究所で開発
24
バグ自動修正技術で開発スタイルが変わる
Copyright 2018 FUJITSU LABORATORIES LTD.
コードと
テストケース
コミット
リポジトリ
コンパイル
ビルドテスト
継続的インテグレーション
トリガー
テスト成功?
...
まとめ
 近年、バグ自動修正技術への注目度が高まっている
 バグ自動修正技術により単純バグは数時間で修正可能
 Facebookでも実用化に取り組んでいる
 富士通では最先端のバグ自動修正技術を研究開発している
 過去の修正履歴を学習...
27
OSS化されているツール
 C/C++
 GenProg:https://github.com/squaresLab/genprog-code
 Prophet: http://groups.csail.mit.edu/pac/patch...
Upcoming SlideShare
Loading in …5
×

of

バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 1 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 2 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 3 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 4 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 5 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 6 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 7 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 8 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 9 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 10 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 11 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 12 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 13 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 14 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 15 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 16 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 17 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 18 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 19 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 20 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 21 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 22 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 23 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 24 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 25 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 26 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 27 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 28 バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~ Slide 29
Upcoming SlideShare
What to Upload to SlideShare
Next
Download to read offline and view in fullscreen.

4 Likes

Share

Download to read offline

バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~

Download to read offline

第1回AI4SEセミナーで使用した資料です

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~

  1. 1. Copyright 2018 FUJITSU LABORATORIES LTD. バグ自動修正ツールって 本当に使えるの? ~自動デバッグ技術の現状と課題~ 2018年12月14日 株式会社富士通研究所 徳本 晋 0
  2. 2. 自己紹介  氏名:徳本 晋(とくもと すすむ)  所属:㈱富士通研究所 ソフトウェア研究所 早稲田大学 招聘研究員  専門:ソフトウェア工学  特にソフトウェアテスト、デバッグ  最近の対外的な活動  情報処理学会誌 2019年1月号 「特集」機械学習工学 一部記事執筆  QA4AIコンソーシアム メンバー  国際会議APSEC2018 SEIP track PC member / Session chair  国際会議ICST2017 Registration chair  ソフトウェアエンジニアリングシンポジウム2018 プログラム委員  ソフトウェアエンジニアリングシンポジウム2017 インタラクティブ賞  トップエスイーコンテスト2017 モデルチェッキングコンテスト優勝 Copyright 2018 FUJITSU LABORATORIES LTD.1
  3. 3. ソフトウェアデバッグの費用 Copyright 2018 FUJITSU LABORATORIES LTD. 34兆円/年 - Cambridge University Research Study[2] 7兆円/年 -NIST Survey [1] 2003 2013 1) Tassey, Gregory. "The economic impacts of inadequate infrastructure for software testing." National Institute of Standards and Technology, RTI Project 7007.011 (2002). 2) http://www.prweb.com/releases/2013/1/prwe b10298185.htm ソフトウェア開発者は 開発時間の 50% を バグの局所化と修正に 費やしている 6ヶ月 バグ修正の平均期間 オープンソースソフトウェア 商用ソフトウェア - Coverity® Scan Open Source Report 2014 2
  4. 4. バグ自動修正技術を使うと・・・ 新しいバグ の報告 バグのトリアージ バグの割り振り バグ修正 修正確認 アップロード版 の構築 バグ自動修正ツール 手動のプロセス: 数カ月 自動修復: 数時間 従来のバグ修正プロセス新しいバグ修正プロセス Copyright 2018 FUJITSU LABORATORIES LTD.3
  5. 5. それ本当なの? Copyright 2018 FUJITSU LABORATORIES LTD.4
  6. 6. Copyright 2018 FUJITSU LABORATORIES LTD.  修正パターンからパッチを探索的に生成し、 テストがすべて通るパッチを出力する どうやってバグを見つけて直すのか? バグ局所化 パッチ生成 パッチ検査 バグを含む プログラム テストスイート (失敗含む) 正しい パッチ 成功 失敗 バグ個所を 絞り込み 誤った パッチ (テスト 漏れ) パッチ なし 全てのパッチ をテスト済み プログラム を変更 5
  7. 7. バグ局所化では何をやっているか? Copyright 2018 FUJITSU LABORATORIES LTD. バグ局所化 バグを含む プログラム バグ個所を 絞り込み int mid(int x, int y, int z){ S1 int m = z; S2 if (y < z) S3 if (x < y) S4 m = y; S5 else if (x < z) S6 m = y; S7 else S8 if (x > y) S9 m = y; S10 else if (x > z) S11 m = x; S12 return m; } Susp 𝑆6 = 1 1 1 1 + 1 5 3, 3, 5 1, 2, 3 3, 2, 1 5, 5, 5 5, 3, 4 2, 1, 3 Susp. 50.0% 50.0% 62.5% 0% 71.4% 83.3% 0% 0% 0% 0% 0% 50.0% ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● P P P P P F 6
  8. 8. パッチ生成では何をやっているか? Copyright 2018 FUJITSU LABORATORIES LTD. パッチ生成 プログラム を変更 変更タイプ1:ステートメントレベル if(a==0){ exit(0); } foo(b); if(a==0){ foo(b); } exit(0); if(a==0){ foo(b); exit(0); } foo(b); 交換 複製 削除 if(a==0){ exit(0); } 代表的なツール: GenProg, RSRepair 探索範囲が広いため、 探索方法に工夫が必要 変更タイプ2:テンプレートベース if(a==0){ exit(0); } foo(b); if(a==0 || b!=0){ exit(0); } foo(b); 代表的なツール: Prophet, PAR if(a!=0){ exit(0); } if(b!=0) foo(b); 条件 追加 if文 追加 探索コストは低いが 直せる範囲は テンプレート依存 7
  9. 9. パッチ検査では何をしているか? Copyright 2018 FUJITSU LABORATORIES LTD. パッチ検査 テストスイート (失敗含む) 正しい パッチ 成功 誤った パッチ (テスト 漏れ) バグ局所化 失敗 8
  10. 10. Copyright 2018 FUJITSU LABORATORIES LTD.  修正パターンからパッチを探索的に生成し、 テストがすべて通るパッチを出力する どうやってバグを見つけて直すのか? バグ局所化 パッチ生成 パッチ検査 バグを含む プログラム テストスイート (失敗含む) 正しい パッチ 成功 失敗 バグ個所を 絞り込み 誤った パッチ (テスト 漏れ) パッチ なし 全てのパッチ をテスト済み プログラム を変更 9
  11. 11. Copyright 2018 FUJITSU LABORATORIES LTD.  富士通研で定義したバグ自動修正レベル どのようなバグが直せるのか?直せないのか? レベ ル 名称 定義 自動修復タ スクの実施 システム 出力 バグの 原因箇所 バグの 再現性 正しいパッチ であるかの判 断 0自動修復なし 開発者が全ての修復タ スクを実施 人 ー ー ー ー 1バグ箇所特定 システムが修復箇所の 特定を実施 人+システ ム バグ個所 ー ー ー 2単純バグ自動 修復 システムが再現可能な 単一原因箇所バグに対 して修復パッチを生成 人+システ ム パッチ 単一原因箇 所バグ 再現可能 人 3複雑バグ自動 修復 システムが再現可能な 複数原因箇所バグに対 して修復パッチを生成 人+システ ム パッチ 複数原因箇 所バグ 再現可能 人 4高度バグ自動 修復 システムが確率的に再 現可能なバグに対して 修復パッチを生成 人+システ ム パッチ 単一/複数 原因箇所バ グ 再現可能/ 確率的に再 現可能 人 5完全自動修復 正しいパッチであるか の判断までシステムが 行う システム パッチ 単一/複数 原因箇所バ グ 再現可能/ 確率的に再 現可能 システム 直せる 直せない 10
  12. 12. バグ自動修正技術の現在の実力 小規模バグのみ修正可能 ただし誤った修正を行う場合もあり •修正はされるが、他の動作への意図しない副作用が発生 主な技術的課題:パッチ探索の時間 内部でテストを繰り返し実行しながら修正を試みるため 1回のテスト実行が数分~数十分かかるプロジェクトも 少なくない 制約:修正品質がテスト品質に大きく依存 テストが不十分だと誤った修正をしてしまう テストが自動化されていないと、そもそも利用できない Copyright 2018 FUJITSU LABORATORIES LTD.11
  13. 13. 直せるバグの例  企業システムで使われているJavaプログラム(215KLOC)に 対してバグ自動修正ツールGenProgを用いて修正できた例 Copyright 2018 FUJITSU LABORATORIES LTD. 内藤他, “企業のソフトウェア開発に対する自動プログラム修正技術適用の試み,” SES2018より引用 12
  14. 14. 直せないバグの例 • 例:メモリリーク、性能・ユーザビリティなどの問題 • 例:テストで通ってない箇所、期待値設定が不十分な場合 • 失敗テストを手掛かりに探索的にパッチを生成するため 自動テストで 検出できないバグ • 組合せ爆発が起こるため 原因個所が複数に またがるバグ • 例:リソース競合、デッドロック、ライブロックなど • パッチが正しいかはテストが通るかによって決まるため 確率的に 発生するバグ • 例:設定ファイル、インフラ、外部ライブラリなど 対象プログラム 以外の不具合 • 例:変数宣言、メソッド定義、複雑な条件式、 修正パターン にないバグ Copyright 2018 FUJITSU LABORATORIES LTD.13
  15. 15. 9月にFacebookがバグ自動修正ツールを発表 Copyright 2018 FUJITSU LABORATORIES LTD.14
  16. 16. 一部で話題に・・・ Copyright 2018 FUJITSU LABORATORIES LTD.15
  17. 17. SapFixはどうやってバグを直しているか? Copyright 2018 FUJITSU LABORATORIES LTD. 修正テンプレートから パッチを生成する バグ混入前の版に戻すバグ混入前の版に戻す 単純な変更を 網羅的に試す (わかる範囲では)特別なことはやっていないが割り切りがよい ・直すよりも元に戻すことを優先(Revertをする) ・修正対象は実行時エラーに絞っている (既発表ツール) 遺伝的アルゴリズム を用いたファジング 16
  18. 18. 富士通でもバグ自動修正技術やってます! Copyright 2018 FUJITSU LABORATORIES LTD.17
  19. 19. ELIXIR: AIを活用したバグ自動修正ツール Copyright 2018 FUJITSU LABORATORIES LTD. バグを含む プログラム (Java 7 or 8 & Maven) バグ 修正済み プログラム テスト失敗 (JUnit) ELIXIR ソフトウェア開発者 ビッグコード テスト成功 過去の修正履歴から学習する ことで正しい修正方法を発見 CI/CDに組み込んで 自動的に実行可能 ユーザーは確認するだけ このパッチは 正しい! バグ修正 パッチ 入力 学習 出力 確認 適用 小規模バグであれば3件に 1件程度を正しく修正可能 米国富士通研究所 (FLA)との共同研究 public StringBuffer format(Calendar calendar, StringBuffer buf) { if (mTimeZoneForced) { + calendar.getTime(); calendar = (Calendar) calendar.clone(); calendar.setTimeZone(mTimeZone); } return applyRules(calendar, buf); } 実際のバグ修正例 新たなコード追加が 必要なバグ修正も可能 18
  20. 20. ELIXIRはどのようにパッチを生成するのか Copyright 2018 FUJITSU LABORATORIES LTD. バグを含む プログラム (Java 7 or 8 & Maven) テスト失敗 (JUnit) ELIXIR バグ修正 パッチ ①バグ局所化 ②パッチ生成 ③パッチ検査失敗 バグ個所を 絞り込み プログラム を変更 1. 2. n. 機械学習で ランク付け 学習 修正パターンから パッチ候補を生成 修正 パターン 出力入力 19
  21. 21. Elixirはどれだけバグを直せるか?  82件の小規模バグのうち、26件を正しく修正(世界トップ)  計231KLOCの複数のOSSを用いた実験結果 Copyright 2018 FUJITSU LABORATORIES LTD. 26/15 18/5 10/- 5/30 3/- 5/22 0 5 10 15 20 25 30 35 40 45 jGenProg (仏・INRIA) PAR (米・CMU) NOPOL (仏・INRIA) HD-Repair (米・CMU) ACS (中・北京大) ELIXIR 正しいパッチ 誤ったパッチ N/A N/A 20 機械学習によって適合率、 修正パターンによって再現率 がそれぞれアップ
  22. 22. ELIXIR適用事例(ELIXIR自身への適用) Copyright 2018 FUJITSU LABORATORIES LTD. 開発者による パッチ Elixirが生成した パッチ 0 10 20 30 40 50 60 70 Elixirによる修正時間 開発者による修正時間 5分 1時間 21
  23. 23. 自分のPJでも使ってみたい! Copyright 2018 FUJITSU LABORATORIES LTD.22
  24. 24. あなたのPJはどれだけ「バグ自動修正」readyか チェックしてみよう! 1. 自動テストがある 2. 自動テストのカバレッジに基準を設けている(〇〇%以上) 3. 単体テストと結合テストの両方でテストを自動化している 4. CIを取り入れている 5. 自動テストの実行時間は規模に対して十分に短い(1テスト ケースあたり平均〇ms以内) 6. バグが発生したときに再現テストコードを書く文化がある 7. ミューテーションテストでテスト品質を確認している Copyright 2018 FUJITSU LABORATORIES LTD. 自動テストの品質が重要 23
  25. 25. テストコードの品質を測定しよう! Copyright 2018 FUJITSU LABORATORIES LTD. 富士通研究所で開発 24
  26. 26. バグ自動修正技術で開発スタイルが変わる Copyright 2018 FUJITSU LABORATORIES LTD. コードと テストケース コミット リポジトリ コンパイル ビルドテスト 継続的インテグレーション トリガー テスト成功? パッチ データ 取得 レビュー 開発者 通知 トリガー 1 2 3 4 5 6 End マージ リクエスト AI モデル LIXIR BotE パッチ生成? 単純なバグは Botに直してもらう 25
  27. 27. まとめ  近年、バグ自動修正技術への注目度が高まっている  バグ自動修正技術により単純バグは数時間で修正可能  Facebookでも実用化に取り組んでいる  富士通では最先端のバグ自動修正技術を研究開発している  過去の修正履歴を学習することで精度アップ  小規模バグ3件に1件を正しく修正  開発スタイルも変わっていく  将来的には軽微なバグはツールで直すようになっていくのでは  自動テストの品質が上がればバグ自動修正は現実的になっていく Copyright 2018 FUJITSU LABORATORIES LTD.26
  28. 28. 27
  29. 29. OSS化されているツール  C/C++  GenProg:https://github.com/squaresLab/genprog-code  Prophet: http://groups.csail.mit.edu/pac/patchgen/  Java  kGenProg:https://github.com/kusumotolab/kGenProg  Astor: https://github.com/SpoonLabs/astor  ACS: https://github.com/Adobee/ACS Copyright 2018 FUJITSU LABORATORIES LTD. ※すべて研究用途として実装されていることに注意 28
  • amehidemura

    Oct. 25, 2020
  • BoPeng74

    Nov. 10, 2019
  • takaokenji

    May. 19, 2019
  • RyutaImamura

    Apr. 2, 2019

第1回AI4SEセミナーで使用した資料です

Views

Total views

4,636

On Slideshare

0

From embeds

0

Number of embeds

1,835

Actions

Downloads

23

Shares

0

Comments

0

Likes

4

×