강력한 정적 분석 툴인 Sonarqube

강력한 정적 분석 툴인 Sonarqube

무료이긴한데, VS 처럼 Community(무료), Developer, Enterprise 등의 유료버전이 있다.

무료버전에서도 기본적인 언어 15개를 지원한다. (C++, C#, Java, JS, Phython 등)

다운로드 사이트:

 Download | SonarQube

Download SonarQube 7.9.x LTS

www.sonarqube.org

  1. 무료 버전인 커뮤니티버전을 다운.

  2. 다운받으면 압축파일이 하나 생기는데 압축을 풀고 자신의 최애 경로로 이동

  3. \sonarqube-8.3.1.34397\bin\windows-x86-64 경로 안에

  1. 위와 같은 내용물들이 있을텐데, StartSonar.bat를 실행 시켜주면 소나 로컬 서버가 동작.

  2. 실행 전 사전 준비 사항: Java JDK 11 버전 이상 설치 및 환경변수 설정

  3. 실행 하면 SonarQube is up 이란 메시지가 뜨고 서버에 접속.

  1. Sonar Qube 접속 주소: http://localhost:9000 

  2. 기본 아이디 / 암호: admin / admin

  3. Sonar Qube 접속 화면

  1. 서버 오픈까지는 했고 이제 개발중인 프로젝트를 등록하고 연동.

  2. 화면 중앙에 ‘Create new projet’ 버튼을 눌러 project key, display name을 입력하고 프로젝트를 생성.

  3. 토큰 생성

  1. 토큰을 생성하라고 하는데 이는 나중에 코드 스캔할때 꼭 필요하니까 성 된 토큰을 꼭 복사해서 저장. 이후에 확인하고 싶어도 못한다. (user account에서 토큰을 지우고 재생성 해야한다.)

  2. 토큰 저장 후 Continue 버튼을 누르면 아래 화면이 나온다.원하는 언어를 선택하고 아래 절차대로 수행하면 되는데, 여기서는 C#에 대해서만 설명한다.

  1. MSBuild 용 Scanner를 다운. Download 링크에서 받아도 되지만 아래 링크에서 받는게 최신버전.

 .NET Framework4.6+ 버전을 다운받는다.

 Sonar Scanner:

16. SonarQube와 마찬가지로 압축 파일인데 압축 풀고 자신의 폴더로 이동.

(왠만하면 Sonar Qube랑 같은 경로면 좋을 것 같다.)

  1.  Java JDK와 마찬가지로 환경변수 설정 필요.

  2. 시스템 Path 변수 편집에서 SonarScanner.MSBuild.exe 실행 파일이 있는 경로를 넣어준다.

  3. MSBuild도 환경 변수에 추가해줘야 하는데 MSBuild.exe 파일이 있는 곳을 찾아 마찬가지로 시스템 Path 변수에 추가해준다.

 VS2019 기준 경로: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin

  1. 마지막으로 Sonar Scanner 폴더에 SonarQube.Analysis.xml 파일이 있다. 파일을 열어 아래와 같이 수정한다.

SonarQube.Analysis.xml

  1. sonar.login 속성에 있는 값은 토큰 값으로 이전에 복사해놨던걸 그대로 붙여넣어준다. 이제 Sonar Qube에 접속하고 빌드할 수 있는 모든 준비가 끝.

  2. 정적 분석 툴을 돌려보자. 커맨드 창을 열어 정적 분석을 원하는 솔루션 폴더의 경로로 이동한다. (.sln)

솔루션 경로 이동 후 Sonar Scanner 시작 명령 입력

23. 앞서 봤던 절차대로 하나씩 카피하면서 커맨드창에 입력 해준다. (아래 3가지 명령어는 따로 복사해서 저장해두는 것을 추천)

 24. SonarScanner.MSBuild.exe begin 명령어 실행 시 위와 같은 화면이 나와야 정상. 혹시나 에러 발생 시 구글에 해당 에러를 검색…

  1. 2번째 명령어 입력

 MSBuild.exe /t:Rebuild 명령 수행 시 결과 창

  1. 마지막 명령어 입력…

 SonarScanner.MSBuild.exe end … 명령어 결과

  1. 3개 명령어 수행이 잘 끝났다면 다시 Sonar Qube 웹서버로 이동. 프로젝트 정보가 아래와 같이 갱신되었을 것이다.

  • 여기서 결과를 보고 현재 자신의 코드에서 어느 부분이 잠재적 결함이 있는지, 그런 부분들을 어떻게 수정해야 하는지도 가이드를 해줌. 이는 빌드 할 때 참조한 외부 라이브러리까지 모두 빌드해서 반영한 결과이기 때문이다. 순수하게 자기가 코딩한 코드만 분석을 하고 싶다면 외부 라이브러리의 경로를 예외로 처리해야 한다.

  1. 먼저 예외 처리할 폴더 경로를 확인하기 위해 Code 탭으로 들어간다.

기존 내 코드 외에 lib라는 라이브러리 폴더가 같이 존재할 것이다.

 그럼 lib 폴더 내에 3rdParty 폴더안에 있는 모든 소스는 예외하고자 할 때

관리자 페이지에서 Analysis Scope 설정 창이 있다. 여기서 Source File Exclusions 항목이 있는데

 lib/3rdParty/**/*

 라고 입력을 하면 3rdParty 폴더 내의 하위 폴더 포함 모든 소스코드를 예외로 하겠다는 말이다.

 그리고 다시 Sonar Scanner를 돌리면 해당 프로젝트는 제외하고 결과가 반영될 것이다.

 저 자세한 예외 처리 방법은 아래를 참고하자.