Android

[Android/Kotlin] 정적 검사를 사용해보자 1 - 소나큐브(Sonarqube)

Question영 2019. 7. 31. 15:27
반응형
정적 검사를 사용해보자 1 - 소나큐브(Sonarqube) SonarQube









소나큐브는 코드 품질을 향상을 위해 사용되는 정적 검사 툴이다.

프로젝트에 적용하기 위해 검색한 여러 사이트의 방법을 이리저리 적용해 보았고

과정이 쉽지는 않았지만 결국 연동에 성공했다.

아래는 성공한 방법을 정리한 내용이다.

 

시스템 환경

 

  • 운영 체제 : macOS Mojave
  • Tool : Android Studio 3.4.2
  • Kotlin 1.3.41
  • Java 8

 

 

설치

 

  1. Homebrew 를 설치하자

     

    https://brew.sh/index_ko

     


 

  1. 터미널을 열고 Homebrew 를 이용하여 소나큐브를 설치한다.

    brew install sonarqube
    brew services start sonarqube

 

  1. 로컬에서 실행 한다.

    http://localhost:9000/
    ID/PW : admin / admin

 

  1. 로컬 서버 리포트 연동을 위한 스캐너를 설치한다.

    brew install sonar-scanner

 

 

Android Studio PlugIn 설치

 

  1. 상단 메뉴 > Android Studio > Preferences 클릭

     



  1. 카테고리에 'Plugins' 진입 후 Marketplace 진입

     


  1. 검색에 sonarqube 입력 후 검색

     


  1. 'SonarQube Community Plugin' 과 'SonarLint' 설치 후 Android Studio 재 시작

     

  2. IDE 재시작 후 Preferences 재진입 > Other Settings > SonarLint General Settings 이동

     

  3. SonarQube servers 에서 '+' 를 선택 > 소나 큐브 URL(http://localhost:9000/) 을 입력하고 Next 클릭

     

  4. 소나 큐브 URL (http://localhost:9000/) 에 진입 후 토큰 값을 생성

     

  5. 생성한 토큰 값을 Android Studio 에서 설정하고 있던 SonarQube 토큰 값에 입력

     

  6. 완료 후 Update binding 을 눌러 연결된 서버와 동기화 진행

     

  7. build.gradle(.) 이동

     


  1. dependency 에 아래와 같이 입력



    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
        classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.7.1"
    }

 

  1. build.gradle(.) 하단에 다음과 같이 입력


    buildscript {

        ...

        dependencies {

                ...
                
                classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.7.1"
            }
        }

        ...

        subprojects {
            repositories {
            maven { url 'https://plugins.gradle.org/m2/'}
        }
    }

    apply plugin: 'org.sonarqube'
    sonarqube {
        properties {
            property "sonar.host.url", "http://localhost:9000/"
            property "sonar.login", "admin"
            property "sonar.password", "admin"
            property "sonar.projectKey", "ProjectKey"
            property "sonar.projectName", "ProjectName"
            property "sonar.projectVersion", "1.0"
            property "sonar.sourceEncoding", "UTF-8"
            property "sonar.sources", "src/main/java"
            property "sonar.profile", "Sonar way"
        }
    }

이미 subprojects 설정이 되어 있다면 되어 있는 곳에 maven 코드를 추가하면 된다.


  1. 하단 Terminal 탭을 클릭 > 명령창에 하기와 같이 입력

    ./gradlew sonarqube

 





  1. 다음과 같은 글이 나오면 서버와 연동 성공된 것이다.

 



정적 파일 분석

 

사용법

  • IDE 하단에 SonarLint 탭을 활성화시킨 후 아무 파일이나 클릭하면 분석이 진행되고 결과가 표시.
  • 이슈사항이 있을 경우엔 관련 내용이 리스팅 된다.
  • 오른쪽 하단에는 이슈 내용과 수정을 위한 가이드가 노출된다.
  • 이슈 해결 후 수정이 됬는지 확인하고 싶을 경우 왼쪽의 재생 버튼을 누르면 된다.



  • 전체 분석을 진행 했을때는 위와 같은 화면이 노출된다.

 

 

메뉴의 Analyze에서 세 가지 옵션

  • Analyze with SonarLint는 바로 위에서 설명한 단일 파일 분석과 동일한 내용.
  • Analyze VCS Changed Files with SonarLint는 VCS(Git..)에서 수정된 파일에 대해서만 분석.
  • Analyze All Files with SonarLint는 프로젝트 전체의 파일을 분석.

 

검사 제외 항목 설정

Android 에서 'app/build' 폴더 안에는 실행을 위한 여러 동적 파일이 있다. 해당 파일들은 프로젝트 내용 및 설정이 변경될때 마다 변경되는 Compile 결과물들이기 때문에 검사를 할 필요가 없다. 따라서 검사 항목에 제외하기 위해 설정을 진행해줘야 한다.

 


  • 상단 메뉴 > Android Studio > Preferences > SonarLint Project Settings 진입




  • 왼쪽 상단 탭 중 'File Exclusions' 선택


  • 왼쪽 하단 '+' 기호를 클릭하여 Type 은 Directory, Item 은 app/build/** 로 설정 후 OK 버튼 클릭

 

상단 메뉴 > Analyze > Analyze All Files with SonarLint 를 클릭하여 재 검사를 해보면 이전에 검색되던 build 폴더의 파일들이 사라져 있는 것을 확인할 수 있다.



관리 페이지 화면


  • 초기 화면


  • 분석 결과 연동 이후 화면


  • 프로젝트 상세 정보



에러 케이스

 

케이스가 많았으나 재 구현 하기 힘들어 사례와 해결 방법을 하나만 올려 놓았다.

이후 오류 케이스를 발견하면 업데이트 하도록 하겠다.

  1. '> Task :app:compileProdDebugUnitTestKotlin FAILED'

ExampleUnitTest.java 파일 삭제

 

 


참고 블로그

 

 






반응형