はじめに
みなさんこんばんわ、24日目担当のtomoaki_teshimaです。この記事はOpenCV Advent Calendar 2017 24日目の記事です。関連記事は目次にまとめられています。また、本来ならこの記事は"去年書いた浮動小数点数の精度問題のネタ"というタイトルの予定でしたが、一年眠らせてるうちに、最新のOpenCVでは再現しなくなってしまった、言うなればネタが腐ってしまったため、泣く泣く新しく書き起こしています。1
さて本題。今日はOpenCVのGithub上のissueとpull requestについて調べてみたよ
IssueとPull Requestとは
詳細は割愛しますが、「こういう問題があるよ」という情報共有/方向がissue、実際の「修正の提案」がPull Requestと言い換えられます。
現状(2017年12月21日23:00時点)のIssueとPull Requestの数
issueが1238個、PRが40個、それぞれopenになっています。PRに対してissueが30倍も多いことになっています。ちょっとissueが多すぎますね。
最初見たときは、みんなアホみたいにissueだけ投げて、どんどん増えてるんだな、と思っていたのですが、ずっと見ていて、この50前後のPRに対して、2-30倍の数のissueという構図は、ずーっと変わっていません。では一体issueの数がPRに対して多いのは何が原因なのでしょう?
IssueとPull Requestの生存期間
なお、この図は2017年8月18日14:23時点での数です。
なお、必要な人にはSVG版もあります
IssueとPRのガントチャートの作り方
- https://github.com/opencv/opencv/issue/xxx のページをダウンロードしてくる
- 適当にOpen dateとClose dateを抽出する
- 1.-2.を、全issue/PRに対して繰り返す
だけです。なお、実際はコストパフォーマンスを考えてシェルスクリプトで「えいやっ!」とやりました。Github上ではissueもPRも通しで連番が振られるし、ついでにxxx番のissueが実はPRだったとしても、勝手にページ転送してくれるので、そのあたりは真面目に考えなくても大丈夫です。
一方で、open dateとclose dateのフォーマットはちょこちょこ変わるみたいで、8月に実行したスクリプトを12月に再度実行してみたら、正しく日付を抽出できませんでした(なので、advent calendarなのに、8月時点でのデータをもとに記事を書いている)
よく観察してみる
まず気になるのは、下図の赤丸で示した、グラフが不連続になっている部分です
実は、左下の赤丸は
- 不連続の差が大きい
- 不連続より左(古い)issue/PRは無事に閉じられている
- 不連続より右(新しい)issue/PRは、未だopenのままのものが多い
では、これはいつぐらいに発生して、issue/PR番号はいくつぐらいのものなのでしょうか。見てみると、時期は2015年7月27日8時19分(4240)-2015年7月27日11時44分(5080)の間(時間はいずれも日本時間)に作成されています。では、実際に見てみましょう。
見てみると、Transferred from http://code.opencv.org/issues/103
と書いてあります。
実は、OpenCVはその昔、CSVやSVNで管理されていた時代があり、当時は「チケットシステム」でバグ報告を行っていました。当時のチケットを、最終的にはbotでGithubに転記したため、短時間の間に800近くもissuが生成されることとなった訳です。
なので、実際に調べてみると、issueとPRが投稿される頻度は、特段差が無いのに、機械で転記されて下駄を履いてる分、issueの方が大量に存在するように見えるのです。
実際、過去のissueは、OpenCV 2.4時点で既にfixされている、もしくは情報がひどく不足してるissueも多く、本来なら一度クリアしてもおかしくないレベルだと思います。ただ、そういう背景を踏まえて見ると、issueを必死に減らすOpenCV公式開発者の姿勢が見えてくる気がします。
不連続部分Part2
不連続部分、ぱっと見ただけではわからないのですが、2016年7月ごろにも不連続部分があります。
実はこの不連続部分は全PR作り直し、という苦労がありました。実は2016年7月は、OpenCVのリポジトリのURLがItseez から openv (https://github.com/itseez/opencv から https://github.com/opencv/opencv) に変わったタイミングでもあります。この時、公式開発者が使っているビルドマシンが、URLが変わったことが影響して、Githubと連携が取れなくなってしまいました。で、結局公式開発者の一人Vadim Pisarevskyさんが全PRをcloseして開き直す、という狂気の沙汰を手動で行ったようです。
その他の不思議な点
今度の赤丸をつけたところは、何故か矢印が突き抜けています。つまり、連番で振られているはずのissueが、前後関係狂っています。
この前後関係が狂っているのは https://github.com/opencv/opencv/pull/4020 と https://github.com/opencv/opencv/pull/6368 番です。こいつらは何故か「2度issueがclose」されている、という不思議な現象が起きています。一体2度目のcloseは何が起きたの?
後日談というか、今回のオチ
さて、スクレイピングした結果を眺めると、openの日付も、closeの日付も取得に失敗しているissueがあります。8328番です。ところが、このURLにアクセスすると、404 error が返ってきます。前後のissueは有効なのに、このissueだけは404 errorになります。
さて、Github上において、一度立てたissue/PRは変更/クローズすることはできても、deleteすることはできません。本気でdeleteするためにはgithubの運営に連絡する必要があるそうですが、どうやら、誰か黒歴史を本気で取り消そうと思って、githubの運営にコンタクトを取ったようですね。
まとめ
みんなもOpenCVのバグをPRでgithubに投げるといいよ!明日は最終日、発起人のhon_no_mushiさんの締め投稿だよ!