노트 / 펌웨어 설계와 품질
단위 테스트: 하드웨어 없이 펌웨어 검증하기
PID, 파서, 상태 머신처럼 하드웨어와 무관한 로직은 PC에서 테스트합니다. Unity, 목(mock), 테스트 가능한 구조.
무엇을 테스트하나
하드웨어를 건드리지 않는 순수 로직이 대상입니다. 필터, PID, CRC, 프로토콜 파서, 상태 머신, 단위 변환. 이 부분의 버그를 보드 위에서 찾으려면 시간이 몇 배 걸립니다.
Unity 예
void test_crc16_known_value(void) {
const uint8_t s[] = "123456789";
TEST_ASSERT_EQUAL_HEX16(0x4B37, crc16_modbus(s, 9));
}
void test_parser_rejects_bad_crc(void) {
feed(bad_packet, sizeof bad_packet);
TEST_ASSERT_FALSE(packet_ready());
}
PC의 gcc로 빌드해 실행하고, CI(GitHub Actions 등)에서 커밋마다 자동으로 돌립니다.
하드웨어 의존을 끊는 방법
- 계층 구조로 로직과 HAL을 분리
- 하드웨어 함수를 가짜(mock/stub)로 바꿔 끼움:
adc_read()가 테스트에서 정해 둔 값을 반환하게 - CMock, fff 같은 도구가 헤더에서 가짜 함수를 자동 생성
좋은 테스트
- 경계값: 0, 최대값, 오버플로 직전
- 비정상 입력: 깨진 패킷, 범위 밖 값
- 테스트 하나는 한 가지만 확인
V-모델에서 단위 테스트는 상세 설계와 짝을 이루는 검증 단계입니다.