研究概要†
OSSプロジェクト(のメンター)が新人を大切にしているか?
- メンタリングの充実度と、新人の定着度の比較
- プロジェクトの品質、持続可能性との関係
研究MTG†
1/20†
卒論タイトルについて†
- 研究室内の発表の時のタイトル:StackOverflowとGitHubでの新人OSS開発者の活動の分析
- 問題:目的が伝わらない
- 懸念:「分析」やった?RQ立てて仮説検定しただけですが・・・
- 参考
- 研究の目的
新人OSS開発者が開発コミュニティ(GitHub)に馴染む(/順応する/適応する)ために外側のコミュニティ(StackOverflow)が役に立つことを示す
- アプローチ
新人が開発コミュニティ,外側のコミュニティに馴染めているかを仮説検定で確かめて,外側のコミュニティで活動した後に開発コミュニティに移った開発者がコミュニティに馴染めているかを同じく仮説検定で確かめる.
やったこと†
- イントロから結果まで一通り書いた.吉富さんにレビューしてもらいながら修正中
- 考察今日から考えます
1/7†
やったこと†
- 効果量の勉強
- RQ2の検定を行うための集計プログラムを書いた.あとはRQ1,2の結果を載せるだけ.
- RQ1-1(カイ二乗検定)とRQ1-2(マンホイットニーのU検定)の結果を書いてみた.
この書き方で大丈夫か?
12/24†
やったこと†
- 自分の投稿した質問,Issue,PRへの回答,コメント,マージは分析対象から除外した
- 検定のプログラムに,論文に結果を載せるために必要な計算を追加した(効果量など)
- 論文に検定結果を載せるためのテンプレ考えた
12/10†
やったこと†
- リプライの速さの違いがあるかどうか
下記の仮説について,マンホイットニーのU検定を行う.
- 仮説4. 新人とそれ以外では,投稿したIssueに寄せられるコメントの速さに差があるか
- N: 5177
- 新人に対して最初のコメントが付くまでの時間の平均値[h]: 123.14429206103921
- 新人に対して最初のコメントが付くまでの時間の標準偏差[h]: 867.9605664
- 新人以外に対して最初のコメントが付くまでの時間の平均値[h]: 380
- 新人以外に対して最初のコメントが付くまでの時間の標準偏差[h]: 1825.331701
- p値の平均値: 3.18138275308254e-132
- p値の標準偏差: 3.1507845292838883e-131
有意差はある.新人の方が最初のコメントが付くまでの時間が短い.
GitHubの開発コミュニティでは新人に対して早く反応している.
- 仮説5. 新人とそれ以外では,投稿した質問に対する回答の速さに差があるか
- N: 2917
- 新人に対して最初の回答が付くまでの時間の平均値[h]: 0.34521768940692493
- 新人に対して最初の回答が付くまでの時間の標準偏差[h]: 2.002857556
- 新人以外に対して最初の回答が付くまでの時間の平均値[h]: 0.4259219933460749
- 新人以外に対して最初の回答が付くまでの時間の標準偏差[h]: 2.23606797749979
- p値の平均値: 0.06012987211053698
- p値の標準偏差: 0.08826525634410144
有意差なし.時間の平均値や標準偏差を見る限り,大きな差はない.
- 「熟練者」って言い方やめる
他のプロジェクトでの活動経験があるかどうかで,開発者を二分しているので,
「新人」と「新人以外」って呼び方にする.
今後の予定†
- RQ2(事前にStackOverflowで活動をした新人とそうでない新人では,貢献の受け入れられやすさに違いはあるか)の検定を行う
以前1プロジェクトでやってはいるので,複数プロジェクトで試す.
- 仮説検定の方法と結果をまとめる
卒論に載せれる形まで整える.
12/3†
やったこと~†
- 仮説と検定手法の見直し
仮説2と3は,二項検定では新人と熟練者での差があるかどうかに言及できないため(新人or熟練者が投稿したPull Requestが開発者全体と比べてマージされやすいかどうかはわかる),
仮説を「新人か熟練者かどうかと,投稿したPull Requestがマージされるかどうかには関連がある」とし,カイ二乗検定(独立性の検定)を用いて検定する.
要するに,旧仮説に対して,そもそも二項検定では仮説の検定になっていなかったので,ちょっと仮説を修正しつつ,カイ二乗検定で統計的に言及できるようにした.
- 旧仮説2. 新人と熟練者では,投稿したPull Requestがマージされるかどうかに差がある
- 旧仮説3. 新人と熟練者では,投稿した質問に回答があるかどうかに差がある
- 新仮説2. 新人か熟練者かどうかと,投稿したPull Requestがマージされるかどうかには関連がある
- 新仮説3. 新人か熟練者かどうかと,投稿した質問に回答があるかどうかには関連がある
- ちょっとだけ検定してみた
手動で必要なデータを集めて,仮説2のカイ二乗検定をやってみた.
p値: 5.669430515845988e-37
関連はある.しかし,新人と熟練者でPRがマージされる割合は,以前と変わっていないので,結論は変わらない(新人の方がマージされる割合は高い).
- 仮説4, 5について
仮説4は予定通りマンホイットニーのU検定を行う予定.仮説5はカイ二乗検定に直す.
参考
- 仮説4. StackOverflowで質問または回答を行ったことがある新人とそうでない新人は,投稿したIssueに寄せられるコメント数に差がある
- 仮説5. StackOverflowで質問または回答を行ったことがある新人とそうでない新人は,投稿したPull Requestがマージされるかどうかに差がある
今後の方針(相談)~†
- リアクションの速さに違いがあるかどうか検定する
そういえば,コミュニティへの受け入れられやすさの指標の1つにこんなのも考えてた(FOSEで提案されて思い出しました).
一応RQ1(StackOverflowとGitHubで新人と熟練者の活動の受け入れられやすさに違いはあるか)への回答として使えそうなので,検定した方がいい?
それとも,早めに質的調査に移った方がいい?
- とりあえず,現在立てている仮説については来週までに検定を終える.
期待通りの結果ではないことが目に見えているので,質的調査の方針を考える.
期待通りでなかった仮説に対して,質的調査を行い,なぜ期待通りでなかったのか説明できるようにする.
例えば,
- 仮説1. 新人と熟練者では,投稿したIssueに寄せられるコメント数に差がある
新人の投稿したIssueに寄せられるコメント数の方が多い.新人が開発コミュニティで受け入れられているという根拠になる.
やること:新人が投稿したIssueに寄せられたコメントを目視する(どうやってコメントを選べばよい?).
期待する調査結果:新人が投稿したIssueでは,投稿した内容について質問するようなコメントが見られる.
11/26†
やったこと†
仮説検定を少しやりました.
- RQ1. StackOverflowとGitHubで新人と熟練者の活動の受け入れられやすさに違いはあるか
それぞれのコミュニティで,新人に対する扱いを知りたい.
- 仮説1. 新人と熟練者では,投稿したIssueに寄せられるコメント数に差がある
結果はアンダーサンプリングした際の平均値
- N: 6012
- 新人のIssueに対する平均コメント数: 4.971057884231537
- 熟練者のIssueに対する平均コメント数: 4
- p値: 7.637873580525364e-30
⇒ 熟練者はあんまりやり取りしなくてもIssueを解決できる?
コメント数の差で見るのではなく,(人間の)コメント数0の状態でクローズされたIssueの数を比較してみる.
- 仮説2. 新人と熟練者では,投稿したPull Requestがマージされるかどうかに差がある
検定の前に,新人が投稿したPRのうちマージされる割合と,熟練者が投稿したPRのうちマージされる割合を調べた.
- 新人が投稿した全PRのうちマージされる割合(マージされたPR数/新人の全PR数): 0.49(2,288/4,696)
- 熟練者が投稿した全PRのうちマージされる割合(マージされたPR数/熟練者の全PR数): 0.37(3,215/8,790)
⇒ 新人の方がPRがマージされる割合が高い.新人はマージされやすい簡単なPRを投稿しがち?
ちなみに,分析対象のプロジェクトに投稿されたすべてのPRのうちマージされる割合は,0.57(60,457/106,065)
StackOverflowで活動を行った開発者のPRのマージされる割合が,全体に比べて低い
- 新人にとって開発コミュニティ外のコミュニティがなぜ,役に立つと思ったのか?
個人的な考えは,新人にとってIssueやPRでの議論には参加しずらくても,StackOverflowでの質問なら参加しやすい.外のコミュニティでの活動へ参加することで,
- 開発コミュニティとの知識や技術のギャップを埋めやすくなる
例えば「〇〇ができません」という質問に対して,「それはバグ(仕様)です」と教えてもらえれば,最初はバグだと思わず質問したのに,それがバグだと気付ける.
もしかしたらGitHubでIssueを投稿するきっかけになるかもしれない.そもそも開発コミュニティで質問すべきかどうかわからないようなふわふわした疑問に対する回答に役立つ.
- 開発コミュニティでは相手にされないような質問でも,外のコミュニティでは相手をしてくれる
11/19†
やったこと†
- 追加データの収集
- angularjs(angular/angular.js)
- swift(apple/swift)
- django(django/django)
- angular(angular/angular)
- (先週収集済み)ruby-on-rails(rails/rails)
- (先週収集済み)node.js(nodejs/node)
- リサーチクエスチョンと仮説を決める
- 研究の目的
新人がStackOverflowで活動した後,GitHubの開発コミュニティの活動に移行した際,開発コミュニティでの新人の貢献の受け入れられやすさを明らかにすることで,新人にとって開発コミュニティ外のコミュニティが果たす役割を明らかにする.
- RQ1. 新人と熟練者では,開発コミュニティへの貢献の受け入れられやすさに違いはあるか(これ必要?)
- 仮説1. 新人と熟練者では,投稿したIssueに寄せられるコメント数に差がある
- 仮説2. 新人と熟練者では,投稿したPull Requestがマージされるかどうかに差がある
- RQ2. 事前に開発コミュニティ外で活動を行った新人とそうでない新人では,貢献の受け入れられやすさに違いはあるか
- 仮説3. StackOverflowで質問または回答を行ったことがある新人とそうでない新人は,投稿したIssueに寄せられるコメント数に差がある
- 仮説4. StackOverflowで質問または回答を行ったことがある新人とそうでない新人は,投稿したPull Requestがマージされるかどうかに差がある
- 研究発表用のスライド(FOSEのポスターに使う予定)の研究目的までのアウトラインを考えた
スライドの内容も大体作った.
11/11†
やったこと†
- 追加のデータ収集
node.jsのデータ収集とユーザの紐づけが終わった.
angularjsのデータ収集を開始した.
- 追加データを踏まえてこの前の仮説を検定
StackOverflowから活動を開始した開発者と,GitHubから活動を開始した開発者で,PRがマージされる割合に差があるかどうかを,マンホイットニーのU検定(両側検定)で確かめる.
アンダーサンプリング済み,100回のランダムサンプリング
- 結果
so-avg: StackOverflowから活動を開始した開発者のPRがマージされる割合の平均値
gh-avg: GitHubから活動を開始した開発者のPRがマージされる割合の平均値
どの集団においても有意差はなし.
- 熟練者,初心者区別なし
{'N': 965, 'so-avg': 0.4296555792445905, 'gh-avg': 0.4726703021897099, 'U-avg': 444580.63, 'U-stdev': 6162.220479705757, 'p-avg': 0.11097931275246754, 'p-stdev': 0.11308382748422006}
- 熟練者
{'N': 928, 'so-avg': 0.4372790035798231, 'gh-avg': 0.4765168730880462, 'U-avg': 414333.56, 'U-stdev': 5555.327392310698, 'p-avg': 0.18805871637977054, 'p-stdev': 0.16417228308289794}
- 初心者
{'N': 37, 'so-avg': 0.3352290732740967, 'gh-avg': 0.3761941456044108, 'U-avg': 639.975, 'U-stdev': 49.10149121354605, 'p-avg': 0.5666286718113843, 'p-stdev': 0.2553652697574647}
- 新たな仮説を考える
- StackOverflowから活動を開始した開発者と,GitHubから活動を開始した開発者では,
- どちらの投稿したPRがマージされやすいか
- どちらの投稿したPRへの反応が早いか
貢献の動機(バグ修正や機能追加など)を考えれば,コミュニティの反応が早い方が開発者はうれしい.
ここでいう反応はPRへの,コメント,承認,変更の要求を意味する.
- どちらの投稿したIssueがコメントをもらいやすいか
コメントがもらえないと,バグ修正の方法などの議論や,課題の解決策の提案がもらえないということになる.
- どちらの投稿したIssueへの反応が早いか
- StackOverflowで質問した後にPRを投稿した開発者と,GitHubでIssue投稿した後にPRを投稿した開発者では
- どちらの投稿したPRがマージされやすいか
- どちらの投稿したPRへの反応が早いか
- StackOverflowで質問した後にIssueを投稿し,さらにその後にPRを投稿した開発者と,GitHubでIssue投稿した後にPRを投稿した開発者では
- どちらの投稿したPRがマージされやすいか
- どちらの投稿したPRへの反応が早いか
- まだ仮説として明文化できてないけど,アイデアとして
- 2つのコミュニティの基本的な統計量の比較(Issue投稿数 vs 質問数,Issueコメント数 vs 回答数,Issueへの反応の速さ vs 回答への反応の速さ,2回目質問するか)
2つのコミュニティの,新規参入者に対する対応(受け入れられやすさ)の比較.
プロジェクトの開発に関連するキーワード(Bug,feature request,etc)でStackOverflowの質問を絞れば,それらの活動も開発に活かせるといえる.
StackOverflowでの活動が,開発コミュニティに影響を及ぼすかどうかは疑問.
- 検定方法について
連続値については,引き続きマンホイットニーのU検定を使う.
PRのマージされやすさは,マージされる割合を使って検定すると,
そもそもPR投稿数が少ないことから連続値としての検定がうまくいかない(割合が階段になる)ことが想定されるので,
二項検定(マージされる or されないの2値)をしてみようと思う.
- 例:StackOverflowから活動を開始した開発者が投稿したPRのうち,マージされる割合は,全開発者が投稿したPRがマージされる割合と有意差がない(帰無仮説).
- 活動履歴を取得するプログラムの機能追加(未完)
収集したデータから,上記の仮説を検証(検定)するために必要な情報を得る機能を追加.
次やること†
- 追加のデータ収集
- 収集済み
- ruby-on-rails(rails/rails)
- node.js(nodejs/node)
- 追加予定
- angularjs(angular/angular.js)
- swift(apple/swift)
- django(django/django)
- ruby(ruby/ruby)
- angular(angular/angular)
- 新しい仮説を検定するために追加で必要な活動履歴を取得するプログラムの作成
11/5†
やったこと†
- 先週の検定結果は間違っていました・・・
配列の一部がゴミでパディングされていて,それを取り除いたうえで,改めて,
StackOverflowから活動を開始した開発者と,GitHubから活動を開始した開発者で,PRがマージされる割合に差があるかどうかを,マンホイットニーのU検定(両側検定)で確かめる.
アンダーサンプリングを10回行って,平均値と標準偏差を出す.
- 初心者,熟練者混合
N = 33 (StackOverflow: 33, GitHub: 52)
U average: 565.7
U stdev: 25.779190574311418
p average: 0.7238294278693558
p stdev: 0.18171447235767416
→有意差なし
- 熟練者
N = 26 (StackOverflow: 26, GitHub: 49)
U average: 323.8
U stdev: 16.801454963451494
p average: 0.756500676097484
p stdev: 0.20189692999318884
→有意差なし
- データ収集の準備
データ収集のプログラムがvscode専用の書き方だったので,リファクタリングしつつ,ほかのリポジトリにも対応できるように書き換えた.
- データ収集
約3日間でruby-on-railsのデータは集まりました.
- データ収集のためのプロジェクト探し(相談)
StackOverflowで,タグ一覧を質問数が多い順にソートし,タグ名がそのままリポジトリ名を示すようなプロジェクトを見つける.
タグ一覧の上位36個中,リポジトリを見つけた7個を示す.
ほとんどがプログラミング言語またはフレームワーク.
プログラミング言語は書き方などの質問が特に多そうなので除外すべき?開発コミュニティとのつながりが薄い?処理系に関する質問とかは少なそう.
- タグ名(リポジトリ名)
- ruby-on-rails(rails/rails)
- node.js(nodejs/node)
- angularjs(angular/angular.js)
- swift(apple/swift)
- django(django/django)
- ruby(ruby/ruby)
- angular(angular/angular)
次やること†
- 統計処理のためのプログラムをvscode以外のプロジェクトにも適用できるように書き換え.
- 追加のデータ収集をしたうえで,同じ検定をやってみる.
10/29†
やったこと†
StackOverflowから活動を開始した開発者と,GitHubから活動を開始した開発者で,PRのマージされる割合に差があるのか?†
- 方法
下記2つの集団で,提出したPRがマージされる割合に差があるかどうかを,マン=ホイットニーのU検定(片側検定)で確かめる.
- 最初の活動がStackOverflowでの質問または回答だった開発者集団
- 最初の活動がGitHubでのIssueの投稿,コメント,PR投稿,PRのマージだった開発者集団
- 結果
N=85
いきなりGitHubで活動を始めるよりも,StackOverflowから活動を始めた方が,PRがマージされやすいといえる.
- おまけ
それぞれの集団の,投稿したIssueに他人からコメントされる割合について差があるかどうかを,マン=ホイットニーのU検定で確かめる.
N=1125
いきなりGitHubで活動を始めるよりも,StackOverflowから活動を始めた方が,Issueにコメントしてもらいやすい.
初心者と熟練者を分けて,上の検定をやる†
- 方法
上の検定で分けた集団について,さらに熟練者の集団,初心者の集団に分けて,同様の検定を行った.
- 熟練者:vscodeでPRを提出するより前に,ほかのリポジトリにPRを提出したことがある開発者集団
- 初心者:vscodeでPRを提出するより前に,ほかのリポジトリにPRを提出したことがない開発者集団
- 初心者(N=10)
サンプルが少なすぎて,そもそも検定がうまくいっていない.
使っているライブラリのリファレンスによると,片方の集団だけでサンプル数が20以上ある必要があるらしい.
次にやること(相談)†
- なぜ,「いきなりGitHubで活動を始めるよりも,StackOverflowから活動を始めた方が,PRがマージされやすい」のか調べる?
StackOverflowで具体的にどんな活動をすると,PRがマージされやすくなるのか?
どのくらいの期間,StackOverflowで活動すれば有意差が出るのか?
- そもそも検定に十分なサンプルが取れているのか?
ほかのプロジェクトのデータも集めてみる.
StackOverflowでの質問数や回答数が多いプロジェクトを探すと,アカウントの紐づけがしやすそう.
10/22†
やったこと†
- 開発者の階層分け
アクティブ開発者の閾値を調整.条件を2つ以上のPRを提出したことのある開発者のみにする.
OTCは1つ以上PRを提出したことのある開発者.
それに伴って階層名も変更.
- 結果
| 階層 | 人数[人] (割合[%]) |
| コア開発者 | 39 ( 0.08) |
| アクティブ開発者 | 480 ( 1.04) |
| One-Time Contributor | 1241 ( 2.66) |
| ペリフェラル開発者 | 44787 (96.22) |
- StackOverflowとGitHubのアカウント紐づけ
- 方法
先週は「josh-ua, joshua」や「leonadler, leon adler」といったアカウントを紐づけるために,
レーベンシュタイン距離を使ってアカウント名の類似度を計算していたが,
空白スペースやハイフンなどの記号なら前処理で除去できるので,
これらを除去したうえで,アカウント名の完全一致を探した.
- 結果
| 階層 | 紐づけられたユーザ数[人] (階層のユーザ数[人]) |
| コア開発者 | 8 (39) |
| アクティブ開発者 | 26 (480) |
| One-Time Contributor | 51 (1241) |
| ペリフェラル開発者 | 1496 (44787) |
次にやること(相談)†
- 紐づけられたユーザのGitHubでの活動履歴と,StackOverflowでの活動履歴を時系列で得る(階層の移動を追跡する)
例. ユーザA
2019/10/20 SOで質問
2019/10/21 GHでIssue立てる
2019/10/22 PR提出
2019/10/23 SOで回答
例. ユーザB
2019/10/20 GHでIssueを立てる
2019/10/21 GHでIssueにコメント
2019/10/22 SOで質問
- 活動履歴を使って何をする?
- SOで活動開始してから,GHで活動開始するまでの期間を得る(ROMってる期間がわかる?)
- タイプ分け?どうやって?
- 考慮すべきこと
- OSS開発初心者と熟練者を分ける.初心者,熟練者の境界は?
10/15†
やったこと
- StackOverflowとGitHubのアカウント紐づけ
- 方法1. StackOverflowのユーザの自己紹介文からGitHubアカウントへのリンクを探す
紐づけられたアカウント数 / SOでvscodeタグ付きの質問またはそれに対する回答をしたアカウント数(割合[%])
278 / 23,356 (1.19%)
このうち、PRをマージした人、Issue・PR投稿またはそれらにコメントを付けた人はなし。
- 方法2. GitHubのアカウント名とStackOverflowの表示名の類似性(作業中)
GitHubのアカウント名とStackOverflowの表示名のレーベンシュタイン距離が1以下のアカウントを紐づける
(前処理として、それぞれの名前をすべて小文字に変換)
計算の40%が終わった段階で、紐づけができたユーザ数は800人。
この方法で紐づけられた人は、必ずどこかの階層(後述)に現れる。
しかし、PR投稿者の中に紐づけできた人がいるかどうかは現時点では不明。
- 無関係な人も紐づけてしまうことがある
例:ball, bball 目視したところ、全くの別人
かといって、レーベンシュタイン距離が0(まったく同じ名前)の人のみ紐づけると、
「josh-ua, joshua」や「leonadler, leon adler」といったアカウントが紐づけできないので、
Pythonのdifflibを使って文字列の類似性を測った値も併用する。
- 全探索しているのでかなり時間がかかる(3~4日かかる)
レーベンシュタイン距離とdifflibを使った類似性を計算して、DBに保存すれば、1度だけ計算しておけばOK。
また、ボトルネックはDBからデータを取り出すのにかかる時間であることがわかっている。
メモリ節約のためと思って、いくつかデータを取り出し、処理、破棄を繰り返しているので、
大量にデータをDBから取り出して、メモリに展開してから処理したほうが早くなりそう。
- その他の非現実的な方法について
- 自己紹介文の類似性
そもそも自己紹介文を書いてる人が少なすぎる。
- プロフィールアイコン画像の類似性
名前の総当たりだけでも3~4日かかるのに、画像比較なんてやったら・・・
- 開発者の階層分け
以下の4つの階層に分けた。
vscodeの場合、これらの開発者の分布は、
| 階層 | 人数[人] (割合[%]) |
| コア開発者 | 39 ( 0.08) |
| 定期的PR投稿者 | 7 ( 0.02) |
| 不定期的PR投稿者 | 3001 ( 6.00) |
| Issue投稿者, Issueコメント者, PRコメント者 | 46941 (93.90) |
- コア開発者
PRのマージをした人
- 定期的PR投稿者
PR投稿数が5個より多く、最も古いPR投稿から直近のPR投稿までの差が1年より長く、PR投稿の間隔が最低半年に1回以上ある場合
- 不定期的PR投稿者
定期的PR投稿者以外のPR投稿者
- Issue投稿者, Issueコメント者, PRコメント者
10/8†
やったこと
- データ集め
- StackOverflow
sotorrentはいったん放置して、Webスクレイピングの件を作業していた。
vscodeのタグが付いた質問と回答はWebAPIから取得しておいた。
- GitHub
プルリクエストを全部取得。
- データ分析
集めたデータを使ってコメント数の分布をプロットしてみた。

- 相談
- GitHubとStackOverflowのアカウント紐づけについて
とりあえず考えられる方法を試して、どのくらいのアカウントが紐づけられるか試してみようと考えています。
- StackOverflowのプロフィール(APIから取得可能な範囲で)からGitHubアカウントへのリンクを探す
- GitHubアカウントのプロフィールからStackOverflowアカウントへのリンクを探す
- StackOverflowのプロフィールからTwitterアカウントへのリンクを探し、TwitterプロフィールからGitHubアカウントへのリンクを探す(できるかは未調査)
- 2回目質問する割合について
発言のしやすいコミュニティかどうかを調べるのに役に立つ指標ではあるが、1回目の質問で回答がなかった際に2回目同じ質問をしている可能性
1回目と2回目が同じ質問かどうかを、自然言語処理の技術を使って判定できないか(レーベンシュタイン距離みたいな・・・)?
- 開発者の階層分けについて
「Toward an Understanding of the Motivation of Open Source Software Developed」を参考にGitHubでの活動と対応付けしてみた。
- Passive user: ただのユーザ。
- Reader: Issueやソースコードを読む人。
- Bug reporter(, Feature requester←この論文には書いてないけどこれしてる人はいるだろう): バグを発見して報告する。機能拡張の提案をする。Issueを書く人に対応。
- Bug fixer: 自分または他人が報告したバグの修正をする。バグ修正のためにPRを書く人に対応。
- Peripheral developer: 時々新機能を提供する。貢献が不規則。開発に関与する期間は短く散発的。機能拡張のためにPRを書く人に対応。
- Active developer: 定期的に新機能を提供し、バグを修正する。プロジェクトの主要な開発者。コンスタントにPRを書く人に対応。
- Core member: 開発の指導、調整を行う。比較的長い間プロジェクトに関与している。システム開発に大きく貢献した人。PRをマージする人に対応。
- Project leader: プロジェクトのオーナー。プロジェクトのビジョンと全体的な方向性を決める。
- 疑問1: Bug fixerとPeripheral developerを階層分けすべきなのか?(論文ではほぼ違いはないと言いながらも分けて書いてあった)
明記はされていなかったが、Bug fixerは1つのバグをFixするためだけに貢献した人(OTC)に対応していそう?
Peripheral developerは2回以上で貢献がコンスタントではない人に対応?
- 疑問2: issueやPRにコメントする人はどこに対応するのか?
Bug reporterと同じ層?コメントは問題提起よりも難易度が低いからBug reporterより下層?それとも、議論できるほど知識があると考えてBug reporterより上層?
ほかにも階層分けモデルがある?
9/25†
やったこと
- データ集め
- StackOverflow
sotorrentをDLしてmysqlデータベースにインポート中。
あと最低2週間はかかる見込み。
- GitHub(対象のリポジトリはvscode)
issueとissueについたコメントを取得するプログラムを作成中。
GitHub APIの制限に引っ掛からない速度でゆっくりデータ収集。かかっても丸1日。
来週までにやること
- issueのリプライの数/速さを箱ひげ図にプロットする
- リプライの数: 質問や問題があるときにコミュニティの誰かが関心を持ってくれるかどうか
- リプライの速さ: 質問や問題があるときにコミュニティがどれだけ早く解決しようとしてくれるか
- StackOverflowからGitHubの開発コミュニティに移動する割合(要相談)
StackOverflowなど(Gitter, Slack, Twitter)のメディアが、新人の開発コミュニティへの参加のきっかけになるかどうかの指標になる。
StackOverflowで質問や回答をした人が、GitHubのissueで議論したり、プルリクを書いたりする割合は?
その中で新人の割合は?逆に新人の中で、過去にStackOverflowに質問や回答をしたことのある人の割合は?
アカウントの紐づけに関する研究がある?
- 新人が発言する割合: 新人が発言しやすいメディアかどうか(要相談)
新人の定義が難しい。。。
コミュニティに新しく入る人として考えるなら、ネットワーク分析を使ってみる?
例: コミュニティ検出をして、そのに新しくリンクが張られるノードを新人とする。
9/19†
やったこと
- Who is Going to Mentor Newcomers in Open Source Projectsを読んだ
新人が求める知識を教えてくれそうなメンターを推薦するツールを作った。
- 考えたこと
- FreeBSDではメンターと新人のペアでのメールのやり取りが少なく、新人がML全体に投げることが多かったらしい
1人または複数のメンターによって1人の新人を教えるだけではなく、コミュニティ全体が新人を支える仕組みがあるといい
- メンターはいらない!1人でやりたい!でもプロジェクトのアーキテクチャと実装の詳細、開発ガイドライン、組織的側面など、貢献に必要な知識は欲しい!
メンターなしで、1人でやったほうが良かったみたいな新人はいない?メンターいると気軽にプロジェクトに参加できないような・・・
メンターはどんなことを新規参入者に教えている?
メンターが必要なぐらいドキュメントが整備されていないプロジェクトってやだな・・・
メンターのやってることを機械が代替できないか?
- そもそもメンタリングすることで新人に対してどんな効果があるのかを研究した論文が読みたい
https://dl.acm.org/citation.cfm?id=1806842
9/12†
やったこと
- 分析対象のリポジトリを選んでみた
2010年以前にGitHubに登録されたリポジトリをfork数で降順ソートして上位5つを選択。
その中から、コントリビュータの数が一番多いrailsリポジトリを選択(2番目と比べて約3倍のコントリビュータがいる)。
- 分析対象のコントリビュータを選んでみた
https://github.com/rails/rails/graphs/contributorsから、コミット数が多い順にコントリビュータを並べたグラフを見て、
リポジトリ登録から2年以降に初めてのコミットがあり、コンスタントにコミットを続けているコントリビュータ上位4名選択。
- 分析対象のコントリビュータのコミットを集めてみた
途中
9/5†
やったこと
- 論文を読んだ
- OSSプロジェクトへの新規参入者のための研究
- Overcoming Open Source Project Entry Barriers with a Portal for Newcomers
OSSプロジェクトの新規参入者をサポートするために作成されたポータルを作成。次の内容を表示する。
貢献を始めるためのステップバイステップのフロー、簡単なタスクのリスト(プロジェクトによって提供されるタグに基づいてフィルターされたタスク)、
プロジェクトに必要なスキル、コミュニティが提供するチュートリアルへのリンク、コミュニティとの対話のためのメッセージテンプレート、
ドキュメントに関連する整理された情報、コーディングスタイルなどのコード関連のドキュメントへのリンク。
65人の学生にポータルを使用してOSSプロジェクト(LibreOffice, JabRef)に参加してもらい、日記、アンケートなどの定性的データから有用性を評価。
- Hipikat: A project memory for software development
タスクに関連するソースコード、ドキュメント、ディスカッション等のアイテムを推奨するツールを作り、新規参入者を支援する。
関連しているアイテム同士にリンクを張り、リンクされているアイテムを推奨アイテムとして表示。
評価は、Eclipse Bugzillaから修正済みバグレポートをサンプリングし、ツールにバグを入力した際に、実際にバグに関連したソースファイルを推奨できるかprecisionとrecallの測定、
Eclipseの過去に完了した機能拡張に関するタスクに取り組んでもらう。その際にツールを使用してもらい、ツールの有用性を確認するためのインタビューを実施。
また、Eclipseの開発メンバー数人にツールを利用せずに同様のタスクに取り組んでもらい、ツールを利用する新規参入者と利用しない熟練者の結果を比較。
- バグレポートの要約に関する研究
- Summarizing Software Artifacts: A Case Study of Bug Reports
バグレポートの要約を正確に行えるかどうかを検討。
7人の大学院生に計36個のバグレポートの要約を作成してもらい、これらを用いて抽出型のサマライザを学習し、学習していないサマライザとのROC曲線と、AUROCの比較。
- Unsupervised Deep Bug Report Summarization
AutoEncoderモデルを使った、抽象型のサマライザを実装。
公開されているバグレポートの要約を使ってサマライザを学習し、precison、recall、F-score、Rouge-Nで以前のアルゴリズムと比較。
- 自分がOSSプロジェクトに参加するのに役立つこと
- これらが分かりやすく示されていると参加しやすい
- 歴史
- 現在抱えている問題、議論と、これらに助けが必要かどうか。問題に関連するソースコードやドキュメント等。
8/20†
やったこと
- An Empirical Study of Long Lived Bugsを読んだ
長期間解決されないバグについての分析。
すぐ解決されるバグに比べて特筆すべき特徴や傾向はなし。
ソフトウェアのクラッシュやデータの損失など、重大なバグの中にも放置されているものもあった。
- オープンソースプロジェクトに参加してみようとした
- 現在の開発状況が分かりにくい(どこまで作業が完了していて、今何を議論していて、何をやろうとしているのかわかりにくい)
- Slackなどの縦に流れるチャット履歴を追うのがしんどい
- PRを送ってみた
issuehuntでお金が着いているissueの中で、good first issueのラベルが付いているissueに取り組んだ。
単純な修正だったので即承認してもらえたが、プログラムを考える時間よりも、ドキュメントや周辺のソースコードを読むのに時間がかかった。
次のMTGまでにやること
- 自分がコミュニティに参加するのに役立つようなことを考える
- コミュニティの履歴やチャンネルでの議論の可視化、要約
- どんな要約があったらいいかを考える
- 既存の可視化、要約技術について調べる
- CodeCity: モジュールを街(建物)に見立てて可視化
- Gource: プロダクトを開発者が作り上げる過程を可視化
- issueの難易度の推定
- 開発者の実績を基にバグをアサインするバグトリアージに近い?
- good first issueラベルを使う
- 素人とエキスパートの解決するissueの違いについて調べる
- 論文を読む
- SocialBarrier関連で初心者向けに要約を行う論文がある
- Overcoming Open Source Project Entry Barriers with a Portal for Newcomers
- APIドキュメントの要約などの論文を読み、どのような評価が行われているか調べる
- Generating query-specific class API summaries
- 素人と熟練者が取り組んだissueやコードの違いを比較した論文がないか調べる
8/7†
やったこと
- どんなOSSを対象にした研究がしたいか考える
- 開発者は完全にボランティア
例: Apache
Apacheは財団があるが、開発者は完全なボランティアで、財団からの給料は出ていない。
他の会社に勤めていて、かつApacheのOSSにフルタイムで開発にあたっている人もいるかもしれないが。
TODO: Linuxカーネルとかディストリとかはどうなんだろう?
- コア開発者がフルタイムで開発にあたっている
つまり、コア開発者はそれを本業の仕事として給料をもらい、生計を立てているようなOSS
例: React(Facebook), TensorFlow(Google), VSCode(Microsoft), etc.
- 研究対象のOSS開発者がどういった問題を抱えていそうか調査してみる
コア開発者がフルタイムで開発にあたっているOSSであるvscodeについて、issue、PRで、更新が古い順かつ、開いているものを5つ程見てみた
- issue
- 一番古いのは4年前
- MS社員が担当者の任命やラベル付けはしているが、コメントがない
- 議論がされているものの、結論が出ていない。途中で止まっている
- PR
- 一番古いのは2年前
- 社員にケチをつかられて、PRを立てた人が追加の変更をしないまま放置
- PRを立てた人が実装を途中であきらめた
- 社員によるレビューが何回か行われているのに、途中で行われなくなった(理由は謎)
- issueに基づくPRではあるが、プランに含まれていないという理由で1年以上Backlogに放置(issueの方もオープン状態)
- その他issueとPRを見てて分かったこと
- issueのコメントでいろんなユーザが「はよこの機能追加してくれ」と言っているが社員のレスポンスがないものがあったりする(issueの参加者は65人)
来週までにやること
- 研究対象のOSS開発者がどういった問題を抱えていそうか調査してみる(継続)
7/25†
やったこと
- 以下の論文を流し読みしました
- Two case studies of open source software development: Apache and Mozilla
上位15名の開発者が、コード生成への貢献の約80%を占めていることがわかった。
コア開発者は新機能の開発、ペリフェラル開発者はバグ修正を主なタスクとしていることがわかった。
- Who Gets a Patch Accepted First? Comparing the Contributions of Employees and Volunteers
ボランティアは従業員よりも26倍多くrejectされていることがわかった。
プルリクが作られてからマージされるまで、従業員は2日なのに対して、ボランティアは11日かかっていることがわかった。
- 気になったこと
時間がかかると貢献から遠のいてしまうのではないか?
ボランティアが遠のくと、OSSの品質(細かなバグ)に影響が出るのでは?
パッチ受け入れとOSSの品質に関係する論文を探す
- その他気になっていること
- OSSを収益化すれば、OSSが廃れる?
社会規範から市場規範へ切り替わることで問題は発生するのか?
OSSの持続可能性を高めるため, OSSを収益化する動きがある.
- GitHub Sponsors(GitHub, Inc.): 5000ドルばらまくキャンペーン
GitHubのOSS開発者への寄付が可能.
- Issuehunt(BoostIO, Inc.): 資金調達1億円
Issueに報酬を設定し, PRが承認されれば報酬を得る.
- Beerpay
オープンソースプロジェクトへの寄付が可能.
- Dev(FRAME00, Inc.):
オープンソースプロジェクトに対して毎月仮想通貨を配布.
- これによる問題
OSSコミュニティに市場規範が持ち込まれると, 今まで金銭的見返りを求めずに貢献されていたものに対して, 対価を求めるようになるのではないか?
今までは非金銭的な動機でOSSに貢献していたのが、金銭的な動機に切り替わるのか?
金銭的見返りのないコミュニティ(社会規範のコミュニティ)に, 優秀な貢献者が来なくなる?金銭的見返りのないコミュニティが廃れていくのでは?
市場規範: 金銭的なつがりを基に価値判断される世界の規範. 賃金を払う. 対価を求める
社会規範: 社会的なつながりを基に価値判断される世界の規範. ギフト経済. 金銭的見返りを求めない
来週までにやること
7/18†
やったこと
- 以下の論文を流し読みして、オープンソースプロジェクトの新参者に関する研究について少しわかってきた
- オープンソースプロジェクトへ初めて参加する際の社会的障壁に関する論文
- Socialization in Open Source Software Projects A Growth Mixture Modeling Approach
- Social Barriers Faced by Newcomers Placing Their First Contribution in Open Source Software Projects
- One-Time Contributorsに関する論文
- One-Time Contributors to FLOSS Surveys and Data Analysis
- Understanding the impressions, motivations, and barriers of one time code contributors to FLOSS projects a survey
- 読んでて気になったこと
そもそもコア開発者とペリフェラル開発者の割合ってどのくらい?One-Time Contributorの割合は?どれくらい貢献してる?
昨日それっぽい論文見つけたので来週までに読んできます
来週までにやること
- コア開発者やペリフェラル開発者について知るため
- https://dl.acm.org/citation.cfm?id=567795
- More Common Than You Think: An In-Depth Study of Casual Contributors
コア開発者、ペリフェラル開発者の割合、ペリフェラル開発者が実際どの程度役に立っているのかわかりそう。
- How does contributors involvement influence open source systems
コア開発者、ペリフェラル開発者によって投稿されたパッチのビルドの成功率の比較。ペリフェラル開発者が投稿するパッチの質が分かりそう。
- めっちゃ読みたい論文
Who gets a patch accepted first?: comparing the contributions of employees and volunteers
企業のオープンソースプロジェクトにおいて、従業員の開発者とボランティアの開発者の提出したパッチの受け入れに関する違いについて調査した論文。
ボランティア開発者が何かしらの問題に直面してそう。
6/17†
やったこと
- CytoscapeのAPI機能を利用して、ネットワークの図の作成を自動化した
- GitHubから適当なリポジトリを選んで、Cytoscape Core AppsのNetwork Analyzerを使って分析してみた(結果を見せる)
問題点
- CytoscapeのNetwork Analyzerは機能が限定的で、かゆいところに手が届かない
⇒ pythonのSNAライブラリNetworkXに移行する
進行中
- issueやissue_commentの数が多いリポジトリのからのデータの取得
- issueやissue_commentの数が多いリポジトリからネットワークを抽出する
6/10†
やったこと
- GitHub APIから特定のリポジトリの全てのissue(open and closed)とそれに対応するcommentを取得する
- issue投稿者とcomment投稿者のノードを作り、コミュニケーションをとった人同士でエッジを作って、1か月ごとにDBに保存する
6/3†
やったこと
5/23†
やったこと
- The Role of Participation Architecture in Growing Sponsored Open Source Communitiesを読んでいます。
5/7†
やったこと
- グラフ描画のツール作成
- 「Contrasting Community Building in Sponsored and Community Founded Open Source Projects」を読んだ
アメリカ合衆国退役軍人省の医療情報システム(public domain)を分析して、
コミュニティ主導のオープンソースプロジェクトとスポンサー付きのオープンソースプロジェクトの主要な課題を明らかにした。
スポンサー付きのオープンソースプロジェクトでは、健全なコミュニティの構築、優秀なコントリビュータを惹きつけること、所有権とコントロールに関する曖昧さの解決、つまり、スポンサー付きのオープンソースプロジェクトでは所有権とコントロールに関することが曖昧になるということが課題であると述べていた。
4/18†
やったこと
- mysqlの設定を変更して、ghtorrentのデータをにインポートを高速化した
今のペースだと最低1か月以上かかるので、
日別に分割されたmongoのダンプファイルが公式から出てるので、これを使ってみる?
- 「Two Case Studies of Open Source Software Development: Apache and Mozilla」の一部を読んだ
アブストラクトとイントロダクションのRQの部分を訳した。
この論文が何を明らかにしようとしているのかは分かった(多分)。
Templates†