반응형

제목: Simulink Code Inspector로 코드 리뷰 자동화하기(Automating Code Reviews with Simulink Code Inspector)

저자: Mirko Conrad 9, The MathWorks, Inc., 미국

문서유형: 산업계 페이퍼( 6페이지), 2012

 


모델 기반 설계 프로세스에서 코드 리뷰를 자동화하기 위한 도구인 Simulink Code Inspector를 소개한 자료(Simulink 모델로부터 생성된 C 소스 코드의 자동 코드 리뷰를 지원)



DO-178B 표준에 따른 코드 리뷰

  • 1992년 공표된 DO-178B은 민간 항공기를 위한 안전성 표준으로 항공 시스템 및 장비를 위한 소프트웨어 생산 가이드라인을 제공
  • DO-178B은 소프트웨어 코딩 프로세스 동안에 생길 수 있는 에러를 발견하고 보고하기 위해 리뷰/분석 활동(소프트웨어 코딩 프로세스의 출력물이 정확하고, 완전하고, 검증 가능함을 확인)을 요구함
  • DO-178B에서 요구하는 소프트웨어 코드 리뷰의 목표를 충족시킬 수 있는 가장 흔한 방법은 소스 코드의 수작업 리뷰(manual code reviews)를 수행하는 것이지만 오늘날의 자동 생성되는 코드에 적용하기에는 효과성이 낮음(너무 많은 시간과 노력이 요구되고 실수가 생길 가능성도 높아 코드 리뷰 프로세스의 자동화가 요구됨)


Simulink Code Inspector(SLCI) 개요

  • Simulink 모델로부터 생성된 C 소스 코드의 리뷰를 자동화하기 위해 본 논문의 저자들이 Simulink Code Inspector(SLCI)를 개발함(2011년에 1차 버전 출시)
  • 이 도구는 DO-178B와 기타 기능 안전성 표준(functional safety standards)에서 요구하는 코드 리뷰의 자동화를 지원
  • SLCISimulink 모델로부터 Embedded Coder 코드 생성기를 사용하여 생성되는 C 코드의 변환이 적절한지 검증한다(, translation validation 도구임). 특히, Simulink 모델에 있는 블록, 패러미터, 세팅이 해당 모델로부터 생성된 C 소스 코드에 있는 오퍼레이션, 오퍼레이터, 데이터와 구조적으로 동등한지를(structurally equivalent) 체계적으로 검토하고, 모델과 생성된 소스 코드 간의 양방향 추적성 정보를 제공한다. SLCI는 또한 모델 블록들간의 데이터 흐름과 통제 흐름을 검증한다.
  • SLCISimulink 언어의 서브셋을 지원함. 인스펙션 대상 모델이 지원되는 서브셋 밖의 모델링 구조물(modeling constructs)을 포함하면 SLCI가 이 모델 구성요소의 소스 코드는 검증하지 않음. 이렇게 지원되지 않는 모델링 특징을 포함하는 모델을 부분적으로 지원하기 위해서 해당 부분을 다른 모델 블록으로 감싸서(wrapped) SLCI를 실행하고, 남겨진 모델 블록은 수작업 코드 리뷰로 확인하는 방법을 택할 수도 있다.


SLCI의 코드 인스펙션 접근방법

  • SLCI로의 입력은 Simulink 모델과 이 모델의 C 소스 코드(Embedded Coder 코드 생성기에 의해 생성된 최적화된 코드)이며, SLCI는 이 두 입력을 처리하여 내적 표현(internal representations: IR)으로 변환시킴(각각 모델 IR과 코드 IR로 불림)
  • IR들은 추가 분석을 용이하게 하는 정규화된 표현(normalized representations)으로 변환됨. 모델 IR은 예상 패턴을 나타내고 코드 IR은 검증되어야 할 실제 패턴을 구성함
  • 생성된 코드를 검증하기 위해 SLCI는 정규화된 모델 IR을 정규화된 코드 IR과 매치함. 이 프로세스에서 SLCI는 모델 인터페이스, 블록 동작, 블록 연결성, 실행 순서, 데이터/파일 패키징, 지역 변수 사용 같은 측면들을 검토한다.
  • 이 매칭 프로세스의 결과는 검증 보고서(verification report)와 추적 보고서(traceability report)의 형태로 사용자에게 보고된다.


[SLCI의 코드 인스펙션 접근방법]


: Roll Axis 자동조종장치 모델

Roll Axis 자동조종장치(autopilot) 모델과 이 모델로부터 생성된 C 코드의 예를 가지고 SLCI 도구 사용을 설명함 

  • SLCI는 그래픽 사용자 인터페이스나 또는 MATLAB 커맨드 라인 API를 통해 호출될 수 있음. 코드 인스펙션에 착수하기 위해 사용자가 호환성 체커(compatibility checker)를 시작시킬 수 있음. 호환성 체커는 SLCI 도구에 의해 지원되지 않는 모델링 구조물(modeling constructs)과 도구 세팅(tool settings)을 식별하는데 도움을 주며, 모델을 정적으로 분석하기 위해 Model Advisor 인프라구조를 활용한다(가능한 경우에는 비호환 모델링 구조물을 도구에 의해 지원되는 구조물로 대체하는 방법도 권고함)
  • 호환성 체크를 거친 후에 사용자는 실제 코드 인스펙션 프로세스를 시작시킬 수 있음. 도구는 하나의 개별 모델을 체크하거나 또는 참조되는 모델의 전체 계층을 체크하도록 구성될 수 있다.
  • 아래 그림의 좌측은 Roll Axis 자동조종장치의 Simulink 모델 최상위 레벨을 보여준다(자동조종 기능의 하위 레벨 요구사항을 표현). 이 예에서 자동조종 기능이 세 개의 다른 모델에 의해 표현됨(최상위 모델과 HeadingMode BasicRollMode 계산을 위한 별도의 참조 모델)
  • 코드가 이전에 생성된 경우 구성 관리 시스템(configuration management system)에서 생성된 코드를 찾아 사용할 수 있고, 또는 실제 코드 인스펙션 프로세스 전에 그때그때 코드를 생성할 수도 있다.
  • 코드 인스펙션 결과는 계층식으로 표시된다. 개요 보고서(overview report)가 총괄 상태 정보를 제공하고 계층도에서 각 모델의 상세 결과로의 연결을 제공한다(아래 그림 우측).


[좌측: Roll Axis Autopilot 모델 – 최상위 레벨, 우측: 코드 인스펙션 개요]


  • 상세 결과는 검증 보고서와 추적 보고서의 두 개 부분으로 나눠짐. 아래 그림과 같은 검증 보고서는 생성된 코드 기능의 인터페이스 검증, 모델과 코드 간의 구조적 동등성 검증, 임시 변수의 사용에 대한 정보를 보여준다. 아래 예에서는 생성된 코드가 상응하는 모델과 구조적으로 동등하다는 결과가 나옴. 지원되는 언어 서브셋 밖의 모델 구성요소와 그에 상응하는 코드 부분은 검증 보고서에서 “not processed”로 표시됨


[코드 인스펙션 보고서 – 최상위 레벨 시스템의 검증 보고서]


  • 아래 그림과 같은 추적 보고서는 특정 모델 구성요소를 구현하는 코드 라인과 이 코드 라인 생성에 기여하는 모델 구성요소들을 문서화한다. 아래 그림의 하단은 SLCI에 의해 제공되는 코드-모델 추적성(code-to-model traceability) 정보의 일부이다.

[코드 인스펙션 보고서 – 최상위 레벨 시스템의 추적 보고서]


SLCI 코드 인스펙션 도구를 활용한 버그 발견 예

  • SLCI의 에러 발견 능력을 설명하기 위해 원래 생성된 코드를 버그를 흉내 내도록 의도적으로 수정하고(, 코드 뮤테이션을 수행), 원래 모델과 이 수정된 코드에 대한 코드 인스펙션을 수행함
  • 아래 그림의 상단 좌측은 RollAngleReference 서브시스템 모델의 하위 레벨을 보여줌. 이 알고리즘은 빨간색으로 표시된 OR 블록을 포함하고 있음
  • 아래 그림의 상단 우측은 이 OR 블록을 구현하는 코드 라인을 보여줌. 코드 생성 시의 버그를 흉내내기 위해 || 오퍼레이터를 && 오퍼레이터로 대체한 코드 뮤테이션을 생성함
  • 아래 그림의 하단은 모델-코드 검증 결과임. 이 보고서가 매칭 프로세스가 성공적이지 않았음(, SLCIOR 블록을 위한 예상 코드 블록을 찾지 못했음)을 보여준다.


[코드 뮤테이션과 결과적인 코드 인스펙션 보고서]


  • 여기서 예제로 사용한 자동조종장치 모델은 비교적 간단한 경우임. 70개 블록으로 구성된 3개 모델의 계층이고, 70 라인의 C 소스 코드가 생성됨(코멘트 없는 라인 수)
  • 1.73GHz Intel® CoreTM i7 CPU8GB RAM을 가진 Windows 7 컴퓨터상에서 이 예제의 실제 코드 인스펙션을 수행하는데 30초 미만이 소요됨


반응형

+ Recent posts