본문으로 건너뛰기
고급약 45분

장애 주입 시험 — 전원·워치독·타이밍·센서·통신 고장과 안전 상태 전이 판정

정상 조건에서 동작하는 것은 시작일 뿐이다. 임베디드 시스템은 전원이 흔들리고, 태스크가 멈추고, 센서가 끊기고, 통신이 사라질 때 안전하게 행동해야 한다. 브라운아웃·전압 강하·느린 상승·역전압·플래시 쓰기 중 전원 차단 같은 전원 고장, 워치독의 세 가지 판정(멈추면 발동, 최악 부하에선 발동 안 함, ISR에서만 갱신 금지), 지터와 마감 시간 초과, 센서 단선·단락·범위 이탈·고착·잡음, 통신 두절을 주입하는 방법과 안전 상태 전이 판정, 장애 주입 매트릭스 양식을 다룬다.

  • #임베디드
  • #장애주입
  • #워치독
  • #브라운아웃
  • #안전상태
  • #강건성

개념

장애 주입이란

장애 주입(fault injection)은 고장을 의도적으로, 통제된 조건에서 만들어 시스템의 반응을 보는 시험이다. 모듈 29 레슨 7에서 네트워크 저하 상태의 타임아웃·재시도·정합성을 점검했다면, 여기서는 같은 질문을 전원·타이밍·센서·통신 선으로 옮긴다. 질문은 언제나 셋이다.

  1. 감지하는가 — 고장이 났다는 것을 시스템이 아는가
  2. 올바르게 반응하는가 — 요구된 안전 상태나 대체 동작으로 가는가, 정해진 시간 안에
  3. 흔적을 남기는가 — DTC·오류 로그·리셋 원인이 기록되는가

모듈 35 레슨 2에서 본 ISO 26262-6의 단위 검증 방법 표에도 "고장 주입 시험"이 있다. 규격이 요구하는 활동을 실제 보드 앞에서 어떻게 하는지가 이 레슨이다.

전원 고장

전원은 모든 고장의 출발점이다. 프로그래머블 전원 공급기로 전압 파형을 만들어 주입한다.

고장주입 방법기대 동작흔한 결함
브라운아웃(서서히 저하)공급 전압을 정격에서 0V까지 천천히(예: 0.1V/s) 낮춤BOR 문턱에서 깨끗이 리셋 유지, 문턱 위에서는 정상BOR 비활성, 문턱 근처에서 오동작·플래시 오염
순간 강하(dip)12V → 6V로 10ms·50ms·100ms 떨어뜨렸다 복귀규격에 정한 등급대로 동작 유지 또는 정상 복귀리셋 뒤 상태 복원 실패, 출력 오동작
느린 상승(slow ramp)0V에서 정격까지 수 초에 걸쳐 올림문턱을 넘은 뒤 한 번만 깨끗이 부팅문턱 근처에서 부팅·리셋 반복
짧은 차단 반복차단 1ms~1s를 여러 번매번 정상 부팅 또는 동작 유지부팅 중 차단 시 설정 손상
역전압극성을 뒤집어 연결(규격 범위 전압, 제한 시간)보호 회로가 막아 손상 없음, 정상 연결 후 동작보호 소자 누락, 영구 손상
과전압정격을 넘는 전압(예: 12V 계통에 점프 스타트 상황)보호 동작, 이후 정상부품 손상
플래시 쓰기 중 차단설정 저장 명령 직후 수 µs~ms 지연을 바꿔가며 차단재부팅 후 이전 값 또는 새 값 중 하나, 절대 깨진 값 아님반쯤 쓰인 설정으로 부팅 실패

자동차 전원의 시험 파형은 ISO 16750-2와 제조사 사내 규격이 정한다. 테스터가 기억할 것은 규격 파형을 한 번 통과 시키는 것으로 끝나지 않는다는 점이다.

플래시 쓰기 중 차단 은 특히 반복이 필요하다. 쓰기 시작부터 끝까지의 구간을 잘게 나눠 차단 시점을 옮겨가며 수백 번 시험한다. 모든 시점에서 "이전 값 또는 새 값"이 나와야 합격이다. 이것을 보장하는 설계(이중 저장, CRC와 유효 표시, 쓰기 순서)가 있는지 먼저 확인하면 시험 설계가 쉬워진다.

플래시 쓰기 중 차단 시험 자동화
for delay in 0us, 50us, 100us, ... , 쓰기 완료 시간 + 여유:
    설정값 A 저장 상태에서 시작
    "설정 B 저장" 명령 송신
    delay 후 전원 차단(릴레이 또는 전원 공급기 출력 OFF)
    500ms 후 전원 복귀
    부팅 성공 여부, 읽힌 설정값 기록
판정: 모든 delay에서 부팅 성공 AND 설정값 ∈ {A, B}

워치독 시험 — 세 가지 판정

워치독은 소프트웨어가 정해진 시간 안에 "살아 있다"는 신호(킥, 갱신)를 주지 않으면 MCU를 리셋하는 타이머다. 워치독 시험은 세 가지를 모두 판정해야 한다.

판정시험결함이면
1. 멈추면 발동해야 한다디버그 명령이나 시험 빌드로 태스크를 무한 루프에 빠뜨림시스템이 멈춘 채 방치됨
2. 정상 최악 부하에서는 발동하지 않아야 한다모든 기능을 동시에 최대 부하(통신 폭주, 플래시 쓰기, 최대 연산)정상 동작 중 불필요한 리셋
3. ISR에서만 갱신하면 안 된다코드 리뷰 + 메인 태스크만 멈추고 타이머 인터럽트는 살려 둠메인이 멈춰도 ISR이 계속 킥해 워치독이 무력화

세 번째가 가장 흔한 설계 결함이다. 타이머 ISR에서 워치독을 킥하면 편하지만, 인터럽트는 메인 루프나 태스크가 멈춰도 계속 돌기 때문에 워치독이 아무것도 감시하지 않게 된다.

/* 위험한 설계: ISR에서만 킥 */
void SysTick_Handler(void) {
    wdt_kick();              /* 메인이 죽어도 계속 호출됨 */
}
 
/* 나은 설계: 모든 태스크가 살아 있음을 확인한 뒤 킥 */
void supervisor_task(void) {
    if (alive_flags == ALL_TASKS_ALIVE) {
        wdt_kick();
        alive_flags = 0;     /* 각 태스크가 주기마다 자기 비트를 다시 세움 */
    }
}

RTOS에서는 이처럼 감시 태스크가 각 태스크의 생존 표시를 모아 확인한 뒤에만 킥 하는 구조가 흔하다. 시험은 태스크를 하나씩 멈춰 보며 매번 워치독이 발동하는지 본다. 판정 2와 함께 보면 워치독 시간 설정의 여유도 드러난다. 최악 부하에서 킥 간격이 워치독 시간의 90%까지 올라간다면 여유가 거의 없는 것이다.

창 워치독(window watchdog)은 너무 일찍 킥해도 리셋한다. 폭주한 코드가 킥 함수를 반복 호출하는 경우를 잡기 위해서다. 이 경우 "너무 이른 킥" 시험이 하나 더 붙는다.

마지막으로 워치독 리셋 뒤의 동작을 본다. 리셋 원인이 기록되는가, 워치독 리셋이 반복되면 안전 모드로 부팅하는가(리셋 루프 방지).

타이밍 고장

실시간 시스템은 늦은 정답이 오답 이다.

  • 지터 — 주기 태스크의 실제 시작 시각이 흔들리는 폭. 10ms 제어 루프가 8~14ms로 흔들리면 제어 품질이 떨어진다. GPIO를 태스크 시작에 토글하고 오실로스코프로 주기 분포를 측정한다(레슨 4)
  • 마감 시간 초과(deadline miss) — 태스크가 다음 주기 전에 끝나지 않음. 시스템이 이를 감지하고 기록하는지 가 시험 포인트다. 감지 장치가 없으면 결과만 조용히 틀려진다
  • 주입 방법 — 시험 빌드에서 특정 태스크에 인위적 지연을 넣거나, 높은 우선순위의 부하 태스크를 추가하거나, 인터럽트 폭주(통신 최대 속도, 버튼 채터링)를 만든다

센서 고장

아날로그 센서는 전압으로 값을 전한다. 고장 주입 장치(FIU)나 저항 박스, 신호 발생기로 다섯 가지 고장을 만든다.

고장전기적 모습시스템이 할 일
단선(open)입력이 풀업·풀다운에 따라 최대·최소로 붙음진단 범위 밖으로 판정, 대체값, DTC
전원 단락공급 전압에 붙음위와 같음
접지 단락0V에 붙음위와 같음
범위 이탈물리적으로 불가능한 값(−60°C 냉각수)타당성 검사로 거부
고착(stuck-at)값이 변하지 않음(정상 범위 안)다른 신호와의 교차 검사로 감지(엔진은 도는데 온도가 1시간째 같음)
잡음값이 튐필터링, 순간 튐으로 고장 판정하지 않음(디바운스)

설계 좋은 센서 회로는 정상 범위를 예를 들어 0.5~4.5V로 두고, 0.5V 미만과 4.5V 초과를 고장 전용 구간 으로 남긴다. 그래서 단선·단락이 정상 값처럼 보이지 않는다. 시험은 이 경계(0.49V, 0.51V, 4.49V, 4.51V)에서 한다. 모듈 3 레슨 1의 경계값 분석이 전압 축에서 반복된다.

고착은 가장 어렵다. 값이 정상 범위 안이기 때문이다. 요구사항에 교차 검사 규칙 이 있는지부터 확인한다. 없으면 요구 결함으로 보고한다.

통신 두절

레슨 3의 CAN 타임아웃 시험을 일반화하면 이렇다. 메시지 하나 끊기, 노드 하나 전체 끊기, 버스 단락, 버스 오프, 간헐적 끊김(몇 프레임씩). 각 경우에 대체값·안전 상태·복귀 조건 을 판정한다. 복귀 조건이 너무 느슨하면 끊김과 복귀를 반복하며 출력이 흔들린다.

안전 상태 전이 판정

고장이 감지되면 시스템은 안전 상태(safe state)로 가야 한다. 안전 상태는 제품마다 다르다. 모터 드라이버는 출력 차단, 전동 조향은 조향 보조 서서히 감소, 인슐린 펌프는 주입 중지와 경보다. 판정할 것은 네 가지다.

1. 무엇으로 가는가      요구된 안전 상태와 일치하는가(출력 값, 경고, 모드)
2. 얼마나 빨리 가는가   고장 발생부터 안전 상태까지의 시간 ≤ 요구 시간(고장 허용 시간 안)
3. 어떻게 가는가        전이 중 위험한 중간 상태가 없는가(출력이 튀지 않는가)
4. 어떻게 나오는가      고장 해소 뒤 복귀 조건(자동·재시동 후·정비 후)이 요구대로인가

2번의 시간은 오실로스코프로 고장 주입 신호와 출력을 한 화면에 놓고 잰다. 요구가 "100ms 안에 출력 차단"이면 주입 에지부터 출력이 0이 되는 순간까지를 측정해 숫자로 기록한다.

장애 주입 매트릭스 양식

장애 주입은 조합이 많아 매트릭스로 관리한다. 행은 고장, 열은 운전 모드다. 같은 고장도 대기 중과 동작 중, 업데이트 중에 결과가 다르다.

ID고장주입 방법·파라미터운전 모드감지 수단기대 반응(안전 상태)반응 시간 요구기록(DTC·로그)복귀 조건결과
FI-P-01순간 강하12V→6V, 50ms모터 동작 중BOR/전압 감시출력 유지 또는 차단 후 재기동요구서 값저전압 DTC전압 정상 1s 후 자동
FI-P-07플래시 쓰기 중 차단지연 0~5ms, 50µs 간격설정 저장CRC이전 또는 새 설정으로 부팅해당 없음설정 복구 로그자동
FI-W-02태스크 멈춤시험 명령으로 통신 태스크 무한 루프동작 중워치독리셋 후 정상 부팅워치독 시간 이내리셋 원인 WDT자동
FI-S-03온도 센서 단선FIU 개방동작 중전압 범위 검사대체값, 출력 제한요구서 값센서 DTC정상값 연속 N회
FI-C-01CAN 메시지 두절0x1A0 송신 중지동작 중타임아웃대체값 0, 경고50~60ms타임아웃 DTC3주기 연속 수신

빈 결과 칸은 합격·불합격만이 아니라 측정값(실제 반응 시간, 기록된 DTC 코드)을 적는다. 모든 칸이 채워진 매트릭스가 장애 주입 시험의 증거다.

실무에서 왜 필요한가

현장의 임베디드 시스템은 정상 조건에서 사는 시간보다 흔들리는 조건에서 사는 시간이 길다. 자동차는 시동 때마다 전압이 떨어지고, 산업 장비는 모터가 켜질 때마다 잡음이 들어오고, 배터리 장치는 언제든 전원이 끊긴다. 이런 조건의 결함은 기능 시험으로 절대 잡히지 않고, 현장에서 벽돌이 된 장치, 설명할 수 없는 리셋, 안전 사고 로 나타난다. 장애 주입을 설계할 수 있는 테스터는 "정상에서 동작한다"를 넘어 "고장 났을 때 안전하게 실패한다" 를 증명한다. 기능안전 규격이 장애 주입을 요구하는 이유도 여기에 있다.

채용시장에서의 위치

기능안전이 걸린 자동차·의료·산업 분야 검증 공고에서 "고장 주입 시험", "강건성 시험", "전원 변동 시험" 경험이 우대된다. 면접에서는 "워치독을 어떻게 시험하겠나"가 단골 질문이다. 여기서 발동해야 할 때 발동, 발동하지 말아야 할 때 미발동, ISR 킥 금지 의 세 판정을 말하면 준비된 지원자로 보인다. "플래시 쓰기 중 전원 차단을 어떻게 시험하나"에 차단 시점을 옮겨가며 자동으로 반복한다고 답할 수 있으면 더 강하다.

실습 과제

과제 1 — 워치독 시험 설계 (15분)

RTOS 기반 보드에 태스크 넷(제어 10ms, 통신 20ms, 로깅 100ms, 사용자 입력 50ms)과 워치독 200ms가 있다. 세 가지 판정 각각을 확인하는 시험 케이스를 쓰고, 판정 3을 코드 리뷰로 확인할 때 무엇을 찾을지 적는다.

과제 2 — 센서 전압 경계 (10분)

압력 센서의 정상 출력이 0.54.5V(010bar)이고 그 밖은 고장 구간이다. 경계값 시험 전압 여덟 개와 각각의 기대 동작을 표로 만들고, 고착 고장을 감지하려면 요구사항에 어떤 교차 검사 규칙이 있어야 하는지 제안한다.

과제 3 — 장애 주입 매트릭스 확장 (20분)

본문 매트릭스를 가져와 전동 창문 제어기(모터, 끼임 감지 전류 센서, LIN 통신, 12V 전원)에 맞게 열 개 행으로 확장한다. 전원 두 개, 워치독 한 개, 타이밍 한 개, 센서 세 개, 통신 두 개, 끼임 감지 중 전원 강하 조합 한 개를 포함한다.

자가 체크리스트

  • 장애 주입의 세 가지 질문(감지·반응·기록)을 말할 수 있다
  • 브라운아웃·순간 강하·느린 상승·역전압·플래시 쓰기 중 차단의 주입 방법과 기대 동작을 설명할 수 있다
  • 워치독 시험의 세 가지 판정과 ISR에서만 킥하는 설계가 위험한 이유를 설명할 수 있다
  • 지터와 마감 시간 초과를 측정·주입하는 방법을 말할 수 있다
  • 센서 단선·단락·범위 이탈·고착·잡음의 전기적 모습과 시스템의 기대 동작을 구분할 수 있다
  • 안전 상태 전이를 무엇으로·얼마나 빨리·어떻게·어떻게 나오는가 네 가지로 판정할 수 있다
  • 운전 모드를 포함한 장애 주입 매트릭스를 작성할 수 있다

흔한 실수

  • 워치독을 "발동하는가"만 시험한다. 정상 최악 부하에서 발동하지 않는지, ISR 킥으로 무력화되지 않았는지도 판정해야 한다.
  • 플래시 쓰기 중 차단을 한두 번만 한다. 결함은 특정 시점에서만 난다. 차단 시점을 쓰기 구간 전체에 걸쳐 옮겨가며 자동 반복한다.
  • 벤치 전원으로만 전원 시험을 한다. 프로그래머블 전원으로 규격 파형을 만들고, 실제 배선·배터리 조건도 확인한다.
  • 안전 상태 도달만 보고 시간을 재지 않는다. 요구 시간 안에 도달했는지를 숫자로 기록해야 한다.
  • 고착 고장을 시험하지 않는다. 정상 범위 안의 고장은 전압 검사로 안 잡힌다. 교차 검사 요구가 없으면 요구 결함으로 올린다.
  • 운전 모드를 한 가지로만 둔다. 같은 고장도 대기·동작·업데이트 중에 결과가 다르다.
  • 복귀 조건을 시험하지 않는다. 고장 해소 뒤 너무 쉽게 복귀하면 출력이 흔들리고, 너무 어렵게 복귀하면 불필요한 정비가 생긴다.

참고 자료

  • FreeRTOS 공식 문서 — 태스크·타이머·스택 감시 기능
  • ISO 16750-2 — Road vehicles, Environmental conditions and testing for electrical and electronic equipment, Part 2: Electrical loads
  • ISO 26262-6:2018 — Product development at the software level (ISO) — 단위 검증 방법의 고장 주입 시험
  • 사용 중인 MCU 레퍼런스 매뉴얼의 워치독(독립·창 워치독)과 BOR 장
  • 레슨 s5-m29-l07 — 저하 상태에서 확인할 것들(타임아웃·재시도·중복·정합성)
  • 레슨 s2-m35-l02 — ISO 26262-6 단위·통합 검증
  • 레슨 s5-m46-l04 — 오실로스코프로 반응 시간과 전원 강하 측정

낯선 말 풀이

이 레슨에 나온 약어입니다. 본문에서도 처음 나올 때 점선으로 표시해 두었습니다 (제목과 링크 글자는 그대로 둡니다).

ISO — 국제표준화기구
여러 나라가 모여 "이건 이렇게 하자"를 문서로 정하는 단체. 그 문서 자체를 번호로 부른다.
CRC — 순환 중복 검사
데이터가 전송 중에 깨지지 않았는지 짧은 검사값으로 확인하는 방법.
MCU — 마이크로컨트롤러
아주 작은 컴퓨터 한 칩. 가전·자동차·산업 기기 안에 들어간다.
RTOS — 실시간 운영체제
"정해진 시간 안에 반드시 처리"를 보장하도록 만든 바탕 프로그램.
CAN — 캔 통신
자동차 안의 작은 컴퓨터들이 서로 신호를 주고받는 통신 방식.
ID — 식별자
무엇 하나를 다른 것과 구별하기 위해 붙인 이름이나 번호.

용어집 전체 보기