arrow-up icon
Image

よくある質問

deco-blob-1 decoration
graphical divider

重複コード(英: Duplicate Code) は、コードクローン(英: Code Clone)とも呼ばれ、ソースコード中に存在する、互いに一致または類似したコード片の対のことを指します。コードクローンは、様々な理由で既存のコードを「コピー」した際に生成されます。

全ての重複コードが問題というわけはありませんが、一般的に重複コードの量が多いソフトウェアは変更や拡張に弱くなります。あるバグを修正するために、そのバグの発現したコードを修正するだけでは不十分なケースが増え、当該コードをコピー元とする重複コードを全て検索し、コピー先にも同じ修正が必要かどうか判断する必要があります。ソフトウェアの規模が大きくなるに従い、この作業の難易度は増していきます。

オリジナルのコードを何らかの理由で「コピー」した際に、コピー先で必要な修正を忘れてしまうことがあります。他に、重複したコードの一つを編集する場合、他の重複コードをすべて検索し、同じように編集する必要がありますが、その際に、一部のコードで修正が漏れてしまうことがあります。以上のような重複コードに起因する修正の見落としを、「修正もれバグ」と呼んでいます。

Siderscanは、ユーザーの管理するサーバー上で動作します。入力されたソースコードは、ユーザーの管理するサーバーのCPU、メモリー、等のリソースを用い、サーバー内部で解析処理されます。入力されたソースコードがネットワークを通じて外部サーバーへ送信されることは一切ありません。

現在は、Python, Java, JavaScript, TypeScript, C, C++, C#, PHP, CUDA, Ruby, VB.net に対応しております。

また、FPGA記述言語(拡張子: vhd, vhdl, v, sv) Objective-C に関しては、専用の解析器はないのですが、C/C++コードみなして解析処理を行っています。他に対応を希望する言語がございましたら、是非お知らせ下さい。

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

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

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

要確認コードや、重要な重複コードが検出された場合、結果がメールで送信されますが、そのメールを転送したり、そのメールに記載のあるURLをチームメンバーに伝えることで情報の共有が可能です。

解析時間は、解析ディレクトリのサイズや、重複コードの検知数によって異なります。目安として、2000ファイル程度のリポジトリで1時間程度かかります。

無償プランを含めて全てのプランで、メールよるテクニカルサポートとオンプレミス環境での導入支援をさせていただきます。

Siderscanは、以下の文字列を含むディレクトリ・フォルダをデフォルトで解析対象から除外しています。

test, sample, proto, example, 3rdparty

また、以下の文字列と一致するディレクトリ・フォルダをデフォルトで解析対象から除外しています。

dist, vendor, vendors, node_modules

ご自身の解析対象のソースコードが上記ディレクトリに含まれていないかご確認下さい。

他に不明な点がございましたら こちらからお問い合わせください。