개발자

레인보우시스템

테스트 관리 소프트웨어의 대두

양산용 제품의 테스트 데이터 수집하기

사물 인터넷 장비가 폭발적으로 증가하면서 기업은 여러 가지
어려움을 겪게 됩니다. 제품이 더욱 복잡해지는 한편 소비자들의
기대치는 높아지기 때문에 테스트 프로그램과 거기서 생성되는
데이터의 양이 기하급수적으로 증가하고 있습니다.
또한 전 세계에 분산된 장비에서 데이터를 수집하고 처리해야
하며, 제품 반환 요청(RMA) 방지를 위해 몇 달, 심지어는 몇 년
동안이나 데이터를 보관해야 합니다. 그러나 모든 데이터가 유실
되는 것은 아닙니다. 유수 반도체 업체들은 생산품 수율을 향상
시키고 이탈을 방지하며 RMA 관리를 간소화하기 위해 다면적인
빅 데이터 분석 전략을 선도적으로 도입하고 있습니다. 이러한
분석 전략은 다른 업계에서 양산 테스트를 수행하는 기업들이
데이터 분석의 장점을 실현할 수 있는 롤모델이 되고 있습니다. 

FORTAN의 성공 이후, 각기 새로운 구조와 연산 모델을 갖춘
C, Pascal, ATLAS, PAWS 등의 언어들이 개발되었습니다.
매번 새로운 언어가 개발될 때마다 객체 지향 프로그래밍과 같은
강력한 추상화 기능이 도입되었으며, 이 객체 지향 프로그래밍은
현재 가장 널리 사용되고 있는 프로그래밍 구조 중 하나입니다.
또한 이렇게 새로운 연산 모델은 공통적인 문제를 해결하기 위해
개발되는 경우가 많습니다. 새로운 연산 모델 중 일부는 범용
프로그래밍 작업을 위해 개발되었지만, 특정한 어플리케이션을
위해 개발된 모델들도 있습니다. 예를 들어 LabVIEW는 테스트,
측정, 제어 어플리케이션을 위해 개발되었으며, Python은 신속
한 코드 스크립팅 작업에 활용하도록 개발되었습니다.
이렇게 추상화가 진행되다 보면 특정한 작업에 최적화된 언어
들이 탄생하게 됩니다. 뛰어난 테스트 관리자라면 테스트 관리
소프트웨어를 사용하여 여러 언어의 기능을 활용하고 개발 시간
을 절약할 수 있는 테스트 시스템을 설계해야 합니다.
전통적인 테스트 시스템 개발 방식
소프트웨어는 자동화 테스트 시스템을 구축할 때 일종의 백본
역할을 하므로, 많은 기업들은 개별 구성요소 테스트에서 전체
테스트 관리에 이르기까지 테스트 시스템 설계 전반에 사용할 수
있는 하나의 범용 언어로 표준화하는 것을 선호합니다. 그 결과
개발된 것이 동종 테스트 소프트웨어 방식입니다. 이러한 방식의
주요 장점은 팀의 모든 구성원들이 하나의 표준화된 환경에서
작업할 수 있으므로 팀 전체가 라이브러리와 코드 모듈을 보다
쉽게 공유할 수 있다는 점입니다. 이러한 방식을 사용할 경우
모든 구성원들이 하나의 환경에서 학습하고 작업하므로 교육
과정도 크게 간소화됩니다.
그러나 하나의 언어를 기반으로 한 표준화에는 몇 가지 단점이
있습니다. 하나의 언어를 사용하면, 신규 채용자가 특정한 기술
을 갖추고 있는 인재로 한정되거나 입사 후 새로운 기술을 배워야
합니다. 기술력을 갖춘 인재 양성이라는 이 주제는 NI의 자동화
테스트 전망 2014에서 자세히 살펴본 바 있습니다. 대학을 졸업
하는 학생들은 보통 하나 또는 몇 가지의 특정 언어에 대한 선호
나 사용 경험을 가지고 있습니다. 따라서 이러한 신규 개발자
들이 각자 자신이 선호하는 언어를 구현하면 조직 내에서 많은
혼란이 일어나게 됩니다. 또한 코드 마이그레이션, 코드베이스
재검증, 새로운 언어에 대한 추가적인 교육 등을 위한 비용도
소요됩니다.
따라서 유능한 테스트 관리자라면, 여러 언어를 활용하여 이종
시스템을 구축할 수 있는 새로운 테스트 시스템 개발 방식을
모색해야 합니다. 이러한 방식을 도입하면 각각 장점을 가지고
있는 여러 언어를 활용할 수 있어 보다 강력한 테스트 시스템을
구축하게 됩니다. 예를 들어 R&D 엔지니어들이 개발한 코드에
Python을 활용하여 스크립팅 확인과 검증 테스트를 수행할 수
있습니다. 또한 같은 시스템에 C#을 사용하여 맞춤형 하드웨어
또는 기존 .NET 라이브러리를 위한 객체 지향 인터페이스를
개발하는 동시에 LabVIEW를 사용하여 하드웨어와 통신하거나
데이터를 수집할 수도 있습니다. 거의 모든 언어가 특정한 어플리
케이션이나 작업에 적합하게 설계되어 있으므로 각 언어의 장점
을 활용하면 시간과 비용을 절약하는 결과를 가져옵니다.
이러한 방식은 많은 장점을 가지고 있지만, 테스트 시스템을
개발할 때 여러 가지 다른 언어가 긴밀하게 통합된 하나의 시스
템을 구현해야 한다는 새로운 문제점을 야기하기도 합니다. 이
문제를 해결하기 위해서는 모든 테스트 엔지니어가 자신이 전문
으로 하는 환경뿐만 아니라 해당 환경과 인터페이스하는 다른
환경도 전부 숙지해야 합니다.

소프트웨어 솔루션

따라서 테스트 팀들은 이제 다양한 언어를 서로 연결해주는 교량
역할을 하는 상용 테스트 관리 소프트웨어에 눈을 돌리고 있습
니다. 이러한 소프트웨어는 모든 테스트 코드 타입을 사용할 수
있는 공통 환경을 제공해줄 뿐만 아니라 시퀀싱과 각 테스트
호출, 데이터로깅 처리 및 리포트 생성과 같은 작업 수행도 지원
합니다. 

이미지 없음

최고의 솔루션을 제공 해드립니다!.

인덱스란?

인덱스를 설정 시 각 컬럼의 카디널리티는 높은것을 잡아야 효율성을 극대화 할수 가 있습니다.
예)주민등록번호,사번ID 등은 중복횟수가 없기 때문에 카디널리티(Cardinality) 가 높습니다. 하지만 남여구분은 50%가 되기 때문에 카디널리티가 낮다고 할 수 있습니다.
여러 컬럼으로 인덱스를 잡는다면 카디널리티가 높은순에서 낮은순으로  구성하는게 더 성능이 뛰어납니다.

예를들어 아래와 같이 인덱스가 설정이 되었다고 한다면 
인덱스: group_no, from_date, is_bonus
1.SELECT * From where group_no='test1234' and is_bonus='true';
 =>위 퀴리는 인덱스가 타서 실행이 되지만 
2.1.SELECT * From where from_date='2019-11-22' and is_bonus='true';
=>이렇게 두번째 인덱스로 퀴리조건을 잡으면 인덱스를 타지 못해서 성능저하가 되어서 검색시간이 증가하게 됩니다.

따라서 조회 쿼리 사용시 인덱스를 태우려면 최소한 첫번째 인덱스 조건은 조회조건에 포함되어야만 합니다.첫번째 인덱스 컬럼이 조회 쿼리에 없으면 인덱스를 타지 않는다는 점을 기억하시면 됩니다.

!!!!인덱스 조회시 주의 사항!!!!!

between, like, <, > 등 범위 조건은 해당 컬럼은 인덱스를 타지만, 그 뒤 인덱스 컬럼들은 인덱스가 사용되지 않습니다.

즉, group_no, from_date, is_bonus으로 인덱스가 잡혀있는데 조회 쿼리를 where group_no=XX and is_bonus=YY and from_date > ZZ등으로 잡으면 is_bonus는 인덱스가 사용되지 않습니다.
범위조건으로 사용하면 안된다고 기억하시면 좀 더 쉽습니다.
반대로 =, in 은 다음 컬럼도 인덱스를 사용합니다.

in은 결국 =를 여러번 실행시킨 것이기 때문입니다.
단, in은 인자값으로 상수가 포함되면 문제 없지만, 서브쿼리를 넣게되면 성능상 이슈가 발생합니다.
in의 인자로 서브쿼리가 들어가면 서브쿼리의 외부가 먼저 실행되고, in 은 체크조건으로 실행되기 때문입니다.
AND연산자는 각 조건들이 읽어와야할 ROW수를 줄이는 역할을 하지만, or 연산자는 비교해야할 ROW가 더 늘어나기 때문에 풀 테이블 스캔이 발생할 확률이 높습니다.

WHERE 에서 OR을 사용할때는 주의가 필요합니다.
인덱스로 사용된 컬럼값 그대로 사용해야만 인덱스가 사용됩니다.

인덱스는 가공된 데이터를 저장하고 있지 않습니다.
where salary * 10 > 150000;는 인덱스를 못타지만, where salary > 150000 / 10; 은 인덱스를 사용합니다.
컬럼이 문자열인데 숫자로 조회하면 타입이 달라 인덱스가 사용되지 않습니다. 정확한 타입을 사용해야만 합니다.
null을 비교값으로 사용한 경우엔 인덱스를 타지 않습니다.
***인덱스 컬럼들이 조회조건에 포함되어 있는지가 중요합니다.***

  • 1