oss開発におけるレビュアー間の合意形成の分析
DESCRIPTION
TRANSCRIPT
OSS開発におけるレビュアー間の開発におけるレビュアー間の開発におけるレビュアー間の開発におけるレビュアー間の
合意形成の分析合意形成の分析合意形成の分析合意形成の分析
奈良先端科学技術大学院大学奈良先端科学技術大学院大学奈良先端科学技術大学院大学奈良先端科学技術大学院大学
○林宏徳林宏徳林宏徳林宏徳, 伊原彰紀伊原彰紀伊原彰紀伊原彰紀, 松本健一松本健一松本健一松本健一
背景背景背景背景
• OSSユーザはバグを発見した時、OSSコミュニティに報告する
2
バグバグバグバグ直して!!
OSSコミュニティ
背景背景背景背景
• OSSユーザはバグを発見した時、OSSコミュニティに報告する
• 大規模OSSコミュニティには日々大量のバグ報告が届く
例)Mozilla Project: 平均300件/日
• 開発者は大量のバグに対して,効率の良い修正を行う必要がある
3
OSSコミュニティ
・・・。
バグバグバグバグ修正修正修正修正プロセスプロセスプロセスプロセス
4
割り当て 検証修正 更新報告
報告者 管理人 修正者 レビュアー プロダクト
平均149日
バグバグバグバグ修正プロセス修正プロセス修正プロセス修正プロセス
5
割り当て 検証修正 更新報告
報告者 管理人 修正者 レビュアー プロダクト
コードの誤りを発見発見発見発見
できないできないできないできない場合がある
平均149日
バグバグバグバグ修正プロセス修正プロセス修正プロセス修正プロセス
6
割り当て
再修正
修正 更新報告
不具合の修正が不十分不十分不十分不十分/不適切不適切不適切不適切な場合
報告者 管理人 修正者 プロダクトレビュアー
修正コストの増大
(平均,149日→ 371 日)
検証
検証(レビュー)検証(レビュー)検証(レビュー)検証(レビュー)
• 大規模な開発ではひとつのバグ修正に複数人のレビュ
アーが関わる[Peter, 2013]
• OSS開発における協調作業には困難な側面もある[Abreu, 2009]
7
OK!!
OK!! OK!!修正しました
修正者 レビュアー プロダクト
1111. 修正が修正が修正が修正が承認される承認される承認される承認される場合場合場合場合
検証(レビュー)検証(レビュー)検証(レビュー)検証(レビュー)
• 大規模な開発ではひとつのバグ修正に複数人のレビュ
アーが関わる[Peter, 2013]
• OSS開発における協調作業には困難な側面もある[Abreu, 2009]
8
No!!
No!! No!!
修正者 レビュアー プロダクト
修正しました
2222. 修正が修正が修正が修正が否決される否決される否決される否決される場合場合場合場合
検証(レビュー)検証(レビュー)検証(レビュー)検証(レビュー)
• 大規模な開発ではひとつのバグ修正に複数人のレビュ
アーが関わる[Peter, 2013]
• OSS開発における協調作業には困難な側面もある[Abreu, 2009]
9
OK!!
OK!! No!!
修正者 レビュアー プロダクト
修正しました
3. 意見意見意見意見がががが分かれる分かれる分かれる分かれる場合場合場合場合
検証(レビュー)検証(レビュー)検証(レビュー)検証(レビュー)
• 本来は正しい意見を無視してプロダクトを更新した場合,再修正が起こると予想される
10
OK
OK No!!
レビュアー修正者 プロダクト
仮説: 合意形成が得られなかったレビューには合意形成が得られなかったレビューには合意形成が得られなかったレビューには合意形成が得られなかったレビューには
再修正が多く発生する再修正が多く発生する再修正が多く発生する再修正が多く発生する
本研究のねらいと本研究のねらいと本研究のねらいと本研究のねらいとRQ
GoalGoalGoalGoal
• 再修正の発生を防ぐために,合意形成に着目し,レビュアーの活動
を理解する
Research QuestionsResearch QuestionsResearch QuestionsResearch Questions
1.1.1.1. 何人のレビュアー何人のレビュアー何人のレビュアー何人のレビュアーがひとつのバグ修正に関わっているか?
2. レビュアー間の合意形成は行われているか?合意形成は行われているか?合意形成は行われているか?合意形成は行われているか?
3. レビュアー間の合意形成と合意形成と合意形成と合意形成とバグバグバグバグの再修正は関係しているか?の再修正は関係しているか?の再修正は関係しているか?の再修正は関係しているか?
11
分析分析分析分析
12
分析対象分析対象分析対象分析対象
13
Gerrit Code Reviewの一画
面
プロジェクト:Openstack project
レビューツール: Gerrit Code Review
期間 :2010-2012
データ:2,539 件のレビュー記録
レビュアーは各自,投稿されたコードに
評価を付けることができる
• コアレビュアー: [+2, +1, 0, -1, -2]
• 一般レビュアー: [ +1, 0, -1 ]
RQ1: 何人のレビュアーがひとつのバグ修正何人のレビュアーがひとつのバグ修正何人のレビュアーがひとつのバグ修正何人のレビュアーがひとつのバグ修正
に関わっているか?に関わっているか?に関わっているか?に関わっているか?
動機動機動機動機
• どのように合意形成が行われているのかを明らかにする
分析方法分析方法分析方法分析方法
• 各レビューに関する以下の
基本統計量を計測する
• ファイル数
• レビュアー数
• レビュアーの発言数
14
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・
・・・・
何ファイルが
対象?
何人?
どれくらい議論している?
RQ1: 何人のレビュアーがひとつの何人のレビュアーがひとつの何人のレビュアーがひとつの何人のレビュアーがひとつのバグバグバグバグ修正修正修正修正
に関わっているか?に関わっているか?に関わっているか?に関わっているか?
• 1111----3333ファイルファイルファイルファイルが一度にレビューされる
• およそおよそおよそおよそ4444人人人人のレビュアーがひとつの不具合修正に関わる
15
最小値 中央値 平均値 最大値
0 1 2.93 164
1 4 4.41 18
コメント数 0 4 6.37 62
ファイル数
レビュアー数
RQ2: レビュアー間の合意形成は行われているレビュアー間の合意形成は行われているレビュアー間の合意形成は行われているレビュアー間の合意形成は行われている
かかかか?
動機動機動機動機
• レビューにおける合意形成の有無について理解する
分析方法分析方法分析方法分析方法
1. 承認済みのレビューを対象に,各レビュアーの評価を収集する
2.2.2.2. 合意形成合意形成合意形成合意形成成功成功成功成功////失敗失敗失敗失敗に各レビューを分類する
16
OK!!
OK!!
OK!! OK!!
OK!!
No!!No!!No!!No!!
合意形成合意形成合意形成合意形成 成功成功成功成功:全ての評価に
負の評価(“-1”or “-2”)を含まない合意形成合意形成合意形成合意形成失敗失敗失敗失敗:評価にひとつでも
負の評価(“-1”or “-2”)を含む
RQ2: レビュアー間の合意形成は行われているレビュアー間の合意形成は行われているレビュアー間の合意形成は行われているレビュアー間の合意形成は行われている
かかかか?
• 90%以上のレビューは合意に基づいているが,合意形成が行われない
ままプロダクトに修正が反映されることもある
17合意形成失敗失敗失敗失敗合意形成成功成功成功成功
レビュー件数
動機動機動機動機
• 合意形成の観点から,再修正の発生を防止する手がかり手がかり手がかり手がかりを調査する
分析方法分析方法分析方法分析方法
• RQ2の分析で分類されたレビューを“再修正の有無”について再度分
類する
18
OK!!
OK!!
OK!!
No!!
再修正あり再修正あり再修正あり再修正あり
再修正なし再修正なし再修正なし再修正なし
再修正あり再修正あり再修正あり再修正あり
再修正なし再修正なし再修正なし再修正なし
合意形成成功成功成功成功 合意形成失敗失敗失敗失敗
RQ3: レビュアー間の合意形成と不具合のレビュアー間の合意形成と不具合のレビュアー間の合意形成と不具合のレビュアー間の合意形成と不具合の
再修正は関係しているか再修正は関係しているか再修正は関係しているか再修正は関係しているか?
L
RQ3: レビュアー間の合意形成と不具合のレビュアー間の合意形成と不具合のレビュアー間の合意形成と不具合のレビュアー間の合意形成と不具合の
再修正は関係しているか再修正は関係しているか再修正は関係しているか再修正は関係しているか?
• 関係あり.再修正の発生率に有意な差(p>0.01)がみられた
19
No!!OK!! OK!!
15.81%が再修正 25.00%が再修正
合意形成成功成功成功成功 合意形成失敗失敗失敗失敗
OK!!
OK!!
OK!!
議論内容の紹介議論内容の紹介議論内容の紹介議論内容の紹介
20
合意合意合意合意形成に形成に形成に形成に成功成功成功成功した議論の例した議論の例した議論の例した議論の例
21
実際の議論 (ID: 5749)
パッチを投稿しました
Alex (修正者)
これで良いと思います
Johannes(レビュアー)
ダメダメダメダメです.デシリアライズにまだ
問題があるように思えます(以下略
Vish (レビュアー)
これならこれならこれならこれならOKです!です!です!です!
Vish
パッチを再度投稿再度投稿再度投稿再度投稿しました
Alex
� ֵ◌
合意合意合意合意形成に形成に形成に形成に成功成功成功成功した議論の例した議論の例した議論の例した議論の例
22
実際の議論 (ID: 5749)
パッチを投稿しました
Alex (修正者)
これで良いと思います
Johannes(レビュアー)
ダメダメダメダメです.デシリアライズにまだ
問題があるように思えます(以下略
Vish (レビュアー)
これならこれならこれならこれならOKです!です!です!です!
Vish
パッチを再度投稿再度投稿再度投稿再度投稿しました
Alex
再修正なし再修正なし再修正なし再修正なし
再修正あり再修正あり再修正あり再修正あり
合意合意合意合意形成が形成が形成が形成が失敗失敗失敗失敗した議論の例した議論の例した議論の例した議論の例
23実際の議論 (ID: 5220)
パッチを投稿しました
Peng (修正者)この書き方は良くない
です.直しましょう直しましょう直しましょう直しましょう.
Willian(レビュアー)
このこのこのこのコードでコードでコードでコードでOKですですですです
Salvatore (レビュアー)
Peng
過去にこのやり方でやっているし,
大丈夫じゃないですか?
私にはなぜそうするのか理解で
きません.こうなったら他の人
の意見を聞いてみましょう
Willian
合意合意合意合意形成が形成が形成が形成が失敗失敗失敗失敗した議論の例した議論の例した議論の例した議論の例
24実際の議論 (ID: 5220)
パッチを投稿しました
Peng (修正者)この書き方は良くない
です.直しましょう直しましょう直しましょう直しましょう.
Willian(レビュアー)
このこのこのこのコードでコードでコードでコードでOKですですですです
Salvatore (レビュアー)
Peng
過去にこのやり方でやっているし,
大丈夫じゃないですか?
私にはなぜそうするのか理解で
きません.こうなったら他の人
の意見を聞いてみましょう
Willian
再修正なし再修正なし再修正なし再修正なし
再修正あり再修正あり再修正あり再修正あり
まとめまとめまとめまとめ
25
衠 ֳ◌
まとめまとめまとめまとめ
26
割り当て レビュー
再修正
修正 更新報告
報告者 管理人 修正者 プロダクトレビュアー
OK!No!!
目的目的目的目的:修正コスト増大を防ぐため,再修正を防ぐヒントを得る
分析分析分析分析:レビュアーの合意形成を分析した
結果結果結果結果:レビュアーの合意形成の失敗は再修正の予兆合意形成の失敗は再修正の予兆合意形成の失敗は再修正の予兆合意形成の失敗は再修正の予兆である
OK!
展望展望展望展望
• 分析分析分析分析
• レビュアー間の議論を分類
• 対象プロジェクトの追加
• 合意形成の支援合意形成の支援合意形成の支援合意形成の支援
• ツールの作成
• 議論ルールの作成
27
냰�
DISCUSS Your Review DISCUSS Your Review DISCUSS Your Review DISCUSS Your Review until Reaching Consensus!!until Reaching Consensus!!until Reaching Consensus!!until Reaching Consensus!!
Thank you.