Submit Search
Upload
バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~
•
Download as PPTX, PDF
•
5 likes
•
5,213 views
Susumu Tokumoto
Follow
第1回AI4SEセミナーで使用した資料です
Read less
Read more
Technology
Report
Share
Report
Share
1 of 29
Download now
Recommended
先端技術とメディア表現1 #FTMA15
先端技術とメディア表現1 #FTMA15
Yoichi Ochiai
楽天がHadoopを使う理由
楽天がHadoopを使う理由
Rakuten Group, Inc.
失敗から学ぶ機械学習応用
失敗から学ぶ機械学習応用
Hiroyuki Masuda
ゼロから始める転移学習
ゼロから始める転移学習
Yahoo!デベロッパーネットワーク
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
ShunsukeNakamura17
【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習
cvpaper. challenge
Data-Centric AIの紹介
Data-Centric AIの紹介
Kazuyuki Miyazawa
SSII2018TS: 3D物体検出とロボットビジョンへの応用
SSII2018TS: 3D物体検出とロボットビジョンへの応用
SSII
Recommended
先端技術とメディア表現1 #FTMA15
先端技術とメディア表現1 #FTMA15
Yoichi Ochiai
楽天がHadoopを使う理由
楽天がHadoopを使う理由
Rakuten Group, Inc.
失敗から学ぶ機械学習応用
失敗から学ぶ機械学習応用
Hiroyuki Masuda
ゼロから始める転移学習
ゼロから始める転移学習
Yahoo!デベロッパーネットワーク
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
ShunsukeNakamura17
【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習
cvpaper. challenge
Data-Centric AIの紹介
Data-Centric AIの紹介
Kazuyuki Miyazawa
SSII2018TS: 3D物体検出とロボットビジョンへの応用
SSII2018TS: 3D物体検出とロボットビジョンへの応用
SSII
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
5分で分かる自己組織化マップ
5分で分かる自己組織化マップ
Daisuke Takai
ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】
Yuki Arase
BERTをブラウザで動かしたい!―MobileBERTとTensorFlow.js―
BERTをブラウザで動かしたい!―MobileBERTとTensorFlow.js―
Shion Honda
Marp Tutorial
Marp Tutorial
Rui Watanabe
Semantic segmentation
Semantic segmentation
Takuya Minagawa
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争
Yosuke Shinya
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Preferred Networks
Domain Adaptation 発展と動向まとめ(サーベイ資料)
Domain Adaptation 発展と動向まとめ(サーベイ資料)
Yamato OKAMOTO
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
株式会社MonotaRO Tech Team
Deep Learning Lab 異常検知入門
Deep Learning Lab 異常検知入門
Shohei Hido
【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models
Deep Learning JP
条件付き確率場の推論と学習
条件付き確率場の推論と学習
Masaki Saito
How Much Position Information Do Convolutional Neural Networks Encode?
How Much Position Information Do Convolutional Neural Networks Encode?
Kazuyuki Miyazawa
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
Narichika Kajihara
差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)
Kentaro Minami
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
九州ソフトウェアテスト勉強会紹介LT:Developers Summit 2016 FUKUOKA懇親会
九州ソフトウェアテスト勉強会紹介LT:Developers Summit 2016 FUKUOKA懇親会
Rina Fukuda
テスト自動化のこれまでとこれから
テスト自動化のこれまでとこれから
Keizo Tatsumi
More Related Content
What's hot
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
5分で分かる自己組織化マップ
5分で分かる自己組織化マップ
Daisuke Takai
ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】
Yuki Arase
BERTをブラウザで動かしたい!―MobileBERTとTensorFlow.js―
BERTをブラウザで動かしたい!―MobileBERTとTensorFlow.js―
Shion Honda
Marp Tutorial
Marp Tutorial
Rui Watanabe
Semantic segmentation
Semantic segmentation
Takuya Minagawa
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争
Yosuke Shinya
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Preferred Networks
Domain Adaptation 発展と動向まとめ(サーベイ資料)
Domain Adaptation 発展と動向まとめ(サーベイ資料)
Yamato OKAMOTO
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
株式会社MonotaRO Tech Team
Deep Learning Lab 異常検知入門
Deep Learning Lab 異常検知入門
Shohei Hido
【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models
Deep Learning JP
条件付き確率場の推論と学習
条件付き確率場の推論と学習
Masaki Saito
How Much Position Information Do Convolutional Neural Networks Encode?
How Much Position Information Do Convolutional Neural Networks Encode?
Kazuyuki Miyazawa
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
Narichika Kajihara
差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)
Kentaro Minami
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
What's hot
(20)
DockerコンテナでGitを使う
DockerコンテナでGitを使う
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
5分で分かる自己組織化マップ
5分で分かる自己組織化マップ
ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】
BERTをブラウザで動かしたい!―MobileBERTとTensorFlow.js―
BERTをブラウザで動かしたい!―MobileBERTとTensorFlow.js―
Marp Tutorial
Marp Tutorial
Semantic segmentation
Semantic segmentation
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Domain Adaptation 発展と動向まとめ(サーベイ資料)
Domain Adaptation 発展と動向まとめ(サーベイ資料)
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
Deep Learning Lab 異常検知入門
Deep Learning Lab 異常検知入門
【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models
条件付き確率場の推論と学習
条件付き確率場の推論と学習
How Much Position Information Do Convolutional Neural Networks Encode?
How Much Position Information Do Convolutional Neural Networks Encode?
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
情報共有は、なぜGoogle Docsじゃなく、 Confluenceなのか。
差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Similar to バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~
九州ソフトウェアテスト勉強会紹介LT:Developers Summit 2016 FUKUOKA懇親会
九州ソフトウェアテスト勉強会紹介LT:Developers Summit 2016 FUKUOKA懇親会
Rina Fukuda
テスト自動化のこれまでとこれから
テスト自動化のこれまでとこれから
Keizo Tatsumi
ソフトウェアエンジニアでなくてもアジャイルが分かるセミナー
ソフトウェアエンジニアでなくてもアジャイルが分かるセミナー
Naoya Maekawa
Androidテスティング実践2 システムテスト編
Androidテスティング実践2 システムテスト編
株式会社 NTTテクノクロス
機械学習システムの品質保証に向けた課題とコンソーシアム活動
機械学習システムの品質保証に向けた課題とコンソーシアム活動
Hideto Ogawa
世界のソフトウェアテストの会議 (JaSST 2018 東京)
世界のソフトウェアテストの会議 (JaSST 2018 東京)
Keizo Tatsumi
テストマネジメントツールSquash TMを利用した継続的テスト改善
テストマネジメントツールSquash TMを利用した継続的テスト改善
Mizuho Wakai
[3rd 長崎QDG] チームで、長期間で、たくさんのソフトウェアを快適に開発し、価値を生み続けるためのエンジニアリング
[3rd 長崎QDG] チームで、長期間で、たくさんのソフトウェアを快適に開発し、価値を生み続けるためのエンジニアリング
Masanori Kaneko
音声によるデバイスWebAPIの操作
音声によるデバイスWebAPIの操作
Device WebAPI Consortium
0181013 warai CI(継続的インテグレーション)と実例紹介_公開用
0181013 warai CI(継続的インテグレーション)と実例紹介_公開用
tomohiro odan
異業種でのテスト自動化の実際
異業種でのテスト自動化の実際
Satsuki Urayama
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
Masanori Kaneko
生成AIが切り拓く新しいゲームの創り方・遊び方
生成AIが切り拓く新しいゲームの創り方・遊び方
KLab Inc. / Tech
1時間で分かるSTA (Software Test Automation) #stac2014
1時間で分かるSTA (Software Test Automation) #stac2014
Kazuhiro Suzuki
システムテスト自動化標準ガイド 読書会 第8章
システムテスト自動化標準ガイド 読書会 第8章
mirer
20190327_ICON技術セミナー9_永井
20190327_ICON技術セミナー9_永井
ICT_CONNECT_21
塹壕にいるすべての同朋へ
塹壕にいるすべての同朋へ
toshihiro ichitani
テスト自動化クロニクル (JaSST 東海 2016)
テスト自動化クロニクル (JaSST 東海 2016)
Keizo Tatsumi
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
Fixstars Corporation
【JaSST'18 Tokai】アジャイルとテスト自動化導入の勘所
【JaSST'18 Tokai】アジャイルとテスト自動化導入の勘所
Kotaro Ogino
Similar to バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~
(20)
九州ソフトウェアテスト勉強会紹介LT:Developers Summit 2016 FUKUOKA懇親会
九州ソフトウェアテスト勉強会紹介LT:Developers Summit 2016 FUKUOKA懇親会
テスト自動化のこれまでとこれから
テスト自動化のこれまでとこれから
ソフトウェアエンジニアでなくてもアジャイルが分かるセミナー
ソフトウェアエンジニアでなくてもアジャイルが分かるセミナー
Androidテスティング実践2 システムテスト編
Androidテスティング実践2 システムテスト編
機械学習システムの品質保証に向けた課題とコンソーシアム活動
機械学習システムの品質保証に向けた課題とコンソーシアム活動
世界のソフトウェアテストの会議 (JaSST 2018 東京)
世界のソフトウェアテストの会議 (JaSST 2018 東京)
テストマネジメントツールSquash TMを利用した継続的テスト改善
テストマネジメントツールSquash TMを利用した継続的テスト改善
[3rd 長崎QDG] チームで、長期間で、たくさんのソフトウェアを快適に開発し、価値を生み続けるためのエンジニアリング
[3rd 長崎QDG] チームで、長期間で、たくさんのソフトウェアを快適に開発し、価値を生み続けるためのエンジニアリング
音声によるデバイスWebAPIの操作
音声によるデバイスWebAPIの操作
0181013 warai CI(継続的インテグレーション)と実例紹介_公開用
0181013 warai CI(継続的インテグレーション)と実例紹介_公開用
異業種でのテスト自動化の実際
異業種でのテスト自動化の実際
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
XP祭り2019 - 日立・ソフトウェア革新部会 ~会社を越境する社内コミュニティ~
生成AIが切り拓く新しいゲームの創り方・遊び方
生成AIが切り拓く新しいゲームの創り方・遊び方
1時間で分かるSTA (Software Test Automation) #stac2014
1時間で分かるSTA (Software Test Automation) #stac2014
システムテスト自動化標準ガイド 読書会 第8章
システムテスト自動化標準ガイド 読書会 第8章
20190327_ICON技術セミナー9_永井
20190327_ICON技術セミナー9_永井
塹壕にいるすべての同朋へ
塹壕にいるすべての同朋へ
テスト自動化クロニクル (JaSST 東海 2016)
テスト自動化クロニクル (JaSST 東海 2016)
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
【JaSST'18 Tokai】アジャイルとテスト自動化導入の勘所
【JaSST'18 Tokai】アジャイルとテスト自動化導入の勘所
バグ自動修正ツールって本当に使えるの? ~自動デバッグ技術の現状と課題~
1.
Copyright 2018 FUJITSU
LABORATORIES LTD. バグ自動修正ツールって 本当に使えるの? ~自動デバッグ技術の現状と課題~ 2018年12月14日 株式会社富士通研究所 徳本 晋 0
2.
自己紹介 氏名:徳本 晋(とくもと
すすむ) 所属:㈱富士通研究所 ソフトウェア研究所 早稲田大学 招聘研究員 専門:ソフトウェア工学 特にソフトウェアテスト、デバッグ 最近の対外的な活動 情報処理学会誌 2019年1月号 「特集」機械学習工学 一部記事執筆 QA4AIコンソーシアム メンバー 国際会議APSEC2018 SEIP track PC member / Session chair 国際会議ICST2017 Registration chair ソフトウェアエンジニアリングシンポジウム2018 プログラム委員 ソフトウェアエンジニアリングシンポジウム2017 インタラクティブ賞 トップエスイーコンテスト2017 モデルチェッキングコンテスト優勝 Copyright 2018 FUJITSU LABORATORIES LTD.1
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.
バグ自動修正技術を使うと・・・ 新しいバグ の報告 バグのトリアージ バグの割り振り バグ修正 修正確認
アップロード版 の構築 バグ自動修正ツール 手動のプロセス: 数カ月 自動修復: 数時間 従来のバグ修正プロセス新しいバグ修正プロセス Copyright 2018 FUJITSU LABORATORIES LTD.3
5.
それ本当なの? Copyright 2018 FUJITSU
LABORATORIES LTD.4
6.
Copyright 2018 FUJITSU
LABORATORIES LTD. 修正パターンからパッチを探索的に生成し、 テストがすべて通るパッチを出力する どうやってバグを見つけて直すのか? バグ局所化 パッチ生成 パッチ検査 バグを含む プログラム テストスイート (失敗含む) 正しい パッチ 成功 失敗 バグ個所を 絞り込み 誤った パッチ (テスト 漏れ) パッチ なし 全てのパッチ をテスト済み プログラム を変更 5
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.
パッチ生成では何をやっているか? 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.
パッチ検査では何をしているか? Copyright 2018 FUJITSU
LABORATORIES LTD. パッチ検査 テストスイート (失敗含む) 正しい パッチ 成功 誤った パッチ (テスト 漏れ) バグ局所化 失敗 8
10.
Copyright 2018 FUJITSU
LABORATORIES LTD. 修正パターンからパッチを探索的に生成し、 テストがすべて通るパッチを出力する どうやってバグを見つけて直すのか? バグ局所化 パッチ生成 パッチ検査 バグを含む プログラム テストスイート (失敗含む) 正しい パッチ 成功 失敗 バグ個所を 絞り込み 誤った パッチ (テスト 漏れ) パッチ なし 全てのパッチ をテスト済み プログラム を変更 9
11.
Copyright 2018 FUJITSU
LABORATORIES LTD. 富士通研で定義したバグ自動修正レベル どのようなバグが直せるのか?直せないのか? レベ ル 名称 定義 自動修復タ スクの実施 システム 出力 バグの 原因箇所 バグの 再現性 正しいパッチ であるかの判 断 0自動修復なし 開発者が全ての修復タ スクを実施 人 ー ー ー ー 1バグ箇所特定 システムが修復箇所の 特定を実施 人+システ ム バグ個所 ー ー ー 2単純バグ自動 修復 システムが再現可能な 単一原因箇所バグに対 して修復パッチを生成 人+システ ム パッチ 単一原因箇 所バグ 再現可能 人 3複雑バグ自動 修復 システムが再現可能な 複数原因箇所バグに対 して修復パッチを生成 人+システ ム パッチ 複数原因箇 所バグ 再現可能 人 4高度バグ自動 修復 システムが確率的に再 現可能なバグに対して 修復パッチを生成 人+システ ム パッチ 単一/複数 原因箇所バ グ 再現可能/ 確率的に再 現可能 人 5完全自動修復 正しいパッチであるか の判断までシステムが 行う システム パッチ 単一/複数 原因箇所バ グ 再現可能/ 確率的に再 現可能 システム 直せる 直せない 10
12.
バグ自動修正技術の現在の実力 小規模バグのみ修正可能 ただし誤った修正を行う場合もあり •修正はされるが、他の動作への意図しない副作用が発生 主な技術的課題:パッチ探索の時間 内部でテストを繰り返し実行しながら修正を試みるため 1回のテスト実行が数分~数十分かかるプロジェクトも 少なくない 制約:修正品質がテスト品質に大きく依存 テストが不十分だと誤った修正をしてしまう テストが自動化されていないと、そもそも利用できない Copyright 2018 FUJITSU
LABORATORIES LTD.11
13.
直せるバグの例 企業システムで使われているJavaプログラム(215KLOC)に 対してバグ自動修正ツールGenProgを用いて修正できた例 Copyright 2018
FUJITSU LABORATORIES LTD. 内藤他, “企業のソフトウェア開発に対する自動プログラム修正技術適用の試み,” SES2018より引用 12
14.
直せないバグの例 • 例:メモリリーク、性能・ユーザビリティなどの問題 • 例:テストで通ってない箇所、期待値設定が不十分な場合 •
失敗テストを手掛かりに探索的にパッチを生成するため 自動テストで 検出できないバグ • 組合せ爆発が起こるため 原因個所が複数に またがるバグ • 例:リソース競合、デッドロック、ライブロックなど • パッチが正しいかはテストが通るかによって決まるため 確率的に 発生するバグ • 例:設定ファイル、インフラ、外部ライブラリなど 対象プログラム 以外の不具合 • 例:変数宣言、メソッド定義、複雑な条件式、 修正パターン にないバグ Copyright 2018 FUJITSU LABORATORIES LTD.13
15.
9月にFacebookがバグ自動修正ツールを発表 Copyright 2018 FUJITSU
LABORATORIES LTD.14
16.
一部で話題に・・・ Copyright 2018 FUJITSU
LABORATORIES LTD.15
17.
SapFixはどうやってバグを直しているか? Copyright 2018 FUJITSU
LABORATORIES LTD. 修正テンプレートから パッチを生成する バグ混入前の版に戻すバグ混入前の版に戻す 単純な変更を 網羅的に試す (わかる範囲では)特別なことはやっていないが割り切りがよい ・直すよりも元に戻すことを優先(Revertをする) ・修正対象は実行時エラーに絞っている (既発表ツール) 遺伝的アルゴリズム を用いたファジング 16
18.
富士通でもバグ自動修正技術やってます! Copyright 2018 FUJITSU
LABORATORIES LTD.17
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.
ELIXIRはどのようにパッチを生成するのか Copyright 2018 FUJITSU
LABORATORIES LTD. バグを含む プログラム (Java 7 or 8 & Maven) テスト失敗 (JUnit) ELIXIR バグ修正 パッチ ①バグ局所化 ②パッチ生成 ③パッチ検査失敗 バグ個所を 絞り込み プログラム を変更 1. 2. n. 機械学習で ランク付け 学習 修正パターンから パッチ候補を生成 修正 パターン 出力入力 19
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.
ELIXIR適用事例(ELIXIR自身への適用) Copyright 2018 FUJITSU
LABORATORIES LTD. 開発者による パッチ Elixirが生成した パッチ 0 10 20 30 40 50 60 70 Elixirによる修正時間 開発者による修正時間 5分 1時間 21
23.
自分のPJでも使ってみたい! Copyright 2018 FUJITSU
LABORATORIES LTD.22
24.
あなたのPJはどれだけ「バグ自動修正」readyか チェックしてみよう! 1. 自動テストがある 2. 自動テストのカバレッジに基準を設けている(〇〇%以上) 3.
単体テストと結合テストの両方でテストを自動化している 4. CIを取り入れている 5. 自動テストの実行時間は規模に対して十分に短い(1テスト ケースあたり平均〇ms以内) 6. バグが発生したときに再現テストコードを書く文化がある 7. ミューテーションテストでテスト品質を確認している Copyright 2018 FUJITSU LABORATORIES LTD. 自動テストの品質が重要 23
25.
テストコードの品質を測定しよう! Copyright 2018 FUJITSU
LABORATORIES LTD. 富士通研究所で開発 24
26.
バグ自動修正技術で開発スタイルが変わる Copyright 2018 FUJITSU
LABORATORIES LTD. コードと テストケース コミット リポジトリ コンパイル ビルドテスト 継続的インテグレーション トリガー テスト成功? パッチ データ 取得 レビュー 開発者 通知 トリガー 1 2 3 4 5 6 End マージ リクエスト AI モデル LIXIR BotE パッチ生成? 単純なバグは Botに直してもらう 25
27.
まとめ 近年、バグ自動修正技術への注目度が高まっている バグ自動修正技術により単純バグは数時間で修正可能
Facebookでも実用化に取り組んでいる 富士通では最先端のバグ自動修正技術を研究開発している 過去の修正履歴を学習することで精度アップ 小規模バグ3件に1件を正しく修正 開発スタイルも変わっていく 将来的には軽微なバグはツールで直すようになっていくのでは 自動テストの品質が上がればバグ自動修正は現実的になっていく Copyright 2018 FUJITSU LABORATORIES LTD.26
28.
27
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
Editor's Notes
0
・高品質の要求、複雑化、環境の多様化によりデバッグの費用が世界的にも増えている
5
9
10
次に研究所で取り組んでいるJava向けのバグ自動修正ツールElixirを紹介します。Elixirは基本的には他のバグ自動修正ツールと同じように、バグを含むソースコードとそれを発見したテストコードを入力として、そのテストをすべて成功させるようなパッチ候補を出力するものですが、このとき、既存の大規模資産からソースコードとテストコードの類似度などの重みを機械学習したモデルを用いることにより既存技術よりも高い精度で正しい修正パッチが生成できます。生成したパッチはユーザーが正しいパッチかを確認し、プログラムに適用することでバグ修正が完了します。こちらが実際のバグ修正例ですが、メソッド追加のようなバグも修正可能です。
さらにElixirの詳細についてご説明します。Elixirに限らず多くのバグ自動修正ツールは内部で3つのステップを経ることで修正パッチを生成しておりまして、最初にバグ箇所を絞り込むバグ局所化、次に絞り込んだ箇所に適合するパッチを生成し、最後にそのパッチでテストが成功するかを調べるパッチ検査を行い、検査が通ればそのパッチを出力し、検査に通らなければ、また新たな箇所や新たなパッチを探すためバグ局所化やパッチ生成をやりなおすという流れになります。Elixirはパッチ生成のステップで特徴がありまして、バグ被疑箇所に対して修正パターンを適用してパッチ候補を生成するのですが、その修正パターンは統計的にバグになりやすいものを集めています。また、パッチ候補の中から既存の大規模資産を用いた機械学習により、より正しいそうなパッチをランク付けすることで
Download now