정적 코드 분석기(Static Code Analyzers)
정적 코드 분석기는 개발 프로세스 초기에 잠재적인 취약점, 에러 및 코딩 표준 위반을 식별하는 데 사용된다. 코드베이스를 실제로 실행하지 않고 스캔하여 런타임 중에 발생할 수 있는 잠재적인 문제에 대한 귀중한 피드백을 제공한다. 또한 MISRA와 같은 코딩 지침과 ISO 26262와 같은 산업 표준을 준수하는 데 도움이 된다.
많은 정적 코드 분석 도구가 통합 개발 환경(IDE)에서 플러그인으로 지원된다. IDE 내에서 코딩하는 동안 자동으로 코드를 분석하고 에러, 표준 위반 또는 기타 문제를 강조 표시한다. 분석 결과는 일반적으로 IDE 아래 또는 사이드바에 표시된다. 개발자는 이러한 결과를 바탕으로 필요한 수정 작업을 수행할 수 있다
예를 들어 아래 코드에서 x를 y 변수로 나누려고 하면 y가 0이므로 에러가 발생한다. 정적 코드 분석기를 수행하면 이 에러가 자동 감지되고 "Division by zero error" 경고가 표시된다. 개발자가 이러한 이슈를 적시에 포착하면 코드 품질을 향상하고 에러를 예방할 수 있다.
public class Example {
public static void main(String[] args) {
int x = 5;
int y = 0;
int result = x / y; // Error: Division by zero error
System.out.println("Result: " + result);
}
}
Java 코드의 정적 분석 도구
다음 목록은 Java 코드 품질을 위한 정적 코드 분석 도구이다.
- Checkstyle: 프로그래머가 코딩 표준을 준수하는 Java 코드를 작성하는 데 도움이 되는 개발 도구이다. 소스 코드의 클래스 설계 문제, 메소드 설계 문제를 찾을 수 있다. 또한 코드 레이아웃 및 포맷팅 이슈를 확인하는 기능도 있다.
- PMD(Programming Mistake Detector): 사용되지 않는 변수, 빈 캐치 블록, 중복 코드, 불필요한 객체 생성 등과 같은 흔히 볼 수 있는 프로그래밍 실수를 보고한다. 또한 프로젝트 표준에 특정한 사용자 정의 규칙을 추가할 수도 있다.
- SonarQube: 오픈 소스 코드 품질 검사 플랫폼이다. 버그, 코딩 에러 및 보안 취약점을 감지하기 위해 코드의 정적 분석을 통해 자동 리뷰를 수행하는 데 사용된다. 중복 코드 블록, 코딩 표준, 단위 테스트, 코드 커버리지, 코드 복잡성, 주석, 버그 등에 대한 보고서를 제공한다.
- SonarLint: 오픈 소스 정적 코드 분석 도구이다. Java, C#, JavaScript 및 Python을 포함한 여러 프로그래밍 언어를 지원한다.
- FindBugs: 소위 “버그 패턴”에 대한 바이트 코드를 스캔하여 결함 또는 의심스러운 코드를 찾는다. Findbugs에는 컴파일된 클래스 파일이 필요하지만 분석을 위해 코드를 실행할 필요는 없다.
- SpotBugs: 현재는 중단된 프로젝트인 FindBugs의 포크이다.
- JaCoCo: 코드 커버리지를 측정 및 보고하는 데 사용되는 Java용 오픈 소스 툴킷이다. SonarQube, Eclipse, Jenkins, IntelliJ 같은 다른 정적 분석기, IDE 및 플랫폼에 JaCoCo가 플러그인으로 포함되어 있다.
- JArchitect: 패러미터 수, 변수 및 코드 라인 수, 순환복잡성(cyclomatic complexity), 결합도(afferent and efferent coupling) 등과 같은 다수의 코드 메트릭을 지원한다. 또한 방향성 그래프와 종속성 매트릭스를 사용하여 아키텍처 결함을 노출하고 종속성(dependencies)을 시각화 및 관리할 수 있다.
다음은 JavaScript 코드의 정적 분석 도구들이다.
- ESLint: JavaScript 코드에서 가능한 스타일 에러 및 코드 에러를 검사하는 도구이다. 프로젝트에 특정한 커스토마이징 규칙을 추가할 수 있다.
- JSLint: JavaScript 소스 코드가 코딩 규칙을 준수하는지 확인하는 정적 코드 분석 도구이다. JavaScript 코드는 JSLint 웹 사이트에서 온라인으로 분석할 수 있다.
- JSHint: JSLint의 포크이다. JavaScript로 작성된 프로그램을 검사하고 일반적으로 발생하는 실수와 잠재적인 버그에 대해 보고한다. JSHint 웹 사이트에서 온라인으로 분석할 수 있다. 또한 Eclipse 플러그인도 지원한다.
- Plato: JavaScript 소스 코드 시각화, 정적 분석 및 복잡성 분석을 가능하게 하는 오픈 소스 도구이다. 유지보수성(Maintainability) 점수, 라인 수, 예측 에러 수 같은 소스 코드의 다양한 측면에 대한 통계가 포함된 보고서를 생성한다.
- Google Closure-Linter: JavaScript 파일에서 연산자 배치, 세미콜론 누락, 공백(spacing), JsDoc 주석 존재 등과 같은 스타일 문제를 확인하는 유틸리티이다. Google JavaScript 스타일 가이드에서 설정한 지침을 시행한다.
Note.
JavaScript에서 소스 코드 분석을 통해 프로그래밍 및 스타일 에러를 확인하는 프로세스를 “린팅(Linting)”이라 하고 그러한 툴은 “Linter”라고 부른다.
'개발생명주기단계별 > 구현_코드 정적 분석' 카테고리의 다른 글
책 발췌 - 소스 코드 검토 by Singh (0) | 2023.08.28 |
---|---|
영상자료 - MISRA 및 정적 코드 분석 지원 도구 PC-Lint (0) | 2021.09.06 |
논문요약 - 임베디드 시스템을 위한 정적 코드 분석 by AGREN (0) | 2019.06.17 |
JSF 코딩 표준 - 임무 및 안전 필수 플랫폼 상에 C++ 사용하기 by Emshoff (0) | 2019.06.10 |
HICPP(High Integrity C++) 코딩 표준 소개 (0) | 2019.06.03 |