01.소프트웨어공학/Testing
동등 클래스 분할(ECP, Equivalence Class Partitioning)
임똘
2010. 1. 14. 08:45
ECP(Equivalence Class Partitioning) 기법은 테스터가 기능의 각 파라미터에 대해 입력 변수와 출력 변수를 평가하는 간단한 툴이다.
ECP 테스트를 설계하기 전 각 입력/출력에 대한 변수 데이터를 각기 유효한 클래스와 유효하지 않은 클래스로 분할하고 모델링하는 작업을 반드시 수행해야 한다. 모든 유효한 클래스의 서브셋이 테스트에서 모두 사용될 때까지 유효한 클래스 서브셋을 생성하고, 그 후 유효하지 않은 클래스 서브셋을 구함으로써 ECP 테스트를 도출한다.
ECP 기법의 장점은 다음과 같다.
첫째, 가능한 모든 테스트 경우의 수에서 테스트의 수를 줄여준다. 그리고 같은 서브셋의 다른 변수와 변수 조합에 있어서도 동일한 결과를 리턴하는 것을 보장한다.
둘째, 테스트 데이터로 사용되는 서브셋에서 임의로 데이터를 선택함으로써 효과적으로 데이터 커버리지(data coverage)를 확보할 수 있다는 점이다. 이와 같은 서브셋에 속한 테스트 데이터는 유효하거나 유효하지 않은 클래스 서브셋에 속하는 어떤 것이든 같은 테스트 결과를 도출하기 때문이다. 단, 데이터가 올바르게 각 서브셋으로 분할되어 있고 예외적인 상황을 발생시키는 부분이 없다는 전제가 있다.
ECP의 전반적인 효과는 변수 데이터의 파라미터를 정확히 서브셋으로 분할하는 테스터의 능력에 좌우된다. 각 서브셋은 논리적으로 같은 기대 결과를 도출해야 한다.
변수 데이터를 동등 클래스 분할 서브셋으로 모델링하는 것은 주어진 시스템에 대한 이해를 바탕으로 한다. 테스터가 시스템이나 도메인에 대한 지식이 제한적일수록 이 기법을 적용하는 것이 정확하지 않을 확률이 커지며, 치명적인 결함을 놓치고 불필요한 테스트를 수행하게 될 확률이 커진다.
변수 데이터 분할
동등 분할의 가장 어려운 점은 데이터를 동등한 특질을 갖는 유효 서브셋과 유효하지 않은 서브셋으로 분할하는 것이다. 따라서 테스터는 다양한 데이터 형식에 익숙해져야 하고, 프로그램과 시스템이 데이터를 처리하고 변경하고 전달하고 저장하는 방법을 이해해야 한다. 또한, 일반적인 입력 변수를 이해하고 기존에 문제가 있던 변수, 즉 실패 식별자(failure indicator)를 검토해야 한다. 또한, 사용자 프로파일, 명세서, 요구사항 등 외부 요소도 고려해야 한다.
지나치게 일반화된 불충분한 분할은 특정 클래스의 서브셋을 제외할 수 있으며, 이로 인해 오류를 놓치기 쉽다. 변수 데이터가 동등한 특질을 갖지 않는 서브셋으로 과도하게 분할되는 것은 불필요한 테스트의 수를 증가시킨다.
이런 테스트는 추가적인 오류를 찾지 못하고 필요한 정보를 제공할 확률을 낮춘다.
테스터는 불필요한 테스트를 작성하게 될 수도 있으므로 신중을 기해야 한다. 그러나 지나치게 테스트 데이터를 일반화해 중용한 문제를 놓친다면 이에 대한 비용이 더 커진다. 동등 분할이라는 데이터 분할 기법을 효과적으로 수행하려면 시스템과 도메인에 대한 충분한 이해가 있어야 한다.
먼저 데이터를 두 클래스로 분할한다. 유효한 클래스 데이터는 일반적인 상황에 대해 적절한 값을 반환하는 값의 집합이다. 즉, 데이터는 오류를 생성하거나 예측하지 못한 실패를 일으키지 않는다. 유효하지 않는 클래스 데이터는 오류 상황을 유발할 수 있는 값의 집합이다. 대부분의 오류 상황은 오류 처리기에 의해 처리되지만 종종 부적절한 클래스 데이터는 잘못된 동작이나 장애를 유발하기도 한다.
데이터를 유효한 클래스와 유효하지 않은 클래스로 분류하고 나면 테스트는 각 클래스에 대한 데이터를 주의 깊게 분석해야 한다. 그리고 클래스가 더 작은 서브셋으로 분리될 수 있는지도 분석해야 한다. 본질적으로 클래스의 유효성 여부와는 관계없이 같은 서브셋에 속한 데이터는 테스트 시 같은 결과를 도출해야 한다.
글랜포드 마이어스는 'The Art of Software Testing(소프트웨어 테스팅의 기술)'이라는 책에서 데이터를 각 클래스의 서브셋으로 나누는 방법에 대한 4가지 탐색적인 접근 방법을 제시한다. 4가지 탐색적 방법은 의사 결정, 분쟁의 조정, 문제 해결을 위해 경험에 근거한 가이드와 원칙, 룰을 제공한다. 그리고 유효한 클래스와 유효하지 않은 클래스의 테스트 데이터를 서브셋으로 나누기 위해 값의 범위, 유사한 값의 그룹, 특이(unique) 값, 특정 값을 사용할 수 있게 한다.
1. 범위
- 같은 결과를 가져오는 최소 경계 값과 최대 경계 값을 나타내는 인접한 데이터 셋. 예를 들어 숫자 필드에는 1~999의 정수 값을 입력할 수 있다. 이때 유효한 클래스는 1 이상 999 이하이고 유효하지 않은 클래스는 1보다 작거나 999보다 큰 범위의 정수 값을 포함한다.
2. 그룹
- 동일하게 처리되는 아이템의 그룹이나 집합. 예를 들어 세금 부과시 트럭, 승용차, 오토바이, 모터 홈(motor home), 트레일러 같이 운송 수단의 종류에 따라 세금을 부과할 수 있게 참조하는 목록 등이 있다. 트럭, 승용차, 모터 홈이 동일한 세금으로 분류되면 해당 아이템 그룹은 동등한 것으로 간주한다.
3. 특이 값
- 하나의 클래스 데이터나 서브셋은 다른 클래스 데이터나 서브셋과는 달리 처리해야 하는 경우가 있다. 예를 들어 2038년 1월 19일 3시 14분 7초는 바이오스 클록에서 생성하는 애플리케이션의 유일한 날짜이다. 따라서 해당 데이터는 다른 서브셋과 구분돼야 한다.
4. 특정 값
- 특정 값은 반드시 고려돼야 한다. 예를 들어 단순 메일 전송 프로토콜(SMTP, Simple Mail Transfer Protocol)에서 @는 특별한 문자로 이메일 이름이나 도메인 이름으로 사용될 수 없다.