모델 기반의 개발환경에서 효율적인 소프트웨어 디버깅 방법
Efficient Software Debugging Method in the Model-based Development Environment
2014년 05월호 지면기사  / 글│김 주 식 주임, MDS테크놀로지



빠르고 신뢰성 높은 소프트웨어 개발을 위해 도입된 모델 기반 개발 방법은 점차 더 많은 전장 소프트웨어에 적용될 것이다. 하지만 디버깅 측면에서는 문제 해결에 더 많은 정보가 요구되며, 이는 곧 시간과 비용의 증가로 이어진다. TRACE32에서 제공하는 모델링 도구와의 연동 기능은 이러한 문제를 해결하는 효율적인 솔루션이다.

디버깅 환경의 변화
최근 차량용 소프트웨어 개발환경은 핸드 코딩(Hand coding) 방식에서 모델 기반의 개발(Model Based Development, MBD) 방법으로 빠르게 변하고 있다. 모델로부터 자동 생성된 코드의 경우, 코딩 오류가 없는 코드를 매우 빠르게 얻을 수 있어 전체 개발 시간을 단축하는 장점이 있다.


또한 모델링 도구에서 제공하는 시뮬레이션 기능을 통해 제어 로직의 문제점을 빠르고 쉽게 찾아낼 수 있다. 하지만 실제 프로세서에서 소프트웨어를 실행하면 시뮬레이션 했을 때와 동일한 결과를 얻기 어렵다. 왜냐하면, 실제 프로세서에서는 애플리케이션 코드만 단독으로 실행될 수 없기 때문이다.

프로세서에서 애플리케이션이 동작하기 위해서는 디바이스 드라이버(Device Driver)와 같이 실제 하드웨어를 제어하는 소프트웨어나, OS와 같이 전체 리소스를 관리해주는 소프트웨어 등이 필요하다. 이와 같이 애플리케이션 구동에 필요한 여러 가지 소프트웨어가 통합되어 동작되면서 예상하지 못한 오류가 발생할 수 있다. 그래서 모델의 개발 단계에서부터 자동 생성된 코드를 실제 프로세서 기반에서 동작시켜 디버깅이나 테스트를 할 필요성이 대두되고 있다.


모델 기반 소프트웨어 디버깅의 문제점

일반적으로 프로세서에서 동작하는 소프트웨어를 디버깅할 때 JTAG 디버거를 이용하면 어렵지 않게 디버깅 환경을 구성할 수 있다. 하지만 자동 생성된 코드가 포함된 소프트웨어의 경우에는 디버깅을 하는 과정에서 어려움이 발생한다. 디버깅하려면 디버깅 포인트를 찾는 것이 선행되어야 하는데, 직접 작성한 코드에 비해 모델로부터 자동 생성된 코드가 디버깅할 포인트를 찾는 것이 훨씬 어렵기 때문이다.

자동 생성된 코드의 경우 개발자가 직접 작성한 것이 아니기 때문에 디버깅 포인트를 찾기 위해 코드를 분석하는 과정이 먼저 필요하다. 또한 코드 분석을 마쳤다고 하더라도 엄청난 양의 코드에서 모델의 특정 블록과 매칭되는 코드를 찾아야 하고, 모델이 변경되면 이러한 과정을 또 다시 반복해야 하는 불편함이 발생한다.


자동 생성 코드의 빠른 분석 및 디버깅
다행스럽게도 전 세계 임베디드(embedded) 환경에서 표준으로 사용되는 디버거 TRACE32는 이미 모델링 도구와의 연동으로 위에서 언급한 문제점을 해결했다. 예를 들어, TRACE32와 Simulink를 연동하면 Simulink에 TRACE32 메뉴가 생성된다. 이를 이용하면 로직의 특정 블록과 매칭되는 코드를 TRACE32에서 보여주게 된다(그림 2).

그리고 반대로 TRACE32에서 코드를 디버깅하면서 선택한 코드가 모델의 어떤 블록인지 Simulink에서 확인할 수 있는 기능도 제공된다(그림 3). 이 기능을 이용하면 아무리 복잡한 로직의 모델이라고 하더라도 특정 블록과 매칭되는 소스코드를 바로 찾는 것이 가능하므로 소프트웨어의 분석과 디버깅이 매우 쉬워진다.

디버깅 포인트를 찾은 후에는 기존의 디버깅 방식과 동일하게 프로세서를 제어하고, 소프트웨어나 하드웨어의 상태를 관찰하여 문제의 원인을 찾아야 한다. 그림 4와 같이 Simulink의 Control Panel 메뉴를 활용해 디버깅할 포인트까지 프로세서를 간편하게 제어할 수 있다. 그 이후에는 TRACE32에서 제공하는 다양한 디버깅 및 분석 기능을 이용해 프로세서 기반에서 동작하는 소프트웨어를 관찰하는 것이 가능하다.


전체 소프트웨어 영역 디버깅
만약 서두에 언급한 것과 같이 모델 기반의 소프트웨어가 OS 기반에서 동작하면, 디버깅할 때 OS의 커널이 어떤 상태인지 확인하는 것 또한 매우 중요하다. TRACE32는 차량용 OS로 가장 많이 사용되는 플랫폼인 OSEK과 AUTOSAR에 대한 디버깅 편의 기능을 제공한다. OS Awareness라는 이 기능은 프로세서에서 동작하는 OS의 정보를 사용자가 쉽게 관찰할 수 있는 메뉴를 제공한다(그림 5).

이 기능을 이용하면 개발자는 모델링한 제어 로직이 동작할 때 OS와 연계되어 어떻게 실행되는지에 대한 정보를 쉽게 확인할 수 있다. 그래서 문제 사항에 대한 디버깅을 효율적으로 할 수 있다. 또한 센서로부터 입력된 데이터가 MCAL과 OS 서비스를 거쳐 제어 로직에서 계산된 데이터로 가공되고, 다시 반대로 액추에이터(actuator)까지 실행되는 전체 소프트웨어의 동작에 대한 분석을 더욱 간편하게 확인할 수 있다.

시뮬레이션 테스트
TRACE32와 모델링 도구가 연동됨으로써 PIL(Processor In the Loop) 테스트 기능도 제공한다. MIL(Model In the Loop)이나 SIL(Software In the Loop) 테스트가 데스크톱 기반의 컴퓨터에서 시뮬레이션하는 것이라면, PIL은 실제 프로세서에서 동작시키고 결과를 확인하는 테스트이다.
 
실제로 뮌헨 공대에서는 MIL이나 SIL 시뮬레이션 결과와 동일하게 프로세서에서 동작하는지를 검증하기 위한 목적으로 비행제어 시스템 테스트에 TRACE32의 PIL 테스트(그림 6) 기능을 활용했다. 이러한 검증 프로세스는 소프트웨어의 통합 과정에서 발생하는 문제를 미리 발견하고 예방할 수 있는 솔루션이 된다.

빠르고 신뢰성 높은 소프트웨어 개발을 위해 도입된 모델 기반 개발 방법은 점차 더 많은 전장 소프트웨어에 적용될 것이다. 하지만 디버깅 측면에서는 문제 해결에 더 많은 정보가 요구되며 이는 곧 시간과 비용의 증가로 이어진다.

지금까지 설명한 것과 같이 TRACE32에서 제공하는 모델링 도구와의 연동 기능은 이러한 문제를 해결하는 효율적인 솔루션이다. 이는 디버깅에 필요한 정보를 빠르게 제공해 줌으로써 신뢰성 있는 소프트웨어를 개발하는 데 매우 큰 도움을 주며, 개발자는 개발에 소요되는 시간과 비용을 획기적으로 줄일 수 있다. 



<저작권자 © AEM. 무단전재 및 재배포, AI학습 이용 금지>


  • 100자평 쓰기
  • 로그인


  • 세미나/교육/전시

TOP