解析処理の除外について

Sider Scan は、リポジトリ内部のソースコードに5行以上の重複コードがないかを検出します。ここで言う「重複コード」には、コード対が完全に一致したものだけではなく、変数名や関数名が変更されていたり、追加の行などがあったものも含まれます。

名前空間やメソッド名が変更されているが、重複コードとして検出される例

上記のように、Sider Scan は、完全一致コードだけではなく、類似のコードも検出しているため、「修正漏れバグ」や「記述の一貫性の欠如」など、開発者にとって有益な指摘を出すことができます。しかし、逆に類似のコードも含めて検出するために、特定のソースコードで、大量の重複コードが検出されてしまうことがあります。多くの場合、このような大量の重複コードは開発者にとってはあまり意味のない指摘となります。そのため、Sider Scan では、ある重複コードの数が閾値を上回った場合、その重複コードに関する分析を打ち切り、次の重複コードの分析に移るようにしています。処理が打ち切られたコードがある場合は、Sider Scan からE-mail で以下のようなメッセージが届きます。もし、あなたのソースコードの中に大量にあるはずの重複コードがSider Scan で検出されなかったら、解析が打ち切られている可能性があります。

Sider Scan が解析処理を打ち切ってしまうソースコードの例は、以下のようなものです。

  SWIGEXPORT jint JNICALL Java_openglJNI_GL_1GLEXT_1VERSION_1get(JNIEnv *jenv, jclass jcls)
  {
    jint jresult = 0;
    int result;

    (void)jenv;
    (void)jcls;
    result = (int)(20210420);
    jresult = (jint)result;
    return jresult;
  }

  SWIGEXPORT jint JNICALL Java_openglJNI_GL_1VERSION_11_12_1get(JNIEnv *jenv, jclass jcls)
  {
    jint jresult = 0;
    int result;

    (void)jenv;
    (void)jcls;
    result = (int)(1);
    jresult = (jint)result;
    return jresult;
  }

  SWIGEXPORT jint JNICALL Java_openglJNI_GL_1UNSIGNED_1BYTE_13_13_12_1get(JNIEnv *jenv, jclass jcls)
  {
    jint jresult = 0;
    int result;

    (void)jenv;
    (void)jcls;
    result = (int)(0x8032);
    jresult = (jint)result;
    return jresult;
  }

  SWIGEXPORT jint JNICALL Java_openglJNI_GL_1UNSIGNED_1SHORT_14_14_14_14_1get(JNIEnv *jenv, jclass jcls)
  {
    jint jresult = 0;
    int result;

    (void)jenv;
    (void)jcls;
    result = (int)(0x8033);
    jresult = (jint)result;
    return jresult;
  }

  SWIGEXPORT jint JNICALL Java_openglJNI_GL_1UNSIGNED_1SHORT_15_15_15_11_1get(JNIEnv *jenv, jclass jcls)
  {
    jint jresult = 0;
    int result;

    (void)jenv;
    (void)jcls;
    result = (int)(0x8034);
    jresult = (jint)result;
    return jresult;
  }
// この後、一部の定数だけが違う同じ関数定義が1000個以上続く

このように、比較的小規模なブロックで変数やリテラルが少しづつ変わっているようなソースコードの場合、検出される重複コードの数が膨大になるため、解析処理が中断されます。ただし、Sider Scan ではファイル単位で処理の中断判定をしているのではなく、重複のパターン毎に判定しているため、このソースコードに含まれる、別のパターンの重複コードは、もしその数が膨大でなければ検出され、「修正漏れバグ」や「記述の一貫性の欠如」などの指摘が出る可能性はあります。