자동차 산업에서는 자동차 소프트웨어의 품질을 보장하기 위해 자동차 기능 안전성 국제 표준(ISO 26262)에 따라 단위와 통합 테스트 단계에서 Hardware-in-the-Loop(HiL) 테스트를 수행한다. HiL 테스트는 테스트 스크립트의 시나리오에 따라 시뮬레이터가 입력에 대한 출력을 평가하는 black-box 테스트이고, 소스코드 없이 자동으로 진행하기 때문에 발생한 결함과 관련된 정보를 얻기 힘들다. 따라서 검사자가 발견한 결함을 수정하는 개발자는 결함 수정에 많은 시간과 노력이 필요하다. 만약 테스트를 수행하며 결함과 관련해 결함의 발생 시점과 원인이 되는 메모리 정보를 제공할 수 있다면 개발자의 결함 수정은 용이해진다.
본 연구에서는 HiL 환경의 통합 테스트에서 발견된 ECU 소프트웨어의 결함에 대해 메모리를 수집하고 분석하여 결함의 발생 시기와 위치를 찾을 수 있는 방법을 제안한다. MISRA-C 코딩 가이드라인에 따라 메모리를 정적으로 할당하는 차량용 소프트웨어 중에서 동일한 조건에서 항상 일정하게 동작하는 제어 기능의 소프트웨어는 메모리에 실행 흔적이 남게 된다. 그러므로 메모리를 주기적으로 관찰하면 소프트웨어의 실행 이력을 확인할 수 있고, 결함이 발생했을 때 그 원인을 찾을 수 있다. 따라서 본 연구는 메모리 갱신 정보를 이용한 결함 위치추정 방법을 다음과 같은 순서로 제안한다.
첫째, HiL 테스트가 진행되는 중에 차량용 인터페이스를 이용하여 메모리를 주기적으로 수집하는 방법을 제안한다. 기존 차량용 네트워크의 대역폭은 메모리 전체를 주기적으로 전송하기에는 부족하다. 개발이 완료된 ECU의 하드웨어 수정 없이도 메모리를 손실 없이 주기적으로 수집할 수 있는 새로운 방법이 필요하다.
둘째, 수집한 메모리의 분석을 위해 테스트의 수행 조건 등의 테스트 메타 정보와 ECU의 실행 파일을 정적분석하여 획득한 정보를 이용하여 메모리 갱신 정보를 획득하는 방법을 제안한다. 소스코드 없이 블랙박스 상태에서 진행되는 통합 테스트에서 발생한 결함의 원인을 찾을 수 있도록 수집한 메모리의 사용 여부를 알 수 있는 방법과 갱신된 메모리와 기능과의 관계를 분석할 수 있는 방법이 필요하다.
셋째, 메모리 갱신 정보를 이용해 결함의 원인을 찾는 방법을 제안한다. 먼저, 기능의 정상 동작에 필요한 주소들을 비교해서 이상 동작한 주소를 찾는 방법을 제안한다. 다음으로 제안한 방법을 개선하여 기능이 정상 동작할 때의 메모리 갱신 패턴을 학습시키고, 결함이 발생했을 때의 패턴을 비교하여 결함이 발생한 시점까지 제시하는 방법으로 확장한다. 정상 동작했던 단위 테스트에서 정상 동작의 기준을 획득하면, 결함이 발생한 통합 테스트와 비교하면 결함의 원인을 찾을 수 있다.
제안하는 기법의 평가를 위해 OSEK/VDX 기반의 ECU의 HiL 테스트 환경을 구축하였다. HiL 환경에서 시스템의 동작에 주는 영향을 고려하며 주기적으로 메모리를 수집하고 디버깅 도구와 비교하여 수집 방법을 평가하였다. 다음으로 돌연변이 기법을 이용하여 노드 간의 통신, 기능의 연계, 단일 기능의 연속적인 상태 변경 등의 상황에서 발생하는 결함을 주입하고 결함 위치추정 기법을 적용하였다. 실험 결과, 주입한 결함의 80%에 대해 평균 두 수집주기 이내에서 발생 시점을 제시할 수 있었고, 사용한 메모리 주소의 평균 3.28%의 주소만 확인하는 것으로 결함의 원인을 찾을 수 있었다. 즉 디버깅 도구나 소스코드 없이 차량용 소프트웨어의 HiL 테스트에서 발생한 결함에 대해 정상 동작의 갱신 특징이나 갱신 패턴 같은 메모리 갱신 정보를 이용하여 결함의 원인을 찾을 수 있다는 것을 확인하였다.
결과적으로 제안하는 메모리 갱신 정보를 이용한 결함 위치추정 기법을 사용하면 HiL 테스트 환경에서 발생하는 결함에 대해 결함 발생시점과 결함 의심 주소들을 제공하는 것이 가능하다. 이 정보를 통해 디버깅에서 결함을 찾는 시간을 줄일 수 있다.