개념
장애 주입이란
장애 주입(fault injection)은 고장을 의도적으로, 통제된 조건에서 만들어 시스템의 반응을 보는 시험이다. 모듈 29 레슨 7에서 네트워크 저하 상태의 타임아웃·재시도·정합성을 점검했다면, 여기서는 같은 질문을 전원·타이밍·센서·통신 선으로 옮긴다. 질문은 언제나 셋이다.
- 감지하는가 — 고장이 났다는 것을 시스템이 아는가
- 올바르게 반응하는가 — 요구된 안전 상태나 대체 동작으로 가는가, 정해진 시간 안에
- 흔적을 남기는가 — 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-01 | CAN 메시지 두절 | 0x1A0 송신 중지 | 동작 중 | 타임아웃 | 대체값 0, 경고 | 50~60ms | 타임아웃 DTC | 3주기 연속 수신 |
빈 결과 칸은 합격·불합격만이 아니라 측정값(실제 반응 시간, 기록된 DTC 코드)을 적는다. 모든 칸이 채워진 매트릭스가 장애 주입 시험의 증거다.
실무에서 왜 필요한가
현장의 임베디드 시스템은 정상 조건에서 사는 시간보다 흔들리는 조건에서 사는 시간이 길다. 자동차는 시동 때마다 전압이 떨어지고, 산업 장비는 모터가 켜질 때마다 잡음이 들어오고, 배터리 장치는 언제든 전원이 끊긴다. 이런 조건의 결함은 기능 시험으로 절대 잡히지 않고, 현장에서 벽돌이 된 장치, 설명할 수 없는 리셋, 안전 사고 로 나타난다. 장애 주입을 설계할 수 있는 테스터는 "정상에서 동작한다"를 넘어 "고장 났을 때 안전하게 실패한다" 를 증명한다. 기능안전 규격이 장애 주입을 요구하는 이유도 여기에 있다.
채용시장에서의 위치
기능안전이 걸린 자동차·의료·산업 분야 검증 공고에서 "고장 주입 시험", "강건성 시험", "전원 변동 시험" 경험이 우대된다. 면접에서는 "워치독을 어떻게 시험하겠나"가 단골 질문이다. 여기서 발동해야 할 때 발동, 발동하지 말아야 할 때 미발동, ISR 킥 금지 의 세 판정을 말하면 준비된 지원자로 보인다. "플래시 쓰기 중 전원 차단을 어떻게 시험하나"에 차단 시점을 옮겨가며 자동으로 반복한다고 답할 수 있으면 더 강하다.