004 Sonar Qube

기술 블로그 정리 #

코드 분석 도구 적용기 - 3편, SonarQube 적용하기 #

SonarQube란? #

정적 코드 분석 도구 #

  • 정적 프로그램 분석(static program analysis) : 실제 실행 없이 컴퓨터 소프트웨어를 분석하는 것
  • 정적 분석은 코드의 모든 부분을 확인할 수 있지만, 실행 환경에서의 상태를 정확히 알 수 없기 때문에 실행할 때에만 알 수 있는 데이터가 필요한 경우 정확히 분석하기 어렵다.

SonarQube #

  • 20개 이상의 프로그래밍 언어에서 버그, 코드 스멜, 보안 취약점을 발견할 목적으로 정적 코드 분석으로 자동 리뷰를 수행하기 위한 지속적인 코드 품질 검사용 오픈 소스 플랫폼
  • 소나소스(SonarSource)가 개발
  • 소나큐브는 중복 코드, 코딩 표준, 유닛 테스트, 코드 커버리지, 코드 복잡도, 주석, 버그 및 보안 취약점의 보고서를 제공
  • 정적 코드 분석 도구 중 하나로, 레퍼런스가 많고, Github 또는 Jenkins와의 연동을 통해 자동 정적 코드 분석을 구성할 수 있다.

SonarQube 장점 #

  • 지속적인 인스펙션
    • 지속적인 통합과 같이 빌드와 연동하여 지속적으로 코드에 대한 인스펙션을 수행
  • 품질 중앙화
    • 개발된 조직의 코드의 품질을 중앙 저장소에서 가시화하고 단일 위치에서 관리
  • DevOps와의 통합
    • 다양한 빌드 시스템, CI 엔진과 통합되어 DevOps 실천을 지원
  • 품질 요구사항 설정
    • 품질 게이트를 통해 표준화된 코드 품질 요구사항을 설정
  • 다중 언어 분석
    • 20개가 넘는 프로그램 언어에 대한 코드 분석을 지원
  • 플러그인을 통한 확장
    • 다수의 플러그인을 통해 SonarQube의 기능을 확장가능
  • 오픈소스 프로젝트
    • 오픈소스 프로젝트로 특정 범위까지 무료로 사용 가능

SonarQube 적용모습 #

img.png

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 : 소스코드 사이즈와 관련된 다양한 지표를 제공