나는 Ira D. Baxter 외 다수가 Clone Detection using Abstract Syntax Trees이라는 제목의이 논문을 읽었습니다. 원칙적으로하위 트리를 사용하여 유사한 코드 섹션 찾기
, 하위 트리 클론 찾는 은 간단하다 : 평등에 대한 다른 모든 하위 트리에있는 모든 하위 트리를 비교 내가 아래에 재생 종이에서 단락이있다. 연습에서 몇 가지 문제가 발생합니다. 니어 - 근처 클론 감지, 하위 클론 및 배율. ...
, 아차에게 클론의 위치를 전체 하위 트리 에 해싱 좋은 해시 기능은 트리의 모든 요소를 포함 정확하게 때문에 실패하고, 따라서 다른 버킷에 작은 차이 머릿단을 정렬합니다. 우리는 인위적으로 나쁜 해시 함수을 선택하여이 문제를 해결했습니다. 이 기능은 에 특징이있어서 근처의 주요 클레임에서 찾을 수있는 기본 속성 이 보존됩니다. 미스 클론은 일반적으로 이며, 절차를 복사하여 붙여 넣은 다음 작은 수정 사항을 붙여 넣습니다. 이러한 수정은 은 일반적으로 복사 된 코드 조각과 관련된 트리의 모양에 작은 변경을 생성합니다. 따라서 은 이런 종류의 니어 미스 클론은 종종 다른 하위 나무를 가지고 있다고 주장합니다. 작은 하위 나무. 이 관찰을 바탕으로 작은 하위 트리를 무시하는 해시 함수는 goodchoice입니다. 여기에 제시된 실험에서는 으로 식별자 만 무시하는 기능을 사용했습니다 (트리에서 남음). 따라서 우리의 해싱 함수는 비교를 위해 동일한 해시 저장소에 비슷한 모듈러 식별자 인 인 트리를 넣습니다.
나는이 글에서 설명한 기술을 구현하기 위해 노력하고 있지만 (즉, 종이의 시작 부분에 불행히도)이 한 단락을 이해하려고에 갇혀 있어요. 나는 단락이 말하는 것을 이해하지만 제작자는 해시 함수를 선택하거나 AST를 실제로 해싱하는 방법을 언급하지 않습니다. 누군가 구현의 관점에서 간단한 예를 들어 설명해 주시겠습니까?
SO 검색 엔진이 매우 좋거나 작성자의 답장을 받기가 대단히 행운입니다. 어느 쪽이든 그것은 나를 위해 윈 - 윈입니다 :) 당신의 설명은 내 질문을 명확히합니다. 마지막 요청을 읽은 후 종이에 후속 작업을 권하는 것이 좋습니까? (개발자 모자를 만들기 전에 익숙해 져야한다고 생각하는이 분야의 최첨단 작업). 그건 그렇고, 정말 좋은 종이! – Legend
@Legend : 클론 감지 소송의 좋은 색인은 http://students.cis.uab.edu/tairasr/clones/literature/에서 찾을 수 있습니다. 제지가 출판 된 이후로 많이 쓰여졌습니다. 논쟁의 대부분은 a) 클론을 어떻게 탐지합니까? b) 클론을 어떻게 잘 보이게합니까? Elmar Juergen의 논문은 확장 성이 뛰어나지 만 매개 변수화를 포기함으로써 잘 확장됩니다. 다른 트리 탐지 보고서가 있다는 것을 기쁘게 생각하지만 CloneDR은 실제로 시간의 테스트를 견디어 냈습니다. 상업용 버전은 종이처럼 작동하지 않지만 세부 사항은 게시되지 않습니다. –
@Legend : 최신 기술을 듣고 싶다면 5 월 하와이의 소프트웨어 공학 국제 회의에서 Software Clones 워크샵에 참석해야합니다. 게다가, 그 여행의 큰 boondoggle : -} 거기에 보자! –