Toyota 의도되지 않은 가속과 거대한 '스파게티' 코드 (2013)

발행: (2025년 12월 8일 오전 09:31 GMT+9)
10 min read

Source: Hacker News

Background

지난 달, 토요타는 오클라호마 배심원이 자동차 제조사가 “무모한 무시”를 했다고 판단하고 원고에게 300만 달러 판결을 반환한 지 몇 시간 만에 의도치 않은 가속(UA) 소송을 합의했습니다. 배심원은 아직 징벌적 손해배상에 대해 판결을 내리지 않았습니다.

배심원의 결정은 두 명의 원고 측 소프트웨어 설계 전문가들의 증언에 크게 좌우되었습니다. 이들은 토요타의 엔지니어링 프로세스와 2005년형 토요타 캠리의 소스 코드를 조사했으며, 두 사람 모두 시스템이 결함이 있고 위험하며 버그와 안전장치의 빈틈이 많다고 결론지었습니다.

The Bookout v. Toyota case

이 사건은 2007년 9월에 발생한 의도치 않은 가속 사건에서 비롯되었습니다. 이 사건은 치명적인 충돌을 일으켰습니다. 진 북아웃과 승객 바바라 슈바르츠는 오클라호마 주 인터스테이트 69를 빠져나가던 중 2005년형 캠리의 스로틀 제어가 상실되었습니다.

  • 서비스 브레이크가 가속 중인 세단을 멈추지 못했습니다.
  • 북아웃은 주차 브레이크를 적용했으며, 오른쪽 뒤 타이어에서 150피트, 왼쪽에서 25피트 길이의 스키드 마크가 남았습니다.
  • 차량은 경사로를 따라 계속 내려가 도로를 가로질러 제방에 충돌했습니다.

슈바르츠는 사망했으며, 북아웃은 머리와 등 부상으로 5개월 동안 회복했습니다.

그레이엄 에스데일 변호사(비즐리 앨런)​는 검은 스키드 마크가 핵심 증거라고 언급했습니다:

“토요타는 그걸 설명할 수 없었습니다. 스키드 마크는 그녀가 브레이크를 밟았다는 것을 보여줍니다.”

합의 소식을 알게 된 배심원들은 파트리샤 패리시 판사에게 재판을 논의하기 위해 남아 있을 수 있는지 물었습니다. 12명의 배심원, 판사, 그리고 원고 측 변호인들이 만나면서, 배심원이 토요타의 행위와 은폐 의혹에 대해 처벌할 준비가 되어 있음을 분명히 알게 되었습니다.

Expert testimony

두 명의 소프트웨어 전문가—필립 쿱먼과 마이클 바—가 토요타의 소프트웨어 개발 프로세스와 소스 코드에 대한 상세한 통찰을 제공했습니다.

  • 마이클 바, 임베디드 소프트웨어 전문가,는 보안이 강화된 환경에서 토요타 코드를 20개월 이상 검토했습니다. 그는 800페이지 분량의 보고서를 작성하고 특정 코드 결함에 대해 증언했습니다.
  • 필립 쿱먼, 카네기 멜론 대학 컴퓨터 공학 교수이자 Better Embedded System Software 저자,는 토요타의 엔지니어링 안전 프로세스에 대해 증언했습니다.

두 사람 모두 코드를 “스파게티 코드”라고 표현했으며, 이는 형편없이 작성되고 구조가 부실하다는 의미였습니다.

Barr’s observations

“복잡도가 지나치게 높은 함수가 많이 있습니다. 표준 산업 메트릭에 따르면 이들 중 일부는 테스트가 불가능합니다… 일부는 유지보수가 불가능한데, 이는 버그를 수정하면 새로운 버그가 생길 가능성이 높다는 뜻입니다. … 안전 아키텍처는 카드 집과 같습니다. 스로틀 제어가 상실되는 동시에 다수의 안전장치가 동시에 비활성화될 수 있습니다.”

바는 또한 내부 토요타 문서에서 프로그래머가 엔진 제어 애플리케이션을 “스파게티‑같다”라고 부른 사례를 인용했습니다.

Koopman’s criticisms

쿱먼은 토요타가 1995년에 처음 발표된 MISRA(Motor Industry Software Reliability Association) 코딩 표준을 따르지 않은 점을 강조했습니다. 그는 각 규칙 위반이 통계적으로 버그를 도입한다며, 30건 위반당 약 3개의 사소한 버그와 1개의 주요 버그가 발생한다고 설명했습니다.

  • NASA 엔지니어들이 2010년에 NHTSA를 위해 토요타 코드 일부를 검토했을 때, 접근 가능한 섹션에서 7,134건의 MISRA‑C 위반을 발견했습니다.
  • 바가 2004년 MISRA 판에 대해 자체 검사를 수행한 결과 81,514건의 위반이 드러났습니다.

토요타는 자체 프로세스를 사용했으며, 이는 산업 표준과 거의 겹치지 않았고, 자체 규칙을 자주 위반했으며 그 이탈에 대한 충분한 문서화가 이루어지지 않았습니다.

“안전이 제품을 만드는 과정에서 레시피에 녹아들어 있지 않다면, 나중에 추가할 수 없습니다.” – 쿱먼

Major software deficiencies identified

DeficiencyDescription
Complex, untestable functions테스트 스위트를 신뢰성 있게 실행할 수 없을 정도로 복잡한 함수; 버그를 수정하면 새로운 버그가 생길 위험이 있습니다.
Single‑point failures하나가 고장 나면 전체 안전 시스템이 무력화되는 중요한 하드웨어/소프트웨어 구성 요소.
Excessive global variables전역 변수 10,000개 이상 (산업 최선 실천: 0개).
Lack of peer code review소스 코드에 대한 체계적인 동료 검토 프로세스가 없음.
Unchecked secondary CPU code토요타는 덴소가 제공한 두 번째 CPU의 코드를 검토하지 않았으며, 의회와 NHTSA에 엔진 소프트웨어가 원인이 될 수 없다고 보증했습니다.
Task deathsCPU 내부 작업이 예기치 않게 종료되어 안전장치가 비활성화됨(예: 스로틀과 크루즈 컨트롤을 제어하던 “Task X” 혹은 “kitchen‑sink” 작업).
Inadequate failsafe design안전장치에 결함과 빈틈이 존재하며, 전체 안전 아키텍처가 취약함.

Single‑point failure example

“단일 실패 지점이 있다면, 내가 지금까지 본 모든 안전 표준에 따르면 그것은 정의상 위험합니다. 어느 정도의 대책이나 안전장치를 추가해도 해결되지 않습니다.” – 쿱먼

Global variable overload

“실제로는 다섯 개, 열 개, 괜찮다, 좋다. 10,000개라면 아니요, 그만 둡니다. 안전하지 않으며, 10,000개의 전역 변수가 있다는 사실만으로도 문제가 있다는 것을 알 수 있습니다.” – 쿱먼

Conclusion

쿱먼과 바의 증언은 2005년형 캠리의 소프트웨어 엔지니어링 전반에 걸친 일련의 실패를 드러냈습니다. 여기에는 확립된 코딩 표준 미준수, 과도한 복잡성, 단일 실패 지점, 그리고 엄격한 안전 프로세스 부재가 포함됩니다. 이러한 결함들은 치명적인 충돌과 300만 달러 배심원 판결을 초래한 의도치 않은 가속 사건에 크게 기여했을 가능성이 높습니다. 이번 사건은 특히 안전이 중요한 자동차 시스템에서 산업 표준 소프트웨어 관행을 준수하는 것이 얼마나 중요한지를 강조합니다.

Back to Blog

관련 글

더 보기 »

Show HN: Detail, 버그 파인더

안녕 HN, tl;dr 우리는 버그 파인더를 만들었는데, 특히 앱 백엔드에서 정말 잘 작동하고 있어요. 한번 사용해보고 의견을 보내 주세요! 자세한 이야기는 아래에 있습니다.