2012-06-06 3 views
14

나는 유사성을위한 소스 코드를 비교할 수있는 도구를 찾고 있습니다.유사 코드 검출기

우리는 방대한 양의 거짓 긍정 (false positive)을 갖고있는 매우 사소한 시스템을 가지고 있으며 실제 긍정은 쉽게 그 안에 묻힐 수 있습니다.

내 요구 사항은 다음과 같습니다 오탐 (false positive)의

  • 비교적 적은 양의
  • 좋은 검출 율 단지 하나의 값
  • 보다 더 복잡한 출력 이상적으로
  • (예 이들은 서로 예정) C (C99) 및 C에 사용할 수
  • ++ (C++ 03 최적 C++ 11)
  • 여전히 공동 용
  • 가능한 유지 비 대화식 모드에서 서로
  • 사용할 수에 대한 두 개의 소스 파일을 mparing

편집 :

다음 두 코드 조각이 동일하고 같은 감지해야 혼란을 방지하려면 :

for (int i = 0; i < 10; i++) { bla; }

int i; while (i < 10) { bla; i++; }

여기에 같은 :

int x = 10; y = x + 5;

int a = 10; y = a + 5;

+1

diff는 사용자의 요구 사항 중 일부를 만족합니까? –

+1

@HighPerformanceMark LOL, 아니요. –

+2

구문론이 아닌 2 개의 코드의 의미 상 유사성을 비교하는 도구를 원하는 것처럼 보입니다. 나는 이것이 미해결 된 문제이고 그것이 당신을 위해 만족스러운 해결책을 찾기 위해 애 쓰고 있다고 의심합니다. 나는 서면으로, 당신의 원래 질문이 나를 잘못 인도 한 것처럼 많은 독자를 오도 할 것이라고 생각합니다. 나는 또한 여러분이 관심있는 비교가 어떤 종류인지 명확히 진술해야한다고 생각합니다. –

답변

15

은 참으로 당신이 요구 한 무엇. 의미 적 수준에서 작동하기 때문에 위에 제시 한 상황을 감지합니다. 이 도구는 언어를 인식하므로 주석은 분석시 고려되지 않으며 변수 및/또는 함수 이름의 간단한 검색 및 대체를 통해 수정 된 코드를 탐지하는 데 많은 도움이됩니다.

참고 : 저는 몇 년 전에 대학원에서 컴퓨터 과학을 가르치기 위해이 도구를 사용했으며, 인터넷에서 잡아 당겨 졌던 코드를 감지하는 데 훌륭하게 작동했습니다. 당신이 "측정 소프트웨어 유사성을"구글 경우, 당신은 몇 가지 더 유용한 안타를 찾아야한다 http://fie2012.org/sites/fie2012.org/history/fie99/papers/1110.pdf

: http://www.ics.heacademy.ac.uk/resources/assessment/plagiarism/detectiontools_sourcecode.html

+0

fie1012.org에 대한 링크가 더 이상 유효하지 않은 것으로 보입니다. 대체 링크를 제공 할 수 있습니까? – Eric

+1

사용해보기 : http://www3.nd.edu/~kwb/nsf-ufe/1110.pdf – Throwback1986

3

PMD에서 복사 - 붙여 넣기 검출기가 될 수 있습니까?

6

컴퓨터 과학 용어의 문제점은 소스 코드 표절 탐지로 설명 될 수 있습니다. 좋은 시작은 Dobbs 박사의 기사 인 Detecting Source-Code Plagiarism을 읽는 것입니다. 소스 코드에서 표절을 탐지하는 알고리즘을 나열합니다.

참고 : http://theory.stanford.edu/~aiken/moss/ 표절 코드를 탐지하기 : 어려운 컴퓨팅 문제 : 내가 과거에 MOSS를 사용했습니다

1

당신은 duplo을 시도 할 수 여기에 유사한 응용 프로그램의 잘 문서화 된 계정입니다. 공통 라인을 찾을 수 있습니다. 공백 문자 변경을 무시할 수있는 기능이 있지만 이름이 바뀐 변수가있는 코드는 감지하지 못하므로 표절을 감지 할 때 도움이되는 것보다 더 많은 정리 작업이 필요합니다.

1

JPLAG (https://github.com/jplag/jplag)를 사용하여 코드 유사성을 확인하고 학생들이 Java 및 텍스트 파일로 작업하는 것을 비교하기 시작합니다. 동일한 코드 구조와 변수 대체를 확인하는 것이 효과적입니다.