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

노트 / 펌웨어 설계와 품질

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

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 등)에서 커밋마다 자동으로 돌립니다.

무료 전자책이 주제를 한 권으로 이어 읽기 (PDF 3권)→

하드웨어 의존을 끊는 방법

테스트 코드검증할 로직인터페이스함수 포인터 · 헤더실제 드라이버 또는 가짜
로직과 하드웨어 사이에 얇은 경계를 두면, PC에서는 가짜를 끼워 테스트할 수 있습니다.
  • 계층 구조로 로직과 HAL을 분리
  • 하드웨어 함수를 가짜(mock/stub)로 바꿔 끼움: adc_read()가 테스트에서 정해 둔 값을 반환하게
  • CMock, fff 같은 도구가 헤더에서 가짜 함수를 자동 생성

좋은 테스트

  • 경계값: 0, 최대값, 오버플로 직전
  • 비정상 입력: 깨진 패킷, 범위 밖 값
  • 테스트 하나는 한 가지만 확인

V-모델에서 단위 테스트는 상세 설계와 짝을 이루는 검증 단계입니다.

영상으로 이어 보기RC카 만들기 시리즈 6편대기업 임베디드 개발자 Lego RC카 메이킹 시작합니다. 【RC카 개발1】PROJECT COURSE요구사항부터 소프트웨어 구조까지 한 프로젝트로 해 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →