사이트맵 보기

뉴스레터

[TRACE32 News] Trace-based MCDC

작성일

작성자 기술지원

조회수 1483

첨부파일



Trace-based MCDC Coverage


2018 3 Lauterbach는 트레이스 기반 MC/DC를 공개하였습니다. 이제 TRACE32Statement Coverage, Decision Coverage, MC/DC 등 소스 코드 수준의 모든 중요한 코드 커버리지를 지원합니다.

안전성이 중요한 시스템 개발 과정에서 전체 소프트웨어를 철저하게 테스트하였음을 입증하기 위해 코드 커버리지를 측정합니다. DO-178C ISO26262와 같은 소프트웨어 개발 표준은 코드 커버리지 측정을 개발과정의 필수 요소로 규정하고 있습니다.


Trace-based Coverage

실시간 트레이스 도구 제조사인 Lauterbach는 시험하고자 하는 소프트웨어에 테스트 코드 삽입이 필요 없는 트레이스 기반 코드 커버리지 측정 방법을 제공합니다. 프로그램 실행에 대한 정보는 일차적으로 Object 코드 수준으로 측정됩니다. 이를 통해 다음을 쉽게 알 수 있습니다.

1. Object Statement Coverage: 시험 중 각 어셈블리 명령어가 한 번 이상 실행되었는지?

2. Object Branch Coverage: 시험 중 각 조건 분기문이 참/거짓으로 각각 한 번 이상 실행되었는지?


Object 수준 코드 커버리지 측정은 실시간 트레이스가 가능한 모든 TRACE32 제품군에서 지원합니다. 2017 2 Lauterbach Object 수준의 Statement Coverage Decision Coverage 측정에 추가하여, 소스 레벨 코드 커버리지 측정을 지원하였습니다(위 그림 참조). 그리고 많은 고객 분들이 MC/DC 측정도 TRACE32로 할 수 있게 되기를 바래 왔습니다.


MCDC Code Coverage

사람들은 Object 수준의 Branch Coverage 측정이 소스 코드 수준의 MC/DC 측정을 적절하게 대체한 것으로 생각해왔습니다. 그러나 항공 산업에서 Commercial Aviation Safety Team(CAST)은 이 생각에 대해 명확한 반대의견을 표명했습니다.[1]

현재 대부분의 개발자는 테스트 코드를 삽입하는 방식으로 MC/DC를 측정하고 있습니다. 그러나 Lauterbach는 어떤 식으로 건 시험 대상 코드를 변경하지 않고 MC/DC를 측정한다는 목표를 세웠습니다. 그리고 이 주제에 관한 많은 기술문서와 간행물을 검토했습니다. 이 글들은 문제 해결을 위해 서로 다른 접근 방식을 보이지만, 근본적으로 아래와 같은 공통점이 있었습니다.

1. 트레이스 데이터를 기반으로 MC/DC를 측정하기 위해 소스 코드 내 분기[2](Decision) 구문의 구조와 위치를 모두 알 수 있어야 합니다.

2. 동시에 소스 코드를 Object 코드로 변환할 때 각 조건은 산술 표현이 아닌 조건 분기문 또는 조건부 명령으로 표현되어야 합니다.

3. MC/DC를 분석할 때, Object 코드 내의 분기 구문의 구조 및 위치를 알 수 있어야 합니다.

위의 요구사항 #1에 따라 테스트 코드를 삽입하지 않고 MC/DC를 측정하려면 소스코드 구조에 대한 추가정보가 필요합니다. 이것은 현재 컴파일러에 의해 생성된 디버그 정보의 일부가 아닙니다. 이 외에도 컴파일러가 요구 사항 #2에 맞게 Object 코드를 생성해야 합니다.


AdaCore

같은 회사에서 컴파일러와 MC/DC를 분석하는 솔루션을 개발했다면 MC/DC를 쉽게 측정할 수 있습니다.

컴파일러는 소스 코드 내 각 분기 구문의 위치와 구조정보를 디버그 정보에 포함시킬 수 있습니다. AdaCore[3]사는 이러한 솔루션을 제공합니다. 또한 AdaCore는 트레이스 데이터를 생성하기 위한 에뮬레이션 솔루션을 제공합니다.

타깃 하드웨어에서 MC/DC를 측정하려는 고객을 위해 AdaCore TRACE32로 기록한 트레이스 데이터를 가져와 분석할 수 있는 인터페이스를 제공합니다.

t32cast

2018 3월부터 TRACE32는 실시간 트레이스 데이터 기반으로 MC/DC를 지원합니다. Lauterbach는 이를 위해 C/C++ 코드를 분석하는 t32cast 명령을 지원합니다. 결과적으로 MC/DC 측정에 필요한 분기 구조에 대한 정보는 각 소스 코드 파일 별로 생성됩니다. 따라서 이 정보를 생성할 수 있도록 빌드 프로세스를 조정해야 합니다. (페이지 상단의 "TRACE32 Extended Code Analysis" 그림 참조) t32cast 명령은 컴파일러에 상관없이 기존 빌드 환경에 쉽게 통합할 수 있습니다.

MC/DC 측정 시작과 동시에 TRACE32 t32cast 도구로 생성한 .eca 파일을 자동으로 로드 합니다. 이후 TRACE32는 디버그 정보를 사용하여 소스 코드의 분기문을 Object 코드와 짝지을 수 있습니다.

그러나 이를 위해서는 최적화 옵션 비활성화등으로 컴파일러가 조건부 분기 혹은 Object 코드 수준의 조건부 명령이 소스 코드(C/C++)의 각 조건/분기문과 대응되도록 해야 합니다.

결론

TRACE32 는 컴파일러와 프로세서 아키텍처에 관계없이 MC/DC를 측정할 수 있습니다.

안정성이 중요한 시스템임에도 불구하고 코드 최적화를 포기할 수 없는 개발자라면 현재로서는 트레이스 기반 MC/DC를 적용함에 다소 어려움이 있습니다.

추후 컴파일러가 Object코드를 생성할 때 최적화 옵션에 상관없이 소스코드의 분기구문을 Object 코드의 조건문에 대응되도록 해 준다면 트레이스 기반 MC/DC를 보다 널리 적용할 수 있을 것입니다.

추가로 궁금한 사항은 TRACE32@hancommds.com 으로 문의 부탁 드립니다.



[1] CAST-17 Position Paper (2003, January). Structural Coverage of Object Code

[2] 원문에는 ‘decision’ 이라고 표기하고 있으나 분기문’, ‘분기 구문등으로 번역하였습니다.

[3] Comar, C., Guitton, J., Hainque, O., & Quinot, T. (2012, May). Formalization and comparison of MCDC and object branch coverage criteria. In ERTS (Embedded Real Time Software and Systems Conference).





고객문의 기술지원/
데모/
SW요청
031-627-
3116