[테크월드=정환용 기자] 사람은 누구나 무엇인가를 할 때 시간에 쫓기게 되면 실수를 하는 법이다. 하지만 시간에 쫓긴다는 것은 데드라인이 있다는 것이다. 기사도 마찬가지다. 기사를 쓸 때 데드라인을 지키고자 빨리 쓰다 보면 오타나 실수를 하게 된다. 그렇다고 마감시간 없이 오랜 시간동안 기사를 쓰면 그 기사는 이미 죽은 기사, 즉 시의성이 떨어질 확률이 높다.

소프트웨어 개발도 마찬가지다. 빠른 제품 출시를 위해 충분한 검증을 하지 않으면 완성도가 떨어져 막대한 비용 손실을 가져올 수 있고, 반대로 검증에 지나치게 치중하다 보면 제품 출시시기를 놓칠 수 있다.

 

무기체계 소프트웨어 동적 신뢰성 시험
소프트웨어 기능 안전에 대한 개발과 관리 방안은 이미 1990년대에 제정된 IEC 61508(전기/전자)을 비롯해, IEC 60880(원자력발전소), IEC 62304(의료기기), EN 50128(철도)을 거쳐 ISO 26262(자동차)에 이르기까지 여러 국제 규격에 명시돼 있다.

이와 유사하게 방위 사업청은 방위력 개선사업으로 획득되는 소프트웨어의 체계적인 개발 과 관리를 위해 ‘무기체계 소프트웨어 개발과 관리 매뉴얼’에 프로세스와 산출물 작성 표준을 규정하고 있다.

[그림 1]무기체계 소프트웨어 획득 절차.

이 글에서는 무기체계 소프트웨어 개발과 관리에 대한 여러 활동 중 하나인 ‘동적 신뢰성 시험(코드실행률 점검)’에 대해 살펴보자.

 

소프트웨어 방식 코드실행률 측정
코드실행률을 점검하는 방식은 크게 소프트웨어 방식과 하드웨어 방식으로 나눌 수 있다. 소프트웨어 방식은 개발 소스에 실행률을 측정하기 위해 테스트 코드를 추가하며, 이 과정에서 코드의 크기와 수행시간이 증가한다.

특별한 하드웨어 연결 없이 적용할 수 있다는 장점이 있지만, 추가 테스트 코드의 양과 타깃 특성에 따라 실행파일을 타깃 메모리에 넣을 수 없거나, 시간지연으로 인해 본래의 기능이 동작하지 않을 수 있다.

[그림 2]원본 개발 소스.
[그림 3] 코드 실행률 측정을 위해 테스트코드를 삽입한 소스.

 

하드웨어 방식 동적 신뢰성 테스트
프로세서 내 디버그 로직에서 생성된 코드 수행 정보로 실행률을 파악하는 방법이다. 하드웨어 방식 동적 테스트 적용을 위해서는 개발 프로세서가 NEXUS(PowerPC), ETM(ARM) 등 실시간 트레이스 기능을 지원해야 하며, 별도의 커넥터와 장비가 필요하다. 소프트웨어 방식에서 발생하는 시간지연과 코드크기의 증가가 없다는 장점이 있다.

[그림 4] 하드웨어 방식 동적 테스트 구성

프로세서는 함수 호출/복귀와 인터럽트 등으로 분기가 발생한 경우에만 코드 흐름 정보를 생성해 생성 데이터를 최소화한다. 기본 코드 흐름 데이터에 타깃의 메모리 값(어셈블리)과 컴파일 과정에서 자동 생성한 디버그 정보를 조합하면 전체적인 코드 흐름을 파악할 수 있고 코드실행률을 얻어낼 수 있다. 프로세서에 따라 코드 흐름 정보 외에 변수/메모리 값 변경 정보를 생성해 주는 것도 있다.

[그림 5] Zynq-7000의 기본 코드흐름 데이터
[그림 6] 메모리 값과 디버그 정보를 조합해 재구성한 코드 흐름 데이터
[그림 7] 코드실행률 결과보고서

추출한 데이터는 다른 테스트 도구로 가져와, 동적 신뢰성 시험에 필요한 노력을 줄일 수 있다.

[그림 8] VectorCAST/C++로 가져온 하드웨어기반 코드실행률 데이터

코드실행률 확인 뿐 아니라 JTAG/BDM 기반 타깃의 디버깅과 성능 개선에 대한 기능도 같이 활용할 수 있다.

[그림 9] OS Aware ­ VxWorks 모니터링
[그림 10] 코드 흐름 분석을 통한 불규칙한 오류 디버깅
[그림 11] 성능 개선을 위한 함수 실행시간 분석

 

개발환경 적용
하드웨어 방식 코드실행률 측정 활용을 위해 필요한 것은 무엇인지 알아보자.

①프로세서 선정
개발 프로세서가 실시간 트레이스 기능을 지원해야 한다. 지원여부는 사용하는 프로세서 매뉴얼에서 아래와 같은 키워드를 검색하여 확인할 수 있다.

▲ARM계열 : ETM/ PTM ▲PowerPC계열 : NEXUS/Aurora ▲TriCore계열 : Aurora/OCDS Level 2 ▲기타 : Trace, Program Flow/Debug 등

같은 계열의 프로세서라 하더라도 핀 수 혹은 패키지 형태(BGA, QFP)에 따라 실시간 트레이스 기능을 사용하지 못할 수 있으니 주의가 필요하다.

[그림 12] T2080 Block Diagram
[그림 13] TMS570LS3137 Block Diagram
[그림 14] TMS570LS3137 Device Comparison

②하드웨어 설계
NEXUS/ETM과 같은 실시간 트레이스 데이터 출력을 위한 커넥터 연결도 필요하다. 임베디드 시스템 디버깅을 위해 JTAG(혹은 BDM) 연결을 많이 사용하고 있다. 코드 흐름 정보를 얻기 위해서는 JTAG외에 별도의 핀이 필요하다. 사용하는 프로세서에 따라 핀 배열이 달라질 수 있으니 평가보드 회로도를 참조한다.

[그림 15] JTAG/BDM 커넥터, TEXAS INSTRUMENTS/PowerPC 계열
[그림 16] NEXUS/Aurora 커넥터, 병렬방식/직렬방식

 

지금까지 하드웨어 방식 동적 테스트에 대해 살펴봤다. 프로세서 선정과 하드웨어 설계 시 고려사항이 있지만, 오버헤드가 없고 동적 시험에 필요한 많은 노력을 줄일 수 있다. 또한, 디버깅과 성능개선에도 활용할 수 있으니 충분히 적용해 볼만한 가치가 있다.

이미 수년 전부터 실시간 트레이스를 지원하는 프로세서가 출시되고 있고, 그 종류 또한 점차 다양해지고 있다. 또한, 데이터 추출을 위한 커넥터를 지원하는 평가보드와 상용보드도 많이 출시돼있으니 실제 개발환경에서 쉽게 검토해 볼 수 있다. 

 

작성: 김종천 MDS테크놀로지 DT사업부 부장

회원가입 후 이용바랍니다.
개의 댓글
0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400
내 댓글 모음
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지