Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
Developers Summit
20110909 品質シンポジウム2011発表資料
Kenichiro Nakajima
【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK
Kotaro Ogino
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
Hironori Washizaki
Devlove2012 どうしたら良いシステムが作れるのか
Yusuke Suzuki
2010 電子情報通信学会論文誌-要求変更によるソースコードへのインパクトを分析するシステムの開発と評価
n-yuki
テストを育てる。テストを支える(Ultimate Agilist Tokyo)
H Iseri
SQuBOKガイドV2で測る日本のソフトウェア品質技術力
Keizo Tatsumi
1
of
31
Top clipped slide
コードレビューを通じて行われるコーディングスタイル修正の分析
Dec. 10, 2018
•
0 likes
1 likes
×
Be the first to like this
Show More
•
1,796 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Science
上田 裕己1,伊原 彰紀2,石尾 隆1 ,松本 健一1 1奈良先端科学技術大学院大学 2和歌山大学
奈良先端大 情報科学研究科
Follow
奈良先端大 情報科学研究科
Advertisement
Advertisement
Advertisement
Recommended
ISO/IEC DIS 20246 についての(ごく簡単な)説明
しょうご すずき
3.1K views
•
39 slides
『アプリケーション アーキテクチャ ガイド2.0』のガイド
Kentaro Inomata
918 views
•
17 slides
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
Shuji Morisaki
1.6K views
•
31 slides
po-2. Python プログラミングの基本
kunihikokaneko1
235 views
•
57 slides
Klocworkのご紹介
Masaru Horioka
2.1K views
•
38 slides
pf-1. Python,Google Colaboratory
kunihikokaneko1
684 views
•
38 slides
More Related Content
Similar to コードレビューを通じて行われるコーディングスタイル修正の分析
(20)
【18-B-4】ソースコード品質、大丈夫ですか? ~静的検証のススメ~
Developers Summit
•
4.4K views
20110909 品質シンポジウム2011発表資料
Kenichiro Nakajima
•
621 views
【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK
Kotaro Ogino
•
6.4K views
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
Hironori Washizaki
•
5.6K views
Devlove2012 どうしたら良いシステムが作れるのか
Yusuke Suzuki
•
7.3K views
2010 電子情報通信学会論文誌-要求変更によるソースコードへのインパクトを分析するシステムの開発と評価
n-yuki
•
388 views
テストを育てる。テストを支える(Ultimate Agilist Tokyo)
H Iseri
•
4.8K views
SQuBOKガイドV2で測る日本のソフトウェア品質技術力
Keizo Tatsumi
•
1.5K views
Project Management Plan Sample Creative Content Lab Tokyo
CreativeContentLabTo
•
415 views
メトリクスによるソフトウェア品質評価・改善および製品品質実態
Hironori Washizaki
•
4.7K views
Samurai CodingなどにみるゲームAIプログラミングコンテストのための原則とパターン
Hironori Washizaki
•
1.1K views
6万行の TypeScript 移行とその後
Shingo Sasaki
•
663 views
20210907 Qlik Tech Talk Snowflake with Qlik Best Practices
QlikPresalesJapan
•
2.2K views
SQuBOKの変遷 (SQuBOK V3発行記念イベント)
Keizo Tatsumi
•
527 views
Shibya.trac #2: TracとTestLinkの合わせ技
Toshiyuki Kawanishi
•
4.1K views
DevOps時代の開発環境と現場体験 [#cmdevio2015]
智治 長沢
•
6.5K views
世界に目を向けよう - ASTER国際連携活動事例(JaSST'15 tokyo)
Keizo Tatsumi
•
1.1K views
アジャイルソフトウェア開発におけるテスティングの課題およびその解決アプローチ
Tetsuya Kouno
•
7.8K views
クラウド時代にこそ求められるIt部門の役割
Yusuke Oi
•
2.4K views
テスト駆動&オブジェクト指向ハンズオン
yuichi_kuwahara
•
628 views
More from 奈良先端大 情報科学研究科
(20)
テレコミュニケーションを支援してみよう
奈良先端大 情報科学研究科
•
562 views
マイコンと機械学習を使って行動認識システムを作ろう
奈良先端大 情報科学研究科
•
345 views
5G時代を支えるNFVによるネットワーク最適設計
奈良先端大 情報科学研究科
•
328 views
21.Raspberry Piを用いたIoTアプリの開発
奈良先端大 情報科学研究科
•
538 views
20. 地理ビッグデータ利活用: リスク予測型自動避難誘導,地理的リスク分析
奈良先端大 情報科学研究科
•
395 views
11.実装の脆弱性を利用して強力な暗号を解読してみよう!
奈良先端大 情報科学研究科
•
336 views
8. ミニ・スーパコンピュータを自作しよう!
奈良先端大 情報科学研究科
•
618 views
16. マイコンと機械学習を使って行動認識システムを作ろう
奈良先端大 情報科学研究科
•
726 views
15. テレイグジスタンスシステムを制作してみよう
奈良先端大 情報科学研究科
•
310 views
14. ビデオシースルーHMDで視覚拡張の世界を体感しよう
奈良先端大 情報科学研究科
•
325 views
19. 生物に学ぶ人工知能とロボット制御
奈良先端大 情報科学研究科
•
223 views
13. SDRで学ぶ無線通信
奈良先端大 情報科学研究科
•
211 views
18. 計測に基づいた写実的なコンピュータグラフィクスの生成法
奈良先端大 情報科学研究科
•
232 views
21. 人の動作・行動センシングに基づく拡張現実感システムの開発
奈良先端大 情報科学研究科
•
683 views
20. 友好的関係を構築する人と対話ロボットのコミュニケーション技術開発
奈良先端大 情報科学研究科
•
367 views
9. マイコンと機械学習を使って行動認識システムを作ろう
奈良先端大 情報科学研究科
•
799 views
6. 生物に学ぶ人工知能とロボット制御
奈良先端大 情報科学研究科
•
546 views
14. モバイルエージェントによる並列分散学習システムの構築
奈良先端大 情報科学研究科
•
293 views
17. 100台の小型ロボットを協調させよう
奈良先端大 情報科学研究科
•
351 views
5. ミニ・スーパコンピュータを自作しよう!
奈良先端大 情報科学研究科
•
779 views
Advertisement
Recently uploaded
(20)
①【汉堡大学毕业证文凭学位证书|工艺完美复刻】
vgh215w
•
2 views
在哪里可以做《帝国理工学院文凭证书|毕业证》
1232hdjk
•
2 views
在哪里可以做《西雅图大学文凭证书|毕业证》
20das12
•
2 views
water_quality.pptx
Ryuji Dohaku
•
14 views
留学学分不够办理《美国艾德菲大学假文凭毕业证》
250dsacd
•
2 views
在哪里可以做《田纳西大学文凭证书|毕业证》
20das12
•
2 views
☀️【南达科他大学毕业证成绩单留学生首选】
2125nuh
•
2 views
makoto shing (stability ai) - image model fine-tuning - wandb_event_230525.pdf
Akira Shibata
•
244 views
LLM Webinar - シバタアキラ to share.pdf
Akira Shibata
•
107 views
☀️《Sunderland毕业证仿真》
DAS54SA
•
2 views
留学生案例《卡内基梅隆大学学位毕业证书和学士文凭》
15sdasd
•
2 views
留学生案例《利兹大学学位毕业证书和学士文凭》
36dsahj
•
2 views
留信网认证可查【奥克兰商学院文凭证书毕业证购买】
ihh14ds
•
2 views
本科/硕士《法国普尔潘工程师学校大学毕业证成绩单》
21dadasda
•
3 views
★可查可存档〖制作东伦敦大学文凭证书毕业证〗
mmmm282537
•
3 views
在哪里可以做《怀俄明大学文凭证书|毕业证》
lobd15
•
2 views
☀️【威得恩大学毕业证成绩单留学生首选】
25mjhd12
•
2 views
留学生案例《皇家霍洛威学院学位毕业证书和学士文凭》
36dsahj
•
2 views
【ブログ記事用】コルテバ事例紹介:課題 vs 導入効果.pdf
IsabelWong26
•
35 views
《林肯大学毕业证|学位证书校内仿真版本》
w124dsa
•
2 views
コードレビューを通じて行われるコーディングスタイル修正の分析
コードレビューを通じて行われる コーディングスタイル修正の分析 上田 裕己1,伊原 彰紀2,石尾
隆1 ,松本 健一1 1奈良先端科学技術大学院大学 2和歌山大学 第25回 ソフトウェア工学の基礎ワークショップ FOSE2018
発表のあらまし • 背景:コードレビュープロセスとスタイル修正 • 分析:
レビューでのスタイル修正の調査 RQ1: 変更の分布・内容 RQ2: ツールによる修正効率 • 自動修正に向けた修正事例の収集 2
背景: コードレビューのプロセス 開発者 レビューア 3 投稿 プロジェクト -
i=key + i=dic[“key”] パッチ
背景: コードレビューのプロセス 開発者 レビューア 4 投稿 プロジェクト もう少しよくなりそう です 検証・修正提案 -
i=key + i=dic[“key”] パッチ
背景: コードレビューのプロセス 開発者 レビューア 5 投稿 プロジェクト OK! 適用 -
i=key + i=dic[“key”] 検証・修正提案 - i=key + i=dic.get(“key”) パッチ パッチ
問題: レビューア 一人あたりが 週に6時間を消費する 開発者
レビューア 6 投稿 プロジェクト 適用 - i=key + i=dic[“key”] 検証・修正提案 - i=key + i=dic.get(“key”) レビューア一人あたりが週に6時間を消費する パッチ パッチ 検証・修正提案 検証・修正提案
最終目標:コスト削減のため レビュー投稿前に修正 7 開発者 レビューア投稿 修正修正ツール -
i=key + i=dic[“key”] - i=key + i=dic.get(“key”)
動作に影響しない(スタイル等)修正が コードレビューで重要 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 スタイル修正の 内容理解 スタイル修正事例 の収集 自動スタイル修正 RQ1, 2 最終目標 追加分析
分析アプローチ: レビューを通した修正内容の理解 開発者 レビューア 10 投稿 プロジェクト 適用 検証・修正提案 -
i=key + i=dic[“key”] - i=key + i=dic.get(“key”) RQ1:スタイルの問題はどの程度検出されるか? RQ2:静的解析ツールを用いることでスタイルの 問題をコードレビュー投稿前に検出可能か?
分析対象: レビューを通したパッチ修正差分 開発者 レビューア 11 投稿 プロジェクト 適用 検証・修正提案 投稿直後と適用時 のパッチペア差分 -
i=key + i=dic[“key”] - i=key + i=dic.get(“key”) - i=dic[“key”] + i=dic.get(“key”)
スタイル変更分類手法 パッチペア(変更内容)の差分から 変更チャンクを分類 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 スタイル変更? 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 プロジェクト OpenStack 開発言語 Python3 期間
2011-2013 # パッチ数 173,749 件 # 対象パッチ数 382 件 # 対象チャンク数 981 件 静的解析ツール Pylint
RQ1: スタイルの問題はどの程度検出 されるか? 15 変更チャンク981件 機能に影響のある修正 52.0% (510件) スタイル修正 48.0%
(471件)
RQ1: スタイルの問題はどの程度検出 されるか? 16 変更チャンク981件 機能に影響のある修正 52.0% (510件) スタイル修正 48.0%
(471件) コードの改善が重要という 開発者の感覚は正しかった
RQ1: スタイルの問題はどの程度検出 されるか? 17 文 字 列 の 修 正 動作に影響しない インデント (タブ) 164件 空 白 削 除 変更チャンク981件 その他 241件 機能に影響のある修正 52.0% (510件) スタイル修正 48.0%
(471件) 使 用 変 数 変 更
RQ1: スタイルの問題はどの程度検出 されるか? 18 機能に影響のある修正 52.0% (510件) スタイル修正 48.0%
(471件) 変更チャンク981件 約半数がスタイル修正 一部は現状の自動修正が困難 文 字 列 の 修 正 動作に影響しない インデント (タブ) 164件 空 白 削 除 その他 241件 使 用 変 数 変 更
分析アプローチ: スタイル修正の内容を調査 19 修正 981件 スタイル修正 471件 •
RQ1:スタイルの問題はどの程度検出されるか? 約半数がスタイル修正(一部は自動修正が困難)
分析アプローチ: スタイル修正の内容を調査 20 スタイル修正 471件 検出可能な スタイル修正 ???件 • RQ1:スタイルの問題はどの程度検出されるか? •
RQ2:静的解析ツールを用いることでスタイルの問題 をコードレビュー投稿前に検出可能か?
スタイル修正の現状: ツールによって一部自動検出可能 21 FOO=0 print(“var = ”
+ FOO) foo␣=␣0 print(“var =”, foo) 自動検出可能な例: • 命名規則違反 • 空白の過不足 • 文字列のフォーマット Pythonではpylint, pep8などが既存のルール違反を検出
スタイル修正の現状: 開発者の経験が必要な修正が存在 22 - i=dic[“key”] +
i=dic.get(“key”) 修正目的:存在しない辞書アクセスに対して エラーではなくNoneを返す - assertEqual(x,None) 修正目的:可読性の向上とカスタムクラスへの対応 + assertIsNone(x)
分析アプローチ: スタイル修正の内容を調査 23 • RQ1:スタイルの問題はどの程度検出されるか? • RQ2:静的解析ツールを用いることでスタイルの問題 をコードレビュー投稿前に検出可能か? 修正
981件 スタイル修正 471件 検出可能な スタイル修正 132件
分析アプローチ: スタイル修正の内容を調査 24 • RQ1:スタイルの問題はどの程度検出されるか? • RQ2:静的解析ツールを用いることでスタイルの問題 をコードレビュー投稿前に検出可能か? 修正
981件 スタイル修正 471件 検出可能な スタイル修正 132件 開発者にツール利用を促すことで 13%は検証コストを削減できる
頻繁に出現した 検出可能なスタイル修正 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 スタイル修正の 内容理解 スタイル修正事例 の収集 自動スタイル修正 RQ1, 2 最終目標 追加分析
編集距離を利用した スタイル修正事例の収集 • 仮定:編集距離が短いものはスタイル修正 27 編集距離が1以下の修正のうち89%は スタイル修正 編集距離=1 編集距離=2 - if␣(i␣==␣0){ + { -
if (i == 0){ + if (j == 0){ - if (i == 0){ + if (j == 1){ 編集距離=0 (空白,改行のみ)
変更トークンごとの編集距離 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 編集距離が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 - self.assertEquals(x,
y) + self.assertEqual(x, y) • 自動スタイル修正 開発者 レビューア投稿 修正修正ツール 例:Pythonのバージョン更新による仕様変化
まとめ 31
Advertisement