Overview
|
소프트웨어에서 소스를 파악하고 예상치 못했고 원치 않는 동작을 일으키는 원인을 수정하는 작업은 지루하며 시간 소모적일 뿐 아니라 개발자들에게 비용이 많이 드는 작업입니다. 정확하게 작성되고 기능면에서도 완벽한 코드 조차도 메모리 낭비 또는 데몬 (daemon) 태스크 등 성능에 영향을 미치며 부정확한 동작을 이끌수 있는 문제에 감염되었을 수 있습니다. 이러한 경우, 특히 대규모의 복합적인 어플리케이션이라면 재생성이 불가능하며 문제를 찾아내기는 더 더욱 어렵습니다.
Table of Contents
LabVIEW 개발자들은 정적 및 다이나믹 코드 분석을 병행하기 위한 여러가지 툴들을 활용함으로써 문제점을 속출하여 원인을 차단할 수 있습니다. 본 툴은 문제 추적에 걸리는 시간을 단축하는 동시에 포괄적이며 완벽한 소프트웨어 분석을 제공합니다. 본 문서는 Desktop Execution Trace Toolkit에 대한 개요와 본 툴이 LabVIEW 어플리케이션의 다이나믹 분석에 어떻게 사용되는지 설명합니다.
LabVIEW에서 사용가능한 다른 소프트웨어 엔지니어링 툴을 살펴보려면 ni.com/softwareengineering을 방문하십시오.
코드 분석 기술 소개
공식 코드 검토는 예상치 못한 문제 발생에 대한 위험성 최소화, 파악하기 힘든 버그 원인 규명, 여러 개발자의 각 스타일 조정, 코드 실행 확인 등을 원하는 소프트웨어 엔지니어를 위한 중요하며 보편적인 방식입니다. 본 검토는 권한을 가진 각 팀원이 개발자의 로직을 조사하고 소프트웨어 성능을 분석할 수 있는 기회입니다.
수작업 검토는 대형 어플리케이션에서 막대한 시간과 비용을 소요시킵니다. 따라서 VI Analyzer와 같은 정적 코드 분석을 위한 툴은 소스 코드를 조사하고 잠재적인 문제를 파악하는 데에 일반적으로 사용됩니다. 일단 문제가 파악된 후, Desktop Execution Trace Toolkit과 같은 다이나믹 코드 분석 툴은 코드 실행에 대한 낮은 레벨의 시각을 제공하며 개발자가 원인을 파악할 수 있게 해주므로 매우 중요한 역할을 합니다.
- 정적 코드 분석은 미리 구축된 기준이 있는 도구 또는 방식을 뜻하며, 이를 통해 소스 코드를 비교하여 스타일, 구성, 기술의 표준을 만족하는 지를 확인할 수 있습니다. 본 작업은 어플리케이션 컴파일 또는 실행 이전에 수행되거나 심지어 컴파일/실행 없이 수행될 수도 있습니다.
- 다이나믹 코드 분석은 소프트웨어가 실행 동안에 "내부"에서 어떤 동작을 취하는지 이해하는 능력입니다. 다시 말해, 다이나믹 코드 분석은 발생하는 이벤트와 정황에 대한 세부사항을 제공하므로 개발자들이 문제를 해결하기 위한 큰 그림 또는 추가 정보를 제공받을 수 있습니다.
실행 추적을 위해 다이나믹 코드 분석을 사용하는 시점
다이나믹 코드 분석에는 소프트웨어 수명 주기에 걸쳐 다음과 같은 여러가지 사례가 있습니다.
-
- 메모리 낭비와 참조 변수 부정확 감지
- 특정 이벤트 또는 원치 않는 동작 격리
- 성능이 향상될 수 있는 부분에 대한 어플리케이션 분류
- 오류 발생 직전의 호출 파악
- 어플리케이션 실행이 다른 타겟에서도 동일한지 확인
앞서 언급된 사례가 모두 적절한 예가 될 수 있지만 사용자가 무엇을 원하는지를 정확하게 아는 것이 무엇보다도 중요합니다. 사용자의 구체적인 요구를 해결할 수 있는 세부적인 정보를 찾기가 쉬워지기 때문입니다.
LabVIEW 어플리케이션 추적
Desktop Execution Trace Toolkit은 LabVIEW 개발 환경을 통하거나 통하지 않고 설치할 수 있는 독립형 어플리케이션입니다. 그러나, 동일한 머신에 설치되었을 경우 프로젝트 탐색기와 통합되어 트레이스의 자동 구성을 활성화합니다.
Desktop Execution Trace Toolkit을 LabVIEW 내에서 자동 구성된 트레이스로 시작하기 위해 프로젝트 탐색기의 '내 컴퓨터'를 마우스 오른쪽 클릭한 후 메뉴에서 ‘Trace Execution’을 선택합니다. Desktop Execution Trace Toolkit을 열면, 실행되는 동안 프로젝트 윈도우에 있는 모든 VI를 모니터링하도록 이미 설정되어 있습니다.

그림 1: Desktop Execution Trace Toolkit은 '내 컴퓨터'를 마우스 오른쪽 클릭하여 'Trace Execution'을 선택하면 LabVIEW 개발 환경 내에서 시작할 수 있습니다. 그 후 툴킷을 자동 구성하여 현재 프로젝트를 추적합니다.
또한 사용자들은 본 툴의 화면 위쪽에 위치한 메뉴에서 ‘New Trace’를 선택하여 트레이스를 직접 구성할 수도 있습니다. 본 대화 상자에서 ‘Local application instances,' ‘Remote application instances,’ ‘Application or Shared Library’ 중 선택할 수 있습니다.

그림 2: Desktop Execution Trace Toolkit에서 'New Trace'를 선택하면, 모니터링하기 위해 로컬 또는 원격 어플리케이션 인스턴스를 선택할 수 있는 대화 상자가 나옵니다.
첫 번째 옵션인 'Local applicaiton instances'는 개발 환경 내에서 동일한 머신내의 어플리케이션을 추적하기 위한 것입니다. 본 옵션을 선택하면 열려있는 모든 LabVIEW 프로젝트를 나열합니다. 또한 Desktop Execution Trace Toolkit은 실행파일과 공유 라이브러리 뿐만 아니라 네트워크에서 원격 시스템을 모니터링하기 위해 사용됩니다. 이는 대화상자에서 구성될 수도 있으며 다음 섹션에서 더욱 자세하게 설명됩니다.
배포된 시스템과 원격 타겟 추적
메모리 낭비와 같은 문제는 오랜 시간동안 지속적으로 운영되어야 하는 시스템이거나 또는 시스템이 고객에게 출시되었을 경우 막대한 비용 손실을 초래합니다. 디버깅이 필요한 소프트웨어가 배포되고 LabVIEW 개발 환경이 현재 머신에 설치되지 않았다면 Desktop Execution Trace Toolkit으로 네트워크에서 코드의 다이나믹 분석을 수행할 수 있을 것입니다. 배포된 시스템의 경우, 개발 환경을 사용할 수 있다 하더라도 작동 중인 시스템의 실행을 로컬에서 문제 해결하거나 프로파일하는 것이 실제적으로 불가능합니다.
그림 3: Desktop Execution Trace Toolkit은 원격 VI, 실행파일과 공유 라이브러리를 네트워크 연결을 통해 모니터링합니다.
원격으로 모니터링되는 어플리케이션을 개발할 때 옵션 메뉴에서 VI Server와 네트워크 통신을 반드시 활성화해야 합니다. 개발 환경에서 VI를 원격 추적할 경우, TCP/IP 통신이 켜져 있는지 확인하고 현재 사용되고 있지 않은 포트를 선택하십시오(기본 설정은 3363입니다). 또한 툴킷이 위치한 터미널로 접근이 활성화되어 있는지 확인해야 합니다. 실행파일 또는 공유 라이브러리의 원격 추적의 경우, 빌드 스펙 메뉴에서 디버깅을 활성화하고 VI Server 포트가 사용가능한지 확인해야 합니다.
Desktop Execution Trace Toolkit에서 연결하기 위해, ‘New Trace’ 대화 상자에서 ‘Remote application instances’ 또는 ‘Application or Shared Library’를 선택하십시오. VI Server가 액세스하는 IP 주소와 포트를 지정한 후 목록에 나타난 인스턴스를 선택합니다.

그림 4: 추적할 원격 어플리케이션의 IP 주소와 포트 지정
원격 추적을 설정하는 방법에 대한 더욱 자세한 정보는 Desktop Execution Trace 도움말을 클릭하십시오.
트레이스 구성하기
추적을 시작하기 전에 특정 유형의 이벤트만을 기록하기 위한 도구를 구성합니다. 툴바의 ‘Configure...’를 클릭하고 여러가지 유형중에서 선택하여 메모리 할당을 수집하기 위해 필요한 크기 최소화 등과 같은 세부 사항을 지정합니다.
트레이스 데이터 이해와 필터 생성
툴바에서 ‘Start’를 클릭하면 Desktop Execution Trace Toolkit은 툴이 트레이스 데이터를 수집하는 동안 모든 이벤트를 순서대로 나열합니다. 보기에서는 이벤트가 발생한 시간, 이벤트를 실행한 VI 이름, 실행된 이벤트 유형, 할당된 스레드 ID 그리고 기타 적합한 세부 정보를 보여줍니다. 이벤트를 클릭하면 테이블 아래의 패널에 본 이벤트를 이끈 호출 체인과 프로세스가 실제로 실행된 코어 개수 등의 추가 정보가 디스플레이됩니다.
그림 5: 테이블의 이벤트를 조명하면 아래 대화상자에 추가 정보가 표시됩니다.
블록 다이어그램에 접근하는 인스턴스를 프로파일할 때 특정 이벤트를 더블 클릭하면 이벤트를 발생시킨 블록 다이어그램상의 객체가 조명됩니다. 예를 들어, 처리되지 않은 에러를 감지하였을 경우 테이블의 이벤트를 더블 클릭하면 아래와 같이 VI가 조명됩니다.

그림 6: 테이블의 이벤트를 더블 클릭하면 블록 다이어그램의 해당 객체가 조명됩니다.
대형 어플리케이션의 경우 다이나믹 코드 분석을 수행할 때 런타임 동작에 대한 비례하는 양의 데이터가 도출된다는 사실을 반드시 명심해야 합니다. 이같은 이유로 인해 대용량의 데이터를 검색하기 위해 필터를 생성하고 특정 이벤트 또는 VI를 타겟팅하는 것이 유용합니다. 필터 설정을 위해 테이블 위에 있는 툴바에서 ‘Configure Filter’ 버튼을 클릭하십시오.

그림 7: 대형 어플리케이션이 반환하는 데이터의 용량 때문에 본 툴킷을 사용하여 필터를 직접 생성하는 것이 유용합니다.
필터는 이벤트가 수신된 후에 이벤트에 적용되므로 이벤트 개수는 바뀌지 않으며, 다른 이벤트가 필터링된 곳에서는 격차가 발생합니다.
요약
코드 디버깅은 시간 소모적이며 개발자들에게 어려운 과제입니다. 쉽게 설명할 수 없는 비정상적이며 예기치 않은 동작이 소프트웨어에 발생하였을 경우, Desktop Execution Trace Toolkit과 같은 툴을 사용하여 다이나믹 코드 분석을 수행하면 문제를 감지하고 원인을 분리할 수 있습니다.
관련 링크
Desktop Execution Trace Toolkit 제품 정보
Legal
This tutorial (this "tutorial") was developed by National Instruments ("NI"). Although technical support of this tutorial may be made available by National Instruments, the content in this tutorial may not be completely tested and verified, and NI does not guarantee its quality in any way or that NI will continue to support this content with each new revision of related products and drivers. THIS TUTORIAL IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND AND SUBJECT TO CERTAIN RESTRICTIONS AS MORE SPECIFICALLY SET FORTH IN NI.COM'S TERMS OF USE (http://ni.com/legal/termsofuse/unitedstates/us/).



