본문 바로가기

뇌세포덩어리""/리팩토링&객체지향

sonarQube 정적 코드 분석 (기초편)

1. docker kitematic를 통한 sonarqube 다운로드 및 설치

 

2.  http://localhost:32768/about 로 접속 로그인  (아이디 /  패스워드  :  admin / admin )

 

3. create new project ( 이름은 아무거나 )

 

4. 토큰 생성 클릭

5. 언어와 실행할 os 선택 ( python // macos 선택 )

download를 클릭하여 sonar-scanner 실행 파일 다운로드

"soanr-scanner는 정적 분석 후 sonarqube에 전송하는 역활"

하단의 커맨드 부분을 copy 후 실행 하면 정적분석 시작!!

파라미터를 보면  "sonar.sources=. " 부분이 어떤 폴더를 실행할지를 결정하므로 

커맨드를 실행하는 해당 폴더의 파일들을 분석하게됨 (각자 알아서 폴더 경로를 넣어주면 됨  " . " 일 경우 현재 폴더를 의미)

 

6. 명령어 실행시 정적 분석을 시작  / 완료 후 클릭해 보면 분석 데이터를 볼수 있음

7. 버그와 중복 코드가 많은것을 볼수 있음......

 

8. 나의 경우 pytest를 통한 분석용페이지에서 중복 코드가 대부분 나왔다. 해당 폴더를 제외 시키자

 

9. 메뉴 Administration -> Analysis Scope -> Files -> Source File Exclusions 에 제외시키고 싶은 경로를 쓰면 된다. ( 특정 폴더의 모든 파일들을 제외 시킨다면 다음과 같이 쓴다. ex : 폴더명/*.* ) 

저장을 하고 5번에서의  sonar-scanner 명령어를 다시 실행하면 해당 폴더가 제외된 실행 결과를 볼수 있다. 

10. 해당 폴더가 제외된 결과 상황 ( *.py만 나왔다.. 중복 코드가 너무 많다.. )

 

11. 리포팅을 통해 버그와 중복을 제거하자. 끝! 

 

추가 부분 

12.  현재  pytest를 통해 테스트코드 작성과 커버리지를 하고 있었음.

pytest의 리포트 기능을 통해 sonarqube에 coverage와 test를 보여줄수 있음

먼저 pytest 실행시 두개의 옵션 추가 

$ pytest --cov-report=xml:coverage.xml --junitxml=./pytest-report.xml

--cov-report 는 커버리지 내용을 다음에 저장하라는 명령어. 

--junitxml 은 테스트 코드가 어디곳에 작성되어 돌아가는지 저장하는 명령어

해당 명령어를 돌리면 두개의 파일 coverage.xml / pytest-report.xml 이 생성 됩니다. 

 

13. sonar-sanner 실행시 옵션을 추가 합니다. 

sonar-scanner \
-Dsonar.projectKey=test_sonarqube \
-Dsonar.sources=. \
-Dsonar.host.url=http://localhost:32768 \
-Dsonar.login=80a2d40fd130938312a5a776c0e406f205ca9d5a \
-Dsonar.python.xunit.reportPath=./pytest-report.xml \
-Dsonar.python.coverage.reportPaths=./coverage.xml

unit과 coverage 파일의 경로를 추가 해주면 아래와 같이 리포팅된 값을  sonarqube에서 볼수 있습니다. 

coverage에 커버리지 %를 볼수 있게 되었습니다. 
어느 부분에서 테스트코드가 작성되지 않았는지 볼수 있습니다. 

 

진짜 끝!

'뇌세포덩어리"" > 리팩토링&객체지향' 카테고리의 다른 글

디자인패턴  (0) 2019.06.02
sonarQube 정적 코드 분석 (기초편)  (0) 2019.05.26