소프트웨어는 우리 사회 어디에나 존재한다. 전기 인프라의 백본(backbone)에서 통신 장비, 시계에 이르기까지 모든 것을 제어한다. 자동차도 예외는 아니며 요즘 자동차의 소프트웨어 양은 다른 어떤 소비자 제품보다 많다. 한번은 회의에서 동료로부터 전자 부품을 없애도 자동차가 계속 달릴 수 있냐는 질문을 받았다. 기본적으로 요즘 자동차의 모든 요소는 엔진, 브레이크, 앞유리 와이퍼, 깜박이, 라디오 등 소프트웨어에 의해 제어되기 때문에 대답은 '아니오'였다.
지난 몇 년 동안 모든 부문에서 전동화, 연결성(connectivity), 자율주행이 보편화됨에 따라 자동차에 사용되는 소프트웨어의 양이 증가했다. 자율주행 시나리오의 복잡성은 너무 커서 자동차가 항상 자율주행을 할 수는 없다. 그러나 차선을 바꾸지 않고 다양한 시나리오에서 운전할 수 있으며 특정 시나리오에서는 차선을 변경하거나 운전석에 아무도 없는 상태에서 스스로 주차할 수도 있다.
이러한 복잡성이 증가하면 자동차 소프트웨어 설계에서 안전이 중요해지고 더 많은 기능이 상호 작용하며 통신 버스(communication bus)가 과밀화되는 등 새로운 문제에 직면하게 된다. 이를 염두에 두고 소프트웨어를 설계해야 하며 새로운 방식으로 이를 수행해야 한다.
2017년에 출간한 초판은 학생과 실무자 모두에게 인기를 얻었다. 많은 독자가 내게 특정 요소에 대해 질문했으며, 중요한 새로운 발전 사항을 지적하고 질문했다. 나는 이러한 제안들을 고려했고 수정을 위해 다시 한번 동료인 다르코 두리식과 퍼 요한네센 박사를 설득했다.
이 책의 목적은 자동차 소프트웨어의 초석 중 하나인 소프트웨어 아키텍처의 개념을 소개하는 것이다. 특히 소프트웨어 엔지니어링 영역에서 안전 시스템 및 소프트웨어 측정에 중점을 뒀다. 연구를 통해 나는 자동차 및 통신 분야의 여러 회사와 협력했으며 시간이 지남에 따라 이러한 도메인이 점점 더 유사해짐을 알게 됐다. 자동차에서 소프트웨어를 개발하기 위한 프로세스 및 도구는 통신 시스템 개발에 사용되는 프로세스 및 도구와 매우 유사해졌다. 처음에는 매우 달랐지만 오늘날에는 아키텍처 스타일, 프로그래밍 패러다임, 아키텍처 패턴 측면에서의 소프트웨어 아키텍처도 점점 유사해지고 있다.