From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

[Archive] 강좌게시판

cancel
Showing results for 
Search instead for 
Did you mean: 

[myLV.net 집필진 강좌] VI Analyzer Toolkit 사용하기

[myLV.net 집필진 강좌 – Goodmaner]

 

이번 강좌에서는 LabVIEW에 애드온 Toolkit으로 사용할 수 있는 VI Analyzer Toolkit에 대한 소개 및 사용방법에 대해서 살펴 보겠습니다.

소스 코드의 품질을 확인하기 위한 방법은 크게 정적 분석과 동적 분석 방법이 있습니다. 정적 분석(Static Analysis) 방법은 프로그램을 실행시키지 않고 소스 코드의 내용을 바탕으로 코드 품질을 확인하며, 동적 분석(Dynamic Analysis) 방법은 프로그램에 여려가지 입력을 주며 실행시켜서 그 결과를 토대로 코드의 품질을 판단합니다. LabVIEW에서는 각각에 대해서 아래와 같은 Toolkit을 제공해주고 있습니다.

 

정적 분석 - VI Analyzer Toolkit

동적 분석 - Desktop Execution Trace Toolkit

 

우선 VI Analyzer Toolkit을 사용하려면 아래 그림에서와 같이 NI 사이트에서 관련 Toolkit을 다운받아서 설치하면 됩니다.

 

1.png

 

인이 사용 중인 LabVIEW 버전에 맞는 것으로 다운받아서 설치합니다.

VI Analyzer Toolkit을 사용해보기 전에 관련 Toolkit에서 제공하는 내용들에 대해서 자세히 살펴보겠습니다.

우선 정적 코드 분석을 하는 이유에 대해서 정리해보면 아래와 같이 크게 3가지가 있습니다.

 

1.Style compliance (스타일 준수)

2.Performance analysis (성능 분석)

3. Finding bugs (버그 찾기)

 

"스타일 준수"는 여러 개발자가 함께 프로그램을 개발하는 경우 효율적인 프로그래밍 방식과 코딩 스타일을 고수하여 보다 읽기 쉬운 코드 및 기능을 구현할 수 있고, 어플리케이션에 영향을 줄 수 있는 부적절한 코딩 기법을 디버깅할 수 있습니다. "성능 분석"은 프로그램의 성능에 영향을 줄 수 있는 코딩 스타일을 분석하여 성능에 나쁜 영향을 주는 코드를 찾아줍니다. "버그 찾기"는 잠재적인 문제를 파악하여 해결해 줄 수 있습니다. 위의 3가지 항목들에 대해서 좀 더 자세히 살펴보겠습니다.

 

1.Style compliance(스타일 준수)

(a) Wiring

   : backwards wires, wire bends, wires under objects

(b) Best Practices

   : globals/locals, sequence structure usage, wait in while loop

(c) General Aesthetics

   : mixed terminal styles, control terminal label visible, code simplification

 

2.png

 

2.Performance analysis (성능 분석)

(a) Arrays and strings in loops

(b) Parallelizable loops

(c) In Place element structure usage

(d) Prepend scalar with build array

(e) Value property usage

(f) Wired terminals in subdiagrams

 

3. Finding bugs (버그 찾기)

아래의 예는 입력과 출력이 직접 연결되어 있지만 마치 출력이 "1 더하기" 함수의 출력에 연결되어 있는 것처럼 보인 경우입니다. 이런 경우 코드 상으로는 문제가 없지만 동작 상으로는 원하는 동작을 하지 않게 됩니다.

3.png

 

 

위의 3가지 항목 이외에도 spell check, platform portability, build application compatibility을 확인할 수 있습니다.

이와 같은 분석을 포함하여 아래와 같은 내용들을 제공해줍니다.

 

1.포함된 90개 이상의 테스트로 성능 최적화 및 팀내에서 적절한 코딩 스타일 시행

2.어플리케이션 디버깅 및 코드 검토를 자동화하기 위한 Tool

3.코드 품질 및 순환적 복합도 평가

4.리포트 생성 기능을 통해 코드 품질을 문서화하고 추적

5.테스트를 프로그램적으로 설정하고 실행

 

지금부터는 LabVIEW에서 VI Analyzer Toolkit을 어떻게 사용하는지에 대해서 자세히 살펴보겠습니다.

아래 그림에서처럼 "도구>>VI 분석기>>VI 분석..."을 선택합니다.

 

4.png

 

이후 아래와 같은 다이얼로그 창이 활성화 되는데, 여기에서는 test.vi라는 소스 하나만 분석하려고 하며 아래와 같이 "현재 VI분석"을 선택해 줍니다. 일반적으로는 분석기 설정(CFG) 파일을 정의해서 이를 불러와서 분석하며 이 경우에는 "이전에 저장한 분석 설정 파일 로드"를 선택하여 관련 CFG 파일을 선택해주면 됩니다.

 

5.png

 

 

이후 아래와 같은 다이얼로그 창이 활성화되며, 크게 6개의 테스트를 위한 카테고리를 제공하면 기본적으로 모두 체크되어 있습니다. 이 경우 분석하고자 하는 파일이 많은 경우 분석하는데 시간이 오래 걸릴 수 있기 때문에 본인이 꼭 분석하고자 하는 항목들만 체크해서 진행하면 분석 시간을 단축시킬 수 있습니다.

 

6.png

 

 

여기에서 각각의 항목에서 테스트하는 내용들에 대해서 살펴보겠습니다.

크게 4가지 카테고리에 대한 테스트를 제공하는데,

1.Block Diagram

 : 와이어링, 루프와 구조 사용, 강제 변환점, 불필요한 요소들에 대해서 체크

   (1) Performance

      a.Arrays and Strings in Loops
      b.Coercion Dots
      c.Enabled Debugging
      d.In Place Element Structure Usage
      e.Inlinable VIs
      f.Parallelizable Loops
      g.Prepend Scalar With Build Array
      h.Redundant Boolean Operations
      i.Value Property Usage
      j.Wait in While Loop
      k.Wired Terminals in Subdiagrams

   (2) Style

      a.Backwards Wires
      b.Code Simplification
      c.Control Terminal Label Visible
      d.Control Terminal Wiring
      e.Mixed Terminal Styles
      f.Node Density
      g.Sequence Structure Usage
      h.String Constant Style
      i.Tunnel Position
      j.Unused Code
      k.Wire Bends
      l.Wire Crossings
      m.Wires Under Objects

   (3) Warnings

      a.Adding Array Size Elements
      b.Array Sum and Product Overflow
      c.Breakpoint Detection
      d.Bundling Duplicate Names
      e.Error Cluster Wired
      f.For Loop Iteration Count
      g.Globals and Locals
      h.Hidden Objects in Structures
      i.Hidden Tunnels
      j.Indexer Datatype
      k.Pattern Label
      l.Reentrant VI Issues
      m.Type Casting References
      n.Typedef Cluster Constants

2.Documentation

 : 개발자와 사용자를 위한 문서 작성 여부 확인

   (1) Developer
      a.Comment Usage
      b.Label Call Library Nodes
      c.Revision History
   (2) User
      a.Spell Check
      b.VI Documentation

3.Front Panel

 : 컨트롤 사용, 폰트 설정, 라벨 등을 체크

   (1) SubVI
      a.Array Default Values
      b.Cluster Sized to Fit
      c.Control Alignment
   (2) User Interface
      a.Clipped Text
      b.Dialog Controls
      c.Duplicate Control Labels
      d.Empty List Items
      e.Font Usage
      f.Overlapping Controls
      g.Panel Size and Position
      h.Scalar Chart Updates
      i.Synchronous Display
      j.Transparent Labels

4.General

 : 위의 3가지 카테고리 이외의 성능과 스타일 이슈를 체크

   파일 속성, 아이콘과 커넥터 펜, VI 속성등을 체크

   (1) File Properties
      a.SubVI and TypeDef Locations
      b.VI Extension
      c.VI Name
      d.VI Saved Version
      e.VI Size  

   (2) Icon and Connector Pane
      a.Connected Pane Terminals
      b.Connector Pane Alignment
      c.Connector Pane Pattern
      d.Default Icon
      e.Error Style
      f.Full Connector Pane
      g.Icon Size and Border
      h.Polymorphic Terminals
      i.Terminal Connection Type
      j.Terminal Positions
   (3) VI Properties
      a.Broken VI
      b.Built Application Compatibility
      c.Driver Usage
      d.Platform Portability
      e.Removed Diagram
      f.Toolkit usage
      g.VI Lock State
   (4) VI Metrics
      a.Connector Inputs and Outputs
      b.Controls and Inductors
      c.Diagram Count
      d.Diagram Size
      e.Node Count
      f.Property Reads and Writes
      g.Shared Library Calls
      h.Structure Count
      i.Wire Sources

이처럼 90개 이상의 테스트 항목을 제공하며, 여기에서 "분석"을 클릭하면 아래 그림에서와 같이 분석을 시작합니다.

 

7.png

 

분석이 완료되면 아래와 같이 "VI 분석기 결과 윈도우"가 활성화되면서 결과를 표시해 줍니다. 빨강색 느낌표가 높은 순위 테스트 내용으로 우선적으로 검토해야 할 항목에 해당됩니다. 여기에서는 앞서 위에서 예제로 들었던 "1 더하기" 함수의 출력이 연결되어 있지 않은 경우로 Unused Code로 표시해주고 있습니다.

 

8.png

 

이렇게 테스트한 결과를 파일로 저장하고 싶은 경우에는 "반출" 버튼을 클릭해줍니다. 이런 경우 아래와 같이 "VI 분석기 결과 반출" 다이얼로그가 활성화 되며 여기에서 반출 타입을 ASCII 또는 HTML 중 하나로 설정하고 "반출" 버튼을 클릭하면 테스트 결과가 파일로 저장됩니다.

 

9.png

 

아래 그림은 테스트 결과를 HTML로 반출하는 경우의 화면을 보여주고 있습니다.

 

10.png

 

마지막으로 VI Analyzer Toolkit에서 제공하는 예제 코드들에 대해서 샆펴보겠습니다.

예제 코드는 아래와 같이 2가지를 제공합니다. 이는 위에서 살펴본 프로그램 메뉴를 사용하지 않고 관련 API들을 이용하여 프로그램적으로 정적 분석을 할 수 있도록 구현하는 경우입니다.

 

1.Easy VI Analysis.vi
2.Advanced VI Analysis.vi
 

위의 예제코드를 이용하여 아래와 같이 VIAnalysis라는 프로젝트 파일을 생성하였고, 관련 코드를 살펴보겠습니다.

 

11.png

 

1.Easy_VI_Analysis.vi

관련 코드의 Front Panel은 아래와 같으며 입력으로 분석하고자 하는 소스 파일을 선택하도록 되어 있습니다. 원하는 소스 파일을 선택한 후 실행하면 수 초 후에 오른쪽 Output 카테고리에 결과가 표시됩니다.

 

12.png

 

아래는 블록다이어그램에 해당되며 "VIAn Easy Analye.vi"와 "VIAn Easy Report.vi"를 이용하는 것을 확인할 수 있습니다.

13.png

 

2.Advanced_VI_Analysis.vi

관련 코드의 Front Panel은 아래와 같으며 다양한 입력 값들을 참조하여 LLB 파일로 구성된 여러 개의 소스 코드들을 분석해줍니다. 여기에서는 "llbtoanalyze.llb" 파일을 입력으로 불러와서 Config 폴더에 있는 "API SubVI.cfg" 파일에 정의한 테스트 항목들을 테스트해줍니다.

 

14.png

 

아래는 관련 블록다이어그램을 나타내고 있습니다. 다양한 API들을 사용하여 사용자가 원하는 기능들을 구현하여 소스코드 분석을 할 수 있습니다.

15.png

 

지금까지 LabVIEW에서 제공하고 있는 VI Analyzer Toolkit에 대한 소개 및 사용하는 방법에 대해서 자세히 살펴보았습니다.

이전에 LabVIEW Performace와 관련하여 소개해드렸던 적이 있는데, 관련 Tool을 잘 활용하면 Performace를 좋게 할 수 있는 기법들에 대해서 더 자세히 확인할 수 있습니다.

첨부파일로 관련 예제 코드에 대한 프로젝트 파일을 올려놓았습니다. LabVIEW 2015버전이며, 버전을 낮춰서 올려보려고 했는데 특정 파일이 오픈되지 않아서 버전 다운이 안되었습니다. 혹시 버전이 낮으신 분들은 직접 본인이 사용하는 버전으로 "VI Analyzer Toolkit"을 다운 받아서 설치하신 후 예제 코드를 확인하시면 됩니다. 뿐만 아니라 첨부파일을 오픈하실 수 있는 분들은 우선적으로 LabVIEW 2015버전의 "VI Analyzer Toolkit"을 다운 받아서 설치하시길 바랍니다.

혹시 아직까지 관련 Tool을 사용해보지 않은 분들이 계시면 이번 기회에 사용해 봄으로써 좀 더 전문가적인 코딩 스타일을 습득하실 수 있길 바랍니다.

 

Contributors