노트 / 펌웨어 설계와 품질
정적 분석: 실행 전에 버그 찾기
컴파일러 경고를 최대로 켜고, cppcheck와 clang-tidy로 코드를 실행하지 않고 결함을 찾습니다.
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에서 자동 검사합니다. 오탐은 이유를 주석으로 남기고 억제합니다.