ソフトウェア工学研究の日々

ソフトウェア工学の学術研究を紹介しています。ソフトウェア開発に関する調査と実験が大好きです。

ソースコードのコメントに登場する URL の役割

プログラミングの最中に、ライブラリの使い方やアルゴリズムの書き方など、様々な情報をインターネット上から集めてくることが一般的になっています。プログラムを書いたときに参考にした情報の URL をコメントとして一緒に記述しておけば、あとで参照できるので便利です。

そのような URL が実際にコメント中にどれぐらい存在し、どんな情報に対するリンクを記録しているのか。また、Web でも時折見かける「リンク切れ」のような問題が起きていないか、リンクはきちんと更新されているのか、という開発者の URL 利用のスタイルを調査しました。ソフトウェア工学の国際会議(ICSE 2019)で発表予定の著者最終版を既に公開しています。

arxiv.org
調査対象は GitHub プロジェクトに存在する 25,925個のリポジトリです。プログラミング言語として、ここ10年間で継続的に多くの開発者に使用されている(=人気の高い)プログラミング言語である C, C++, Java, JavaScript, Python, PHP, Ruby の7つのどれかを使用しているプロジェクトのうち、少なくとも2年間は活発に活動していたものを選定しています。各言語の文法に従ってソースファイルからコメントを抽出し、正規表現を使って URL を収集して、トータルで 9,654,702個のリンクを集めました。

これに対して色々な分析を行っていますが、主な結果は以下の通りです。

  • 80%以上のリポジトリで少なくとも1つは URL がコメントに出現する。リンク先として最も多く出現するドメインgithub.com, stackoverflow.com, en.wikipedia.com である。
  • リンク先のコンテンツとしては、ソフトウェアライセンスや、ソフトウェアプロジェクトや開発組織の情報、何らかの要求仕様・技術標準、チュートリアルAPI の利用法などがある。コメントの内容から、リンクはソースコードに関する付加的な情報を参照できるようにするために書かれている。
  • 全 URL のうち 9%がリンク切れになっている。ライセンスのような頻出するものはリンク切れが少なく、それ以外の用途のものが相対的にリンク切れが多い。GitHub 上のデータに対するリンクも、ソースコードの構造の変化などが原因でリンク切れが生じていることが多い。
  • リンクは作られたあと、ほとんど更新されない(9%未満)。更新されているもののほとんどは、ライセンス更新や開発組織名の変更に伴う修正だった。
  • リンク切れのうち、新しい URL が分かったものを14件 Pull Request として送ったところ、ファイルを変更しないでおきたい理由のある 1件を除いて受理されたので、開発者もリンク切れが望ましくないものであると考えていると思われる。
  • StackOverflow の質問を指す URL の場合、その URL がソースコード中に初めて出現した日よりも後に、StackOverflow 側でコメントが増えるなどの変化が生じているケースが多い。つまり、そのソースコードを書いた時点で参考にした情報と、あとから見に行ったときに得られる情報は一致しない場合がある。

結果を踏まえると、何か外部ドキュメントを参考にプログラムを書いたときは、無効になりにくい URL を使う(たとえば文献ならば DOI を使う)こと、無効になっても再検索できるようにコメント側にもリンク先に関する説明を書いておくこと、そして定期的にリンク先の情報が新しくなっていないか確認することが重要であるといえそうです。ソースコードの更新にともなってコメント自体が古くなることもあるので、コメントやリンクを適切に保守していく方法を考えるのが、今後の課題といえるでしょう。