분석 범위 좁히기

Table of Contents

SonarQube가 분석한 결과가 만족스럽지 않다면--즉, 개발자 본인과 관계가 없다고 판단되면--, 개발자들은 더이상 SonarQube를 사용하지 않게 될 것입니다. 때문에 각 프로젝트를 어떻게 분석할지 세심하게 환경을 설정하는 것이 매우 중요합니다. 이를 통해 노이즈--중간 코드(generated code 즉, 중간 단계의 자동 생성 코드)에 표시된 이슈나 중복, 혹은 특정 타입의 객체와 관계없는 규칙으로 인한 이슈--를 줄일 수 있습니다.

SonarQube가 제공하는 여러가지 옵션을 활용해 어떤 대상을 분석할지 정확하게 설정할 수 있습니다. 에를 들면:

  • 특정 파일 혹은 디렉토리를 분석 대상에서 완전히 제외합니다.
  • 특정 파일/디렉토리를분석하지만, 해당 파일/디렉토리에서 이슈를 검출하지 않습니다(특정 혹은 모든 코팅 규칙에 대해).
  • 특정 파일/디렉토리를 분석하지만, 해당 파일/디렉토리에서 중복을 검출하지 않습니다.
  • 특정 파일/디렉토리를 분석하지만, 해다 파일/디렉토리에서 코드 커버리지를 계산하지 않습니다.

위 옵션은 global 혹은 project 레벨에서 설정 가능하며 Administration > General Settings > Analysis Scope를 사용합니다.

파일 제외하기

중간 코드나 라이브러리 소스 코드 등은 분석 대상에서 제외할 것을 권장합니다. 네 가지 범위에서 분석 범위를 좁힐 수 있고, 네가 지 방법을 모두 조합할 수 있습니다.

소스 디렉토리

sonar.sources 속성을 설정해 특정 디렉토리만을 분석하도록 분석 범위를 지정합니다.

파일 확장자

대부분의 언어 플러그인은 특정 확장자를 가진 파일만을 분석하도록 기본 설정되어 있습니다.  Administration > General Settings > [Language] 에서 파일 확장자 속성을 설정할 수 있습니다.

직접 파일 선택하기

SonarQube가 특정 파일들만 분석 대상에 포함 혹은 포함하지 않도록 설정할 수 있습니다. Administration > General Settings > Analysis Scope > Files 메뉴를 사용합니다.

특정 파일만 분석 대상에서 제외하고자 하는 경우, 다음 옵션을 사용합니다:

  • sonar.exclusions - 소스 코드 파일 을 제외합니다
  • sonar.test.exclusions - 단위 테스트 파일을 제외합니다

특정 파일만 분석 대상에 포함하고자 하는 경우, 다음 옵션을 설정합니다:

  • sonar.inclusions - 소스 코드 파일을 포함합니다
  • sonar.test.inclusions - 단위 테스트 파일을 포함합니다

위 옵션은 global 및 project 레벨에서 설정할 수 있습니다. 옵션을 설정하기 위한 문법과 관련된 자세한 내용은 패턴 절 및 이슈 무시하기 절을 참조합니다.

이슈 무시하기

SonarQube가 특정한 컴포넌트의 이슈 혹은 특정한 코딩 규칙을 위반한 이슈들을 무시하도록 설정할 수 있습니다. Administration > General Settings > Analysis Scopte > Issues 메뉴를 사용합니다.

Note 다음 속성들은 웹 인터페이스를 통해서만 설정할 수 있습니다.

파일의 이슈를 무시하기

입력한 정규 표현식(regular expression)과 일치하는 코드 플럭을 포함하는 모든 파일의 이슈를 무시하도록 설정할 수 있습니다. 

예: @javax.annotation.Generated를 포함한 모든 파일의 이슈를 무시:

블록의 이슈를 무시하기

파일 내 특정 블록 상의 이슈만을 무시하도록 설정할 수 있습니다. 지정된 블록을 제외한 나머지 블록의 이슈는 무시하지 않습니다. 정규 표현식(혹은 일반적인 문자역)를 사용해 블록의 시작 및 종료 지점을 설정합니다.

Notes:

  • 첫 번째 정규 표현식만 일치하고, 두 번째 정규 표현식이 일치하지 않는 경우 파일의 마지막까지를 블록으로 간주합니다.
  • 다중 라인에 대한 정규 표현식은 매칭시키지 않습니다.

여러 기준을 조합하여 이슈를 무시하기

특정한 코딩 규칙들에 대해 특정 컴포넌트에 발생한 이슈를 무시할 수 있습니다. 세부적인 규칙을 표시하기 위해서는 rule detail에 표시된 rule id를 사용해야 합니다:

예: 

  • 모든 파일의 모든 이슈를 무시하고자 하는 경우=> key: *; path: */
  • COBOL 프로그램 bank/ZTR00021.cbl의 모든 이슈를 무시하고자 하는 경우=> key: *; path: bank/ZTR00021.cbl
  • Java 패키지 com.foo에 위치한 클래스의 모든 이슈는 무시, 하위 패키지의 이슈는 무시하지 않고자 하는 경우 => key: ;path: com/f oo/
  • "object" 디렉토리 및 그 하위 디렉토리의 파일들에 대해 "cpp:union" 코딩 규칙을 위반한 모든 이슈를 무시하고자 하는 경우=> key: cpp:Union; path: object/*/

코딩 규칙 적용 범위 제한하기

코딩 규칙의 적용 범위를 특정한 컴포넌트로 제한할 수 있습니다.

예:


  • "Magic Number" 코딩 규칙을 "Bean" 객체에만 적용하고자 하는 경우=> key: checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.MagicNumberCheck;path: **/*Bean.java
  • "bank/creditcard", "bank/bankcard" 디렉토리에 위치한 COLBLE 프로그램에 대해서만 "Prement GO TO" 규칙을 적용하고자 하는 경우 => 이 경우 다음의 두가지 기준을 설정해야 함:
    • key: cobol:COBOL.GotoTransferControlOutsideCurrentModuleCheck; path: bank/creditcard/**/*
    • key: cobol:COBOL.GotoTransferControlOutsideCurrentModuleCheck; path: bank/bankcard/**/*

중복 무시하기

지정한 파일에 대해 중복 검출을 무시하도록 설정할 수 있습니다.

Administration > General Settings > Analysis Scope > Duplications 메뉴에서 Duplication Exclusions 속성을 설정합니다. 옵션을 설정하기 위한 문법과 관련된 자세한 내용은 패턴 절을 참조합니다.

코드 커버리지 무시하기

지정한 파일에 대해 단위 테스트에 의한 코드 커버리지 계산을 무시하도록 설정할 수 있습니다. 

Administration > General Settings > Analysis Scope > Code Coverage 메뉴에서 Coverage Exclusions 속성을 설정합니다. 옵션을 설정하기 위한 문법과 관련된 자세한 내용은 패턴 절을 참조합니다

패턴

경로는 프로젝트 기준 디렉토리에 대한 상대경로입니다. 다음 와일드카드 문자를 사용할 수 있습니다:

Wildcard

Matches

*0 혹은 그 이상의 문자
**0 혹은 그 이상의 디렉토리
?1 문자

상대 경로는 해당 컴포넌트의 전체 경로를 기준으로 합니다(그림의 붉은 사각형 안에 표시된 경로 참조):


Examples
# Exclude all classes ending by "Bean"
# Matches org/sonar.api/MyBean.java, org/sonar/util/MyOtherBean.java, org/sonar/util/MyDTO.java, etc.
sonar.exclusions=**/*Bean.java,**/*DTO.java
 
# Exclude all classes in the "src/main/java/org/sonar" directory
# Matches src/main/java/org/sonar/MyClass.java, src/main/java/org/sonar/MyOtherClass.java
# But does not match src/main/java/org/sonar/util/MyClassUtil.java
sonar.exclusions=src/main/java/org/sonar/*
 
# Exclude all COBOL programs in the "bank" directory and its sub-directories
# Matches bank/ZTR00021.cbl, bank/data/CBR00354.cbl, bank/data/REM012345.cob
sonar.exclusions=bank/**/*
 
# Exclude all COBOL programs in the "bank" directory and its sub-directories whose extension is .cbl
# Matches bank/ZTR00021.cbl, bank/data/CBR00354.cbl
sonar.exclusions=bank/**/*.cbl


© 2017-2018 Moses Kim.

별도의 언급이 없는 한, 이 스페이스의 컨텐츠는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
SONARQUBE는 SonarSource SA의 트레이드 마크입니다. 모든 트레이트 마크 및 저작권은 각 소유자의 소유물입니다.

::: SonarQube 관련 문의 : 이메일 :::