oss開発におけるレビュアー間の合意形成の分析

28
OSS 開発におけるレビュアー間の 開発におけるレビュアー間の 開発におけるレビュアー間の 開発におけるレビュアー間の 合意形成の分析 合意形成の分析 合意形成の分析 合意形成の分析 奈良先端科学技術大学院大学 奈良先端科学技術大学院大学 奈良先端科学技術大学院大学 奈良先端科学技術大学院大学 林宏徳 林宏徳 林宏徳 林宏徳 , 伊原彰紀 伊原彰紀 伊原彰紀 伊原彰紀 , 松本健一 松本健一 松本健一 松本健一

Upload: naistis

Post on 21-Dec-2014

266 views

Category:

Technology


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: OSS開発におけるレビュアー間の合意形成の分析

OSS開発におけるレビュアー間の開発におけるレビュアー間の開発におけるレビュアー間の開発におけるレビュアー間の

合意形成の分析合意形成の分析合意形成の分析合意形成の分析

奈良先端科学技術大学院大学奈良先端科学技術大学院大学奈良先端科学技術大学院大学奈良先端科学技術大学院大学

○林宏徳林宏徳林宏徳林宏徳, 伊原彰紀伊原彰紀伊原彰紀伊原彰紀, 松本健一松本健一松本健一松本健一

Page 2: OSS開発におけるレビュアー間の合意形成の分析

背景背景背景背景

• OSSユーザはバグを発見した時、OSSコミュニティに報告する

2

バグバグバグバグ直して!!

OSSコミュニティ

Page 3: OSS開発におけるレビュアー間の合意形成の分析

背景背景背景背景

• OSSユーザはバグを発見した時、OSSコミュニティに報告する

• 大規模OSSコミュニティには日々大量のバグ報告が届く

例)Mozilla Project: 平均300件/日

• 開発者は大量のバグに対して,効率の良い修正を行う必要がある

3

OSSコミュニティ

・・・。

Page 4: OSS開発におけるレビュアー間の合意形成の分析

バグバグバグバグ修正修正修正修正プロセスプロセスプロセスプロセス

4

割り当て 検証修正 更新報告

報告者 管理人 修正者 レビュアー プロダクト

平均149日

Page 5: OSS開発におけるレビュアー間の合意形成の分析

バグバグバグバグ修正プロセス修正プロセス修正プロセス修正プロセス

5

割り当て 検証修正 更新報告

報告者 管理人 修正者 レビュアー プロダクト

コードの誤りを発見発見発見発見

できないできないできないできない場合がある

平均149日

Page 6: OSS開発におけるレビュアー間の合意形成の分析

バグバグバグバグ修正プロセス修正プロセス修正プロセス修正プロセス

6

割り当て

再修正

修正 更新報告

不具合の修正が不十分不十分不十分不十分/不適切不適切不適切不適切な場合

報告者 管理人 修正者 プロダクトレビュアー

修正コストの増大

(平均,149日→ 371 日)

検証

Page 7: OSS開発におけるレビュアー間の合意形成の分析

検証(レビュー)検証(レビュー)検証(レビュー)検証(レビュー)

• 大規模な開発ではひとつのバグ修正に複数人のレビュ

アーが関わる[Peter, 2013]

• OSS開発における協調作業には困難な側面もある[Abreu, 2009]

7

OK!!

OK!! OK!!修正しました

修正者 レビュアー プロダクト

1111. 修正が修正が修正が修正が承認される承認される承認される承認される場合場合場合場合

Page 8: OSS開発におけるレビュアー間の合意形成の分析

検証(レビュー)検証(レビュー)検証(レビュー)検証(レビュー)

• 大規模な開発ではひとつのバグ修正に複数人のレビュ

アーが関わる[Peter, 2013]

• OSS開発における協調作業には困難な側面もある[Abreu, 2009]

8

No!!

No!! No!!

修正者 レビュアー プロダクト

修正しました

2222. 修正が修正が修正が修正が否決される否決される否決される否決される場合場合場合場合

Page 9: OSS開発におけるレビュアー間の合意形成の分析

検証(レビュー)検証(レビュー)検証(レビュー)検証(レビュー)

• 大規模な開発ではひとつのバグ修正に複数人のレビュ

アーが関わる[Peter, 2013]

• OSS開発における協調作業には困難な側面もある[Abreu, 2009]

9

OK!!

OK!! No!!

修正者 レビュアー プロダクト

修正しました

3. 意見意見意見意見がががが分かれる分かれる分かれる分かれる場合場合場合場合

Page 10: OSS開発におけるレビュアー間の合意形成の分析

検証(レビュー)検証(レビュー)検証(レビュー)検証(レビュー)

• 本来は正しい意見を無視してプロダクトを更新した場合,再修正が起こると予想される

10

OK

OK No!!

レビュアー修正者 プロダクト

仮説: 合意形成が得られなかったレビューには合意形成が得られなかったレビューには合意形成が得られなかったレビューには合意形成が得られなかったレビューには

再修正が多く発生する再修正が多く発生する再修正が多く発生する再修正が多く発生する

Page 11: OSS開発におけるレビュアー間の合意形成の分析

本研究のねらいと本研究のねらいと本研究のねらいと本研究のねらいとRQ

GoalGoalGoalGoal

• 再修正の発生を防ぐために,合意形成に着目し,レビュアーの活動

を理解する

Research QuestionsResearch QuestionsResearch QuestionsResearch Questions

1.1.1.1. 何人のレビュアー何人のレビュアー何人のレビュアー何人のレビュアーがひとつのバグ修正に関わっているか?

2. レビュアー間の合意形成は行われているか?合意形成は行われているか?合意形成は行われているか?合意形成は行われているか?

3. レビュアー間の合意形成と合意形成と合意形成と合意形成とバグバグバグバグの再修正は関係しているか?の再修正は関係しているか?の再修正は関係しているか?の再修正は関係しているか?

11

Page 12: OSS開発におけるレビュアー間の合意形成の分析

分析分析分析分析

12

Page 13: OSS開発におけるレビュアー間の合意形成の分析

分析対象分析対象分析対象分析対象

13

Gerrit Code Reviewの一画

プロジェクト:Openstack project

レビューツール: Gerrit Code Review

期間 :2010-2012

データ:2,539 件のレビュー記録

レビュアーは各自,投稿されたコードに

評価を付けることができる

• コアレビュアー: [+2, +1, 0, -1, -2]

• 一般レビュアー: [ +1, 0, -1 ]

Page 14: OSS開発におけるレビュアー間の合意形成の分析

RQ1: 何人のレビュアーがひとつのバグ修正何人のレビュアーがひとつのバグ修正何人のレビュアーがひとつのバグ修正何人のレビュアーがひとつのバグ修正

に関わっているか?に関わっているか?に関わっているか?に関わっているか?

動機動機動機動機

• どのように合意形成が行われているのかを明らかにする

分析方法分析方法分析方法分析方法

• 各レビューに関する以下の

基本統計量を計測する

• ファイル数

• レビュアー数

• レビュアーの発言数

14

・・・・・・・・・・・・

・・・・・・・・・・・・

・・・・・・・・

・・・・

何ファイルが

対象?

何人?

どれくらい議論している?

Page 15: OSS開発におけるレビュアー間の合意形成の分析

RQ1: 何人のレビュアーがひとつの何人のレビュアーがひとつの何人のレビュアーがひとつの何人のレビュアーがひとつのバグバグバグバグ修正修正修正修正

に関わっているか?に関わっているか?に関わっているか?に関わっているか?

• 1111----3333ファイルファイルファイルファイルが一度にレビューされる

• およそおよそおよそおよそ4444人人人人のレビュアーがひとつの不具合修正に関わる

15

最小値 中央値 平均値 最大値

0 1 2.93 164

1 4 4.41 18

コメント数 0 4 6.37 62

ファイル数

レビュアー数

Page 16: OSS開発におけるレビュアー間の合意形成の分析

RQ2: レビュアー間の合意形成は行われているレビュアー間の合意形成は行われているレビュアー間の合意形成は行われているレビュアー間の合意形成は行われている

かかかか?

動機動機動機動機

• レビューにおける合意形成の有無について理解する

分析方法分析方法分析方法分析方法

1. 承認済みのレビューを対象に,各レビュアーの評価を収集する

2.2.2.2. 合意形成合意形成合意形成合意形成成功成功成功成功////失敗失敗失敗失敗に各レビューを分類する

16

OK!!

OK!!

OK!! OK!!

OK!!

No!!No!!No!!No!!

合意形成合意形成合意形成合意形成 成功成功成功成功:全ての評価に

負の評価(“-1”or “-2”)を含まない合意形成合意形成合意形成合意形成失敗失敗失敗失敗:評価にひとつでも

負の評価(“-1”or “-2”)を含む

Page 17: OSS開発におけるレビュアー間の合意形成の分析

RQ2: レビュアー間の合意形成は行われているレビュアー間の合意形成は行われているレビュアー間の合意形成は行われているレビュアー間の合意形成は行われている

かかかか?

• 90%以上のレビューは合意に基づいているが,合意形成が行われない

ままプロダクトに修正が反映されることもある

17合意形成失敗失敗失敗失敗合意形成成功成功成功成功

レビュー件数

Page 18: OSS開発におけるレビュアー間の合意形成の分析

動機動機動機動機

• 合意形成の観点から,再修正の発生を防止する手がかり手がかり手がかり手がかりを調査する

分析方法分析方法分析方法分析方法

• RQ2の分析で分類されたレビューを“再修正の有無”について再度分

類する

18

OK!!

OK!!

OK!!

No!!

再修正あり再修正あり再修正あり再修正あり

再修正なし再修正なし再修正なし再修正なし

再修正あり再修正あり再修正あり再修正あり

再修正なし再修正なし再修正なし再修正なし

合意形成成功成功成功成功 合意形成失敗失敗失敗失敗

RQ3: レビュアー間の合意形成と不具合のレビュアー間の合意形成と不具合のレビュアー間の合意形成と不具合のレビュアー間の合意形成と不具合の

再修正は関係しているか再修正は関係しているか再修正は関係しているか再修正は関係しているか?

Page 19: OSS開発におけるレビュアー間の合意形成の分析

L

RQ3: レビュアー間の合意形成と不具合のレビュアー間の合意形成と不具合のレビュアー間の合意形成と不具合のレビュアー間の合意形成と不具合の

再修正は関係しているか再修正は関係しているか再修正は関係しているか再修正は関係しているか?

• 関係あり.再修正の発生率に有意な差(p>0.01)がみられた

19

No!!OK!! OK!!

15.81%が再修正 25.00%が再修正

合意形成成功成功成功成功 合意形成失敗失敗失敗失敗

OK!!

OK!!

OK!!

Page 20: OSS開発におけるレビュアー間の合意形成の分析

議論内容の紹介議論内容の紹介議論内容の紹介議論内容の紹介

20

Page 21: OSS開発におけるレビュアー間の合意形成の分析

合意合意合意合意形成に形成に形成に形成に成功成功成功成功した議論の例した議論の例した議論の例した議論の例

21

実際の議論 (ID: 5749)

パッチを投稿しました

Alex (修正者)

これで良いと思います

Johannes(レビュアー)

ダメダメダメダメです.デシリアライズにまだ

問題があるように思えます(以下略

Vish (レビュアー)

これならこれならこれならこれならOKです!です!です!です!

Vish

パッチを再度投稿再度投稿再度投稿再度投稿しました

Alex

Page 22: OSS開発におけるレビュアー間の合意形成の分析

� ֵ◌

合意合意合意合意形成に形成に形成に形成に成功成功成功成功した議論の例した議論の例した議論の例した議論の例

22

実際の議論 (ID: 5749)

パッチを投稿しました

Alex (修正者)

これで良いと思います

Johannes(レビュアー)

ダメダメダメダメです.デシリアライズにまだ

問題があるように思えます(以下略

Vish (レビュアー)

これならこれならこれならこれならOKです!です!です!です!

Vish

パッチを再度投稿再度投稿再度投稿再度投稿しました

Alex

再修正なし再修正なし再修正なし再修正なし

再修正あり再修正あり再修正あり再修正あり

Page 23: OSS開発におけるレビュアー間の合意形成の分析

合意合意合意合意形成が形成が形成が形成が失敗失敗失敗失敗した議論の例した議論の例した議論の例した議論の例

23実際の議論 (ID: 5220)

パッチを投稿しました

Peng (修正者)この書き方は良くない

です.直しましょう直しましょう直しましょう直しましょう.

Willian(レビュアー)

このこのこのこのコードでコードでコードでコードでOKですですですです

Salvatore (レビュアー)

Peng

過去にこのやり方でやっているし,

大丈夫じゃないですか?

私にはなぜそうするのか理解で

きません.こうなったら他の人

の意見を聞いてみましょう

Willian

Page 24: OSS開発におけるレビュアー間の合意形成の分析

合意合意合意合意形成が形成が形成が形成が失敗失敗失敗失敗した議論の例した議論の例した議論の例した議論の例

24実際の議論 (ID: 5220)

パッチを投稿しました

Peng (修正者)この書き方は良くない

です.直しましょう直しましょう直しましょう直しましょう.

Willian(レビュアー)

このこのこのこのコードでコードでコードでコードでOKですですですです

Salvatore (レビュアー)

Peng

過去にこのやり方でやっているし,

大丈夫じゃないですか?

私にはなぜそうするのか理解で

きません.こうなったら他の人

の意見を聞いてみましょう

Willian

再修正なし再修正なし再修正なし再修正なし

再修正あり再修正あり再修正あり再修正あり

Page 25: OSS開発におけるレビュアー間の合意形成の分析

まとめまとめまとめまとめ

25

Page 26: OSS開発におけるレビュアー間の合意形成の分析

衠 ֳ◌

まとめまとめまとめまとめ

26

割り当て レビュー

再修正

修正 更新報告

報告者 管理人 修正者 プロダクトレビュアー

OK!No!!

目的目的目的目的:修正コスト増大を防ぐため,再修正を防ぐヒントを得る

分析分析分析分析:レビュアーの合意形成を分析した

結果結果結果結果:レビュアーの合意形成の失敗は再修正の予兆合意形成の失敗は再修正の予兆合意形成の失敗は再修正の予兆合意形成の失敗は再修正の予兆である

OK!

Page 27: OSS開発におけるレビュアー間の合意形成の分析

展望展望展望展望

• 分析分析分析分析

• レビュアー間の議論を分類

• 対象プロジェクトの追加

• 合意形成の支援合意形成の支援合意形成の支援合意形成の支援

• ツールの作成

• 議論ルールの作成

27

Page 28: OSS開発におけるレビュアー間の合意形成の分析

냰�

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.