Sider Scanに関するよくあるご質問

コードクローンとは何でしょうか? #

コードクローン(英: Clode Clone) とは、重複コード(英: Duplicate Code) とも呼ばれ、ソースコード中に存在する、互いに一致または類似したコード片の対のことを指します。コードクローンは、様々な理由で既存のコードを「コピペ」した際に生成されます。全てのコードクローンが問題というわけはありませんが、一般的にコードクローンの量が多いソフトウェアは変更や拡張に弱くなります。あるバグを修正するために、そのバグの発現したコードを修正するだけでは不十分なケースが増え、当該コードをコピー元とするコードクローンを全て検索し、コピー先にも同じ修正が必要かどうか判断する必要があります。ソフトウェアの規模が大きくなるに従い、この作業の難易度は増していきます。

入力されたソースコードはどう取り扱われていますか? #

入力されたソースコードは、アプリケーションの内部データベースに保存されます。入力データが外部サーバーへ送信されることは一切ありません。

本当にサーバーとの通信は無いのでしょうか? #

Sider Scan は、ユーザーのローカルOS上で動作します。入力されたソースコード群は、アプリケーション内部のデータベースに保存され、コードクローン検出エンジンもローカル環境で実行されます。以上のようにお客様固有の情報が外部サーバー等に送信されることはありません。ただし、製品のアップデートの通知の受け取り、実際のアップデートファイルの受け取りに弊社管理サーバーとのネットワーク通信を行います。

解析できるプログラミング言語は何でしょうか? #

現在は、Java/JavaScript/TypeScript/PHP/C/C++/Swift/Ruby/CUDA に対応しております。入力されたディレクトリにある、拡張子が c, h, cc, cpp, cxx, hpp, cu, cuh, php, swift, js, jsx, ts, tsx, vue, php, java, rb 以外のファイルは分析の対象になりません。 今後、Python, C# のサポートを計画しています。他に対応を希望する言語がございましたら、是非お知らせ下さい。

解析結果で全てのファイルが表示されていないように見えますが? #

Sider Scan の解析結果画面で表示されているファイルは、プロジェクトの全ファイルではなく、「コードクローンが検出された」全ファイルになります。なお、複数のファイル間にまたがるコードクローンだけではなく、同じファイル内部でコピーされたコードクローンも検出され、表示されます。

クローンの重要度はどのように算出していますか? #

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

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

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

要確認コードの「優先度」はどのように算出していますか? #

Sider Scan では、検出されたクローンのペア間におけるコードの一貫性の欠如を検出し、これを「要確認コード」として提示しします。要確認コードとは、変更漏れのバグの可能性がある、あるいはバグではないが可読性の観点から修正したほうがよいと思われるコードになります。
我々のパターン分析アルゴリズムの性質上、特に問題の無いコードも要確認コードとして検出されてしまうことがあります。いわゆるFalse-Positive (偽陽性)問題です。そこで、要確認コードを様々な観点から一つ一つ評価し、総合的に確認の「優先度」を算出しています。現在、優先度の算出に使用している基準の一例は以下のとおりです。

  • 指摘された単語(変数、関数名、定数、引数など)のクローン内での出現頻度
  • 同一クローン内での指摘の数
  • 一致した単語と一致していない単語の比率
  • 一致した単語と一致していない単語のクローン内でのスコープ

今後、算出アルゴリズムの追加・修正により、優先度が入れ替わる可能性があります。

解析結果を共有する方法はありませんか? #

Sider Scanでは、拡張子がradump という独自のデータファイル形式で、解析結果をImport/Export することが可能です。まず、解析結果ダッシュボードの「解析ファイルを保存」ボタンをクリックし、radump を保存して下さい。このファイルを他の開発メンバーに送付し、アプリケーションで開いていただく(ダッシュボードにドラッグアンドドロップして下さい)ことで、同じ解析結果を表示することが可能です。