개념
이 환경에서 결함은 코드가 아니라 설정에 있다
레슨 1~9 는 코드를 쓰고 하드웨어를 만지는 임베디드를 다뤘다. AUTOSAR 환경은 성격이 다르다. 통신·진단·메모리 같은 기본 기능은 표준화된 모듈로 이미 제공 되고, 개발 작업의 상당 부분이 그 모듈들을 설정하는 일 이다.
그래서 결함의 분포가 바뀐다.
| 일반 임베디드 | AUTOSAR 환경 | |
|---|---|---|
| 주된 작업 | 코드 작성 | 설정 + 응용 로직 작성 |
| 결함 위치 | 로직·드라이버 | 설정 불일치, 생성 결과 |
| 재현 | 코드 추적 | 설정 값 추적 |
| 수정 | 코드 변경 | 설정 변경 + 재생성 |
QA 에게 이것이 뜻하는 바는 분명하다. 설정을 검증 대상으로 다루지 않으면 결함의 대부분을 보지 못한다. 코드 리뷰만 하고 설정은 "도구가 생성하니까 맞겠지" 로 넘기는 것이 이 환경에서 가장 큰 공백이다.
계층 구조 — 어느 층의 문제인지 가른다
AUTOSAR 클래식 플랫폼의 공개 문서는 최상위 추상 수준에서 소프트웨어를 응용(Application)·실행 환경(RTE)·기본 소프트웨어(BSW) 세 층으로 구분하고, 그 아래에서 마이크로컨트롤러가 돈다고 설명한다. 그리고 BSW 는 다시 서비스(Services)·ECU 추상화(ECU Abstraction)·마이크로컨트롤러 추상화(MCAL)· 복합 드라이버(Complex Drivers) 로 나뉜다.
┌─────────────────────────────────────────┐
│ 응용 계층 (소프트웨어 컴포넌트) │ ← 우리가 만드는 기능
├─────────────────────────────────────────┤
│ RTE (실행 환경) │ ← 컴포넌트 간 통신을 중개
├─────────────────────────────────────────┤
│ BSW ┌ 서비스 계층 │ ← OS·통신·진단·메모리·ECU 상태
│ ├ ECU 추상화 계층 │ ← MCU 내외 장치에 일관된 접근
│ ├ MCAL (마이크로컨트롤러 추상화) │ ← MCU 의존 드라이버
│ └ 복합 드라이버 │ ← 표준 계층에 안 맞는 특수 하드웨어
├─────────────────────────────────────────┤
│ 마이크로컨트롤러 │
└─────────────────────────────────────────┘공개 문서가 설명하는 각 층의 역할은 이렇다.
- MCAL — MCU 가 제공하는 기능의 표준 드라이버를 담는다. 비휘발성 메모리, 통신(CAN·LIN·이더넷·FlexRay), 입출력(ADC·PWM·핀) 등. 목적은 상위 계층이 하드웨어에 독립적이게 하는 것 이어서, MCAL 모듈은 하드웨어 의존이고 상위 계층은 독립이다
- ECU 추상화 계층 — MCU 안팎의 기능에 일반적인 방식으로 접근 하게 한다. 워치독 인터페이스, 메모리 인터페이스, 통신·입출력 서비스 인터페이스가 여기 있다
- 서비스 계층 — BSW 의 최상위로, 응용과 다른 BSW 모듈에 기본 서비스를 제공한다. OS(태스크 스케줄링), 통신 스택, 진단 스택, 메모리 스택, ECU 상태 관리가 여기 든다
- 복합 드라이버 — 표준 계층 구조에 맞지 않는 특수 하드웨어 기능을 다룬다
- RTE — 응용 소프트웨어에 통신 서비스를 제공하고, 컴포넌트가 특정 ECU 배치에 독립적 이게 한다
계층 구조·모듈 이름·각 층의 정확한 역할 정의는 AUTOSAR 가 공개한 계층 소프트웨어 아키텍처 문서에서 확인한다(원문 확인). 릴리스에 따라 구성과 모듈 목록이 바뀐다.
QA 가 계층을 아는 이유 — 결함의 책임 소재
계층을 읽을 수 있으면 "이 현상이 어느 층의 문제인가" 를 물을 수 있다. 이것이 레슨 1 에서 다룬 계층 지도와 같은 가치이고, 모듈 62 레슨 1 의 공장 계층 지도와 같은 발상이다.
| 현상 | 의심할 층 | 가르는 방법 |
|---|---|---|
| CAN 프레임이 안 나간다 | MCAL 드라이버 / 통신 스택 설정 / 응용 | 버스에서 관측(레슨 3·4) 하고 역으로 올라간다 |
| 신호 값이 이상하다 | 신호 정의(설정) / 응용 로직 | 설정의 스케일·오프셋·바이트 순서 확인 |
| 진단 응답이 없다 | 진단 스택 설정 / 응용 콜백 | 서비스 설정과 콜백 구현을 분리해 본다 |
| 저장값이 유지되지 않는다 | 메모리 스택 설정 / 쓰기 시점 | 블록 설정과 쓰기 트리거 확인 |
| 주기가 안 맞는다 | OS 설정 / 태스크 매핑 | 설정상 주기와 실제 주기 관측 비교(레슨 9) |
오른쪽 열이 QA 의 작업 이다. 각 현상마다 층을 가르는 관측 이 정해져 있고, 그 관측 없이 추측으로 올라가면 책임 소재 논쟁이 길어진다.
설정이 코드가 되는 흐름 — 검증 지점은 어디인가
AUTOSAR 환경의 작업 흐름은 설정 → 생성 → 빌드 다. 설정은 표준 교환 형식 파일로 관리되고, 생성 도구가 그 설정에서 코드를 만든다.
[설정 파일(ARXML 등)]
│ ① 설정 자체가 맞는가
↓
[생성 도구]
│ ② 생성이 성공했는가, 경고를 무시하지 않았는가
↓
[생성된 코드 + 손으로 쓴 코드]
│ ③ 생성 결과가 설정과 일치하는가
↓
[빌드 결과]
│ ④ 대상에서 동작이 설정대로인가
↓
[동작]네 지점 각각이 검증 대상이고, ①과 ②가 가장 저평가되어 있다.
① 설정 자체의 검증. 설정 파일은 사람이 읽기 어렵고 양이 많아서, 대개 도구 화면으로만 본다. 그런데 결함은 여기 있다 — 신호 길이가 1비트 어긋나고, 주기가 10 ms 가 아니라 100 ms 이고, 블록 크기가 부족하다. 설정 값을 상위 명세(통신 매트릭스·진단 명세·요구사항) 와 대조하는 작업 이 QA 가 할 수 있는 가장 직접적인 기여다. 수가 많으므로 자동 대조 가 답이다 — 설정 파일을 파싱해 명세와 비교한다.
② 생성 경고 무시. 생성 도구는 경고를 쏟아낸다. "이 설정은 권장되지 않습니다", "참조가 해결되지 않았습니다". 양이 많아 무시하는 관행이 생기고, 그 안에 진짜 문제가 섞인다. 경고 목록을 기준선으로 관리 하고 새로 생긴 경고만 보게 만드는 것이 실무적 해법이다. 모듈 14 레슨 5 의 거짓 경보 줄이기와 같은 구조다.
③ 생성 결과 대조. 생성 코드를 사람이 읽는 것은 비효율적이지만, 특정 값이 설정대로 들어갔는지 는 확인할 수 있다. 신호 매핑, 주기 상수, 버퍼 크기 같은 핵심 값을 골라 자동 확인한다.
④ 동작 확인. 가장 익숙한 영역이고, 레슨 3·4 의 버스 관측과 레슨 9 의 타이밍 측정이 쓰인다. 다만 ①~③을 건너뛰고 ④만 하면 결함을 늦게·비싸게 발견한다.
설정 불일치의 전형 — 통신 스택
레슨 3 에서 CAN·DBC 를 다뤘다. AUTOSAR 통신 스택에서는 같은 정보가 설정으로 들어가고, 불일치가 전형적인 모양으로 나타난다.
| 불일치 | 증상 |
|---|---|
| 신호 비트 위치·길이 | 값이 엉뚱하게 읽힌다. 인접 신호가 함께 틀어진다 |
| 바이트 순서(엔디언) | 값이 뒤집힌다. 작은 값에서는 그럴듯해 보인다 |
| 스케일·오프셋 | 단위가 어긋난다. 비율로 일정하게 틀린다 |
| 프레임 주기 | 수신 측 타임아웃이 걸리거나, 버스 부하가 예상보다 크다 |
| 수신 타임아웃 값 | 정상인데 고장으로 판정하거나, 끊겼는데 못 잡는다 |
| 프레임 ID·길이 | 아예 수신되지 않는다 |
두 번째가 가장 늦게 발견된다. 바이트 순서가 뒤집혔는데 시험 값이 작으면 두 해석이 비슷한 값이 되어 통과한다. 큰 값을 넣어야 드러난다. 경계값과 큰 값을 시험 데이터에 반드시 포함 하는 이유다.
다섯 번째도 흔하다. 타임아웃 값이 주기보다 짧으면 정상 통신에서 고장 판정이 나고, 너무 길면 끊김을 늦게 잡는다. 주기와 타임아웃의 관계 를 설정 대조 항목에 반드시 넣는다.
설정 불일치의 전형 — 진단과 메모리
진단 스택 쪽은 모듈 46 레슨 3 의 UDS 와 이어진다. 설정에서 오는 전형적 문제다.
- 서비스·서브기능 지원 설정 과 명세 불일치 → 지원해야 할 요청에 부정 응답
- 세션·보안 수준 조건 설정 오류 → 보호해야 할 기능이 열려 있거나, 정상 접근이 거부된다. 전자가 보안 문제 이므로 반드시 시험한다
- 고장 코드(DTC) 설정 — 성숙 조건, 치유 조건, 저장 조건. 설정이 명세와 다르면 고장이 기록되지 않거나 지워지지 않는다
- 응답 시간 제약 — 긴 처리에 대한 응답 지연 처리가 설정되어 있는가
메모리 스택 쪽은 이렇다.
- 블록 크기와 개수 — 부족하면 저장이 실패한다. 실패가 상위에 전달되는지 확인
- 쓰기 주기·트리거 — 전원이 꺼질 때 저장되는가. 레슨 6 의 전원 장애 주입과 연결
- 마모 평준화·중복 저장 설정 — 수명과 복구에 영향
- 초기값·기본값 — 첫 기동이나 블록 손상 시 무엇이 들어가는가
"저장 실패가 상위에 전달되는가" 가 가장 중요한 질문 이다. 조용히 실패하면 설정이 저장된 줄 알고 운영하다가 재기동에서 잃는다. 모듈 39 레슨 11 의 용량 소진, 모듈 62 레슨 5 의 버퍼 한계와 같은 구조다.
OS 설정과 타이밍 — 레슨 9 와 이어진다
서비스 계층의 OS 가 태스크 스케줄링을 맡는다. 설정에서 정하는 것이 태스크·주기·우선순위·매핑 이고, 그것이 곧 레슨 9 의 응답 시간 분석 입력이다.
QA 가 대조할 항목이 분명하다.
- 설정상 태스크 목록·주기·우선순위 vs 분석에 들어간 값
- 설정상 주기 vs 실제 관측 주기(레슨 4 의 관측 수단)
- 응용 컴포넌트가 어느 태스크에 매핑되었는가 vs 설계 의도
- 인터럽트 설정과 우선순위 vs 분석에 들어간 인터럽트 부하
세 번째가 자주 어긋난다. 컴포넌트의 실행 가능 단위가 의도와 다른 태스크에 매핑되면 주기가 달라지고, 그것이 간헐적 타이밍 문제로 나타난다. 설정 대조로만 잡히는 결함이다.
변경이 전체를 흔든다
AUTOSAR 환경의 변경 관리에는 특유의 성질이 있다. 설정 한 곳을 바꾸면 생성 결과가 넓게 바뀐다. 신호 하나를 추가하면 통신 설정·RTE·응용 인터페이스가 함께 바뀌고, 태스크 주기를 바꾸면 타이밍 분석이 다시 돌아간다.
그래서 변경 영향 판정이 코드 변경보다 넓게 잡혀야 한다. 축은 이렇다.
| 변경 | 함께 확인할 것 |
|---|---|
| 신호 추가·변경 | 통신 설정, RTE 인터페이스, 수신 측 타임아웃, 버스 부하 |
| 태스크 주기·우선순위 | 타이밍 분석 전체(레슨 9), 매핑된 컴포넌트 전부 |
| 진단 설정 | 해당 서비스 시험, 보안 수준 조건, DTC 동작 |
| 메모리 블록 | 블록 크기 총합, 기존 데이터 호환성(판본 전환) |
| MCAL 설정·MCU 변경 | 전체 재검증. 하위 계층 변경은 상위로 번진다 |
| 생성 도구·BSW 버전 | 생성 결과 전체 비교. 기준선 대조가 필요하다 |
마지막 두 줄이 가장 비싸다. 도구나 BSW 버전이 올라가면 생성 결과가 달라질 수 있고, 그 차이를 사람이 다 읽을 수 없다. 생성 결과를 형상 관리에 넣고 버전 간 차분을 보는 것 이 실무적 대응이다. 차분이 예상 범위를 넘으면 조사한다.
이 변경 관리의 성격은 모듈 35 레슨 8(R155·R156 의 영향 판정), 모듈 40 레슨 7 (설계 변경), 모듈 33 레슨 7(인증 버전) 과 같은 모양이다 — 규제·표준 환경의 변경 관리는 전부 "넓게 보고 근거를 남긴다" 로 수렴한다.
QA 가 만들 산출물
정리하면 넷이다.
- 설정-명세 대조표와 자동 대조 — 통신 매트릭스·진단 명세·요구사항과 설정 값을 비교. 항목이 많으므로 자동화가 전제
- 생성 경고 기준선 — 현재 경고 목록을 기준으로 두고 새 경고만 본다
- 층을 가르는 관측 절차 — 현상별로 어느 관측을 해 어느 층을 배제하는가
- 변경 영향 판정표 — 설정 변경 유형별 재검증 범위
1번이 이 환경에서 QA 가 만드는 가장 가치 높은 것 이다. 설정 값은 수천 개이고, 사람이 화면으로 확인하는 방식으로는 덮을 수 없다. 명세를 기계가 읽을 수 있는 형태로 두고 설정과 비교하는 구조를 만들면, 그 뒤로는 변경마다 자동으로 돈다.
실무에서 왜 필요한가
국내 자동차 전자 부품 조직에서 AUTOSAR 기반 개발이 보편화되면서, QA 가 겪는 전형적 좌절이 있다. 코드 리뷰를 할 코드가 적다. 대부분이 생성 코드이고, 손으로 쓴 부분은 응용 로직 일부다. 그래서 익숙한 방식으로는 할 일이 없어 보이고, 결국 동작 시험(④ 지점) 만 하게 된다.
그 결과가 설정 결함을 늦게 발견하는 것 이다. 신호 비트 위치가 어긋난 것을 통합 시험에서 버스 관측으로 발견하면, 그때까지의 모든 시험이 잘못된 전제에서 돌았을 수 있다. 설정 대조로는 착수 단계에 잡힌다.
그래서 이 환경에서 QA 의 역할이 바뀐다. 설정을 명세와 대조하는 자동화를 만드는 것 이 핵심 작업이 되고, 그것은 전형적인 QA 역량이다 — 명세를 읽고, 판정 가능한 비교로 바꾸고, 결과가 0건이면 통과인 검사를 쌓는 일. 모듈 61 레슨 2 의 정합성 조회, 모듈 62 레슨 4 의 대조 지점과 같은 발상을 설정 파일에 적용하는 것이다.
두 번째 기여는 층을 가르는 관측 이다. "CAN 이 안 나갑니다" 라는 보고가 오면 응용·스택·MCAL·하드웨어 사이에서 책임 소재 논쟁이 벌어진다. 관측으로 층을 배제해 가는 절차를 가진 QA 가 있으면 그 논쟁이 짧아진다.