정적 코드 분석 도구
정적프로그램 분석이란?
- 정적 프로그램 분석은 실제 실행 없이 컴퓨터 소프트웨어를 분석하는 것을 의미합니다.
- 대부분의 경우에 분석은 소스코드의 비전 중 하나의 형태로 수행되며 가끔은 목적파일 형태로 분석됩니다.
- 이에 반하야 실행중인 프로그램을 분석하는 것을 동적프로그램 분석이라고 합니다.
간단하게 정적분석은 프로그램을 실행하지 않은 상태에서 소스코드나 컴파일된 코드를 이용해 프로그램을 분석하는 방법이며, 동적 분석은 프로그램을 실제 환경이나 가상 환경에서 실행해 보면서 분석하는 방법입니다.
정적 분석은 소스코드의 모든 부분을 확인할 수 있지만, 실행 환경에서의 상태를 정확히 알 수 없기 때문에 실행할 때에만 알 수 있는 데이터가 필요한 경우엔 정확히 분석할 수 없습니다.
반대로 동적 분석은 실제로 실행해 보면서 분석하기 때문에 실행 환경에서의 상태를 잘 알 수 있지만, 프로그램을 실행할 수 있는 환경을 구축하기 어려울 때가 많고 소스 코드의 모든 부분을 테스트하기 힘들다는 문제가 있습니다.
따라서 각 분석 방법은 장단점이 존재하므로 정적 분석은 주로 개발 단계에서 소스코드의 구조적인 문제나 실수를 찾아내는 데 사용하며 동적 분석은 테스트나 모니터링할 때 사용합니다.
ㅤ | 정적 분석(Static analysis) | 동적 분석(Dynamic analysis) |
분석 대상 | 소스 코드 또는 컴파일 된 코드 | 프로그램 실행 환경 |
테스트 범위 | 소스 코드의 모든 부분 | 실행 가능한 경로 |
활용 | 코드 상의 문제나 실수를 찾음 | 테스트, 모니터 |
소나큐브란(SonarQube)
- 소나큐브는 20개 이상의 프로그래밍 언어에서 버그, 코드 스멜, 보안 취약점을 발견할 목적으로 정적 코드 분석으로 자동 리뷰를 수행하기 위한 지속적인 코드 품질 검사용 오픈소스 플랫폼이다.
- 소나소스가 개발하였으며 소나큐브는 중복 코드, 코딩 표준, 유닛 테스트, 코드 커버리지, 코드 복잡도, 주석, 버그 및 보안 취약점의 보고서를 제공한다.
- 소나큐브는 정적 코드 분석 도구 중 하나입니다.
정적 코드 분석 도구에는 PMD, FindBugs, CheckStyle 등이 있습니다.
소나큐브의 장점
- 지속적인 인스펙션 : 지속적인 통합과 같이 빌드와 연동하여 지속적으로 코드에 대한 인스펙션을 수행한다.
- 품질 중앙화 : 개발된 조직의 코드의 품질을 중앙 저장소에 가시화하고 단일 위치에서 관리한다.
- DevOps와의 통합 : 다양한 빌드 시스템, CI 엔진과 통합되어 DevOps 실천을 지원한다.
- 품질 요구사항 설정 : 품질 게이트를 통해 표준화된 코드 품질 요구사항을 설정합니다.
- 다중 언어 분석 : 20개가 넘는 프로그램 언어에 대한 코드 분석을 지원합니다.
- 플러그인을 통한 확장 : 다수의 플러그인을 통해 소나큐브의 기능을 확장할 수 있다.
- 오픈소스 프로젝트 :
소나큐브 특징
- 다양한 언어에 대한 코드 분석을 지원합니다.
- Admin을 통해 확인해 볼 수 있고, 지속적으로 관리가 가능합니다.
- 젠킨스 같은 CI 엔진과 통합되어 분석이 가능합니다.
소나큐브 분석 기준
- SonarLint 탭을 활성화시킨 후, 파일을 클릭하면 분석이 진행됩니다.
- 그 후 결과가 표시되며 기준은 다음과 같습니다.
- 코드 악취(Maintainability)
- 변경 가능성, 모듈성, 이해가능성, 테스트 용의성, 재사용성 등 심각한 이슈는 아니지만 사소한 이슈들.
- 버그
- 잠재적인 버그 혹은 실행시간에 예상되는 동작을 하지 않는 코드’
- 취약점
- 해커들에게 잠재적 약점이 될 수 있는 보안상 이슈 SQL Injection, Cross site scripting같은 보안 취약성을 찾아낸다.
- 중복
- 코드 품질을 저해시키는 가장 큰 요인 중하나
- 단위 테스트
- 단위 테스트 커버리지를 통해 테스트의 성공/실패 정보를 제공한다.
- 복잡도
- 순환 복잡도 측정, 코드 논리적 흐름 상 존재하는 인지 복잡도 측정
- 사이즈
- 코드 라인 전체 라인 수 구문, 클래스 파일, 디렉터리 주석 수, 코멘트 비율 등 소스코드 사이즈와 관련된 다양한 지표 제공