研究速報に，再利用先のプロジェクトがその変更に追従していStack Overﬂow のコード片へ加えられた変更に追従しない GitHub プロジェクトの変更パターン分類によるるかの状況を調査し，また追従の必要性について変更内容をパターン分類して考察を行う．

2. 調 査 手 法考察栗原拓己†

嶋利 一真††

神田哲也†

井上 克郎†††（正員：フェロー）

本調査では一度以上変更されている SO のコード片を含む回答の投稿とそのコード片を再利用している拡Classiﬁcation of changes in GitHub projects not following changes made to Stack
Overﬂow code snippets
Takumi KURIHARA† , Kazumasa SHIMARI†† , Tetsuya KANDA† , Nonmembers,
and Katsuro INOUE††† , Fellow

張子が “java” である GH プロジェクトを対象に，変更への追従状況や SO のコード片の変更パターンについて調査を行う．データセットとして，SO の全コード片の変更履歴にアクセス可能なデータセットである† 大阪大学大学院情報科学研究科

SOTorrent [2] (Version 2018-09-23) を用いた．本論文

Graduate School of Information Science and Technology, Osaka University†† 奈良先端科学技術大学院大学先端科学技術研究科

Graduate School of Science and Technology, Nara Institute of Science and Tech-

では，SO の回答のコード片について，明示的に GH

nologyプロジェクト側で再利用が示されている場合とそうで††† 南山大学理工学部

ない場合の 2 種類を調査対象とする．

Faculty of Science and Technology, Nanzan University

調査対象 1: 明示的に再利用が示された場合 では，DOI:10.14923/transinfj.???????????

コードコメント内に再利用元の SO の回答の投稿のGitHub プロジェクトに再利用されていURL を記しているプロジェクトと，その再利用元のる Stack Overﬂow のコード片に変更が加えられた場合SO の投稿を対象とする． このような明示的な再利用に再利用側の追従状況や追従の必要性について，その関係は SOTorrent では独立した項目として集計されて変更内容に対してパターン分類を実施することで考察おり，調査対象となった SO の投稿は 7,481 件，それを行う．

らに対応する GH プロジェクトの数は合計 4,621 件で

あらまし

キーワード

Stack Overﬂow，ソースコード再利用，あった．これらの再利用関係から一度以上変更されている SO のコード片を再利用している GH プロジェク

OSS，ソフトウェア進化
1. ま え が きトを抽出したのち，調査における重複を避けるため，ソフトウェア開発プラットフォームである GitHub

ある SO の投稿を再利用している GH プロジェクトが（以下：GH）では，さまざまな Web サイトからコード片複数あった場合はそのうち 1 件のみを対象とした．最の再利用が行われている．その中でも，Stack Overﬂow

終的に，調査対象となった SO の投稿と GH プロジェ（以下：SO）のようなプログラミングに特化した Q&A

クトの組は 232 件であった．

フォーラムからの，質問への回答に含まれるコード片

調査対象 2: 明示的に再利用が示されていない場合の再利用が頻繁に行われている．SO のコード片は修では， Abdalkareem らによる SO のコード片の再利正などの目的で変更が加えられることが多く，再利用用に関する調査 [3] をもとに，22 個の Android アプリ

先の GH プロジェクトのコード片が SO の最新バー

ケーションと SO の回答のコード片の間でコードクジョンのコード片と一致しなくなる可能性がある．

ローン検出ツール CCFinderX を用いて検出された構Manes らは参照関係にある GH プロジェクトと SO文的に一致したコード片の組を抽出した．これらののコード片に対して調査を行い，再利用後に両者とも組においてタイムスタンプを比較することで，GH プに変更が行われいるものは高々 10% 程度で，それ以外ロジェクトが SO のコード片を再利用している事例をは片方だけが変更されていることを明らかにした [1]．

対象とした．また，コードクローン検出における最低つまり，バグ修正などの再利用時に影響を及ぼすようトークン数のパラメータは 60 とした．その結果，調なコード片の変更を GH プロジェクトの開発者が見逃査対象となった SO の回答の投稿と GH プロジェクトしている可能性が存在するが，調査では両者の変更内の組は 409 件であった．

容について詳細な分析が行われていないため，そのよ

なお，調査対象 1 と調査対象 2 で同一の SO の投稿うな状況がどの程度発生しているかは不明である．

を参照しているものはなかった．また，変更がコード

そこで，本調査では GH プロジェクトに再利用されている SO の回答のコード片に変更が加えられた場合
電子情報通信学会論文誌 D Vol. Jxx–D

コメントのみである場合は調査対象から除外した．
これらの調査対象について，以下の項目を調査した．

No. xx pp. 1–3 © 一般社団法人電子情報通信学会 xxxx

1

電子情報通信学会論文誌 xxxx/xx Vol. Jxx–D No. xx
表 1 SO コード片の変更パターン
Table 1 Change Patterns of SO Code Snippets.
変更パターン
是正保守
適応保守
完全化保守
機能追加
非機能追加

変更内容の例
バグ修正・仕様に合わせた変更
OS・言語のバージョンによる変更
計算アルゴリズムの改善・リファクタリング
テストの追加，呼出し先メソッドの実装
import 文の追加・クラス宣言文の付与

表 2 GH プロジェクトで再利用されている SO コード片のバージョンごとの件数
Table 2 The number of SO code snippets for each version reusedin GH projects.
利用バージョン
調査対象 1 調査対象 2
合計
最新（うち追従あり）
186 (0)278 (0) 464 (0)旧46131177

表 3 SO のコード片の変更パターンごとの件数
Table 3 The number of code snippets for each change pattern.

2. 1 調査項目 1: 再利用コード片のバージョンの特定と追従状況
再利用先の GH プロジェクトに対して，SO のコード片の最新バージョンと旧バージョンのどちらを再利用しているかを特定する．調査対象 1 では再利用先と変更パターン
是正保守
適応保守
完全化保守
機能追加
非機能追加

調査対象 111615212

調査対象 2534402239

合計
6410552451

再利用元の両コード片を目視で比較し手作業で再利用元を特定した．調査対象 2 では，再利用元のいずれか調査結果を表 2 に示す．GH プロジェクトに再利用さのバージョンのみがコードクローンと判定されたコーれている SO のコード片は 72.4% が最新バージョンでド片において，再利用元のバージョンが最新バージョあった．また，GH プロジェクトが SO のコード片の変ンかどうかで判断した．

更に追従した結果として最新バージョンを利用していGH プロジェクトが SO の最新バージョンのコードる事例は調査対象 1，調査対象 2 ともに見られなかっ片を再利用していると判定されたものに対して，それた．ここから，再利用元の SO のコード片に変更が加が過去に SO の旧バージョンを再利用し，その後 SO のえられた場合でも，再利用先の GH プロジェクトはそコード片の変更にあわせて GH プロジェクト側で同様の変更に追従しないことが一般的であると分かる．の変更を加え追従したものであるのかを調査する．具3. 2 調査項目 2: SO 側の変更パターンの分類

体的には，まず SO のコード片における最初の投稿か

GH プロジェクトで再利用されている SO の旧バーら最新バージョンへの変更までの期間を求め，その期ジョンのコード片に対して SO 側で加えられた変更の間内において GH プロジェクト側で SO の旧バージョ分類結果を表 3 に示す．この中から，件数が多い是正

ンのコード片を再利用した履歴が存在していれば，GH保守，完全化保守，非機能追加について考察を行う．

プロジェクトは追従によって現在は SO の最新バー

是正保守はバグ修正や不十分な機能に対する変更をジョンを再利用している状態になったと判定する．

含んでいるため，旧バージョンのコード片を利用した

2. 2 調査項目 2: SO 側の変更パターンの分類

場合に不具合が発生する可能性がある．そのため，こGH プロジェクトが SO の旧バージョンのコード片のような変更が行われた場合には，開発者は積極的にを再利用しているとされた SO のコード片が，SO 側追従を検討すべきである．完全化保守は GH プロジェ

でどのように変更されているかを分類し，変更に追従

クトが SO のコード片の変更に追従しなくてもバグがする必要性を調査する．本調査では Hindle ら [4] の研発生するということはなく，是正保守に比べて追従究で用いられた変更パターンをもとに，SO 特有の変の必要性は低い．しかし，パフォーマンスの向上やリ更パターンを考慮し，表 1 に示す 5 種類の変更パター

ファクタリングのようなソースコードの品質に影響をンへ分類を行った．複数の分類に当てはまる変更が行与える変更であるため，追従の必要性について議論すわれていた場合は，複数種類のラベル付けを行った．

る価値がある．非機能追加は，import 文の追加などの分類作業は第一著者と第二著者の 2 名が行い，結果がSO のコード片の再利用時における説明補足による変一致しない場合は協議のうえ分類を修正した．

更などを示すため，再利用先の GH プロジェクトにお3. 調 査 結 果
3. 1 調査項目 1: 再利用コード片のバージョンの特定と追従状況
再利用先のプロジェクトにおける追従状況に関する
2

いてこれらの変更内容に追従する必要性は低い．

4. 今後の展望
GH プロジェクトにおける追従状況と SO での有用な変更の実態から，変更時におけるメッセージやそのレ

ター

変更内容の解析を行うことで，SO のコード片の変更の発生とその概要を GH プロジェクトの開発者に通知するツールの開発が挙げられる．
謝 辞

本 研 究 は JSPS 科 研 費 JP18H04094，

JP19K20239 の助成を受けたものです．
文[1]

献S.S. Manes and O. Baysal, “Studying the Change Histories of Stack
Overﬂow and GitHub Snippets,” Proc. MSR, pp.283–294, 2021.

[2]

S. Baltes, L. Dumani, C. Treude, and S. Diehl, “SOTorrent: reconstructing and analyzing the evolution of stack overﬂow posts,”
Proc. MSR, pp.319–330, 2018.

[3]

R. Abdalkareem, E. Shihab, and J. Rilling, “On code reuse from
StackOverﬂow: An exploratory study on Android apps,” Information and Software Technology, vol.88, pp.148–158, 2017.

[4]

A. Hindle, D.M. German, M.W. Godfrey, and R.C. Holt, “Automatic classication of large changes into maintenance categories,”
Proc. ICPC, pp.30–39, 2009.

（xxxx 年 xx 月 xx 日受付）

3

Abstract This paper investigates and discusses the status and necessity of change tracking in GitHub projects for
Stack Overﬂow code snippets that are reused in GitHub projects by performing pattern classiﬁcation on code snippetchanges.
Key words Stack Overﬂow, Code Reuse, OSS, Software Evolution