테스트 커버리지와 어플리케이션 복잡성이 증가함에 따라, 엔지니어들은 종종 측정을 개발하는 것보다 테스트 관리 인프라를 유지보수하는 데 더 많은 시간을 소비하게 되며, 이는 유지보수성이 떨어지고 재사용성이 낮은 시스템으로 이어집니다. 시퀀싱은 테스트 관리의 핵심 요소로, 자동화된 테스트와 측정이 가능하게 합니다.
본 기술 백서에서는 어플리케이션 레벨의 코드 없는 시퀀싱 및 NI TestStand와 같은 전용 테스트 관리 프레임워크에서의 시퀀싱 활용법을 살펴보고, 사용자에게 가장 적합한 접근 방식을 결정하는 방법을 다룹니다. 본 백서는 또한 AI를 사용하여 개발을 가속화하는 방법과 NI LabVIEW+ Suite를 오픈 소스 솔루션과 비교하는 방법에 대해서도 논의할 것입니다.
엔지니어들은 테스트 코드를 개발하는 대신 시퀀서를 개발하는 데 너무 많은 시간을 소비하는 경우가 많으며, 이는 배포 및 테스트 실행을 지연시킵니다. 요구사항이 늘어남에 따라 시퀀싱 및 지원 코드는 두 번째 코드베이스로 변질됩니다. 일반적인 작업은 새로운 측정에서 인프라 유지보수로 옮겨집니다. 단계별 실행, 설정, 테스트 시스템 배포, 오류 처리, 로그 기록 및 보고 같은 작업을 모두 개발하고 유지하여 지속적인 테스트 생산성이 보장되어야 합니다. 테스트 실행에서 테스트 관리로 초점을 옮기면 생산성이 저하되고, 새로운 스테이션으로의 복제가 느려지며, 리스크가 증가합니다. 테스트 오케스트레이션의 작은 변경만으로도 안정적이었던 측정 코드가 손상될 수 있습니다.
종종 간과되는 또 다른 과제는 테스트 관리 인프라에 충분한 시간이나 노력을 기울이지 않아 나중에 반복적인 개발이 발생한다는 점입니다. 예를 들어 단순한 자동화만 필요로 하는 검증 팀이 있습니다. 검증에서 생산으로 전환할 때 실행된 테스트가 중복될 가능성이 있습니다. 테스트 인프라가 제대로 정렬되지 않으면, 제품 개발의 다음 단계로 그대로 이어질 수 있었던 기존 테스트 코드와 자동화를 불필요하게 재개발해야 하는 상황이 생길 수 있습니다.
시퀀서는 단계 순서, 분기, 리미트/결정, 오류 처리, 보고서 생성, 리소스 사용(인스트루먼트, DUT 연결, 파일 디렉토리 등)과 같은 테스트 흐름을 정의하는 컨트롤 레이어입니다. 설계 및 검증 단계에서 팀은 대개 빠르게 "첫 추적" 결과를 얻기 위해 대화식 측정으로 시작하며, 워크플로우가 반복되는 즉시 자동화를 추가합니다. 다음 단계들은 일반적인 진행 과정을 나타냅니다:
기본 시퀀싱은 단순한 선형 자동화 흐름을 위한 대화식 어플리케이션에서 처리할 수 있습니다. 코드리스 테스트 자동화 도구를 제공하는 InstrumentStudio 및 NI FlexLogger와 같은 소프트웨어가 이러한 대화식 어플리케이션의 예가 될 수 있습니다.
예를 들어, Device Under Test(DUT)를 검증해야 한다고 가정해 봅니다. InstrumentStudio에서 인스트루먼트를 설정하여 알려진 신호를 생성하고, DUT의 응답을 측정하고, 결과를 캡처하는 반복되는 일련의 단계들을 자동화할 수 있습니다. 이 반복 가능한 시퀀스를 사용하면 추가 코드 없이도 동일한 프로세스를 동일한 디바이스 또는 여러 디바이스에서 빠르게 다시 실행할 수 있으므로, 수동 작업에 비해 일관성이 보장되고 시간이 절약됩니다. 그러나 이러한 유형의 시퀀스는 일반적으로 선형적이며 모든 디바이스에 대해 동일한 단계를 동일한 순서로만 실행한다는 점에 유의해야 합니다. 확장된 시퀀스 흐름 제어, 특화된 프로세스 모델, 맞춤 UI 및 보고가 필요하다면 더 고급의 시퀀싱 도구가 필요합니다. InstrumentStudio에서 만든 시퀀스는 시퀀스 파일로 저장되며, TestStand에서 열어 테스트 관리 기능을 확장할 수 있습니다.
InstrumentStudio Sequencer를 사용하여 수행할 수 있는 작업과 수행할 수 없는 작업에 대한 자세한 리스트는 표 1을 참조하십시오.
참고: InstrumentStudio Sequencer를 사용하려면 LabVIEW+ Suite에 포함된 InstrumentStudio Professional 라이선스가 필요합니다.
InstrumentStudio Sequencer에 대해 자세히 알아보려면 InstrumentStudio Sequencer 도구 문서 페이지를 방문하십시오.
그림 1. InstrumentStudio Sequencer
코드 없는 자동화 시퀀싱의 또 다른 예는 FlexLogger를 사용하여 센서 모듈의 출력 응답에 대한 로깅을 자동화하는 것입니다. FlexLogger는 DUT의 데이터 로깅을 자동화하는 시퀀싱 플러그인을 제공하며, 여기에는 선형 시퀀스에 따라 데이터 수집 장치를 초기화하고, DUT에 자극 신호들을 인가하며, 정해진 시간 동안 데이터를 로깅하는 과정이 포함됩니다. 이 플러그인은 선형 단계 기반 시퀀스 실행, 기본 단계 분기(건너뛰기, 반복, 정지, 특정 단계로 이동), 폴링 조건 로직(시작, 정지, 사전 조건, 단계 이후 동작)이 가능하여 코드 개발 없이 테스트 절차 자동화를 지원합니다.
표 2는 FlexLogger 시퀀싱 플러그인으로 수행할 수 있는 작업과 수행할 수 없는 작업을 자세히 설명합니다.
참고: FlexLogger용 시퀀싱 플러그인은 FlexLogger Professional 라이선스가 필요하며, 이 라이선스는 LabVIEW+ Suite에도 포함되어 있습니다.
Sequencer 플러그인에 대해 자세히 알아보려면 https://github.com/ni/niflexlogger-plugins/tree/main/PDK%20plugins/Output%20Sequencer를 방문하십시오.
그림 2. FlexLogger 시퀀싱 플러그인
복잡한 시퀀싱은 가변성(데이터 기반 파라미터), 재시도/건너뛰기 로직, 병렬 처리(멀티 UUT, 멀티 사이트), 리소스 중재, 추적성을 추가합니다. 복잡한 시퀀싱 기능은 검증 및 생산 단계에서 매우 중요한데, 이는 스테이션과 배리언트 간의 반복 실행을 강제로 하고, 고급 프로세스 모델을 사용하여 처리량을 향상시키며, 결정적 동작을 정의하고, 결과의 디버깅 및 감사를 위해 일관된 추적/보고를 생성하기 때문입니다.
예를 들어 TestStand를 사용하는 기능적 생산 테스트는 설정 파일이나 스캔된 부품 번호에 따라 파라미터와 흐름을 조정하며, 여러 제품 배리언트와 여러 Unit Under Test(UUT)에 대해 동일한 핵심 측정 단계를 실행할 수 있습니다. 시퀀스는 PXI 섀시, 전원 공급 장치, 픽스처와 같은 공유 리소스를 초기화한 후, 공유할 수 없는 인스트루먼트를 잠그면서 각 UUT별 테스트 스레드를 병렬로 실행할 수 있습니다. 측정에 실패하면 진단 서브 시퀀스 실행이나 안전 종료로 바로 이동 등 조건 분기를 수행할 수 있고, 시리얼 번호, 리미트, 운영자 ID, 교정 메타데이터가 포함된 추적 가능한 보고서에 표준화된 결과를 저장할 수 있습니다. 이 프로세스는 모든 스테이션이 시퀀스 결과의 디버깅 및 감사를 위해 일관된 데이터를 생성하도록 보장합니다.
그림 3. TestStand Sequencer 편집기
LabVIEW+ Suite는 개발 작업 흐름의 위치에 따라 여러 레벨의 시퀀싱 기능을 제공합니다.
이 섹션에서는 특정 프로젝트 요구사항을 기반으로 자동화된 테스트 시퀀스를 구성하기 위한 세 가지 전략에 대해 설명합니다. 올바른 접근 방식을 선택하려면 셋업 속도, 확장성 및 장기 유지보수에 대한 요구사항 간의 균형을 맞추어야 합니다.
흐름이 단순하고 프레임워크 구축 없이 빠른 가동을 원할 때는 FlexLogger나 InstrumentStudio와 같은 코드 없는 테스트 자동화 툴을 사용하십시오. 이러한 제품들은 벤치 검증 및 특성 분석에 가장 적합하며, 리포팅 및 추적성 요구사항이 최소화된 반복 실행에 유리합니다.
코드 없는 자동화 시퀀싱은 종종 Python과 같은 스크립트 언어로 수행되던 자동화를 단순화해 주며, 어플리케이션 레벨에서 수행할 수 있게 함으로써 작성 및 검증해야 하는 코드의 양을 줄여줍니다.
여러 스테이션을 조정해야 하거나, 빈번한 변경이 필요하거나, 운영자 UI가 필요하거나, 표준화된 보고가 필요하거나, 멀티 UUT 또는 병렬 실행을 지원해야 하거나, 규정 준수 및 추적성 조건을 충족해야 할 때는 TestStand로 전환하십시오. 이런 경우 측정 코드를 모듈로 유지하고, 흐름 제어나 결과 처리, 배포 관리를 시퀀서로 옮겨 오케스트레이션이 각 테스트 모듈로 확산되지 않도록 합니다.
테스트 관리 프레임워크 주요 활용 사례는 대량, 고처리량, 테스트 추적성이 필수인 생산 테스트 환경입니다. 하지만 테스트 관리 어플리케이션은 테스트의 검증 단계에서도 유용하게 사용될 수 있습니다. 예를 들어, 대량의 검증 및/또는 특성 분석 테스트를 실행해야 하는 경우, 단순한 시퀀서의 한계가 빠르게 나타날 것이며, 특히 속도 최적화가 부족한 Python과 같은 언어에서 더욱 그렇습니다. 또한, 검증 주기와 생산 주기 사이에 격차가 존재할 수 있으며, 이로 인해 코드를 생산 테스트에 더 최적화되도록 다시 작성해야 할 수도 있습니다. 검증과 생산 단계 모두에서 TestStand를 사용하면 검증 팀이 대량 테스트가 필요한 상황에 잘 대비할 수 있고 개발의 생산 단계로 더 부드럽게 전환할 수 있습니다.
요구사항이 안정적이고 장기적인 소유 비용(유지보수, 문서화, 온보딩, 자동 배포/업데이트)을 감당할 수 있을 때만 맞춤형 시퀀서를 개발하십시오. 기본적인 시퀀싱 범위를 벗어날 경우, 검증되고 유지 관리되는 시퀀싱 툴을 사용하는 것에 비해 소유 비용이 상당히 커지는 경우가 많습니다.
NI 소프트웨어는 통합된 하드웨어 지원, 유지보수되는 실행 엔진, 배포 툴링 및 내장된 리포팅/추적성이 필요할 때 리스크를 낮춰줍니다. 오픈 소스 소프트웨어는 팀이 프레임워크를 장기적으로 소유할 수 있고 요구사항(하드웨어 조합, 리포팅, 배포)이 단순하고 선형적이며 안정적인 경우에 적합할 수 있습니다. 그러나 기본적인 시퀀싱을 제외하고, 맞춤형 프레임워크를 소유하는 것은 개발 및 유지보수 면에서 상당한 소유 비용을 초래하며, 이러한 기능들은 이미 InstrumentStudio 및 FlexLogger와 같은 NI 소프트웨어 내에서 처리될 수 있습니다.
또한 TestStand는 LabVIEW+ Suite의 일부로 Python의 느린 실행 최적화 대비 뛰어난 테스트 성능을 제공하며, C나 .NET에서 직접 개발할 때보다 시퀀서 개발 복잡성을 줄일 수 있습니다. TestStand는 수십 년간 최적화되고 유지된 완전한 테스트 관리 프레임워크를 제공하여 엔지니어가 이미 기성품으로 사용 가능한 동일한 솔루션을 반복 개발할 필요를 줄입니다.
AI는 테스트 시퀀싱 개발을 가속화합니다. 많은 개발자들이 AI를 이용해 측정 코드 생성, 테스트 데이터 분석, 자주 사용하는 언어로 간단한 시퀀스 생성까지 수행합니다. NI Nigel™ AI는 LabVIEW+ Suite에 직접 통합되어 있으므로 이러한 작업과 그 이상의 모든 작업에 Nigel AI를 활용할 수 있습니다. LabVIEW+ Suite에 포함된 Nigel AI는 다른 AI 솔루션에 비해 몇 가지 장점을 제공합니다.
Nigel은 테스트 및 측정 어플리케이션에 특화되어 학습되었으며, 더 빠르게 배우고 시작할 수 있도록 LabVIEW, InstrumentStudio, FlexLogger 및 TestStand의 사용법에 대한 인사이트를 제공할 수 있습니다. Nigel은 어떤 함수와 설정을 사용해야 하는지 안내해주며, 곧 프롬프트를 통해 Python이나 C처럼 완전히 개발된 테스트 관리 프레임워크에서 전체 TestStand 시퀀스를 생성할 수 있게 될 것입니다.
테스트 시퀀싱은 단계 순서, 분기, 리미트/결정, 오류 처리, 결과 로그/보고와 같이 측정 실행 방식을 정의하기 때문에 테스트 관리의 핵심 요소입니다. 테스트 커버리지와 어플리케이션 복잡성이 증가함에 따라, 시퀀싱 및 지원 인프라는 배포를 지연시키고 리스크를 증가시키는 두 번째 코드베이스로 빠르게 변질될 수 있습니다.
LabVIEW+ Suite를 사용하면 모든 측정 모듈에 오케스트레이션, 보고, 배포, 추적성을 구현하지 않고 자동화 확장이 가능하며, InstrumentStudio나 FlexLogger로 가장 간단한 시퀀싱 방식으로 현재 요구사항을 충족하고, 요구가 검증에서 생산으로 확대될 때 TestStand를 통한 전용 테스트 관리 프레임워크로 명확한 경로를 설계할 수 있습니다. 또한, Nigel AI는 전체 하드웨어 및 소프트웨어 인사이트를 제공하여 종합적인 AI 지원 및 시퀀싱 개발의 미래 오케스트레이션을 제공하며, 자동화를 다음 단계로 끌어올리기 위해 곧 구현될 시퀀스 생성을 지원합니다.
| 영역 | InstrumentStudio Sequencer 기능 | InstrumentStudio Sequencer 제한 |
|---|---|---|
| 시퀀스 만들기 | 사용자 정의 측정 단계를 위해 I/O 및 측정 플러그인을 설정하도록 인스트루먼트 패널을 시퀀스 단계로 추가 | 시퀀스 내에서 고급 분기, 조건부 로직 또는 병렬 실행을 지원하지 않음 |
| 설정 단계 | InstrumentStudio 패널 측정값에서 단계들을 직접 생성합니다. 인스트루먼트 패널에서 측정을 설정하면 InstrumentStudio는 설정을 자동화 단계로 직접 변환할 수 있습니다 | 단계 실행을 위한 사용자 정의 측정 로직을 생성하거나 외부 스크립트/코드를 통합할 수 없음 |
| 스윕 | 선형 파라미터 진행으로 기본 단일 레벨 스윕 구현 | 중첩된 스윕, 복잡한 루프 구조 또는 테스트 결과에 따른 동적 파라미터 변경을 지원하지 않음 |
| 시퀀스 실행 | 정의된 각 측정 단계를 수행하는 시퀀스를 실행합니다. 측정값은 실행 중 InstrumentStudio에서 실시간으로 표시됩니다. | 단계 결과에 따라 실행을 분기하거나, 병렬 테스트를 실행하거나, 운영자 워크플로우를 처리할 수 없음 |
| 시퀀스 보고 | 각 시퀀스 실행 결과를 자세히 설명하는 PDF 파일 생성 | 기본 .pdf 이외의 보고서 형식을 사용자 정의하거나 고급 분석 또는 요약을 자동으로 생성할 수 없음 |
| 시퀀스 로깅 | 시퀀스 실행의 추적 및 검증에 사용할 수 있는 실행 로그를 자동으로 생성 | 고급 로그 관리, 내보내기 옵션을 제공하지 않거나 로그를 외부 시스템과 자동으로 통합하지 않음 |
테이블 1. InstrumentStudio 시퀀서 비교 테이블
| 영역 | FlexLogger 시퀀싱 플러그인 기능 | FlexLogger 시퀀싱 플러그인 제한 |
|---|---|---|
| 시퀀싱 모델 | 정의된 지속기간 동안 선형, 단계별 시퀀스 실행 | 계층 구조 또는 병렬 상태를 가진 완전한 상태 머신으로 작동 |
| 흐름 제어 | 단계별 분기: 단계 건너뛰기, 반복, 정지 또는 특정 단계 이동 | 임의 제어 흐름(스위치/케이스, 중첩 분기, 동적 라벨) 지원 |
| 조건 로직 | 시작, 정지, 사전 조건, 단계 이후 작업에 조건식(불리언/숫자형) 사용 | 이벤트에 결정적 또는 즉각적 반응(조건은 폴링되고 인터럽트 기반이 아님) |
| 루프 | 단계 반복 또는 이전 단계 이동으로 기본 루프 구현 | 동적으로 계산된 루프 또는 런타임 생성 시퀀스 생성 |
| 출력 채널 | 시퀀서 인스턴스당 다수 아날로그 및 디지털 출력 채널 구동 | 하드웨어/FlexLogger 한계 초과 또는 명시적 "최대 채널" 값 지정(정의되지 않음) |
| 출력값 | 수식(최근, 기본, t, 수학 함수) 사용으로 출력 유지, 램프, 보간, 계산 | 단계 내부에서 사용자 코드(LabVIEW VI, Python, 사용자 정의 알고리즘) 실행 |
| 시간 | 느린/중간 시퀀싱에 적합한 소프트웨어 타이밍 단계 실행 | 하드웨어 타이밍의 결정적 고속 웨이브폼 제어 제공 |
| 재활성 | 조건에서 매핑된 입력 채널 참조 | 제로 지연 응답 보장(입력값 약간 지연될 수 있음) |
| 런타임 동작 | 한 프로젝트에서 여러 개의 독립적인 시퀀서 플러그인 인스턴스 실행 | 실행 중 시퀀스 구조(단계, 채널, 로직) 수정 |
| 사용 사례 | 테스트 절차, 번인, 내구성 프로파일, 조건 램프/홀드 | PLC 교체, 안전성에 중요한 인터록, 폐루프 제어 |
테이블 2: FlexLogger 시퀀싱 플러그인 비교 테이블