다음을 통해 공유


코드 복제본 검색을 사용하여 중복 코드 찾기

클론 코드 유사 코드 조각을 별도입니다.일부 시간에 대 한 개발 된 응용 프로그램에는 일반적인 현상으로. 클론을 찾아 여러 단편을 업데이트 해야 하기 때문에 응용 프로그램을 변경 하려면 어려울.Visual Studio 찾기 코드를 리팩터링할 수 있도록이 복제 하는 데 도움이 됩니다.

클론의 특정 부분을 찾기 또는 모든 복제본에서 솔루션 찾기.직접 복사본을 검색 하는 외에 복제 분석 도구 다른 조각 변수 및 매개 변수 이름에 몇 개의 문을 재배열 되어 있어야 볼 수 있습니다.

코드 복제 analyser Visual Studio 솔루션 전체에서 C# 및 Visual Basic 프로젝트에 중복 된 코드를 검색합니다.

대부분 일치하는 코드 복제본 분석 결과

클론의 특정 코드 부분을 찾으려면

  1. 메서드 또는 get/set 정의 내에 코드 조각 강조 표시 합니다.

    [!참고]

    문 없습니다 선언 서명 필드, 메서드 또는 속성 등의 복제본을 찾을 수 있습니다.

  2. 조각에 대 한 바로 가기 메뉴에서 선택 일치 하는 복제 솔루션에서 찾기.

유사한 방법 또는 솔루션에 이미 있는 조각 인지 여부를 확인 하려면이 메서드를 사용 합니다.

솔루션의 모든 복제본을 찾을 수

  • Analyse 메뉴를 선택 코드 클론 분석 솔루션.

이 메서드는 코드를 검토할 때 특히 유용 합니다.

[!참고]

이 명령으로 10 개 이하의 문이 긴 복제를 발견할 수 없습니다.

결과 유사성의 순서로 표시 됩니다.코드 조각이 참조 하는 각 항목을 확장 합니다.

조각에서 사용 되는 로컬 변수 이름이, 다 하 고 몇 가지 명령문을 삽입 하거나 삭제 하는 경우에 유사성 검색 됩니다.

복제 비교

  1. 복제 결과 코드 창에서 두 파일 또는 두 파일 포함 된 복제 그룹을 선택 합니다.

  2. 선택 비교 바로 가기 메뉴에서.

이 기능은 같은 비교 도구를 사용 하 여 소스 제어 버전을 비교 하는 데 사용 되는.변경 하려면 선택 옵션 에서 도구 메뉴.확장 소스 제어Visual Studio Team Foundation Server.선택 사용자 도구 구성 다음 추가.

특정 파일 또는 메서드는 분석에서 제외.

  1. 제외 하려는 메서드 정의 Visual Studio 프로젝트에 새 XML 파일을 추가 합니다.

    파일이 프로젝트의 일부 인지 여부는 중요 하지 않습니다.이 프로젝트의 상위 디렉터리에 있어야 합니다.

  2. 파일 이름 확장명을 변경 합니다..codeclonesettings

  3. 다음 예제와 같이 파일의 내용을 편집 합니다.

    <CodeCloneSettings>
      <Exclusions>
        <!-- Add any combination of the following node types. -->
        <!-- Absolute or relative path names: -->
        <File>MyFile.cs</File>
        <!-- Filepaths may contain wildcards: -->
        <File>GeneratedFiles\*.cs</File>
        <!-- Namespace, Type, and FunctionName must be fully qualified: -->
        <Namespace>MyCompany.MyProject</Namespace>
        <Type>MyCompany.MyProject.MyClass1</Type>
        <FunctionName>MyCompany.MyProject.MyClass2.MyMethod</FunctionName>
        <!-- Names may contain wildcards: -->
        <Namespace>*.AnotherProject</Namespace>
        <Type>*.AnotherClass*</Type>
        <FunctionName>MyProject.*.AnotherMethod</FunctionName>
      </Exclusions>
    </CodeCloneSettings>      
    

복제 코드를 찾을 수 있습니다.

코드 클론 분석 "near miss" 복제본을 찾을 수 있습니다.

코드에서 코드를 복사한 다음 새 위치에 맞게 개발자가 자주 결과 복제 합니다.따라서 분석기 복제를 찾으려면 오류가 발생 하기 전에 설정할 수 있는 변경의 정도 고려 하는 것이 가장 좋습니다.다음과 같은 수정 작업을 만들 수 있습니다, 그리고 및 복제 여전히 인식 합니다.각각의 경우에 있을 허용 오차를 특정 수정 횟수:

  • 식별자를 이름을 바꿉니다.

  • 삽입 및 삭제 합니다.

  • 문을 다시 정렬 합니다.

Hh205279.collapse_all(ko-kr,VS.110).gif어떤 복제 찾을 수 없습니다.

  • 형식 선언을 비교 됩니다.두 클래스와 매우 유사한 집합 필드 선언의 경우 예를 들어, 이들은 클론으로 보고 되지 않습니다.

    메서드 및 속성 정의 명령문만 비교 됩니다.

  • 솔루션 코드를 복제에 대 한 분석 10 개 이하의 문을 오래 된 복제본 검색 되지 않습니다.

    그러나 적용할 수 있는 일치 하는 복제 솔루션에서 찾기 짧은 조각으로.

  • 40% 이상 조각 토큰 변경 합니다.

  • 프로젝트에 포함 되어 있는 경우는 .codeclonesettings 파일을 해당 프로젝트에 정의 된 요소에 이름이 있는 경우 없습니다 검색 됩니다 코드는 Exclusions 부분은 .codeclonesettings 파일.

  • 생성 된 코드의 일부.

    1. *.designer.cs, *.designer.vb

    2. InitializeComponent 메서드

    그러나이 자동으로 생성 된 모든 코드에 적용 되지 않습니다.텍스트 템플릿을 사용 하는 경우 예를 들어, 생성 된 파일에 이름을 지정 하 여 제외할 수 있는 .codeclonesettings 파일.

복제 코드 분석을 사용 하는 경우

클론 찾기는 다음 경우에 일반적으로 유용 합니다.

  • 기존 코드를 업데이트 하는 경우. 버그를 수정 하거나 변경 요구에 응답 하지는 일반적으로 변경 해야 할 코드의 위치를 찾아 시작 합니다.변경 하기 전에 해당 코드 세그먼트의 클론을 검색 합니다.복제본 발견 되는 경우:

    1. 각 복제본에 동일한 변경 해야 하는지 여부를 고려해 야 합니다.

    2. 또한 공유 메서드나 클래스에는 복제 된 코드를 리팩터링 하는 좋은 기회 인지 고려해 야 합니다.

  • 아키텍처 정리 합니다. 모든 반복 끝 쪽으로 사용 코드 클론 분석 솔루션 에 있는 분석 메뉴.

  • 코드를 만들 때. 새 코드를 작성 하는 경우 이미 비슷한 코드를 찾으려면 도구를 사용 합니다.

대규모 코드 기반으로 클론 분석 적용

코드는 별도 매우 큰 프로젝트를 부분 사이 복사 됩니다 및 조직의 다른 부분에 복사 되는 경우가 많습니다.작업 중인 즉시 솔루션에서 뿐 아니라 수 있으므로 보다 크게 복제에 대 한 코드 베이스를 확인 해야 할.

소스 트리를 통해 코드 클론 분석 프로그램을 적용 하려면 모든 저장소에 프로젝트를 포함 하는 솔루션을 만듭니다.

팁

둘 이상의 솔루션에서 프로젝트를 포함할 수 있다는 점을 기억 하십시오.많은 복제 코드에 대 한 프로젝트를 분석 하려면 모든 프로젝트를 포함 하는 솔루션을 만들 수 있습니다.프로젝트는 일반적으로 액세스 되는 솔루션에서 제거할 필요가 없습니다.

생성된 코드

생성 된 코드로 코드 클론 분석을 사용할 수 없습니다.예를 들면 다음과 같습니다.

  • T4 템플릿을 생성 하는 코드입니다.

    T4에 대 한 자세한 내용은 코드 생성 및 T4 텍스트 템플릿.

  • 같은 Silverlight 디자이너 또는 WPF 사용자 인터페이스 디자이너에서 생성 한 코드입니다.

T4 템플릿 코드 클론 분석에서 생성 된 파일을 제외 하려면

  1. 템플릿은 Visual Studio 프로젝트의 하위 디렉터리에 배치 합니다.예를 들어, 이름을 GeneratedFiles.

  2. 새 텍스트 파일을 프로젝트에 추가 하 고 이름 및 확장명을 변경 합니다.t4Exclusions.codeclonesettings

  3. 파일의 내용을 다음과 같이 변경 합니다.

    <CodeCloneSettings>
      <Exclusions>
        <File>GeneratedFiles\*.cs</File>
      </Exclusions>
    </CodeCloneSettings>