日本ソフトウェア科学会第 41 回大会 (2024 年度) 講演論文集

コードクローン中のコードスメルに関する調査研究本田 澄 奥野 真伍 吉田 則裕

コードクローンとは，ソースコード中に存在する一致するまたは類似したコード片である．また，コードスメルとはソフトウェアに問題を引き起こす可能があるコード片のことである．本研究では何らかのコードスメルがあるコード片がコードクローンによって増加することを問題と考え，コードクローン中にあるコードスメルについて調査研究を行う．その方法としてソフトウェアの開発履歴も含めてコードクローンの分析が行える CloneTracker を用いて対象とするソフトウェアのコードクローンを検出する．加えて，ソフトウェアの静的解析ツールである SonarQube を利用してコードスメルを検出する．CloneTracker が検出したコードクローンと SonarQube が検出したコードスメルを利用してコードクローン中のコードスメルを抽出しその特徴を分析する．対象とするソフトウェアは GitHub にて公開されているオープンソースソフトウェアである．

RQ1: コードクローン中にコードスメルが存在す

1 はじめにコードクローンとは，ソースコード中に存在する一致するまたは類似したコード片である．また，コーるか

RQ2: コードクローン中に存在するコードスメルにはどのような特徴があるのか

ドスメルとは，ソフトウェアに問題を引き起こす可能これらの研究課題に対して，調査対象として GitHubがあるコード片のことである．本研究では何らかのコードスメルがあるコード片がコードクローンによっにて公開されている Apache Software Foundation に関連するプロジェクト †3 を対象とした．また，分析をて増加することを問題と考え，コードクローン中にあ単純化するために，Java 言語で記述され，pom ファるコードスメルについて調査する．

イルが含まれているプロジェクトのみを対象とする．

本研究では，オープンソースソフトウェア (OSS)を対象として，コードクローンが存在するかを調べ，2 関連研究存在する場合にコードクローン中にコードスメルがコードスメルに関して，品質に与える影響や保守に存在するかを調査する．また，コードクローン中の与える影響を分析し評価しているものがある [1] [2]．

コードスメルについてどのようなものがあるのかを分析する．調査では，CloneTracker†1 [3] を利用して本研究ではコードクローン中に存在するコードスメコードクローンを分析し，SonarQube†2 を利用してに与える影響の分析に役立つと考えられる．

ルを対象とした調査であり，品質に与える影響や保守コードスメルを分析する．
本研究の研究課題を以下に定義する．

3 評価と結果
評価方法として，GitHub にて公開されているプロ

Kiyoshi Honda, Shingo Okuno, 大阪工業大学, Osaka
Institute of Technology .
Norihiro Yoshida, 立命館大学, Ritsumeikan University.
†1 https://clonetracker.com/†2 https://www.sonarsource.com/

ジェクトを Clone し，CloneTracker を利用してコードクローンであるコードを特定する．次に，Sonar-†3 https://github.com/apache表1

各プロジェクトのコードスメル中のコードスメルの数

BCEL
BeanUtils
Cli
Codec
Collections
Compress
ConﬁgurationDBCPDigester
JEXL
MathNet
SCXML
Text

表2

コードクローン中のコードスメルの種類と数

コードコード

コードクローン中コードスメルの種類数

スメル

クローンのコードスメル

1867
403
183
1275
2338
3561
2902
1389
366
360
1301
1023
536
2407

6
12141021133674
6137

550
20
10002
614
50
14

複数繰り返されるリテラルの指摘
認知複雑度に関する指摘
ループ内の break,continue を減らす指摘
ループ内のループカウンターに関する指摘
TODO コメントを行う指摘
反対の演算子「!=」を使用する指摘「if-then-else」を単一の return に置き換える指摘
常に false になる式を削除する指摘
System.out,System.err をロガーに変える指摘
Null の代わりに空の配列を返す指摘
switch 文に default ケースを追加する指摘
コメントアウトしている行を削除する指摘
エラー出なく例外をキャッチする指摘
代入式内の代入式を分ける指摘
ローカル変数への無駄な代入を削除する指摘

988864432222221

Qube を利用して Clone したプロジェクトを対象としてソースコードの静的解析を行い，コードスメルとRQ2: コードクローン中に存在するコードスメルにはどのような特徴があるのかされるコード片を特定する．本研究では SonarQube

表 2 からコードクローン中にコードスメルが存在しで定義されたコードスメルを対象として分析する．

た 9 プロジェクト全体では，「複数繰り返されるリテCloneTracker で特定したコードクローンであるコーラルの指摘」が最も多い種類であることがわかった．

ド中に SonarQube で特定したコードスメルがあるかを目視で調査する．

4 まとめと展望

評価対象としたプロジェクトは GitHub にて公開

本研究ではコードクローン中のコードスメルにつされている Apache Software Foundation に関連すいて調査し，14 プロジェクト中 9 プロジェクトに存る 14 プロジェクト (BCEL, BeanUtils, Cli, Codec,在すること，その中で最も多く存在するコードスメル

Collections, Compress, Conﬁguration, DBCP, Di-が「複数繰り返されるリテラルの指摘」であることを

gester, JEXL, Math, Net, SCXML, Text) である．

明らかとした．今後は対象を増やしプロジェクトの種類とコードスメルの種類について分析を行う．

3. 1 結果
表 1 に SonarQube で解析したコードスメルの数

謝 辞 本 研 究 は JSPS 科 研 費 JP19K20242,JP24K02923, JP20K11745 の助成を受けたものです．と，CloneTracker で解析したコードクローンの数と，二つの結果から特定したコードクローン中のコード参 考 文 献

スメルの数を示す．表 2 にコードクローン中に存在す[1] Sjøberg, D. I., Yamashita, A., Anda, B. C.,
Mockus, A., and Dybå, T.: Quantifying the Eﬀect ofCode Smells on Maintenance Eﬀort, IEEE Transactions on Software Engineering, Vol. 39, No. 8(2013),
pp. 1144–1156.
[2] Yamashita, A. and Moonen, L.: Do developers
care about code smells? An exploratory survey,
2013 20th Working Conference on Reverse Engineering (WCRE), 2013, pp. 242–251.
[3] 三木聡, 大歳始, 浅原明広, 大澤俊晴, 千葉滋: 実務で使われるコードクローン検出・追跡システムをめざして,
日本ソフトウェア科学会第 40 回大会講演論文集, 2023,
pp. 1–8.

るコードスメルの種類とその数を示す．数は評価対象としたプロジェクトの全てを対象として数えたものである．

3. 2 考察
RQ1: コードクローン中にコードスメルが存在するか

表 1 から 14 プロジェクト中 9 プロジェクトにコー
ドクローン中にコードスメルが存在した．