重複コード表示画面の見かた

この画面では、Sider Scan が検出した重複コードペアをサイドバイサイドで表示します。Sider Scan では、テキストが一言一句同一な、完全一致な重複コードだけではなく、変数名や関数名、また変数の型などが一部変更された類似コードや、行単位での挿入・削除が行われたコードであっても、ロジックがほぼ同一であれば、重複コードとして検出します。

重複コード表示画面の例

上図の重複コード表示画面において

  • 背景がピンク(フォントは赤) の部分は完全一致部分
  • 背景が灰色(フォントは黒) の部分は重複ペア間でどこかが異なる部分
  • 背景が灰色の行で、ピンクと緑でハイライトされたword が、左右の重複コードペア間で異なる部分

となります。

上記の例では、表示されている行全体が重複コードブロックであり、そのうち左右のコードで異なる部分は、左のコードの65行目と68行目で、それぞれ、OrcStruct と、Group が異なるword になります。他に、左のコードにのみ、76から79行目に左のコードには存在しない複数の行があります。

また、Sider Scan では、重複コードペア一つ一つを評価し、「重要度」というスコアを付けています。重要度の計算方法は、我々が独自に行ったオープンソースプロジェクトの解析結果や、ユーザーインタビュー等に基づき導出されたヒューリスティックな値であり、絶対ではありません。また、より有用な指摘ができるよう現在も開発中の指標であり、今後のSider Scan の解析機の進化により定義や値が変更される可能性があります。

現在のバージョンで、重要度の計算に加味している要素は以下の通りです。

  • 重複コードの行数: 重複コードとみなされたコードブロックの行数です
  • 重複コードの類似度: 変数や関数の名称が違うなど、ロジックとしては同じでも文字列が異なる箇所がどのぐらいあるかを示します
  • 同一ファイル係数: 異なるファイルの場合、より重要度が上がるよう係数をかけています
  • 重複コードのロジックの複雑さ: 制御構造を分析し、複雑なロジックに関しては重要度が上がるよう係数をかけています

その他、左右のコードのタイトル部にはソースコードのフルパスが表示されます。また、解析結果のE-mail に添付されている「CIサーバーで詳細を見る」ボタンを押せば、この重複コードブロックの前後のコードを閲覧することができます。ご活用下さい。