분석 범위 좁히기
SQ Official Doc Link: https://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus
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/**/*
- key:
중복 무시하기
지정한 파일에 대해 중복 검출을 무시하도록 설정할 수 있습니다.
Administration > General Settings > Analysis Scope > Duplications 메뉴에서 Duplication Exclusions 속성을 설정합니다. 옵션을 설정하기 위한 문법과 관련된 자세한 내용은 패턴 절을 참조합니다.
코드 커버리지 무시하기
지정한 파일에 대해 단위 테스트에 의한 코드 커버리지 계산을 무시하도록 설정할 수 있습니다.
Administration > General Settings > Analysis Scope > Code Coverage 메뉴에서 Coverage Exclusions 속성을 설정합니다. 옵션을 설정하기 위한 문법과 관련된 자세한 내용은 패턴 절을 참조합니다
패턴
경로는 프로젝트 기준 디렉토리에 대한 상대경로입니다. 다음 와일드카드 문자를 사용할 수 있습니다:
Wildcard | Matches |
---|---|
* | 0 혹은 그 이상의 문자 |
** | 0 혹은 그 이상의 디렉토리 |
? | 1 문자 |
상대 경로는 해당 컴포넌트의 전체 경로를 기준으로 합니다(그림의 붉은 사각형 안에 표시된 경로 참조):
# 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 관련 문의 : 이메일 :::