그라운드 임베디드 유튜브 구독

노트 / 펌웨어 설계와 품질

정적 분석: 실행 전에 버그 찾기

컴파일러 경고를 최대로 켜고, cppcheck와 clang-tidy로 코드를 실행하지 않고 결함을 찾습니다.

GROUND EMBEDDED · 정리 노트설계·품질 05정적 분석 1-Wall -Wextra -Wshadow -Wconversion -Wd…

1단계: 컴파일러 경고

-Wall -Wextra -Wshadow -Wconversion -Wdouble-promotion -Werror
  • -Wconversion: 암묵적 축소 변환 (int → uint8_t)
  • -Wdouble-promotion: float 계산이 실수로 double로 바뀌는 것 (FPU가 단정밀도만 있는 M4에서 매우 느려짐)
  • -Werror: 경고를 오류로 만들어 쌓이지 않게

경고 0개를 유지하는 것 자체가 가장 싼 품질 관리입니다.

2단계: 정적 분석 도구

도구 특징
cppcheck 무료, 널 포인터, 배열 범위, 초기화 안 된 변수
clang-tidy 무료, 규칙이 많고 자동 수정
PC-lint / Polyspace / QAC 상용, MISRA, 자동차 인증 프로젝트

잡아 주는 것

  • 초기화하지 않은 변수 사용
  • 배열 범위를 넘는 인덱스
  • 널 포인터 역참조 가능 경로
  • 해제 후 사용, 메모리 누수
  • 도달할 수 없는 코드, 항상 참인 조건

운영

모든 경고를 한 번에 고치려 하지 말고, 새 코드에서 0을 유지하는 기준선(baseline)을 정한 뒤 CI에서 자동 검사합니다. 오탐은 이유를 주석으로 남기고 억제합니다.