포스트

detect (정적 프로그램 분석)


Summary

  • 정적 프로그램 분석 (static program analysis) : 프로그램을 실행하지 않고, 소프트웨어를 분석하는 것
  • ktlint VS detekt
    • ktlint는 코드 컨벤션을 중점적으로 보고, detekt는 코드의 전체적인 퀄리티를 높이기 위한 분석을 수행
    • 예를 들면, 메서드 길이가 너무 길다거나, 메서드의 depth가 너무 깊다거나 등의 분석을 수행함
  • https://detekt.dev/

사용 방법

1.detekt에서 Getting Started > Run detect using Gradle Task 참고

2.AndroidStudio 에서 build.gradle(:app)에 아래 코드 추가 후 Sync now… 클릭

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
	configurations {
	    detekt
	}
	
	dependencies {
	    detekt 'io.gitlab.arturbosch.detekt:detekt-cli:1.22.0'
	}
	
	task detekt(type: JavaExec) {
	    mainClass.set("io.gitlab.arturbosch.detekt.cli.Main")
	    classpath = configurations.detekt
	
	    def input = "$projectDir"
	    def exclude = ".*/build/.*,.*/resources/.*"
	    def params = [ '-i', input, '-ex', exclude]
	
	    args(params)
	
	}

3.build.gradle(:app)에 task detekt의 왼쪽에 있는 재생 버튼 클릭하여 Run ‘앱 이름’ 으로 실행

1
![0](/assets/img/GBD39/0.png)

Detekt Config 파일 추가하기

잡고싶지 않은 에러는 config 파일에서 active: false로 잡지않게 할 수 있음

1.Android Studio에서 프로젝트 단으로 변경 후 최상위 디렉토리에사 마우스 우클릭 > New > File 클릭

1
![1](/assets/img/GBD39/1.png)

2.file 이름은 detekt.yml로 생성 후 config file의 내용을 복사해서 붙여넣기

1
![2](/assets/img/GBD39/2.png)

3.build.gradle(:app)에서 task detekt에 config를 정의하는 변수 추가하고 파라미터로 넘기기

1
2
3
4
5
6
7
8
9
10
11
12
	task detekt(type: JavaExec) {
	    mainClass.set("io.gitlab.arturbosch.detekt.cli.Main")
	    classpath = configurations.detekt
	
	    def input = "$projectDir"
	    def exclude = ".*/build/.*,.*/resources/.*"
	    <u>def config = "$rootDir/detekt.yml"</u>
	    def params = [ '-i', input, '-ex', exclude, <u>'-c', config</u>]
	
	    args(params)
	
	}

결과

에러

3

에러가 있으면 해당 에러가 발생하는 코드의 위치와 원인을 알려준다.

성공

4

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.