코드 중복 검색을 위해 CPD 도구를 사용하고 있습니다. CPD 도구에는 공백과 주석이 포함됩니다. 공백을 피할 수있는 방법을 알려주십시오. 중복 된 사례가 올 수 있습니다. 4 줄의 중복 코드와 4 줄의 주석이 있다고 가정하면 4 대신 8 줄을 반환합니다.코드 중복에 공백과 주석을 피하는 방법 CPD 도구
1
A
답변
0
어떤 특정 (복사 붙여 넣기 감지기) CPD 도구입니까? 많이있다.
CPD가 중복을 감지하는 방법은 비교하는 기본 엔티티에 따라 다릅니다. (복제 탐지기를 구축했습니다).
일부는 소스 행에서만 작동합니다. 이 꽤 프로그래밍 언어에서 많은 공백과 주석을 구별 할 수 없다 그 도구를 준 것으로 생각됩니다. 그것에 당신의 코드는 그냥 원시 텍스트입니다. 이 도구는 "코드 블록 A가 인 코드 B와 중복되어 있고 규칙적인 변경 사항 (예 : 매개 변수)"이 실제로 알고 싶어한다는 것을 알 수 없습니다. (나는 이런 종류의 CPD가 끔찍한 해답을 주겠다고 생각합니다. 그러나 질문에 대해서는 을 사용합니다).
일부는 언어 토큰에 대해 알고있는 언어로 작동합니다. 이러한 도구는 공백을 무시하는 데 매우 유용합니다. 그들은 토큰의 특정 종류, 그들은 일반적으로 명령 줄 스위치의 일종으로, 너무, 의견을 무시할 수 있습니다 알고 있기 때문에. (따라서 어떤 CPD 도구입니까?). 그러나 언어 구조를 이해하고, 따라서 순서
} {
다른 모든 같은 일련의 클론이라고 생각하지 않습니다. 솔직히, 그것은 바보 같은 복제품입니다. 두 번째로 이러한 토큰 기반 탐지기는 하나의 토큰의 넓은 범위 (일반적으로 식별자 또는 상수 의 위치를 다른 상수 또는 식별자로 대체 함) 만 감지 할 수 있습니다. 그래도이 기능은 회선 기반 CPD 도구에서 유용성이 크게 향상되었습니다.
일부 소수의
언어 구조, 예를 들어,에서 작동, (나는 CloneDR, 내 바이오 참조, 이들 중 하나 만들 일이) 일치를 제어하기 위해 언어 의 문법을 사용합니다. 이것들은 토큰 기반 CPD 도구를 실수로 만들 수 없기 때문에 발견 된 복제본을 더 잘 얻을 수 있습니다. (구조화 된) 토큰 시퀀스 (예 :식이 을 식별자로 바꾼 경우) IMHO (oops, opinion!) 이것들은 훨씬 더 잘 검출 된 클론을 제공합니다 (이것이 내가 CloneDR을 만드는 이유입니다).