소나 cpd가 중복 블록을 감지하는 방법에 대한 많은 분석을했습니다. 그러나 블록이나 코드 행을 탐지하는 과정을 정확히 트리거 할 수는 없습니다. 최소 개수 줄의.소나 CPD 감지 블록 복제본
예를 들어 내가 아래에 쓰는 경우 20 번 이상 반복해도 코드 중복을 감지하지 못합니다. 나는 블록을 제공하는 시도에 나중에
System.out.println("this is good");
System.out.println("this is good");
System.out.println("this is good");
System.out.println("this is good");
System.out.println("this is good");
System.out.println("this is good");
System.out.println("this is good");
System.out.println("this is good");
System.out.println("this is good");
System.out.println("this is good");
는 그것이 많은 블록을 가지고에도 불구하고 두 개의 블록으로 고려하고 여기에
try
{
connection = null;
}
catch(Exception e){
e.printStackTrace();
}
try
{
connection = null;
}
catch(Exception e){
e.printStackTrace();
}
try{
connection = null;
}
catch(Exception e){
e.printStackTrace();
}
try{
connection = null;
}
catch(Exception e){
e.printStackTrace();
}
을 중복.
제가 10으로 일정한 블록 크기를 발견이 http://docs.sonarsource.org/3.1/apidocs/src-html/org/sonar/plugins/cpd/SonarEngine.html
에서 수중 음파 탐지기 3.4.1
하여이 중복 감지에 따라 정확한 과정을 알려하지만이 연관 수 있어요하세요 내 관찰.
이것은 토큰 시퀀스와 일치하는 소위 "토큰 기반"복제 탐지기의 표시입니다. 이들은 오 탐지율이 높습니다. **} catch (예제에서 Exception **은 그러한 탐지기로 작은 복제본으로 간주됩니다. 이러한 탐지기는 몇 가지 추가 제한 사항이있는 꽤 큰 클론을 허용하도록 구성되는 경향이 있습니다. Andras의 대답을 참조하십시오. - 클론 탐지기는 언어 구조 만 일치하므로 ** 예외를 ** 복제본으로 간주하지 않으므로 결과적으로 상당히 작은 입도의 클론을 찾을 수 있습니다. –