차량 통신 검증

Table of contents

핵심 요약

계층별 관찰과 요구사항 기반 시험을 연결해 통신 문제의 원인을 좁히는 방법을 정리한다.

적용 범위

네트워크 구성과 시험 조건을 함께 기록하고, 적용 규격·장비·도구 버전을 확인한다.

본문

시험 준비

규격 판, 하드웨어·소프트웨어 버전, 토폴로지, 주소·ID·신호 정의, 비트 타이밍 또는 PHY 설정, 계측 도구와 clock 기준을 기록한다.

관찰과 가설

관찰값: 실제 프레임·패킷, 시각, 오류 카운터와 상태. 가설: 배선·타이밍·주소·서비스 상태·부하·입력 오류. 추정 원인을 관찰 사실과 구분한다.

계층별 분리

물리 연결 → 링크 계층 전달 → 전송·분할 → 서비스 처리 → 애플리케이션 판정 순서로 확인한다. Link up이나 ACK만으로 기능 정상으로 판정하지 않는다.

대표 시험

  • 정상 입력·경계값·미지원 입력.
  • 주기·지터·최악 지연·동시 부하.
  • 메시지·패킷 누락과 전송 중단.
  • 노드·게이트웨이·스위치 재시작.
  • 전원·sleep/wakeup과 상태 복구.
  • 잘못된 주소·ID·세션·서비스 버전.

결과 양식

시험 ID / 요구사항 / 구성·준비 조건 / 입력 원본 / 기대 결과와 시간 기준 / 관찰 결과 / 판정 / 이슈 / 재시험 근거.

측정 수치는 조건과 측정 지점을 함께 남긴다. 미실행 시험은 계획으로, 실패와 예상 실패·제외 항목은 별도로 기록한다.

공개 자료 작성

비공개 사양·고객명·실차 로그 대신 설명용 토폴로지, 일반화한 시험 조건, 공개 가능한 검증 요약을 사용한다. 실제 성과는 확인된 자료가 있을 때만 추가한다.

실습: 시험 케이스 작성

예제 요구: 상태 메시지 주기는 20 ms, 허용 지연은 프로젝트가 정의한 범위다. 준비 조건, 관찰 위치, 기준 clock, 입력, 기대 결과를 기록한다. 임의의 예시 숫자를 실제 요구사항으로 바꾸지 않는다.

로그 분석 코드

CSV에 timestamp_ms 열이 있는 설명용 로그에서 연속 메시지 간격을 계산한다.

import csv
with open("timestamps.csv", newline="") as f:
    times = [float(r["timestamp_ms"]) for r in csv.DictReader(f)]
intervals = [b - a for a, b in zip(times, times[1:])]
if not intervals:
    raise ValueError("분석에 필요한 메시지 수가 부족함")
print("최소/최대 간격(ms):", min(intervals), max(intervals))

실제 로그는 메시지 ID·노드·clock과 재전송을 필터링해야 한다. 평균만 보고 최대 지연과 누락을 숨기지 않는다.