08. 요구사항 관리 — TBD를 언제 무엇으로 닫나
출처: SR §7(가정사항 및 프로젝트 제약), §8(TBD 및 Open Issue), §9(요구사항 작성 및 관리 원칙) 이 편은 개별 기능이 아니라 SR이라는 문서 자체를 다룬다. 앞의 7편이 "무엇을 요구하는가"였다면, 여기는 "이 문서를 어떻게 관리하고 미정 항목을 어떻게 닫는가"다. 구현 순서와 시험 계획은 11편으로 이어진다.
1. SR이란 무엇인가 — 문서의 위치
이 문서의 정식 명칭은 Stakeholder Requirements Specification (SR), 이해관계자 요구사항 명세서다. §1 문서 정보에 그렇게 적혀 있다.
시스템 개발 문서 체계에서 SR의 위치:
§2가 이 경계를 명확히 한다.
"함수, GPIO 핀, 네트워크 프레임의 상세 Byte/Bit 배치, 회로도, 내부 소프트웨어 구조, 오디오 구현 상세 및 시험 절차는 별도의 소프트웨어 설계서, 네트워크 인터페이스 명세서, 하드웨어 설계서 및 시험 명세서에서 정의한다."
SR에 없는 것을 나열함으로써 SR이 무엇인지를 정의했다. 좋은 문서 구조다.
1-1. "사용자 관점에서 관찰 가능한"
§9의 마지막 원칙이 이 문서 전체의 작성 기준이다.
"사용자 관점에서 관찰 가능한 기능과 안전 의도는 SR에서 정의하고, Controller 간 내부 명령 전달, 상태 교환, 세부 중재 및 실행 메커니즘은 SysRS 또는 설계 문서에서 정의한다."
"관찰 가능(observable)"이 판정 기준이다.
| SR에 쓸 수 있는가 | 문장 | 이유 |
|---|---|---|
| ○ | "시스템은 끼임 위험을 감지한 경우 진행 중인 윈도우 닫힘 동작을 즉시 정지해야 한다" | 창문이 멈추는 것을 볼 수 있다 |
| ✗ | "Power Window Controller는 모터 전류가 임계값을 초과하면 H-브리지를 브레이크 모드로 전환한다" | 내부 구현. 사용자는 모른다 |
| ○ | "시스템은 도어 잠금이 정상적으로 완료된 경우 잠금 완료 피드백 차임을 1 회 출력해야 한다" | 소리를 들을 수 있고 횟수를 셀 수 있다 |
| ✗ | "Central Controller는 CAN ID 0x210으로 잠금 완료 프레임을 수신하면 오디오 태스크에 이벤트를 큐잉한다" | 내부 메커니즘 |
그런데 예외처럼 보이는 문장이 하나 있다.
§6.2.5 "시스템은 윈도우 제어 관련 통신 오류가 발생하더라도 로컬 윈도우 제어기에서 수행하는 Anti-pinch 보호 기능을 유지해야 한다."
"로컬 윈도우 제어기"는 내부 구조를 언급한다. 왜 예외가 허용됐나?
이건 아키텍처 제약이 안전 요구사항이기 때문이다. "통신이 끊겨도 Anti-pinch가 동작한다"는 관찰 가능한 결과인데, 그 결과를 보장하는 유일한 방법이 "로컬에서 수행"이므로, 구조가 곧 요구사항이 된다. 이런 걸 **아키텍처 제약 요구사항(architectural constraint)**이라 부르고, SR에 들어가는 것이 정당하다.
2. §9 — 요구사항 작성 원칙 8개
§9는 여덟 문장으로 되어 있다. 하나씩 뜯어본다.
2-1. "하나의 요구사항에는 하나의 주요 동작 또는 검증 가능한 목적만 작성한다"
검증 단위 = 요구사항 단위라는 선언이다.
한 문장에 두 결과가 들어가면 시험 판정이 애매해진다.
✗ "시스템은 끼임 위험을 감지한 경우 닫힘을 정지하고 보호 위치까지 열어야 한다."
→ 정지는 됐는데 보호 동작이 안 되면? "부분 통과"라는 판정은 없다.
✓ "시스템은 끼임 위험을 감지한 경우 진행 중인 윈도우 닫힘 동작을 즉시 정지해야 한다."
✓ "시스템은 끼임 위험으로 닫힘 동작을 정지한 경우 정의된 보호 위치까지 열림 방향의 보호 동작을 수행해야 한다."
→ 두 개의 독립된 시험 항목. 결함 위치가 정확히 특정된다.
2-2. "둘 이상의 독립 검증 가능한 요소는 별도 요구사항으로 분리한다"
앞 원칙의 실행 지침이다. 이 문서에서 분리가 가장 두드러진 곳은 우선순위 사슬이다.
§6.2.1은 우선순위를 이렇게 쓴다.
전용 스위치 > HMI, 원격, 자동환기
HMI > 원격, 자동환기
원격 > 자동환기
한 문장 "전용 스위치 > HMI > 원격 > 자동환기"로 쓸 수 있는데 세 문장으로 나눴다. 그래야 "스위치 vs 원격"을 검증하는 근거 요구사항이 명확히 존재한다.
§6.4.3의 Ambient Lighting 우선순위도 같은 방식이다 — Emergency, Fault, Warning, Access, Goodbye가 각각 "자기보다 낮은 모든 것"을 열거한다. 중복이 아니라 검증 가능성을 위한 의도적 반복이다.
2-3. "책임 주체와 수행 동작이 명확한 '해야 한다' 형식으로 작성한다"
주어의 세 가지 형태(00편 §6 참고):
| 주어 | 무엇을 규정하나 | 개수(대략) |
|---|---|---|
| "시스템은 …해야 한다" | 시스템 동작. 어느 노드가 하는지는 SR에서 정하지 않음 | 대부분 |
| "차량 내 HMI는 / 모바일 인터페이스는 …해야 한다" | 표시·입력 책임이 인터페이스에 있는 동작 | §6.3, §6.5에 집중 |
| "사용자는 …할 수 있어야 한다" | 사용자에게 보장되는 능력 | 설정·요청 관련 |
세 번째 형식이 미묘하다. "사용자는 목표 온도를 설정할 수 있어야 한다"는 시스템 동작이 아니라 사용자 능력이다. 이걸 "시스템은 목표 온도 설정 기능을 제공해야 한다"로 바꿔 쓸 수도 있는데, 굳이 사용자를 주어로 둔 이유는 누구의 관점에서 쓴 문서인지를 명확히 하기 위해서다. SR은 이해관계자(사용자) 요구사항 명세다.
2-4. "기능별 사용자 요구사항에는 별도의 요구사항 ID를 부여하지 않고 기능 및 하위 기능 제목으로 구분하여 관리한다"
이 문서에는 요구사항 ID가 없다. REQ-001 같은 번호가 안 붙어 있고, "§6.2.4 Anti-pinch 안전 보호"라는 제목 아래 여섯 문장이 나열될 뿐이다.
이게 좋은 선택인가? 장단이 명확하다.
| ID 없음(현재) | ID 있음 |
|---|---|
| 요구사항 추가·삭제가 쉽다 | 번호가 흩어지거나 재사용 문제 발생 |
| 문서가 읽기 쉽다 | 표가 번호로 채워져 산만함 |
| 추적성(traceability)이 약하다 | 시험 항목·설계 항목과 1:1 연결 가능 |
| 변경 이력 관리가 어렵다 | "REQ-042가 v1.1에서 변경됨"을 기록 가능 |
프로토타입 단계에서는 합리적이다. 하지만 §9의 마지막 원칙 — "요구사항 변경 시 관련 기능 요구사항, 기능별 상태, HMI 표시 및 시험 항목의 영향을 함께 검토한다" — 을 실제로 수행하려면 결국 추적성이 필요하다.
실무 절충안: SR에는 ID를 안 붙이되, 시험 명세서에서 "§6.2.4-3" 같은 절-순번 참조를 쓴다. 위치가 바뀌면 참조가 깨지지만, 절 단위로는 안정적이다.
2-5. "미확정 통신 방식, 센서 임계값, 법규 적용 범위 및 성능 수치는 TBD로 관리한다"
§8 전체가 이 원칙의 실행이다. 3절에서 다룬다.
2-6. "부품 모델, 센서 구현 방식, 회로 구성, 구동 전압·전류, 핀맵 및 배선과 같은 하드웨어 상세 설계 항목은 SR에서 고정하지 않고 하드웨어 설계서에서 정의한다"
§7.2가 같은 말을 한 번 더 한다. 왜 두 번 쓰나?
§7.2는 "이번 프로젝트에서는 이렇게 한다"는 프로젝트 제약이고, §9는 "SR이라는 문서는 원래 이런 것"이라는 작성 원칙이다. 성격이 다르다.
2-7. "사용자 관점 관찰 가능 vs 내부 메커니즘"
2-1절에서 다뤘다.
2-8. "요구사항 변경 시 관련 기능 요구사항, 기능별 상태, HMI 표시 및 시험 항목의 영향을 함께 검토한다"
**변경 영향 분석(change impact analysis)**이다. 네 가지를 함께 보라고 한다.
실제 예로 확인해 보자. TBD-034(엔진룸 동물 진입의 Ambient 우선순위 등급)를 "Emergency"로 확정한다고 하자.
| 영향 | 무엇이 바뀌는가 |
|---|---|
| 관련 기능 요구사항 | §6.4.3의 표시 우선순위 — Emergency가 하나 늘어난다. §6.3.5의 상태 제공 대상에 Ambient 추가 |
| 기능별 상태 | §6.6의 기능별 동작 상태에 "엔진룸 CV" 상태가 Emergency 등급으로 매핑 |
| HMI 표시 | §6.5.3의 "안전 보호 동작 또는 위험 경고를 일반 상태보다 우선" — HMI에서도 최상위 표시 |
| 시험 항목 | Ambient 우선순위 시험 전체 재수행. "Emergency 2개 동시 발생" 시나리오가 새로 필요 |
한 TBD를 닫는 것이 네 영역에 파급된다. 이걸 안 하면 SR과 시험 명세서가 어긋난다.
3. §8 — TBD 관리
3-1. 전체 목록
§8의 표를 그대로 옮기고, 이 노트 시리즈에서 어느 편이 다루는지 표시했다.
| ID | 결정 필요 사항 | 초기 제안 | 다루는 편 |
|---|---|---|---|
| TBD-001 | Central Controller–ESP32 물리 통신 | UART/CAN/Wi-Fi 등 팀 공통 방식 확정 | 00, 07 |
| TBD-002 | Central–Power Window/Function/Sensing CAN FD 파라미터 | bitrate, 트랜시버, 종단 및 메시지 정책 확정 | 07 |
| TBD-003 | Sensing Controller–Raspberry Pi Vision 인터페이스 | UART 또는 SPI 중 확정 | 00, 03 |
| TBD-004 | VSS 차량 상태 정보 유효성 및 복구 기준 | 유효성 판단 기준 및 이상 알림 진입·복구 조건 확정 | 01 |
| TBD-005 | VSS 음향별 주파수·길이·dB(A) 최종 Calibration | 벤치 출력 측정 후 확정 | 01 |
| TBD-006 | 장애물 경고 거리·미디어 음량 기준 | 초음파 시험과 VSS 경고 통합 후 확정 | 01, 03 |
| TBD-007 | Power Window 기구 스트로크 및 정의된 환기 위치 | 단일 윈도우 모사 장치 기준 (참조: §6.2.3) | 02, 05 |
| TBD-008 | Power Window 위치 확인 방식과 센서 조합 | 하드웨어 설계 단계에서 확정 | 02 |
| TBD-009 | Anti-pinch 감지 방식·임계값·보호 위치·반응시간 | Load cell/current 등 벤치 시험 (참조: §6.2.4) | 02 |
| TBD-010 | 원격·원터치·자동 환기 기반 윈도우 닫힘 정책 | 적용 법규 및 데모 안전 조건 (참조: §6.2.2, §6.4.2) | 02, 05 |
| TBD-011 | 조도 기준 Auto Light/Ambient 밝기 임계값 및 Hysteresis | 조명 및 Ambient 정책과 통합 후 확정 | 03, 06 |
| TBD-012a | Predictive Climate 목표 온도 범위 및 Fan 출력 전환 기준 | §6.4 Function Controller 요구사항 기준 | 05 |
| TBD-012b | Window 기반 자동 환기 시작·종료 온습도 기준 및 최대 수행 시간 | Predictive Climate 요구사항 기준 (참조: §6.4.2) | 05 |
| TBD-013 | 초음파 센서 개수·배치 및 근접 위험 거리 | 근접 위험 단계 수(예: 5 단계) 포함 | 01, 03 |
| TBD-014 | Vision 모델·신뢰도·FPS | 탑승자/인원 인식 기준과 성능 확정 | 03 |
| TBD-015 | ROA 판정 조건 | 전원/도어락/고온/탑승자 상태의 유지시간 확정 | 03 |
| TBD-016 | BLE Digital Key 접근·근접·이탈 판단 기준 및 유지시간 | RSSI Filtering, 유지시간 및 Hysteresis 벤치 확정 | 04 |
| TBD-017 | Auto Re-lock 대기시간 및 Door Lock/Unlock 결과 확인시간 | Door 상태 센서 시험 후 확정 | 04 |
| TBD-018 | Predictive Climate Fan 제어 기준 | OFF/LOW/MEDIUM/HIGH 전환 조건 및 실제 출력 기준 | 05 |
| TBD-019 | Ambient Lighting 표시 Pattern·밝기 및 일시적 표시 지속시간 | 시각 피드백과 안전 표시 우선순위 정책 통합 후 확정 | 06 |
| TBD-020 | 외부 기능 ECU Heartbeat/Timeout 및 복구 정책 | ECU 주기와 재유효화 조건 확정 | 02, 07 |
| TBD-021 | HMI 상태 갱신 재전송 방식 | 통합 시험 후 확정 | 07 |
| TBD-022 | 센싱/Vision 데이터 최대 age | 센서 종류별 유효 시간 확정 | 00, 03, 07 |
| TBD-027 | 차량 전원 상태(OFF/ACC/ON/START) 생성 주체 및 입력 방식 | ESP32 데모 입력 또는 Central 내부 모사 | 01 |
| TBD-029 | 엔진룸 카메라 하드웨어 구성(추가 모듈, 방수/내열 여부) | 저전압 환경 기준 예산·일정 검토 후 확정 | 03 |
| TBD-030 | 대상 동물 인식 모델·신뢰도 기준 | 유사 소동물(너구리 등) 오탐 처리 포함 | 03 |
| TBD-031 | 엔진룸 대상 동물 진입 상태 해제 유지 시간 | 오탐(그림자, 낙엽) 방지 기준 통합 확정 | 03 |
| TBD-032 | 엔진룸 대상 동물 진입 시 원격 사용자 알림 방식 | Push/SMS 등 구현 방식 및 알림 전달 목표 시간 | 03 |
| TBD-033 | 엔진룸 카메라 UART/SPI 등 통신 인터페이스 | Sensing Controller 또는 별도 Vision 경로 여부 | 03 |
| TBD-034 | 엔진룸 대상 동물 진입 상태 Ambient 우선순위 등급 | Warning/Fault/Emergency 중 적용 또는 별도 티어 | 06 |
| TBD-036 | 엔진룸 CV 판정 트리거 조건 | 시동 시도/도어 개방/주기 중 확정, 배터리·자원 관점 | 03 |
| TBD-038 | 센서/비전 오류 복구 판정 기준 | 연속 정상값 수신 횟수·유지 시간 (TBD-022와 별개) | 03 |
총 32건이다. 번호는 038까지 가지만 023~026, 028, 035, 037이 비어 있다. 번호의 빈칸은 통합·삭제된 항목의 흔적이고, 이걸 그대로 두는 게 옳다 — 번호를 재사용하면 과거 회의록·이슈 트래커의 참조가 깨진다.
3-2. TBD를 성격별로 분류하면
| 성격 | 건수 | 무엇을 기다리나 | 대표 |
|---|---|---|---|
| 통신 인터페이스 확정 | 4 | 팀 합의 + 하드웨어 제약 | 001, 002, 003, 033 |
| 센서 임계값·물리 수치 | 8 | 벤치 시험 데이터 | 005, 006, 009, 011, 012a, 012b, 013, 018 |
| 타이밍·유효시간 | 6 | 통합 시험 | 017, 020, 021, 022, 031, 038 |
| 인식·판정 기준 | 4 | 모델 선정·데이터셋 | 014, 015, 016, 030 |
| 정책·우선순위 | 4 | 정책 회의 (기술 아닌 결정) | 010, 019, 034, 036 |
| 하드웨어 구성 | 4 | 설계·조달 | 007, 008, 027, 029 |
| 기능 유효성 기준 | 2 | 통합 정의 | 004, 032 |
"정책·우선순위" 4건이 특별하다. 이건 시험을 아무리 해도 답이 안 나온다. 사람이 결정해야 한다.
- TBD-010: 자동 환기 닫힘 정책 — 법규와 데모 안전 조건의 균형
- TBD-019: Ambient 표시 패턴 — 디자인·UX 결정
- TBD-034: 동물 진입의 등급 — 위험을 어떻게 볼 것인가
- TBD-036: CV 트리거 — 배터리와 안전의 교환비
기술 TBD와 정책 TBD를 섞어 관리하면 정책 TBD가 영원히 안 닫힌다. "시험하면 나오겠지" 하고 미루기 때문이다. 실무에서는 정책 항목을 별도 회의 안건으로 올려야 한다.
3-3. TBD 의존 그래프 — 문서에 안 적힌 것
§8의 표는 각 TBD를 독립적으로 보여주지만, 실제로는 얽혀 있다. 앞선 편들에서 발견한 의존을 모으면:
이 그래프에서 읽어야 할 것:
-
TBD-022가 가장 많은 것에 의존한다 — heartbeat 주기와 재전송 주기가 정해져야 max age를 정할 수 있다. 그리고 TBD-022가 정해져야 §6.2.2, §6.3.4, §6.4.4, §6.5.3의 "신뢰할 수 없는 경우"가 실제로 판정 가능해진다. 이 문서에서 가장 널리 퍼진 미정 항목이다.
-
TBD-008 → TBD-009는 물리적 의존이다. 위치를 어떻게 아느냐가 정해져야 끼임을 어떻게 감지할지 정할 수 있다(02편 §4-2 참고). 순서를 뒤집으면 재작업이 생긴다.
-
TBD-002가 TBD-001을 제약한다 — 하드웨어 제약이므로 되돌릴 수 없다. 07편 §6-1에서 다뤘다.
§8의 표에는 이 의존이 안 적혀 있다. "참조 절"은 있지만 "선행 TBD"는 없다. 실무에서는 이 그래프를 별도로 만들어 결정 순서를 잡아야 한다.
3-4. TBD를 문서에 남기는 것의 가치
✗ 임의 값으로 채우기:
"Anti-pinch 임계값은 2.5 A로 한다" (근거 없이 정함)
→ 시험 통과 → 기록 남음
→ 나중에 실제 값이 1.8 A로 밝혀짐
→ 어떤 시험을 다시 해야 하는지 추적 불가
✓ TBD로 남기기:
TBD-009 → 시험 명세서가 "TBD-009 확정 후 수행"으로 표시됨
→ 값 확정 시 §9의 변경 영향 분석 절차가 작동
→ 재검증 범위가 명확
TBD는 "모른다"의 고백이 아니라 "언제 어떻게 알게 될지"의 계획이다. §8의 "초기 제안" 열이 그 계획이다 — "벤치 시험 후", "통합 시험 후", "하드웨어 설계 단계에서".
4. §7 — 가정사항과 제약을 읽는 법
4-1. 가정사항(§7.1)과 제약사항(§7.2)의 차이
| 가정사항 | 제약사항 | |
|---|---|---|
| 성격 | 참이라고 믿고 진행하는 것 | 선택의 여지가 없는 것 |
| 틀리면 | 요구사항이 무효가 될 수 있다 | (틀릴 수 없다 — 이미 정해진 것) |
| 예 | "실내 저전압 프로토타입 환경에서 검증한다" | "S32K344-WB는 총 1개를 사용한다" |
§7.1의 항목들을 보면 전부 검증 환경에 대한 가정이다.
- 본 시스템은 실제 양산 차량이 아닌 실내 저전압 프로토타입 환경에서 검증한다.
- Central Controller 와 VSS 기능은 하나의 S32K344-WB 보드에서 함께 수행하며 두 기능 사이에 별도 차량 네트워크 통신을 사용하지 않는다.
- Sensing/Vision Subsystem 은 S32K144 Sensing Controller 와 Raspberry Pi 3 B Vision Module 을 기준 구성으로 하며, Vision Module 은 실내 카메라와 엔진룸 카메라를 사용한다.
- 원격 사용자 기능과 BLE Digital Key 는 프로토타입의 로컬 네트워크/BLE 환경에서 검증한다.
- 파워윈도우의 법규 적용 범위와 안전 수치는 적용 국가/차종 및 프로젝트 시험 조건을 확정한 후 최종 검증 기준으로 사용한다.
- 엔진룸 CV 는 저전압 프로토타입 환경에서 별도 소형 카메라 모듈로 구현하며, 실제 엔진룸 환경(고온·진동·방수)은 검증 범위에서 제외한다.
"이 가정이 깨지면 무엇이 무효가 되는가"를 각각 생각해 봐야 한다.
| 가정 | 깨지면 |
|---|---|
| 실내 저전압 프로토타입 | 12 V 계 전원 노이즈, 배터리 방전, 저온 시동 시나리오가 전부 미검증 상태로 노출 |
| Central+VSS 동일 보드 | 두 기능 사이에 통신 지연·오류 처리가 새로 필요 → §6.1.2 우선순위 타이밍 재검토 |
| 로컬 BLE 환경 | 원거리 푸시(TBD-032), 셀룰러 지연, 클라우드 인증이 전부 새 요구사항 |
| 법규 수치 미확정 | Anti-pinch 시험 결과의 합격/불합격 판정 자체가 잠정적 |
4-2. §7.2 제약사항이 실질적으로 요구사항인 경우
§7.2의 대부분은 구성 확정이지만, 두 항목은 사실상 안전 요구사항이다.
"Function Controller 는 Door Lock Actuator, 공조 출력 장치 및 Ambient Lighting 을 직접 제어한다. Window Motor 는 Power Window Controller 만 직접 제어한다."
"만"이 붙어 있다. 이건 구성이 아니라 금지 규정이다. 02편에서 봤듯, 모터 구동 권한을 한 노드로 못 박아야 Anti-pinch가 우회당할 경로가 없어진다.
"Power Window 는 단일 윈도우의 열림·닫힘·정지, 위치 확인 및 Anti-pinch 보호 기능을 검증할 수 있는 저전압 모사 장치로 구성한다."
이건 범위 한정이다. 4-도어 동기 제어, 도어별 우선순위, 운전석 마스터 스위치 같은 실차 기능은 요구사항에 없다.
4-3. "제외한다"의 정확한 의미
§7.2 "실차 수준의 기계 하중, 고전압·고전류 부하, 양산 인증 및 완전한 AUTOSAR 양산 적용은 1차 프로젝트 범위에서 제외한다."
**"1차 프로젝트 범위에서"**라는 한정이 붙어 있다. 영원히 안 한다는 게 아니라, 이번엔 안 한다는 뜻이다.
AUTOSAR를 제외한 것의 실질적 의미:
| AUTOSAR Classic을 쓰면 | 안 쓰면(이 프로젝트) |
|---|---|
| RTE가 SW-C 간 통신을 자동 생성 | 직접 CAN 프레임 설계·구현 |
| COM/PDU Router 스택이 프레임 처리 | 직접 구현 |
| 표준 진단(UDS) 스택 | 필요하면 직접 |
| BSW 설정 도구 체인 필요 | 베어메탈 또는 경량 RTOS |
| 학습 곡선·라이선스 비용 | 코드가 단순, 직접 통제 |
프로토타입에서는 직접 구현이 옳은 선택이다. AUTOSAR 툴체인 학습에 프로젝트 기간을 다 쓸 수 없다. 다만 나중에 양산으로 갈 때 아키텍처를 크게 바꿔야 한다는 걸 알고 있어야 한다.
5. 이 SR을 리뷰한다면 — 발견한 이슈들
앞의 7편을 쓰면서 발견한, 설계 문의(clarification request)로 올릴 만한 항목들을 모았다. SR 리뷰의 실제 산출물이 이런 목록이다.
5-1. 용어 정의와 본문의 불일치
| 항목 | 내용 |
|---|---|
| Smart Access 조건 | §5 용어 정의는 "인증된 Digital Key와 사용자 근접 상태 및 차량 보안 조건"이라고 세 가지를 든다. 그러나 §6.4.1 요구사항 본문에는 "차량 보안 조건"에 해당하는 문장이 없다. 정의를 고칠 것인가, 요구사항을 추가할 것인가? (04편 §1-1) |
5-2. 같은 절 안의 상태 모델 충돌
| 항목 | 내용 |
|---|---|
| VSS 일반 음향의 중단 vs 복구 | §6.1.2는 비상 경고 발생 시 "진행 중인 일반 음향 출력을 즉시 중단"이라 하고, §6.1.3은 위험 해제 후 "이전에 재생 중이던 일반 음향을 서서히 정상 수준으로 복구(Fade-in)"하라고 한다. 중단된 것을 복구하는가, 감쇄된 것을 복구하는가? 두 문장이 서로 다른 상태 모델을 가정한다. (01편 §3-2) |
5-3. 용어의 이중 의미
| 항목 | 내용 |
|---|---|
| "주차 또는 정차" | §6.1.3은 "야간 시간대이고 차량이 주차 또는 정차 상태인 경우" 감쇄하라고 하면서, 바로 다음 문장에서 "차량 시동이 걸려 있는 경우 시간 정보와 관계없이 야간 감쇄를 적용하지 않아야 한다"고 한다. 신호 대기 정차는 시동이 걸려 있으므로 감쇄 대상이 아니다. 그렇다면 "정차"는 시동 꺼진 정차만을 뜻하는가? 용어를 명확히 해야 한다. (01편 꼬리질문 5) |
5-4. 미정의 조건 하의 동작
| 항목 | 내용 |
|---|---|
| 시간 정보 불신 시 야간 감쇄 | §6.1.3은 "유효한 시간 정보를 기반으로 주간 및 야간 상태를 구분해야 한다"고만 하고, 시간을 신뢰할 수 없을 때의 동작을 정의하지 않는다. 00편 패턴 A를 적용하면 "감쇄하지 않음"이 fail-safe이지만, 명시가 필요하다. (01편 §3-3) |
| 자동 공조와 수동 조작의 관계 | §6.4.2는 "새로운 Fan 제어 기능으로 전환된 이후 이전 기능의 Fan 출력을 자동으로 재개하지 않아야 한다"고 한다. 사용자 수동 조작으로 자동 공조가 종료된 뒤, 자동 공조 기능 자체는 여전히 활성 상태다. 다음 판단 사이클에서 다시 Fan을 요구해도 되는가? (05편 §4-2) |
| 위치 불신 시 수동 닫힘 | §6.2.2는 위치 불신 시 "원터치 동작 및 자동 환기 동작"만 금지한다. 수동 닫힘은 허용되는가? 그런데 같은 절이 "Anti-pinch를 사용할 수 없는 경우 닫힘 동작을 시작하지 않아야 한다"고도 한다. 위치 없이 Anti-pinch가 성립하는지에 답이 달려 있고, 그건 TBD-009의 감지 방식 확정에 의존한다. (02편 꼬리질문 4) |
5-5. 우선순위 충돌 가능성
| 항목 | 내용 |
|---|---|
| 안티핀치 vs ROA 사이렌 | §6.1.2는 안티핀치를 "다른 음향 및 피드백 음향보다 최우선"이라 한다. ROA 사이렌은 인명 관련이고 §6.1.1에서 "차량 전원 상태와 관계없이" 울리는 유일한 음향이다. 두 조건이 동시에 성립할 때 안티핀치가 이기는 게 맞는가? 조합 발생 가능성과 함께 검토 필요. (01편 꼬리질문 3) |
5-6. TBD 간 의존이 표에 없음
3-3절의 그래프. 특히 TBD-002 → TBD-001(하드웨어 제약), TBD-020·021 → TBD-022(수치 의존), TBD-008 → TBD-009(방식 의존)는 결정 순서를 잘못 잡으면 재작업이 발생한다.
6. 좋은 요구사항 문장의 체크리스트
이 SR에서 반복적으로 나타나는 좋은 패턴을 일반화하면:
| 체크 | 질문 | 이 문서의 예 |
|---|---|---|
| 검증 가능한가 | 시험자가 통과/실패를 판정할 수 있는가 | "잠금 완료 피드백 차임을 1 회 출력" — 횟수를 셀 수 있다 |
| 단일 동작인가 | 결과가 하나인가 | §6.2.4가 여섯 문장으로 쪼개진 것 |
| 관찰 가능한가 | 사용자 관점에서 보이는가 | "즉시 정지해야 한다" ○ / "H-브리지 브레이크" ✗ |
| 책임 주체가 있는가 | 누가 하는가 | "시스템은" / "HMI는" / "사용자는" |
| 부정 조건도 있는가 | 안 해야 할 때가 정의됐는가 | "시동이 꺼져 있는 경우 … 출력하지 않아야 한다" |
| 해제 조건이 있는가 | 상태를 만드는 것뿐 아니라 지우는 것도 있는가 | §6.3.3의 근접 위험 생성/해제 쌍 |
| 미정을 숨기지 않았는가 | 모르는 것을 임의 값으로 채우지 않았는가 | "정의된 기준", TBD 참조 |
| 오류 시 동작이 있는가 | 정상 경로만 쓰지 않았는가 | 각 절의 "오류 및 안전 동작" 소절 |
6-1. 특히 잘 쓰인 것 — 생성/해제 쌍
이 문서는 상태를 만드는 요구사항 옆에 반드시 지우는 요구사항을 둔다.
§6.3.3 후진 기어 AND 기준 거리 이내 → 근접 위험 상태 생성
기준 거리 이탈 OR 후진 기어 이탈 → 근접 위험 상태 해제
§6.3.5 대상 동물 진입 유효 확인 → 진입 상태 생성
미감지가 정의된 시간 이상 유지 → 진입 상태 해제
§6.1.1 위험 상태 감지 → 경고음 출력
위험 해제 또는 최대 경고 시간 초과 → 경고음 중단
"상태를 만드는 코드는 누구나 쓰고, 지우는 코드를 빼먹는다." 요구사항 레벨에서 쌍을 강제하면 이 버그가 구조적으로 예방된다.
6-2. 특히 잘 쓰인 것 — 비대칭 설계
여러 곳에서 진입은 민감하게, 해제/복구는 보수적으로가 일관되게 나타난다.
| 항목 | 진입 | 해제·복구 |
|---|---|---|
| 센서 오류 (§6.3.4) | 즉시 (1회 이상값) | 복구 조건 충족까지 (TBD-038: 연속 N회) |
| 동물 진입 (§6.3.5) | 유효 확인 즉시 | 정의된 시간 유지 (TBD-031) |
| Anti-pinch (§6.2.4) | 감지 즉시 정지 | 새 유효 요청까지 재개 금지 |
| 자동 기능 오류 (§6.4.4) | 즉시 중단 | 복구 + 재평가 + 최신 조건 유효 |
위험 쪽으로 기울인 설계(fail-safe bias)가 문서 전체에서 일관된다. 이건 우연이 아니라 작성자가 안전 원칙을 이해하고 썼다는 증거다.
7. 한 줄 요약
| 절 | 한 줄 |
|---|---|
| SR의 위치 | 사용자 관점에서 관찰 가능한 것만. 통신·핀맵·중재 메커니즘은 SysRS/설계서 |
| §9 작성 원칙 | 하나의 요구사항 = 하나의 검증 가능한 동작. 책임 주체 명시. 미정은 TBD |
| §8 TBD | 32건(번호는 038까지, 빈칸은 통합·삭제 흔적). 정책 TBD 4건은 시험으로 안 닫힌다 |
| TBD 의존 | 표에 없는 의존 그래프가 존재한다. TBD-022가 가장 널리 퍼져 있다 |
| §7 가정·제약 | "제외한다" = "다른 문서에서 관리" 또는 "1차 범위 밖". 안 한다는 뜻이 아니다 |
| 리뷰 결과 | 용어-본문 불일치 1, 상태 모델 충돌 1, 용어 이중 의미 1, 미정의 동작 3, 우선순위 검토 1 |
설계 판단 체크포인트
구현에 들어가기 전에 팀이 답을 갖고 있어야 하는 것들이다. 답이 안 나오면 그 자리가 곧 설계 문의 또는 TBD 후보다.
-
요구사항 ID를 부여하지 않은 선택의 대가는 무엇이고, 어떻게 보완할 수 있나? 추적성이 약해진다. §9의 마지막 원칙(변경 영향 분석)을 수행하려면 "이 요구사항에 연결된 시험 항목이 무엇인가"를 알아야 하는데, ID가 없으면 절 제목과 순번으로 참조해야 하고 문장 순서가 바뀌면 깨진다. 보완책은 시험 명세서에서 "§6.2.4-3" 같은 절-순번 참조를 쓰되, 절 단위 안정성에 의존하는 것이다. 규모가 커지면 결국 ID를 도입해야 한다.
-
"시스템은 …해야 한다"와 "사용자는 …할 수 있어야 한다"를 구분해 쓰는 이유는? 전자는 시스템 동작(system behavior), 후자는 사용자에게 보장되는 능력(user capability)이다. 후자는 시스템이 어떤 수단으로 그 능력을 제공하든 상관없다는 뜻이므로, 구현 자유도가 더 크다. 그리고 SR이 이해관계자 관점 문서임을 문법으로 드러낸다.
-
§6.2.5의 "로컬 윈도우 제어기에서 수행하는"은 내부 구조 언급인데 왜 SR에 허용되나? "통신이 끊겨도 Anti-pinch가 유지된다"는 관찰 가능한 안전 요구인데, 이를 보장하는 유일한 방법이 로컬 실행이다. 구조가 곧 요구사항인 경우를 아키텍처 제약 요구사항이라 하고, SR에 포함하는 것이 정당하다. 다만 이런 예외는 안전상 필요할 때만 써야 하고, 남용하면 SR이 설계서가 된다.
-
TBD-022(데이터 max age)를 가장 먼저 확정하려 하면 무슨 문제가 생기나? TBD-020(heartbeat 주기)과 TBD-021(상태 재전송 주기)이 정해지지 않으면 max age를 정할 근거가 없다. max age는 재전송 주기의 배수로 잡아야 하는데, 주기를 모르면 임의 값이 된다. 결정 순서를 지켜야 한다 — 이게 3-3절 의존 그래프의 실용적 가치다.
-
정책 성격의 TBD(010, 019, 034, 036)를 기술 TBD와 같은 방식으로 관리하면 왜 안 닫히나? 기술 TBD는 "시험하면 답이 나온다"는 경로가 있지만, 정책 TBD는 시험 결과가 답을 주지 않는다. 예컨대 TBD-034(동물 진입이 Warning인가 Emergency인가)는 데이터로 결정되지 않고 "우리 팀이 이 위험을 어떻게 볼 것인가"의 문제다. 시험 대기 목록에 넣어 두면 영원히 대기한다. 별도 의사결정 안건으로 올려야 한다.
-
§6.1.2와 §6.1.3의 "중단 vs 복구" 충돌을 발견했다. 리뷰어로서 무엇을 제안하겠나? 두 문장이 다른 상태 모델을 가정하므로 하나로 통일해야 한다. §6.1.2가 "즉시 중단"이라고 명시했으므로, §6.1.3의 "복구"를 음량 복구로 한정하는 게 정합적이다. 구체적으로는 §6.1.2를 "일반 음향 출력을 즉시 중단하거나 식별 불가 수준으로 감쇄해야 한다"로 완화하거나, §6.1.3을 "안티핀치 위험 중 감쇄된 일반 음향의 음량을 서서히 정상 수준으로 복구해야 한다"로 명확히 하는 두 방향이 있다. 어느 쪽이든 SR 작성자가 의도를 확인해 줘야 하고, 리뷰어가 임의로 정할 일이 아니다.