FindBugsを用いてコードクローンとバグの関係を調査、分析した論文。 FindBugsはバグが発生するか発生しそうな部分を静的に解析して見つけ、見つかった箇所とバグのカテゴリーを出力する。 この研究ではより重大なバグのカテゴリと、そうでないカテゴリに分けて考えるようにしている。 RQ1:コードクローンの部分のバグ密度はそうでない部分のバグ密度に比べて大きいか 重大でないバグの密度はコードクローンの箇所とそうでない箇所とで中央値に差がなかったが、重大なバグではコードクローンでない箇所の方が、コードクローンの箇所よりも3.7倍の差で密度が大きかった。 また、バグパターン数とメソッドサイズの相関はかなり小さく、直線もかなり右側に傾いている。このことは、大多数のメソッドがあまり多くのパターンのバグを含んでいないことを意味している。 This result is not unexpected, and confirms the intuition that some methods have many bug patterns while most of the methods contain hardly any bug pattern at all. 「ほとんどのメソッドが極めて少ないバグパターンしか所有していない一方で、いくつかのメソッドは多くのバグパターンを所有している」 クローンのメソッドの数とそうでないメソッドの数との差が大きいと、分析の脅威となりうる。このことを解決するためにクローンのメソッドとそうでないメソッドを同じ数だけランダムに取ってきて、それらのバグ密度を測った。4 times less (0.58 vs. 2.32)(clone vs. non-clone) また、クローンのメソッドとそうでないメソッドの平均的なサイズに結構大きな差があるので、クローングループのサイズの平均も異なるかもしれない。このことを解決するために、クローンのメソッドとそうでないメソッドのサイズが同じになるようにランダムに取ってくるようにし、それらのバグ密度を測った。3.1 times less(0.58 vs. 1.82)(clone vs. non-clone) RQ2:クローンの中で、より頻繁に見られる特定のバグのカテゴリーはあるか クローンの中で発生するバグのカテゴリーは悪いコーディングスタイルと悪い習慣によるもの(StyleとBad Practice)がほとんどで、危険性の高いものではない RQ3:それぞれのバグパターンはどのような頻度で拡散するか 少なくとも1つのバグパターンを含む、339のクローングループを手作業で調べた。 カテゴリー1:あるクローングループに出てくるバグパターンが、他のクローングループにも出てくる カテゴリー2:あるクローングループにしか出てこないバグパターン 75%のクローンに含まれるバグパターンはなんの変更も加えられずに重複していた バグパターンがあまり複雑なものが多いことが分かったため、開発者が開発をする中でクローンの使用に関することを知らせ、どのような決定をするかを支援するようなツールがあると、コードの質を維持するために役に立つかもしれない。