Suche senden
Hochladen
コードレビューを通じて行われるコーディングスタイル修正の分析
•
Als PPTX, PDF herunterladen
•
1 gefällt mir
•
1,826 views
奈良先端大 情報科学研究科
Folgen
上田 裕己1,伊原 彰紀2,石尾 隆1 ,松本 健一1 1奈良先端科学技術大学院大学 2和歌山大学
Weniger lesen
Mehr lesen
Wissenschaft
Melden
Teilen
Melden
Teilen
1 von 31
Jetzt herunterladen
Empfohlen
ISO/IEC DIS 20246 についての(ごく簡単な)説明
ISO/IEC DIS 20246 についての(ごく簡単な)説明
しょうご すずき
『アプリケーション アーキテクチャ ガイド2.0』のガイド
『アプリケーション アーキテクチャ ガイド2.0』のガイド
Kentaro Inomata
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
Shuji Morisaki
po-2. Python プログラミングの基本
po-2. Python プログラミングの基本
kunihikokaneko1
Klocworkのご紹介
Klocworkのご紹介
Masaru Horioka
pf-1. Python,Google Colaboratory
pf-1. Python,Google Colaboratory
kunihikokaneko1
LightSwitch 結局何ができるの
LightSwitch 結局何ができるの
Yoshitaka Seo
研究紹介スライド
研究紹介スライド
Norihito Kitagawa
Empfohlen
ISO/IEC DIS 20246 についての(ごく簡単な)説明
ISO/IEC DIS 20246 についての(ごく簡単な)説明
しょうご すずき
『アプリケーション アーキテクチャ ガイド2.0』のガイド
『アプリケーション アーキテクチャ ガイド2.0』のガイド
Kentaro Inomata
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
Shuji Morisaki
po-2. Python プログラミングの基本
po-2. Python プログラミングの基本
kunihikokaneko1
Klocworkのご紹介
Klocworkのご紹介
Masaru Horioka
pf-1. Python,Google Colaboratory
pf-1. Python,Google Colaboratory
kunihikokaneko1
LightSwitch 結局何ができるの
LightSwitch 結局何ができるの
Yoshitaka Seo
研究紹介スライド
研究紹介スライド
Norihito Kitagawa
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
Developers Summit
20110909 品質シンポジウム2011発表資料
20110909 品質シンポジウム2011発表資料
Kenichiro Nakajima
【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK
【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK
Kotaro Ogino
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
Hironori Washizaki
Devlove2012 どうしたら良いシステムが作れるのか
Devlove2012 どうしたら良いシステムが作れるのか
Yusuke Suzuki
2010 電子情報通信学会論文誌-要求変更によるソースコードへのインパクトを分析するシステムの開発と評価
2010 電子情報通信学会論文誌-要求変更によるソースコードへのインパクトを分析するシステムの開発と評価
n-yuki
SQuBOKガイドV2で測る日本のソフトウェア品質技術力
SQuBOKガイドV2で測る日本のソフトウェア品質技術力
Keizo Tatsumi
Project Management Plan Sample Creative Content Lab Tokyo
Project Management Plan Sample Creative Content Lab Tokyo
CreativeContentLabTo
メトリクスによるソフトウェア品質評価・改善および製品品質実態
メトリクスによるソフトウェア品質評価・改善および製品品質実態
Hironori Washizaki
Samurai CodingなどにみるゲームAIプログラミングコンテストのための原則とパターン
Samurai CodingなどにみるゲームAIプログラミングコンテストのための原則とパターン
Hironori Washizaki
6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後
Shingo Sasaki
20210907 Qlik Tech Talk Snowflake with Qlik Best Practices
20210907 Qlik Tech Talk Snowflake with Qlik Best Practices
QlikPresalesJapan
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
Keizo Tatsumi
Shibya.trac #2: TracとTestLinkの合わせ技
Shibya.trac #2: TracとTestLinkの合わせ技
Toshiyuki Kawanishi
DevOps時代の開発環境と現場体験 [#cmdevio2015]
DevOps時代の開発環境と現場体験 [#cmdevio2015]
智治 長沢
世界に目を向けよう - ASTER国際連携活動事例(JaSST'15 tokyo)
世界に目を向けよう - ASTER国際連携活動事例(JaSST'15 tokyo)
Keizo Tatsumi
アジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチ
アジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチ
Tetsuya Kouno
クラウド時代にこそ求められるIt部門の役割
クラウド時代にこそ求められるIt部門の役割
Yusuke Oi
ソフトウェア工学2023 02 上流工程
ソフトウェア工学2023 02 上流工程
Toru Tamaki
テスト駆動&オブジェクト指向ハンズオン
テスト駆動&オブジェクト指向ハンズオン
yuichi_kuwahara
テレコミュニケーションを支援してみよう
テレコミュニケーションを支援してみよう
奈良先端大 情報科学研究科
マイコンと機械学習を使って行動認識システムを作ろう
マイコンと機械学習を使って行動認識システムを作ろう
奈良先端大 情報科学研究科
Weitere ähnliche Inhalte
Ähnlich wie コードレビューを通じて行われるコーディングスタイル修正の分析
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
Developers Summit
20110909 品質シンポジウム2011発表資料
20110909 品質シンポジウム2011発表資料
Kenichiro Nakajima
【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK
【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK
Kotaro Ogino
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
Hironori Washizaki
Devlove2012 どうしたら良いシステムが作れるのか
Devlove2012 どうしたら良いシステムが作れるのか
Yusuke Suzuki
2010 電子情報通信学会論文誌-要求変更によるソースコードへのインパクトを分析するシステムの開発と評価
2010 電子情報通信学会論文誌-要求変更によるソースコードへのインパクトを分析するシステムの開発と評価
n-yuki
SQuBOKガイドV2で測る日本のソフトウェア品質技術力
SQuBOKガイドV2で測る日本のソフトウェア品質技術力
Keizo Tatsumi
Project Management Plan Sample Creative Content Lab Tokyo
Project Management Plan Sample Creative Content Lab Tokyo
CreativeContentLabTo
メトリクスによるソフトウェア品質評価・改善および製品品質実態
メトリクスによるソフトウェア品質評価・改善および製品品質実態
Hironori Washizaki
Samurai CodingなどにみるゲームAIプログラミングコンテストのための原則とパターン
Samurai CodingなどにみるゲームAIプログラミングコンテストのための原則とパターン
Hironori Washizaki
6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後
Shingo Sasaki
20210907 Qlik Tech Talk Snowflake with Qlik Best Practices
20210907 Qlik Tech Talk Snowflake with Qlik Best Practices
QlikPresalesJapan
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
Keizo Tatsumi
Shibya.trac #2: TracとTestLinkの合わせ技
Shibya.trac #2: TracとTestLinkの合わせ技
Toshiyuki Kawanishi
DevOps時代の開発環境と現場体験 [#cmdevio2015]
DevOps時代の開発環境と現場体験 [#cmdevio2015]
智治 長沢
世界に目を向けよう - ASTER国際連携活動事例(JaSST'15 tokyo)
世界に目を向けよう - ASTER国際連携活動事例(JaSST'15 tokyo)
Keizo Tatsumi
アジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチ
アジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチ
Tetsuya Kouno
クラウド時代にこそ求められるIt部門の役割
クラウド時代にこそ求められるIt部門の役割
Yusuke Oi
ソフトウェア工学2023 02 上流工程
ソフトウェア工学2023 02 上流工程
Toru Tamaki
テスト駆動&オブジェクト指向ハンズオン
テスト駆動&オブジェクト指向ハンズオン
yuichi_kuwahara
Ähnlich wie コードレビューを通じて行われるコーディングスタイル修正の分析
(20)
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
20110909 品質シンポジウム2011発表資料
20110909 品質シンポジウム2011発表資料
【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK
【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
Devlove2012 どうしたら良いシステムが作れるのか
Devlove2012 どうしたら良いシステムが作れるのか
2010 電子情報通信学会論文誌-要求変更によるソースコードへのインパクトを分析するシステムの開発と評価
2010 電子情報通信学会論文誌-要求変更によるソースコードへのインパクトを分析するシステムの開発と評価
SQuBOKガイドV2で測る日本のソフトウェア品質技術力
SQuBOKガイドV2で測る日本のソフトウェア品質技術力
Project Management Plan Sample Creative Content Lab Tokyo
Project Management Plan Sample Creative Content Lab Tokyo
メトリクスによるソフトウェア品質評価・改善および製品品質実態
メトリクスによるソフトウェア品質評価・改善および製品品質実態
Samurai CodingなどにみるゲームAIプログラミングコンテストのための原則とパターン
Samurai CodingなどにみるゲームAIプログラミングコンテストのための原則とパターン
6万行の TypeScript 移行とその後
6万行の TypeScript 移行とその後
20210907 Qlik Tech Talk Snowflake with Qlik Best Practices
20210907 Qlik Tech Talk Snowflake with Qlik Best Practices
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
Shibya.trac #2: TracとTestLinkの合わせ技
Shibya.trac #2: TracとTestLinkの合わせ技
DevOps時代の開発環境と現場体験 [#cmdevio2015]
DevOps時代の開発環境と現場体験 [#cmdevio2015]
世界に目を向けよう - ASTER国際連携活動事例(JaSST'15 tokyo)
世界に目を向けよう - ASTER国際連携活動事例(JaSST'15 tokyo)
アジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチ
アジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチ
クラウド時代にこそ求められるIt部門の役割
クラウド時代にこそ求められるIt部門の役割
ソフトウェア工学2023 02 上流工程
ソフトウェア工学2023 02 上流工程
テスト駆動&オブジェクト指向ハンズオン
テスト駆動&オブジェクト指向ハンズオン
Mehr von 奈良先端大 情報科学研究科
テレコミュニケーションを支援してみよう
テレコミュニケーションを支援してみよう
奈良先端大 情報科学研究科
マイコンと機械学習を使って行動認識システムを作ろう
マイコンと機械学習を使って行動認識システムを作ろう
奈良先端大 情報科学研究科
5G時代を支えるNFVによるネットワーク最適設計
5G時代を支えるNFVによるネットワーク最適設計
奈良先端大 情報科学研究科
21.Raspberry Piを用いたIoTアプリの開発
21.Raspberry Piを用いたIoTアプリの開発
奈良先端大 情報科学研究科
20. 地理ビッグデータ利活用: リスク予測型自動避難誘導,地理的リスク分析
20. 地理ビッグデータ利活用: リスク予測型自動避難誘導,地理的リスク分析
奈良先端大 情報科学研究科
11.実装の脆弱性を利用して強力な暗号を解読してみよう!
11.実装の脆弱性を利用して強力な暗号を解読してみよう!
奈良先端大 情報科学研究科
8. ミニ・スーパコンピュータを自作しよう!
8. ミニ・スーパコンピュータを自作しよう!
奈良先端大 情報科学研究科
16. マイコンと機械学習を使って行動認識システムを作ろう
16. マイコンと機械学習を使って行動認識システムを作ろう
奈良先端大 情報科学研究科
15. テレイグジスタンスシステムを制作してみよう
15. テレイグジスタンスシステムを制作してみよう
奈良先端大 情報科学研究科
14. ビデオシースルーHMDで視覚拡張の世界を体感しよう
14. ビデオシースルーHMDで視覚拡張の世界を体感しよう
奈良先端大 情報科学研究科
19. 生物に学ぶ人工知能とロボット制御
19. 生物に学ぶ人工知能とロボット制御
奈良先端大 情報科学研究科
13. SDRで学ぶ無線通信
13. SDRで学ぶ無線通信
奈良先端大 情報科学研究科
18. 計測に基づいた写実的なコンピュータグラフィクスの生成法
18. 計測に基づいた写実的なコンピュータグラフィクスの生成法
奈良先端大 情報科学研究科
21. 人の動作・行動センシングに基づく拡張現実感システムの開発
21. 人の動作・行動センシングに基づく拡張現実感システムの開発
奈良先端大 情報科学研究科
20. 友好的関係を構築する人と対話ロボットのコミュニケーション技術開発
20. 友好的関係を構築する人と対話ロボットのコミュニケーション技術開発
奈良先端大 情報科学研究科
9. マイコンと機械学習を使って行動認識システムを作ろう
9. マイコンと機械学習を使って行動認識システムを作ろう
奈良先端大 情報科学研究科
6. 生物に学ぶ人工知能とロボット制御
6. 生物に学ぶ人工知能とロボット制御
奈良先端大 情報科学研究科
14. モバイルエージェントによる並列分散学習システムの構築
14. モバイルエージェントによる並列分散学習システムの構築
奈良先端大 情報科学研究科
17. 100台の小型ロボットを協調させよう
17. 100台の小型ロボットを協調させよう
奈良先端大 情報科学研究科
5. ミニ・スーパコンピュータを自作しよう!
5. ミニ・スーパコンピュータを自作しよう!
奈良先端大 情報科学研究科
Mehr von 奈良先端大 情報科学研究科
(20)
テレコミュニケーションを支援してみよう
テレコミュニケーションを支援してみよう
マイコンと機械学習を使って行動認識システムを作ろう
マイコンと機械学習を使って行動認識システムを作ろう
5G時代を支えるNFVによるネットワーク最適設計
5G時代を支えるNFVによるネットワーク最適設計
21.Raspberry Piを用いたIoTアプリの開発
21.Raspberry Piを用いたIoTアプリの開発
20. 地理ビッグデータ利活用: リスク予測型自動避難誘導,地理的リスク分析
20. 地理ビッグデータ利活用: リスク予測型自動避難誘導,地理的リスク分析
11.実装の脆弱性を利用して強力な暗号を解読してみよう!
11.実装の脆弱性を利用して強力な暗号を解読してみよう!
8. ミニ・スーパコンピュータを自作しよう!
8. ミニ・スーパコンピュータを自作しよう!
16. マイコンと機械学習を使って行動認識システムを作ろう
16. マイコンと機械学習を使って行動認識システムを作ろう
15. テレイグジスタンスシステムを制作してみよう
15. テレイグジスタンスシステムを制作してみよう
14. ビデオシースルーHMDで視覚拡張の世界を体感しよう
14. ビデオシースルーHMDで視覚拡張の世界を体感しよう
19. 生物に学ぶ人工知能とロボット制御
19. 生物に学ぶ人工知能とロボット制御
13. SDRで学ぶ無線通信
13. SDRで学ぶ無線通信
18. 計測に基づいた写実的なコンピュータグラフィクスの生成法
18. 計測に基づいた写実的なコンピュータグラフィクスの生成法
21. 人の動作・行動センシングに基づく拡張現実感システムの開発
21. 人の動作・行動センシングに基づく拡張現実感システムの開発
20. 友好的関係を構築する人と対話ロボットのコミュニケーション技術開発
20. 友好的関係を構築する人と対話ロボットのコミュニケーション技術開発
9. マイコンと機械学習を使って行動認識システムを作ろう
9. マイコンと機械学習を使って行動認識システムを作ろう
6. 生物に学ぶ人工知能とロボット制御
6. 生物に学ぶ人工知能とロボット制御
14. モバイルエージェントによる並列分散学習システムの構築
14. モバイルエージェントによる並列分散学習システムの構築
17. 100台の小型ロボットを協調させよう
17. 100台の小型ロボットを協調させよう
5. ミニ・スーパコンピュータを自作しよう!
5. ミニ・スーパコンピュータを自作しよう!
コードレビューを通じて行われるコーディングスタイル修正の分析
1.
コードレビューを通じて行われる コーディングスタイル修正の分析 上田 裕己1,伊原 彰紀2,石尾
隆1 ,松本 健一1 1奈良先端科学技術大学院大学 2和歌山大学 第25回 ソフトウェア工学の基礎ワークショップ FOSE2018
2.
発表のあらまし • 背景:コードレビュープロセスとスタイル修正 • 分析:
レビューでのスタイル修正の調査 RQ1: 変更の分布・内容 RQ2: ツールによる修正効率 • 自動修正に向けた修正事例の収集 2
3.
背景: コードレビューのプロセス 開発者 レビューア 3 投稿 プロジェクト -
i=key + i=dic[“key”] パッチ
4.
背景: コードレビューのプロセス 開発者 レビューア 4 投稿 プロジェクト もう少しよくなりそう です 検証・修正提案 -
i=key + i=dic[“key”] パッチ
5.
背景: コードレビューのプロセス 開発者 レビューア 5 投稿 プロジェクト OK! 適用 -
i=key + i=dic[“key”] 検証・修正提案 - i=key + i=dic.get(“key”) パッチ パッチ
6.
問題: レビューア 一人あたりが 週に6時間を消費する 開発者
レビューア 6 投稿 プロジェクト 適用 - i=key + i=dic[“key”] 検証・修正提案 - i=key + i=dic.get(“key”) レビューア一人あたりが週に6時間を消費する パッチ パッチ 検証・修正提案 検証・修正提案
7.
最終目標:コスト削減のため レビュー投稿前に修正 7 開発者 レビューア投稿 修正修正ツール -
i=key + i=dic[“key”] - i=key + i=dic.get(“key”)
8.
動作に影響しない(スタイル等)修正が コードレビューで重要 Microsoftが従業員873人にコードレビューの目的をイン タビュー, レビューコメントから分析[1] 8 [1] Alberto
Bacchelli and Christian Bird. Expectations, outcomes, and challenges of modern code review. In Proc. ICSE’13, pp. 712–721
9.
発表内容: 自動スタイル修正に向けて 9 スタイル修正の 内容理解 スタイル修正事例 の収集 自動スタイル修正 RQ1, 2 最終目標 追加分析
10.
分析アプローチ: レビューを通した修正内容の理解 開発者 レビューア 10 投稿 プロジェクト 適用 検証・修正提案 -
i=key + i=dic[“key”] - i=key + i=dic.get(“key”) RQ1:スタイルの問題はどの程度検出されるか? RQ2:静的解析ツールを用いることでスタイルの 問題をコードレビュー投稿前に検出可能か?
11.
分析対象: レビューを通したパッチ修正差分 開発者 レビューア 11 投稿 プロジェクト 適用 検証・修正提案 投稿直後と適用時 のパッチペア差分 -
i=key + i=dic[“key”] - i=key + i=dic.get(“key”) - i=dic[“key”] + i=dic.get(“key”)
12.
スタイル変更分類手法 パッチペア(変更内容)の差分から 変更チャンクを分類 12 - if i␣==␣0: +
if i==0: break - elif i == 1: - continue + elif j == 1: + return - if i␣==␣0: + if i==0: - elif i == 1: - continue + elif j == 1: + return パッチペアの差分 1チャンク 1チャンク
13.
スタイル変更分類手法 13 スタイル変更? Yes No Yes No - if i␣==␣0: +
if i==0: break - elif i == 1: - continue + elif j == 1: + return - if i␣==␣0: + if i==0: - elif i == 1: - continue + elif j == 1: + return パッチペアの差分 1チャンク 1チャンク パッチペア(変更内容)の差分から 変更チャンクを分類
14.
対象データセット 14 プロジェクト OpenStack 開発言語 Python3 期間
2011-2013 # パッチ数 173,749 件 # 対象パッチ数 382 件 # 対象チャンク数 981 件 静的解析ツール Pylint
15.
RQ1: スタイルの問題はどの程度検出 されるか? 15 変更チャンク981件 機能に影響のある修正 52.0% (510件) スタイル修正 48.0%
(471件)
16.
RQ1: スタイルの問題はどの程度検出 されるか? 16 変更チャンク981件 機能に影響のある修正 52.0% (510件) スタイル修正 48.0%
(471件) コードの改善が重要という 開発者の感覚は正しかった
17.
RQ1: スタイルの問題はどの程度検出 されるか? 17 文 字 列 の 修 正 動作に影響しない インデント (タブ) 164件 空 白 削 除 変更チャンク981件 その他 241件 機能に影響のある修正 52.0% (510件) スタイル修正 48.0%
(471件) 使 用 変 数 変 更
18.
RQ1: スタイルの問題はどの程度検出 されるか? 18 機能に影響のある修正 52.0% (510件) スタイル修正 48.0%
(471件) 変更チャンク981件 約半数がスタイル修正 一部は現状の自動修正が困難 文 字 列 の 修 正 動作に影響しない インデント (タブ) 164件 空 白 削 除 その他 241件 使 用 変 数 変 更
19.
分析アプローチ: スタイル修正の内容を調査 19 修正 981件 スタイル修正 471件 •
RQ1:スタイルの問題はどの程度検出されるか? 約半数がスタイル修正(一部は自動修正が困難)
20.
分析アプローチ: スタイル修正の内容を調査 20 スタイル修正 471件 検出可能な スタイル修正 ???件 • RQ1:スタイルの問題はどの程度検出されるか? •
RQ2:静的解析ツールを用いることでスタイルの問題 をコードレビュー投稿前に検出可能か?
21.
スタイル修正の現状: ツールによって一部自動検出可能 21 FOO=0 print(“var = ”
+ FOO) foo␣=␣0 print(“var =”, foo) 自動検出可能な例: • 命名規則違反 • 空白の過不足 • 文字列のフォーマット Pythonではpylint, pep8などが既存のルール違反を検出
22.
スタイル修正の現状: 開発者の経験が必要な修正が存在 22 - i=dic[“key”] +
i=dic.get(“key”) 修正目的:存在しない辞書アクセスに対して エラーではなくNoneを返す - assertEqual(x,None) 修正目的:可読性の向上とカスタムクラスへの対応 + assertIsNone(x)
23.
分析アプローチ: スタイル修正の内容を調査 23 • RQ1:スタイルの問題はどの程度検出されるか? • RQ2:静的解析ツールを用いることでスタイルの問題 をコードレビュー投稿前に検出可能か? 修正
981件 スタイル修正 471件 検出可能な スタイル修正 132件
24.
分析アプローチ: スタイル修正の内容を調査 24 • RQ1:スタイルの問題はどの程度検出されるか? • RQ2:静的解析ツールを用いることでスタイルの問題 をコードレビュー投稿前に検出可能か? 修正
981件 スタイル修正 471件 検出可能な スタイル修正 132件 開発者にツール利用を促すことで 13%は検証コストを削減できる
25.
頻繁に出現した 検出可能なスタイル修正 25 Missing-docstring (コメントがないクラス,関数) Invalid-name(命名規則違反) Bad-continuation(読みにくいインデント) - FOO
= 0 - smallCase = 1 + foo = 0 + small_case = 1 - if foo > 0 and - foo < 1: + if foo > 0 and + ␣␣␣␣foo < 1:
26.
追加分析: 自動化,学習のための スタイル修正事例収集 26 スタイル修正の 内容理解 スタイル修正事例 の収集 自動スタイル修正 RQ1, 2 最終目標 追加分析
27.
編集距離を利用した スタイル修正事例の収集 • 仮定:編集距離が短いものはスタイル修正 27 編集距離が1以下の修正のうち89%は スタイル修正 編集距離=1 編集距離=2 - if␣(i␣==␣0){ + { -
if (i == 0){ + if (j == 0){ - if (i == 0){ + if (j == 1){ 編集距離=0 (空白,改行のみ)
28.
変更トークンごとの編集距離 28 print(“String”) if (i
== 0){ 文字列リテラル 識別子 数字リテラル 記号 編集距離=1 編集距離=2 if (i == 0){ if (i == 0){ - if␣(i␣==␣0){ + ␣␣if(i==0)n { - if (i == 0){ + if (j == 0){ - if (i == 0){ + if (j == 1){ 変更トークン 編集距離 編集距離=0 (空白,改行のみ)
29.
スタイル修正の収集精度 29 編集距離が3以下の変更を スタイル修正として収集可能 精度 0.89 再現率 0.62 F値
0.73 • 文字列リテラルの変更 • 編集距離 ≦ 1 精度 0.47 再現率 0.28 F値 0.35 精度 0.71 再現率 0.75 F値 0.73 • 編集距離 ≦ 3
30.
スタイル修正を活用した今後の展望 • スタイル修正の修正パターンの検出 30 - self.assertEquals(x,
y) + self.assertEqual(x, y) • 自動スタイル修正 開発者 レビューア投稿 修正修正ツール 例:Pythonのバージョン更新による仕様変化
31.
まとめ 31
Jetzt herunterladen