모델 기반 테스트

frame|일반적인 모델 기반 테스트 설정

모델 기반 테스트(Model-based testing)는 모델 기반 설계를 적용하여 소프트웨어 테스트 또는 시스템 검사를 수행하기 위한 아티팩트를 설계하고 선택적으로 실행하는 방법이다. 모델은 테스트 대상 시스템(SUT)의 원하는 동작을 나타내거나 테스트 전략 및 테스트 환경을 나타내는 데 사용될 수 있다. 오른쪽 그림은 전자의 접근 방식을 묘사한다.

SUT를 설명하는 모델은 일반적으로 SUT의 원하는 동작을 추상적이고 부분적으로 표현한 것이다. 이러한 모델에서 파생된 테스트 케이스는 모델과 동일한 추상화 수준의 기능 테스트이다. 이러한 테스트 케이스는 통칭하여 추상 테스트 스위트라고 불린다. 추상 테스트 스위트는 추상화 수준이 맞지 않기 때문에 SUT에 대해 직접 실행될 수 없다. 실행 가능한 테스트 스위트는 해당 추상 테스트 스위트에서 파생되어야 한다. 실행 가능한 테스트 스위트는 테스트 대상 시스템과 직접 통신할 수 있다. 이는 추상 테스트 케이스를 실행에 적합한 구체적인 테스트 케이스로 매핑함으로써 달성된다. 일부 모델 기반 테스트 환경에서는 모델에 실행 가능한 테스트 스위트를 직접 생성하기에 충분한 정보가 포함되어 있다. 다른 환경에서는 추상 테스트 스위트의 요소가 소프트웨어의 특정 명령문이나 메서드 호출에 매핑되어 구체적 테스트 스위트를 생성해야 한다. 이를 "매핑 문제" 해결이라고 한다. 온라인 테스트(아래 참조)의 경우, 추상 테스트 스위트는 개념적으로만 존재하며 명시적인 아티팩트로는 존재하지 않는다.

테스트는 여러 가지 방법으로 모델에서 파생될 수 있다. 테스트는 일반적으로 실험적이며 휴리스틱에 기반을 두기 때문에, 테스트 파생을 위한 단일 최상의 접근 방식은 알려져 있지 않다. 모든 테스트 파생 관련 매개변수를 종종 "테스트 요구사항", "테스트 목적" 또는 심지어 "사용 사례"라고 알려진 패키지로 통합하는 것이 일반적이다. 이 패키지는 모델의 어떤 부분에 집중해야 하는지에 대한 정보나 테스트 종료 조건(테스트 중지 기준)을 포함할 수 있다.

테스트 스위트가 소스 코드에서가 아닌 모델에서 파생되기 때문에, 모델 기반 테스트는 일반적으로 블랙박스 검사의 한 형태로 간주된다.

복잡한 소프트웨어 시스템을 위한 모델 기반 테스트는 여전히 발전 중인 분야이다.

모델
특히 모델 기반 개발이나 OMG의 모델 구동형 아키텍처에서는 모델이 해당 시스템과 병행하여 또는 그 전에 구축된다. 모델은 완성된 시스템에서 구축될 수도 있다. 테스트 생성을 위한 일반적인 모델링 언어로는 UML, SysML, 주류 프로그래밍 언어, 유한 상태 기계 표기법, 그리고 Z, B (Event-B), 알로이 또는 Coq와 같은 수학적 형식론이 있다.

모델 기반 테스트 배포
모델 기반 테스트를 배포하는 여러 가지 알려진 방법이 있으며, 여기에는 온라인 테스트, 실행 가능한 테스트의 오프라인 생성, 그리고 수동으로 배포 가능한 테스트의 오프라인 생성이 포함된다.

온라인 테스트는 모델 기반 테스트 도구가 SUT에 직접 연결하여 동적으로 테스트하는 것을 의미한다.

실행 가능한 테스트의 오프라인 생성은 모델 기반 테스트 도구가 테스트 케이스를 나중에 자동으로 실행할 수 있는 컴퓨터 판독 가능한 자산으로 생성하는 것을 의미한다. 예를 들어, 생성된 테스트 로직을 구현하는 파이썬 클래스 모음 등이 있다.

수동으로 배포 가능한 테스트의 오프라인 생성은 모델 기반 테스트 도구가 테스트 케이스를 나중에 수동 테스트에 도움이 될 수 있는 사람이 읽을 수 있는 자산으로 생성하는 것을 의미한다. 예를 들어, 생성된 테스트 단계를 설명하는 PDF 문서 등이 있다.

알고리즘을 이용한 테스트 도출
모델 기반 테스트의 효과는 주로 제공하는 자동화 가능성 때문이다. 모델이 기계 판독 가능하고 잘 정의된 동작 해석을 가질 정도로 형식적이라면, 테스트 케이스는 원칙적으로 기계적으로 도출될 수 있다.

유한 상태 기계로부터
종종 모델은 유한 상태 기계나 상태 전이 시스템으로 번역되거나 해석된다. 이 오토마톤은 테스트 대상 시스템의 가능한 구성을 나타낸다. 테스트 케이스를 찾기 위해 오토마톤에서 실행 가능한 경로를 탐색한다. 가능한 실행 경로는 테스트 케이스로 사용될 수 있다. 이 방법은 모델이 결정론적이거나 결정론적으로 변환될 수 있는 경우에 작동한다. 이러한 모델에서 지정되지 않은 전환을 활용하여 가치 있는 비정상 테스트 케이스를 얻을 수 있다.

테스트 대상 시스템과 해당 모델의 복잡성에 따라 경로의 수는 시스템의 가능한 구성이 매우 많기 때문에 매우 클 수 있다. 적절하지만 유한한 수의 경로를 커버할 수 있는 테스트 케이스를 찾으려면 선택을 안내할 테스트 기준이 필요하다. 이 기술은 모델 기반 테스트를 시작한 논문에서 오풋(Offutt)과 압두라지크(Abdurazik)가 처음 제안했다. 테스트 케이스 생성에 대한 여러 기술이 개발되었으며 러쉬비(Rushby)에 의해 조사되었다. 테스트 기준은 테스트 교과서에서 일반 그래프로 설명된다.

정리 증명
정리 증명은 원래 논리적 공식의 자동 증명에 사용되었다. 모델 기반 테스트 접근 방식의 경우, 시스템은 시스템의 동작을 지정하는 술어 집합으로 모델링된다. 테스트 케이스를 도출하기 위해 모델은 테스트 대상 시스템을 설명하는 술어 집합의 유효한 해석에 대한 동치류로 분할된다. 각 클래스는 특정 시스템 동작을 설명하므로 테스트 케이스로 사용될 수 있다. 가장 간단한 분할은 선언적 정규 형식 접근 방식이며, 여기서 시스템의 동작을 설명하는 논리적 표현식은 선언적 정규 형식으로 변환된다.

제약 논리 프로그래밍 및 기호 실행
제약 프로그래밍은 변수 집합에 대한 제약 조건을 해결함으로써 특정 제약 조건을 만족하는 테스트 케이스를 선택하는 데 사용될 수 있다. 시스템은 제약 조건으로 설명된다. 제약 조건 집합의 해결은 부울 해결기(충족 가능성 문제 기반 SAT-해결기 등) 또는 가우스 소거법과 같은 수치해석학을 통해 수행될 수 있다. 제약 조건 공식을 해결하여 찾은 솔루션은 해당 시스템의 테스트 케이스로 사용될 수 있다.

제약 프로그래밍은 기호 실행과 결합될 수 있다. 이 접근 방식에서는 시스템 모델이 기호적으로 실행된다. 즉, 다른 제어 경로에 대한 데이터 제약 조건을 수집한 다음 제약 프로그래밍 방법을 사용하여 제약 조건을 해결하고 테스트 케이스를 생성한다.

모델 검증
모델 검증기는 테스트 케이스 생성에도 사용될 수 있다. 원래 모델 검증은 사양의 속성이 모델에서 유효한지 확인하는 기술로 개발되었다. 테스트에 사용될 때, 테스트 대상 시스템의 모델과 테스트할 속성이 모델 검증기에 제공된다. 이 속성이 모델에서 유효한지 증명하는 절차 내에서 모델 검증기는 증거와 반례를 감지한다. 증거는 속성이 만족되는 경로인 반면, 반례는 모델 실행에서 속성이 위반되는 경로이다. 이러한 경로는 다시 테스트 케이스로 사용될 수 있다.

마르코프 연쇄 테스트 모델을 이용한 테스트 케이스 생성
마르코프 연쇄는 모델 기반 테스트를 처리하는 효율적인 방법이다. 마르코프 연쇄로 구현된 테스트 모델은 사용 모델로 이해될 수 있다. 이를 사용/통계 모델 기반 테스트라고 한다. 사용 모델, 즉 마르코프 연쇄는 주로 두 가지 아티팩트로 구성된다. 테스트 대상 시스템의 모든 가능한 사용 시나리오를 나타내는 유한 상태 기계(FSM)와 시스템이 통계적으로 어떻게 사용되거나 사용될 것인지를 나타내도록 FSM을 정량화하는 운영 프로필(OP)이다. 첫 번째(FSM)는 무엇을 테스트할 수 있거나 테스트했는지 아는 데 도움이 되며, 두 번째(OP)는 운영 테스트 케이스를 도출하는 데 도움이 된다.
사용/통계 모델 기반 테스트는 시스템을 철저히 테스트하는 것이 불가능하고, 매우 낮은 비율로도 오류가 발생할 수 있다는 사실에서 출발한다. 이 접근 방식은 테스트 대상 시스템의 신뢰성을 향상시키는 데 중점을 둔 테스트 케이스를 정적으로 도출하는 실용적인 방법을 제공한다. 사용/통계 모델 기반 테스트는 최근 임베디드 소프트웨어 시스템에 적용될 수 있도록 확장되었다.

 같이 보기 
 도메인 특화 언어
 도메인 특화 모델링
 모델 구동형 아키텍처
 모델 기반 개발
 객체 지향 분석 및 설계
 시간 분할 테스트

 각주 

 더 읽어보기 
OMG UML 2 Testing Profile; 

 Practical Model-Based Testing: A Tools Approach, Mark Utting and Bruno Legeard, , Morgan-Kaufmann 2007.
 Model-Based Software Testing and Analysis with C#, Jonathan Jacky, Margus Veanes, Colin Campbell, and Wolfram Schulte, , Cambridge University Press 2008.
 Model-Based Testing of Reactive Systems Advanced Lecture Series, LNCS 3472, Springer-Verlag, 2005. .

 A Systematic Review of Model Based Testing Tool Support , Muhammad Shafique, Yvan Labiche, Carleton University, Technical Report, May 2010.

 2011/2012 Model-based Testing User Survey: Results and Analysis. Robert V. Binder. System Verification Associates, February 2012

분류:소프트웨어 테스트