기술 블로그 정리 #
코드 분석 도구 적용기 - 3편, SonarQube 적용하기 #
SonarQube란? #
정적 코드 분석 도구 #
- 정적 프로그램 분석(static program analysis) : 실제 실행 없이 컴퓨터 소프트웨어를 분석하는 것
- 정적 분석은 코드의 모든 부분을 확인할 수 있지만, 실행 환경에서의 상태를 정확히 알 수 없기 때문에 실행할 때에만 알 수 있는 데이터가 필요한 경우 정확히 분석하기 어렵다.
SonarQube #
- 20개 이상의 프로그래밍 언어에서 버그, 코드 스멜, 보안 취약점을 발견할 목적으로 정적 코드 분석으로 자동 리뷰를 수행하기 위한 지속적인 코드 품질 검사용 오픈 소스 플랫폼
- 소나소스(SonarSource)가 개발
- 소나큐브는 중복 코드, 코딩 표준, 유닛 테스트, 코드 커버리지, 코드 복잡도, 주석, 버그 및 보안 취약점의 보고서를 제공
- 정적 코드 분석 도구 중 하나로, 레퍼런스가 많고, Github 또는 Jenkins와의 연동을 통해 자동 정적 코드 분석을 구성할 수 있다.
SonarQube 장점 #
- 지속적인 인스펙션
- 지속적인 통합과 같이 빌드와 연동하여 지속적으로 코드에 대한 인스펙션을 수행
- 품질 중앙화
- 개발된 조직의 코드의 품질을 중앙 저장소에서 가시화하고 단일 위치에서 관리
- DevOps와의 통합
- 다양한 빌드 시스템, CI 엔진과 통합되어 DevOps 실천을 지원
- 품질 요구사항 설정
- 품질 게이트를 통해 표준화된 코드 품질 요구사항을 설정
- 다중 언어 분석
- 20개가 넘는 프로그램 언어에 대한 코드 분석을 지원
- 플러그인을 통한 확장
- 다수의 플러그인을 통해 SonarQube의 기능을 확장가능
- 오픈소스 프로젝트
- 오픈소스 프로젝트로 특정 범위까지 무료로 사용 가능
SonarQube 적용모습 #
SonarQube 사용예시 #
저희 프로젝트의 경우 PR을 통해 기능을 구현하고, 이를 develop에 merge하는(그리고 develop을 master로 merge하는) 전형적인 git-flow 브랜치 전략을 사용 따라서 PR이 생성되는 시점(브랜치가 새로 생성 & 새로운 커밋, 푸쉬), develop 또는 master에 머지되는 시점에 SonarQube analysis Stage가 실행
SornarQube에서 관리해주는 소프트웨어 품질 #
- Code Smell : 심각한 이슈는 아니지만 베스트 프렉티스에서 사소한 이슈들로 모듈성(modularity), 이해가능성(understandability), 변경가능성(changeability), 테스트용의성(testability), 재사용성(reusability) 등이 포함
- Bugs : 일반적으로 잠재적인 버그 혹은 실행시간에 예상되는 동작을 하지 않는 코드를 표시
- Vulnerabilities : 해커들에게 잠재적인 약점이 될 수 있는 보안상의 이슈를 말한다. SQL 인젝션, 크로스 사이트 스크립팅과 같은 보안 취약성을 발견
- Duplications : 코드 중복은 코드의 품질을 저해시키는 가장 큰 요인 중 하나
- Unit Test : 단위테스트 커버리지를 통해 단위 테스트의 수행 정도와 수행한 테스트의 성공/실패 정보를 제공
- Complexity : 코드의 순환 복잡도, 인지 복잡도를 측정
- Size : 소스코드 사이즈와 관련된 다양한 지표를 제공