11

대용량 코드 기반에서 코드를 복사하여 붙여 넣을 때 자동화 된 방법을 찾고 있습니다. 우리는 주로 C++로 작업하고 있습니다. 이 작업을 수행하는 변경 사항을 거부 할 수 있도록 자동화 된 방식으로 확률이 높고 오탐 (false positives)이 적음을 탐지하는 것이 그 의도입니다.큰 코드베이스에서 복사 된 코드를 자동으로 검색하는 방법은 무엇입니까?

개발자가 일부 코드를 알지 못하는 것을 두려워하고 그 대신 사용을 위해 복사하고 모두를 위해 작동하는 방식으로 마스터 복사본을 작업하는 대신 작은 수정을합니다. 코드를 유지하기가 더 어려워지는 그러한 단축키를 감지하고 중지하고 싶습니다.

누구나 이러한 사례를 시도하고 감지하는 자동화 된 방법을 제안 할 수 있습니까? 이 자동화 된 솔루션을 도입하기 전에 이미 미끄러 진 영역을 찾기 위해 사실을 적용한 후이를 적용 할 수 있습니까?

답변

10

PMD 패키지 만 사용하면됩니다. 그것은

또한 더 많은으로 검출 할 수 ... C++ 및 구성 CPD (복사 - 붙여 넣기 - 감지) 지원

  • 사용하지 않는 코드
  • 코딩 스타일 위반
  • 방법/기능/일상적인 크기
  • 의 긴밀한

그리고 더 (워드 프로세서의 많은 특정 자바, 그래서 정확히 w 확실하지 않다 있지만, 모자는 C++에 적용 가능합니다) ...

4

스탠포드 대 교수 Alex Aiken은 여러 대학의 학부 과정에서 표절을 탐지하는 데 사용되는 MOSS (소프트웨어 유사성 측정) 도구를 개발했습니다. 이 도구는 구조적으로 유사한 코드 조각을 감지하는 데 매우 효과적입니다. 나는 그것이 당신의 경우에 어떻게 적용될 지 모르지만, 조사할만한 가치가있을 수 있습니다.

1

나는 groian과 java에 대해 simian을 사용했으며 매우 효과적임이 입증되었습니다. 광범위한 구성과 많은 언어를 지원했습니다. http://www.harukizaemon.com/simian/features.html을보십시오. 비상업적 인 용도로는 무료이며, 평가판 라이센스를 사용하여 탐색하는 것이 좋습니다.

2

다양한 언어의 클론 검색을 자동화하도록 설계된 CloneDR을 확인하십시오. > 레이아웃 현혹되지 순수한 텍스트 정합 기 등을 달리 - (언어 공백 설명을 무시 참조 언어 구조/구문을 사용

  • :

    CloneDR 의해 다른 클론 검출기로부터 차별화 Rabin-Karp 스타일 중복 감지기로

  • 변수 또는 상수뿐만 아니라 전체 문 또는 블록 (토큰 스타일 감지기와 대조적으로)으로 구성된 매개 변수 변형을 감지하는 복제본
  • 가장 높은 정밀도 양성 반응 ")에 따른보고 o f 복제 검출기를 비교하는 연구 논문

C++ (Java, C#, ...) 용 버전이 있으며 웹 사이트에서 예제 보고서를 볼 수 있습니다. 평가 버전도 다운로드 할 수 있습니다.

저는 저자입니다.

1

SourceMeter 도구를 사용하면 복제 된 소스 코드 (복제본)에 대한 텍스트 보고서를 얻을 수 있습니다. 구조적으로 매우 유사하지만 어휘 적으로 다를 수있는 소위 Type-2 클론을 감지합니다. 검색된 클론은 전체적인 구문 엔티티 (예 : 함수, 블록)이므로 쉽게 리팩터링 될 수 있습니다. 클론이 함수의 끝에서 시작하여 다른 하나가 시작될 때 끝나는 것은 아닙니다.

당신이 찾고있는 또 다른 중요한 기능은 분석 된 버전 전반에 걸쳐 개별 복제물을 추적 할 수 있다는 것입니다. 그렇게하면 새 복제본이 작성되거나 기존 복제본이 삭제되거나 불일치하게 변경된 경우를보고합니다.

관련 문제