Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Panel
borderColor#C3CCD7
bgColor#FCFCFC

Table of Contents

Table of Contents
maxLevel2
indent16px


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

Anchor
ignore-issues
ignore-issues
이슈 무시하기

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

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

파일의 이슈를 무시하기

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

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

Image Removed

블록의 이슈를 무시하기

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

Notes:

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

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

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

Image Removed

예: 

  • 모든 파일의 모든 이슈를 무시하고자 하는 경우=> 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 속성을 설정합니다. 옵션을 설정하기 위한 문법과 관련된 자세한 내용은 패턴 절을 참조합니다

Anchor
patterns
patterns
패턴

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

Wildcard

Matches

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

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


Code Block
languagebash
titleExamples
# 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