복잡해지는 자동차 SW, 이제 SW 알고리즘과 로직의 이해가 쉬워진다

복잡한 SW 시스템과 다양한 수식관계를 쉽게 풀어주는 BOSCH 10년 노하우

글│이 종 수 부장, 임 태 묵 차장, 이타스코리아
2017년 09월호 지면기사


 

소프트웨어(SW)를 전공한 입장에서, 2016년 가장 큰 사건은 Google 딥마인드(DeepMind)의 인공지능 바둑 프로그램 알파고(AlphaGo)와 이세돌 9단의 바둑 대결이었다. 대학에서 전산학을 전공한 필자가 졸업 후 진로를 고민할 무렵인 1997년, IBM의 슈퍼컴퓨터 ‘딥블루(DeepBlue)’와 세계 체스 챔피언 게리 카스파로프(Garry Kimovich Kasparov)의 체스 대결이 이뤄졌다. 결과는 딥블루가 박빙의 승부 속에 최종 승리했던 것으로 기억한다. 그 당시 많은 사람들은 인간이 기계에게 패했다는 상실감을 위로하기 위해, 경우의 수가 훨씬 많은 바둑은 컴퓨터가 이길 수 없을 것이라 위안했다. 하지만 불과 20년 후 우리는 스스로 위안하던 영역마저 컴퓨터에게 내주고 말았다. 물론 컴퓨터가 사람의 마음을 위로하는 아름다운 시나 노래를 작사, 작곡하는 세심한 부분에서까지 인간을 뛰어넘을 수는 없겠지만, 이 역시 누가 미래를 장담할 수 있을까?
 

이렇듯 기술은 끊임없이 발전하여 인간의 고유 영역까지 위협하기에 이르렀다. 자동차 부문에서의 기술발전 역시 빠르게 진행되고 있다. 기계 메커니즘으로 움직이던 자동차는 이제 그 혁신의 무게중심이 SW로 이동하고 있다. 각종 규제, 연비효율, 고성능차 개발 등의 이유로 자동차 SW는 더욱 복잡하고 정교해지고 있다. 이러한 상황에서 자동차 SW 개발자는 ECU SW 개발을 위해 요구되는 각종 규제의 충족과 인증문제뿐 아니라, SW 코드와 알고리즘의 효율성, 최적화, 무결성 자체에도 신경을 써야 한다.


인간의 편리함을 위해 자동차 SW를 개발하는 개발자는 더욱 복잡해지는 자동차 SW 때문에, 역설적으로 끊임없이 알고리즘과 코드를 검토하고 디버깅하고 불편함을 감수하고 있는 것이다. 문제는 이러한 끊임없는 검토에도 실수와 예상치 못한 결과가 나올 가능성이 늘 존재한다는 것이다.


이타스는 이러한 SW 개발자의 고통을 조금이나마 덜어주고자 최근 두 가지 솔루션을 개발했다. 첫째는 SW 개발자가 고려해야 할 여러 가지 상황들(condition과 action)을 매트릭스(matrix) 위에 나열하고, 입력 값을 이용해 SW를 설계 후 코드까지 자동으로 생성해주는 개발 툴(SCODE)이다. 두 번째는 SW 개발자가 방정식(equation)의 상관관계를 쉽게 파악하도록 하여 복잡한 방정식 내 입/출력 변경에 따른 대수 간 상관관계의 변경된 결과를 다양한 SW 코드 형태로 생성해주는 개발 툴(CONGRA)이다. 이런 개발방법들은 단순히 개발자를 보조하는 역할을 넘어서 개발자의 어려움을 해결해주고 개발 속도를 가속화 한다. 기본적으로 인간이기에 범할 수밖에 없는 실수를 줄여주는 것이 바로 이 툴들의 역할이다.
 

복잡한 상황들을 단순, 명료하게 분리하는 방법

SCODE는 일종의 SW 개발방법론으로 ‘System Co-Design’의 약자이다. 예를 들어, 그림 1의 좌측과 같이 작은 system들이 복잡하게 얽혀있는 큰 구조의 system을 생각해보자.
 

 

SW 개발자가 작업을 하며 큰 system에서 input과 output의 관계를 분석해 작은 단위인 ‘system mode #1’처럼 구분하는 것은 쉽지 않다. SCODE는 이런 복잡한 구조의 큰 system을 다루기 쉽고, 작은 독립적인 형태로 분석해준다. SCODE를 이용하면 그림 1처럼 ‘system mode #1’을 단순화시켜 하나의 독립된 system mode로 구분하는 것이 가능하다. 이후 추가적으로 SCODE를 이용해 ‘system mode #2’를 또 하나의 독립된 system mode로 분리하게 된다. 이 과정을 반복하면 그림 2와 같이 전체 system 분석이 완료되고, 복잡한 구조의 system은 다루기 쉬운 작은 형태의 sub-system으로 분리된다.
 

 


단순한 기능과 구성을 가지는 엔진을 하나의 예로 들어보자. condition은 engine과 speed만을 가지는 작고 단순한 시스템이다. 각 condition이 가질 수 있는 상태는 다음과 같다.
Engine의 경우는 off/cranking/running, speed의 경우는 0 또는 0보다 큰 값을 가질 수 있다. 위 내용을 간단하게 매뉴얼로 정리하면 그림 3과 같다.
 

 


다시 그림 3을 개발 담당자가 이해하기 쉽게 테이블에 정리하면, 그림 4와 같을 것이다.
 

 

 


이제 개발자는 입력된 값을 가지고 가능한 조합들을 고려해 프로그래밍을 해야 한다. 하지만 여기서 이타스의 SCODE는 개발자 능력에 의존하지 않고 체계화된 개발방법론에 근거해 좀 더 완벽하게 분석하고 설계할 수 있도록 해준다. 이후 특별한 과정 없이 분석하고 설계한 결과물을 원하는 형태의 코드로 생성할 수 있다. 그림 5에서 ‘speed = 0’은 차량이 움직이지 않고 ‘정지’해 있는 상태를 말한다. system mode ‘STANDING’을 만들고 ‘speed = 0’을 할당하게 된다.
 

 


계속하여 ‘DRIVING’이라는 system mode를 만들고 ‘speed > 0 & engine =running’을 할당해준다. 모든 상황을 고려해 필요한 system mode를 만들고 각각 발생 가능한 항목(dimension)의 조합과 가질 수 있는 값(alternatives)을 할당해준다. 이렇게 조합들을 만들어 가다 보면 전체 발생 가능한 조합의 숫자를 가지게 되며, 할당될수록 ‘covered state’는 증가하고 ‘not complete state’는 줄어들게 된다. 이제 개발자는 주어진 조건에 따라 만들 수 있는 수많은 조합들을 빠지지 않고 모두 확인할 수 있고, 필요 시 state를 만들거나 이미 만들어진 state에 해당 조건을 할당할 수 있다.

이제 좀 더 복잡한 wiper system을 SCODE 툴을 이용해 만들어 보자. 조건은 그림 6과 같다.

 

 

 

모든 조건과 입력 가능한 경우의 수를, 엑셀을 이용하듯 입력하면 1단계 작업은 완료된다(그림 7).
 

 


2단계에서는 system mode를 만들고 필요한 항목(dimension)의 값들(alternative)을 마우스 클릭으로 설정한다. 원하는 모든 조합을 system mode와 연결하면 그림 8과 같다.
 

 


설정하지 않은 항목(dimension)과 값들(alternative)의 조합은 그림 9의 붉은 박스 부분처럼 ‘not complete xx states missing’으로 표현된다.
 

 


여기서는 73개의 조합이 system mode에 할당되지 않았고, 오른쪽 하단 ‘remaining states’ 에서 그 하나하나를 확인할 수 있다. 확인 결과 주어진 system mode에 더 이상 할당할 것이 없다면, 왼쪽 상단의 ‘invalid’로 ‘remaining states’의 조건들을 할당하면 된다(그림 10).
 

 

‘invalid’에 해당하는 내용은 코드로 생성되지 않는다. 이제 전체 system mode와 항목(dimension)은 빠진 것 없이 할당되었음을 오른쪽 위의 붉은 박스에서 확인 가능하며, 조합이 완료되면 ‘decision tree’ 형태로 확인도 가능하다. 아마도 제출용 보고서 또는 system design 문서에 첨부하면 좋을 것이다. system 설계가 완료되면, 마지막 단계로 원하는 형태의 코드로 생성할 수 있다. 이타스 modeling 개발 툴인 ASCET을 위한 ESDL과 Simulink를 위한 S-Function, MATLAB code 그리고 ‘C’ 언어 형태의 결과물로 생성된다. 생성된 결과물은 각각의 툴에서 import 하여 하나의 block 또는 code 형태로 재사용 가능하다.
 

 


이처럼 SW 개발자는 이타스 SCODE를 이용해서 다양한 조합과 조건들로 이루어진 복잡한 개발 과정을 직관적인 형태로 접근할 수 있으며, 원하는 형태의 코드로 생성할 수 있다. 또한 복잡한 입력 조건들로 인해서 누락하거나 중복 동작하는 경우를 원천적으로 제거할 수 있다.
 

아직도 복잡한 수식을 메모지와 연습장으로 계산하시나요?


다음으로 살펴볼 툴은 Constraint Graphs(이하 CONGRA)이다. 이타스 CONGRA는 방정식(equation)을 대수 간에 연관 관계 그래프로 표현해 주고, SW 개발자의 요구에 따라 입/출력을 변경해 원하는 값을 구할 수 있도록 도와준다. 그림 12와 같은 물탱크를 생각해보자.
 

 

그림 12처럼 3가지 주어진 수식이 있고, 이를 이용해 ‘h’를 구하는 상황이라면, 아마 대부분의 개발자는 직접 계산하거나 또는 엑셀이나 공학용 계산기를 이용해 수식을 풀려고 할 것이다. 하지만 CONGRA를 이용하면 그림 12의 우측과 같이 복잡한 방정식 대신 비주얼한 그래프 형태로 각 방정식의 관계를 표현할 수 있다. 녹색으로 표시된 ‘h’는 결과 값(output)이다. 여기서 만약 다시 구하고자 하는 값(output)이 ‘Ae’ 일 경우 수식의 변환 과정이나 상관관계의 조정 없이 간단하게 마우스 클릭으로 결과 값(output)을 얻을 수 있다.

그림 13의 좌우측을 비교해 보면, 큰 변화는 없이 아이콘의 색깔과 화살표의 방향이 변경된 것을 볼 수 있다. 아이콘의 색깔은 입력 값(input) 또는 결과 값(output) 등을 의미하고, 화살표는 값이 영향을 주는 방향을 의미한다. 이렇듯 SW 개발자 또는 system 설계자는 복잡한 수식 대신에 비주얼한 그래프를 보고 간편하게 설계하고 코드를 생성할 수 있다.
 

 

 

 

더불어 캘리브레이션 엔지니어는 SW 코드를 이해하지 못하더라도, CONGRA 그래프를 통해 입력 값(input)과 결과 값(output)의 상관관계를 더 쉽게 파악할 수 있다. 이후 코드 생성을 하게 되면 ‘Ae’를 구하기 위한 수식을 포함하는 코드가 자동으로 생성된다. SCODE와 마찬가지로 CONGRA 역시 ASCET을 위한 ESDL과 Simulink를 위한 S-Function, MATLAB code, ‘C’ 언어 형태로 결과물을 생성할 수 있다.

실제 CONGRA를 사용한 예를 한 가지 더 들어보자. 그림 14는 Water Level System이다. 간단한 시스템과 함께 이를 설명/분석하기 위한 몇 가지 방정식을 그림 14의 오른쪽과 같이 도출할 수 있다. 이 방정식으로 자신이 원하는 값을 얻고자 한다면, 앞에서 언급했듯 몇 장의 메모지와 상당한 시간이 필요할 수 있다. 여기서는 CONGRA를 이용해 어떻게 방정식을 추가하고 상관관계를 그래프로 표현하는지 살펴보자.
 

 


먼저 CONGRA에서 프로젝트를 만들면 기본적으로 그림 15와 같은 형태를 볼 수 있고, 앞의 그림 14의 방정식들을 C언어와 유사한 CONGRA 언어로 입력해 붉은 박스와 같이 넣어줄 수 있다.
 

 

개발자가 알고 있는 수식만 모두 넣었다면, 이제 몇 번의 클릭으로 각 변수들의 상관관계가 그림 16과 같이 자동으로 나타나게 된다. 여기에서 개발자가 원하는 입력 값(input)과 출력 값(output)은 마우스 클릭으로 설정할 수도 있고, 간단한 형식의 CONGRA 언어로도 표현 가능하다. 이렇게 원하는 결과를 얻기 위해 약간의 코딩 또는 마우스 클릭을 하면, 그림 16과 같이 결과가 나타난다. 

 

‘h’를 구하기 위한 설정을 원한다면 바로 코드로 내릴 수 있다. 코드는 SCODE와 마찬가지로 CONGRA 역시 ASCET을 위한 ESDL과 Simulink를 위한 S-Function, MATLAB Code 그리고 ‘C’ 언어 형태의 결과물을 생성할 수 있다. ASCET의 개발 언어인 ESDL 형태로 생성된 파일들은 ASCET 툴에서 손쉽게 import 하여 사용할 수 있다.

이렇듯 CONGRA는 각종 물리적 현상에서 비롯된 많은 방정식 간의 관계로부터 SW 개발자, 시스템 설계자, 캘리브레이션 엔지니어를 자유롭게 하고 업무 효율을 높여준다.
 

스마트한 툴의 사용은 이제 선택이 아닌 필수


이제 그냥 열심히 하는 것이 미덕인 시대는 지났다. ‘누가 주어진 시간에 얼마나 좋은 효율을 내는가!’가 중요한 요소가 되었다. 좋은 툴을 가까이 하고 잘 쓸 수 있는 것이 이제 경쟁력인 시대가 된 것이다. 내가 삽을 이용해 구덩이를 정말 잘 팔 수 있다고 해서 굴착기의 도움을 거부할 필요는 없다. 좋은 툴이 있다면 빠르게 인정하고 내 손에 익숙해지도록 해보자. 그것이 조직에서 인정받는 유능한 SW 개발자가 되는 길이자, 고객의 만족에 한 발짝 더 가까이 가는 방법이다.
앞으로 여러분의 개발능력과 함께 SCODE와 CONGRA의 활약을 기대해 본다. AE

<저작권자(c)스마트앤컴퍼니. 무단전재-재배포금지>

PDF 원문보기

본 기사의 전문은 PDF문서로 제공합니다. (로그인필요)
다운로드한 PDF문서를 웹사이트, 카페, 블로그등을 통해 재배포하는 것을 금합니다. (비상업적 용도 포함)

  • 100자평 쓰기
  • 로그인


TOP