SlideShare a Scribd company logo
1 of 22
Download to read offline
9.6 Million Links in
Source Code Comments:
Purpose, Evolution, and Decay
Hideaki Hata, Christoph Treude, Raula Gaikovina Kula, Takashi Ishio
ICSE 2019: 41st ACM/IEEE International Conference on Software Engineering, Montréal, QC, Canada
背景:ソースコードから Web ページへのリンク
https://stackoverflow.com/a/23838584 2
リンク先の内容は更新されることがある
https://stackoverflow.com/a/48027778
新しいやりかたが
あるのか!
ソースコードを
改善できる!!
3
2017年12月(直前の回答の3年後)に加わった回答
コードコメント内のリンクは有用か?
コードに関連した外部情報の明示
● 開発者の意図を理解する手がかり
として有用そう
● 外部情報は更新されることもある
し、消滅する可能性もある
4
コードコメント関係の既存研究
● Task annotations [Storey et al., ICSE 2008]
○ TODO/FIXME などを使ったカジュアルなタスク管理
● Self-admitted technical debt (自覚のある技術的負債)
[Potdar and Shihab, ICSME 2014]
○ 素早くソフトを作るための特殊な実装コードへの言及
● Fragile comments [Ratol and Robillard, ASE 2017]
○ 実装とコメントの不整合
● License evolution [Wu et al., EMSE 2017]
○ ライセンス変更による不整合 5
リンク切れに関する既存研究
CHASE 2019
We encourage authors of accepted papers to make their data
public, in order to enhance the transparency of the process
and the reproducibility of the results.
We encourage you to avoid putting the data on your own
websites or systems like Dropbox, since more than 30% of
them will not work in a 4 years period
Koehler, Web page change and persistence—A four‐year
longitudinal study, https://doi.org/10.1002/asi.10018.
6
何のために使われる?
どう更新される?
リンク切れは起きる?
本研究:ソースコードコメント内のリンクはどうか?
7
からのデータ収集
https://github.blog/2015-08-19-language-trends-on-github/
25,925 repos
8
10年間、Top 10 の7言語:
C, C++, Java, JavaScript, Python, PHP, Ruby
JavaScript
Ruby
Python
PHP
C
C++
Java
(The GHTorrent Dataset)
9.6 million links
9
※コメント内の http(s) URL の総数
コメント内にリンクを持つリポジトリの割合
10
89% in total
リンク先のドメイン
11
調査内容 (Research Questions)
12
 リンク先はどのような文書か? [サンプリングによる目視調査]
 何のために参照しているか? [サンプリング調による目視査]
 リンクの URL はどれぐらい更新されるか? [サンプリングによる目視調査]
 リンク先の内容は変化するか? [StackOverflow に関する全数調査]
 リンク切れはどれぐらい起きるか? [全数調査]
 リンク切れの修正には価値があるか? [ケーススタディ]
調査方法:ドメイン単位での層別サンプリング
Strata by domain # domains # links Sample size
common 2,013 9,128,444 384
sometimes 30,851 502,083 384
rare 24,175 24,175 378
sum 57,039 9,654,702 1,146
13
サンプルごとの目視検査の質の保証:
少数のサンプルに対して4人の著者が個別に判断した結果が合致することを検証
(誰がやっても、ほどほどに同じ結果が得られる)
リンク先の文書種別
14
● 仕様
● 組織のホームページ
● チュートリアルなどの記事
● API ドキュメント
● ブログ記事
● バグレポート
● アプリケーション
● 個人のホームページ
● ソースコード
● Stack Overflow のスレッド
● 研究論文
ソースコードに対するメタデータ (metadata)
○ 作者、組織、ライセンス
ソースコードの付加情報 (attribution)
○ アルゴリズムや実装方法の解説
技術的負債 (self-admitted technical debt)
○ 特殊な実装の事情
リンクの目的(コメントの記述で分類)
15
アルゴリズムの記述
(61ページのPDF)
Issue の記述・議論
各サンプルファイルの変更履歴を調査
● ライセンスの変更
● 組織名の変更
● http から https への変更
● コンテンツの移動
● 参照コンテンツの変更 ほか
リンクの更新
16
スペルミスの修正
正式なドキュメントを参照するようにリンクを更新
(1,146 サンプル中 88サンプルに更新あり)
におけるリンク先の変化
(The SOTorrent Dataset)
17
リンクがコミットされた時点を基準に
新しいコメント・回答の数を調査
リンク切れ の起きる割合
18
すべての URL に実際に
アクセスしてみた結果を分類
• 何かデータがあれば success
• 404 が返ってきたらリンク切れ
• internal server error 等はその他
リンク切れの修正に価値があるか
● 正しいリンク先が分かるものを
Pull Request で送信
○ Internet Archive で当時のコンテン
ツを探し、新しい URL を特定
● アクティブなプロジェクトでは
すぐ accept された (9件中 9件)
19https://github.com/sveawebpay/php-integration/pull/82
20
● コードコメントにリンクは多数出現する
● よくあるリンク先はライセンス, ソフトウェアのホームページ,
404 Not Found.
● よくあるリンクの理由:ソースコードのメタデータと付加情報
● リンク自体はほとんど更新されない
● リンク先の内容は変わっていることがある。Stack Overflow スレ
ッドの 75% は最初に見た時と同じではない
● 全リンク先のうち 9% はリンク切れ
● 開発者はリンクを重要な情報とは認識している
今後の課題: 外部情報との同時進化の支援
21
● 外部情報の更新の検知や、リ
ンク更新のツール支援
● 外部情報のさらなる理解
● ソースコードコメントの調査
オンライン素材あります https://github.com/NAIST-SE/9.6MillionLinks
22

More Related Content

Similar to 9.6 Million Links in Source Code Comments: Purpose, Evolution, and Decay (日本語版)

Getting Started with Graph Database with Python
Getting Started with Graph Database with PythonGetting Started with Graph Database with Python
Getting Started with Graph Database with Pythonロフト くん
 
【17-A-5】ウェブアーキテクチャの歴史と未来
【17-A-5】ウェブアーキテクチャの歴史と未来【17-A-5】ウェブアーキテクチャの歴史と未来
【17-A-5】ウェブアーキテクチャの歴史と未来Developers Summit
 
.NET の過去、現在、そして未来
.NET の過去、現在、そして未来.NET の過去、現在、そして未来
.NET の過去、現在、そして未来Akira Inoue
 
QoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/EloquentQoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/EloquentHideki Takase
 
ナレッジグラフ入門
ナレッジグラフ入門ナレッジグラフ入門
ナレッジグラフ入門KnowledgeGraph
 
【Japan Partner Conference 2019】遂に来た! フルマーネージド Azure Red Hat OpenShift で実現する O...
【Japan Partner Conference 2019】遂に来た! フルマーネージド Azure Red Hat OpenShift で実現する O...【Japan Partner Conference 2019】遂に来た! フルマーネージド Azure Red Hat OpenShift で実現する O...
【Japan Partner Conference 2019】遂に来た! フルマーネージド Azure Red Hat OpenShift で実現する O...日本マイクロソフト株式会社
 
.NET の今と今後に思うこと (Tokyo Ver.)
.NET の今と今後に思うこと (Tokyo Ver.).NET の今と今後に思うこと (Tokyo Ver.)
.NET の今と今後に思うこと (Tokyo Ver.)Akira Inoue
 
WebDAV, ATOM, and REST
WebDAV, ATOM, and RESTWebDAV, ATOM, and REST
WebDAV, ATOM, and RESTTaisuke Yamada
 
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)NTT DATA Technology & Innovation
 
『RESTful Web サービス』読書会 第4回 9章 説明資料
『RESTful Web サービス』読書会 第4回 9章 説明資料『RESTful Web サービス』読書会 第4回 9章 説明資料
『RESTful Web サービス』読書会 第4回 9章 説明資料Siena. N
 
Webrtc最新動向
Webrtc最新動向Webrtc最新動向
Webrtc最新動向Yusuke Naka
 
Dotnetcore30forwindesktop
Dotnetcore30forwindesktopDotnetcore30forwindesktop
Dotnetcore30forwindesktopru pic
 
第43回HTML5とか勉強会 最新webプロトコル傾向と対策
第43回HTML5とか勉強会 最新webプロトコル傾向と対策第43回HTML5とか勉強会 最新webプロトコル傾向と対策
第43回HTML5とか勉強会 最新webプロトコル傾向と対策Kensaku Komatsu
 
SocialAnalyticsとCQ5がスゴイ
SocialAnalyticsとCQ5がスゴイSocialAnalyticsとCQ5がスゴイ
SocialAnalyticsとCQ5がスゴイMakoto Shimizu
 
20180510_ICON技術セミナー5_芦村
20180510_ICON技術セミナー5_芦村20180510_ICON技術セミナー5_芦村
20180510_ICON技術セミナー5_芦村ICT_CONNECT_21
 
20180510_ICON技術セミナー5_芦村
20180510_ICON技術セミナー5_芦村20180510_ICON技術セミナー5_芦村
20180510_ICON技術セミナー5_芦村Yoshimi Ishizaka
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Hiro Yoshioka
 
Lesson01
Lesson01Lesson01
Lesson01MRI
 
Next-L Enju 開発ワークショップ #4
Next-L Enju 開発ワークショップ #4Next-L Enju 開発ワークショップ #4
Next-L Enju 開発ワークショップ #4Kosuke Tanabe
 

Similar to 9.6 Million Links in Source Code Comments: Purpose, Evolution, and Decay (日本語版) (20)

Getting Started with Graph Database with Python
Getting Started with Graph Database with PythonGetting Started with Graph Database with Python
Getting Started with Graph Database with Python
 
【17-A-5】ウェブアーキテクチャの歴史と未来
【17-A-5】ウェブアーキテクチャの歴史と未来【17-A-5】ウェブアーキテクチャの歴史と未来
【17-A-5】ウェブアーキテクチャの歴史と未来
 
.NET の過去、現在、そして未来
.NET の過去、現在、そして未来.NET の過去、現在、そして未来
.NET の過去、現在、そして未来
 
QoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/EloquentQoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/Eloquent
 
ナレッジグラフ入門
ナレッジグラフ入門ナレッジグラフ入門
ナレッジグラフ入門
 
【Japan Partner Conference 2019】遂に来た! フルマーネージド Azure Red Hat OpenShift で実現する O...
【Japan Partner Conference 2019】遂に来た! フルマーネージド Azure Red Hat OpenShift で実現する O...【Japan Partner Conference 2019】遂に来た! フルマーネージド Azure Red Hat OpenShift で実現する O...
【Japan Partner Conference 2019】遂に来た! フルマーネージド Azure Red Hat OpenShift で実現する O...
 
.NET の今と今後に思うこと (Tokyo Ver.)
.NET の今と今後に思うこと (Tokyo Ver.).NET の今と今後に思うこと (Tokyo Ver.)
.NET の今と今後に思うこと (Tokyo Ver.)
 
WebDAV, ATOM, and REST
WebDAV, ATOM, and RESTWebDAV, ATOM, and REST
WebDAV, ATOM, and REST
 
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
 
『RESTful Web サービス』読書会 第4回 9章 説明資料
『RESTful Web サービス』読書会 第4回 9章 説明資料『RESTful Web サービス』読書会 第4回 9章 説明資料
『RESTful Web サービス』読書会 第4回 9章 説明資料
 
Webrtc最新動向
Webrtc最新動向Webrtc最新動向
Webrtc最新動向
 
Dotnetcore30forwindesktop
Dotnetcore30forwindesktopDotnetcore30forwindesktop
Dotnetcore30forwindesktop
 
第43回HTML5とか勉強会 最新webプロトコル傾向と対策
第43回HTML5とか勉強会 最新webプロトコル傾向と対策第43回HTML5とか勉強会 最新webプロトコル傾向と対策
第43回HTML5とか勉強会 最新webプロトコル傾向と対策
 
SocialAnalyticsとCQ5がスゴイ
SocialAnalyticsとCQ5がスゴイSocialAnalyticsとCQ5がスゴイ
SocialAnalyticsとCQ5がスゴイ
 
20180510_ICON技術セミナー5_芦村
20180510_ICON技術セミナー5_芦村20180510_ICON技術セミナー5_芦村
20180510_ICON技術セミナー5_芦村
 
20180510_ICON技術セミナー5_芦村
20180510_ICON技術セミナー5_芦村20180510_ICON技術セミナー5_芦村
20180510_ICON技術セミナー5_芦村
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010
 
DBpedia Japanese
DBpedia JapaneseDBpedia Japanese
DBpedia Japanese
 
Lesson01
Lesson01Lesson01
Lesson01
 
Next-L Enju 開発ワークショップ #4
Next-L Enju 開発ワークショップ #4Next-L Enju 開発ワークショップ #4
Next-L Enju 開発ワークショップ #4
 

More from Takashi Ishio

NAISTソフトウェア工学研究室紹介2020
NAISTソフトウェア工学研究室紹介2020NAISTソフトウェア工学研究室紹介2020
NAISTソフトウェア工学研究室紹介2020Takashi Ishio
 
演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)Takashi Ishio
 
演習:プログラミング言語処理をやってみよう
演習:プログラミング言語処理をやってみよう演習:プログラミング言語処理をやってみよう
演習:プログラミング言語処理をやってみようTakashi Ishio
 
NAIST ソフトウェア工学研究室紹介 2019
NAIST ソフトウェア工学研究室紹介 2019NAIST ソフトウェア工学研究室紹介 2019
NAIST ソフトウェア工学研究室紹介 2019Takashi Ishio
 
NAIST ソフトウェア工学研究室紹介 2018
NAIST ソフトウェア工学研究室紹介 2018NAIST ソフトウェア工学研究室紹介 2018
NAIST ソフトウェア工学研究室紹介 2018Takashi Ishio
 
NAIST ソフトウェア工学研究室紹介 2017
NAIST ソフトウェア工学研究室紹介 2017NAIST ソフトウェア工学研究室紹介 2017
NAIST ソフトウェア工学研究室紹介 2017Takashi Ishio
 
コピーされたソースファイル集合のオリジナルバージョンの検索
コピーされたソースファイル集合のオリジナルバージョンの検索コピーされたソースファイル集合のオリジナルバージョンの検索
コピーされたソースファイル集合のオリジナルバージョンの検索Takashi Ishio
 

More from Takashi Ishio (7)

NAISTソフトウェア工学研究室紹介2020
NAISTソフトウェア工学研究室紹介2020NAISTソフトウェア工学研究室紹介2020
NAISTソフトウェア工学研究室紹介2020
 
演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)演習:プログラミング言語処理をやってみよう (ver.1.01)
演習:プログラミング言語処理をやってみよう (ver.1.01)
 
演習:プログラミング言語処理をやってみよう
演習:プログラミング言語処理をやってみよう演習:プログラミング言語処理をやってみよう
演習:プログラミング言語処理をやってみよう
 
NAIST ソフトウェア工学研究室紹介 2019
NAIST ソフトウェア工学研究室紹介 2019NAIST ソフトウェア工学研究室紹介 2019
NAIST ソフトウェア工学研究室紹介 2019
 
NAIST ソフトウェア工学研究室紹介 2018
NAIST ソフトウェア工学研究室紹介 2018NAIST ソフトウェア工学研究室紹介 2018
NAIST ソフトウェア工学研究室紹介 2018
 
NAIST ソフトウェア工学研究室紹介 2017
NAIST ソフトウェア工学研究室紹介 2017NAIST ソフトウェア工学研究室紹介 2017
NAIST ソフトウェア工学研究室紹介 2017
 
コピーされたソースファイル集合のオリジナルバージョンの検索
コピーされたソースファイル集合のオリジナルバージョンの検索コピーされたソースファイル集合のオリジナルバージョンの検索
コピーされたソースファイル集合のオリジナルバージョンの検索
 

9.6 Million Links in Source Code Comments: Purpose, Evolution, and Decay (日本語版)