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

노트 / 펌웨어 설계와 품질

단위 테스트: 하드웨어 없이 펌웨어 검증하기

PID, 파서, 상태 머신처럼 하드웨어와 무관한 로직은 PC에서 테스트합니다. Unity, 목(mock), 테스트 가능한 구조.

GROUND EMBEDDED · 정리 노트설계·품질 04단위 테스트 1void test_crc16_known_value(void) { 2 const uint8_t s[] = "123456789"; 3 TEST_ASSERT_EQUAL_HEX16(0x4B37, crc… 4}

무엇을 테스트하나

하드웨어를 건드리지 않는 순수 로직이 대상입니다. 필터, 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-모델에서 단위 테스트는 상세 설계와 짝을 이루는 검증 단계입니다.