HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🛁
공부기록
/
🧑🏻‍💻
TIL
/
소나큐브?

소나큐브?

태그
날짜
속성
정적 코드 분석 도구정적프로그램 분석이란?소나큐브란(SonarQube)소나큐브의 장점소나큐브 특징소나큐브 분석 기준

정적 코드 분석 도구

정적프로그램 분석이란?

  • 정적 프로그램 분석은 실제 실행 없이 컴퓨터 소프트웨어를 분석하는 것을 의미합니다.
  • 대부분의 경우에 분석은 소스코드의 비전 중 하나의 형태로 수행되며 가끔은 목적파일 형태로 분석됩니다.
  • 이에 반하야 실행중인 프로그램을 분석하는 것을 동적프로그램 분석이라고 합니다.
💡
간단하게 정적분석은 프로그램을 실행하지 않은 상태에서 소스코드나 컴파일된 코드를 이용해 프로그램을 분석하는 방법이며, 동적 분석은 프로그램을 실제 환경이나 가상 환경에서 실행해 보면서 분석하는 방법입니다.
💡
정적 분석은 소스코드의 모든 부분을 확인할 수 있지만, 실행 환경에서의 상태를 정확히 알 수 없기 때문에 실행할 때에만 알 수 있는 데이터가 필요한 경우엔 정확히 분석할 수 없습니다. 반대로 동적 분석은 실제로 실행해 보면서 분석하기 때문에 실행 환경에서의 상태를 잘 알 수 있지만, 프로그램을 실행할 수 있는 환경을 구축하기 어려울 때가 많고 소스 코드의 모든 부분을 테스트하기 힘들다는 문제가 있습니다.
💡
따라서 각 분석 방법은 장단점이 존재하므로 정적 분석은 주로 개발 단계에서 소스코드의 구조적인 문제나 실수를 찾아내는 데 사용하며 동적 분석은 테스트나 모니터링할 때 사용합니다.
ㅤ
정적 분석(Static analysis)
동적 분석(Dynamic analysis)
분석 대상
소스 코드 또는 컴파일 된 코드
프로그램 실행 환경
테스트 범위
소스 코드의 모든 부분
실행 가능한 경로
활용
코드 상의 문제나 실수를 찾음
테스트, 모니터

소나큐브란(SonarQube)

  • 소나큐브는 20개 이상의 프로그래밍 언어에서 버그, 코드 스멜, 보안 취약점을 발견할 목적으로 정적 코드 분석으로 자동 리뷰를 수행하기 위한 지속적인 코드 품질 검사용 오픈소스 플랫폼이다.
  • 소나소스가 개발하였으며 소나큐브는 중복 코드, 코딩 표준, 유닛 테스트, 코드 커버리지, 코드 복잡도, 주석, 버그 및 보안 취약점의 보고서를 제공한다.
  • 소나큐브는 정적 코드 분석 도구 중 하나입니다.
    • 정적 코드 분석 도구에는 PMD, FindBugs, CheckStyle 등이 있습니다.

소나큐브의 장점

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

소나큐브 특징

  • 다양한 언어에 대한 코드 분석을 지원합니다.
  • Admin을 통해 확인해 볼 수 있고, 지속적으로 관리가 가능합니다.
  • 젠킨스 같은 CI 엔진과 통합되어 분석이 가능합니다.

소나큐브 분석 기준

  • SonarLint 탭을 활성화시킨 후, 파일을 클릭하면 분석이 진행됩니다.
    • 그 후 결과가 표시되며 기준은 다음과 같습니다.
  1. 코드 악취(Maintainability)
    1. 변경 가능성, 모듈성, 이해가능성, 테스트 용의성, 재사용성 등 심각한 이슈는 아니지만 사소한 이슈들.
  1. 버그
    1. 잠재적인 버그 혹은 실행시간에 예상되는 동작을 하지 않는 코드’
  1. 취약점
    1. 해커들에게 잠재적 약점이 될 수 있는 보안상 이슈 SQL Injection, Cross site scripting같은 보안 취약성을 찾아낸다.
  1. 중복
    1. 코드 품질을 저해시키는 가장 큰 요인 중하나
  1. 단위 테스트
    1. 단위 테스트 커버리지를 통해 테스트의 성공/실패 정보를 제공한다.
  1. 복잡도
    1. 순환 복잡도 측정, 코드 논리적 흐름 상 존재하는 인지 복잡도 측정
  1. 사이즈
    1. 코드 라인 전체 라인 수 구문, 클래스 파일, 디렉터리 주석 수, 코멘트 비율 등 소스코드 사이즈와 관련된 다양한 지표 제공