상태 전이 테스팅을 통해 테스트를 설계하는 방법에 대해 다뤄보겠습니다.
시스템의 현재 상황(Conditions)과 이전의 이력(History)을 반영하는 상태(States) 및 그 변화(Transition)에 따라 다르게 동작함을 상태 전이 다이어그램을 통해 표현할 수 있다. 상태 전이 다이어그램을 통해 테스트 엔지니어는 소프트웨어 또는 시스템을 상태 사이의 관계. 즉, 상태 간의 전이, 상태를 변화시키는 이벤트와 입력값, 상태의 변화로 유발되는 동작 등으로 파악한다.
[상태 전이 다이어그램 표기법]
[상태 전이 다이어그램이 존재할때 테스트 설계 방법]
상태 전이 다이어그램을 이용한 테스트 설계 방법을 알아보기 위해서, 2018 CTFL 샘플 문제 C에 있는 상태 전이 다이어그램을 가져왔습니다.
1. 상태-이벤트 테이블 구성
상태 다이어그램의 모든 상태와 이벤트를 테이블로 구성하면 아래와같다. 이때, 모든 상태와 이벤트를 테이블에 그 관계를 표현한다는 것은 상태 전이 커버리지를 달성하는 모든 '전이'를 테이블의 셀에 나타내는 것을 의미한다. 즉, 해당 이벤트에 의해 해당 상태가 다른 상태로 전이되는 모든 경우를 표현하는 것이다.
2. 전이 트리 구성
상태가 전이되는 경로를 찾아 테스트 케이스를 구성하기 위해 상태-이벤트 테이블을 트리 형태로 전환한다. 이때 전이 트리는 상태-이벤트 테이블에서 상태가 이벤트에 의해 전이되는 내용을 모두 포함하게 된다.
각 상태에서 전이 가능한 상태로 "한 번씩" 전이 되는 경우를 모두 테스트하면 0-switch 커버리지를 달성하게 되고, "두 번씩"연속으로 전이될 경우를 모두 테스트하면 1-switch 커버리지를 달성한다. 이와 같이, 달성하는 스위치 커버리지의 수가 높아질수록 테스트가 커버하는 깊이 레벨이 더 높아 지므로 더 강도 높은 테스트를 하게 된다.
N번째 전이되는 경우를 모두 테스트하면 상태 전이 테스팅의 N-1 Switch 커버리지를 달성함.
3. 반응 (Legal, 또는 유효(Valid)) 테스트 케이스 구성
전이 트리에서 상태가 이벤트에 의해 전이되는 모든 경로를 테스트 케이스로 전환해보면 다음과 같다.
4. 무반응 (Illegal, 또는 유효(Invalid)) 테스트 케이스 구성
반응 테스트 케이스가 이벤트에 의해 동작하는 반응을 보이는 부분을 표현한 것이라면, 무반응 테스트 케이스는 상태-이벤트 테이블의 빗금 친 부분에 해당하며, 아무 반응을 보이지 않는다.
5. 가드(Guard) 또는 조건 테스트 케이스 구성
가드 또는 조건 테스트 케이스는 이벤트가 조건을 포함하고 해당 조건에 따라 기대 결과가 달라지는 경우일 경우, 이것을 반영한 테스트 케이스이다.
가드의 조건이 동등 분할, 경계값 분석 기법을 적용할 수 있고, 가드가 복잡한 조건문으로 구성되어 있으면 컨디션 커버리지를 달성하는 테스트 케이스를 추가하거나, MC/DC 테스팅을 할 수 있다.
6. 테스트 프로시저(Test procedure) 구성
테스트 프로시저는 테스트의 실행 순서를 나타낸 것으로 테스트 케이스를 순차적으로 나열한 것이다. 테스트 프로시저를 기술한 문서를 테스트 프로시저 명세라고 하며, 테스트 스크립트 또는 수동 테스트 스크립트라고 한다.
테스트 프로시저가 주는 장점은 테스트 실행의 효율성을 높여주는 것 외에도, 테스트 프로시저를 통해 연속된 상태 전이를 이어서 테스트할 수 있으므로 제한적이기는 하지만 테스트 프로시저로 실행된 부분에 대해서는 더 강도 높은 테스트 레벨을 커버할 수 있다.
위의 상태 전이 다이어그램에서 각 테스트가 시작 상태인 '고객 대기'에서 시작하여 다시 시작 상태로 돌아오면 끝난다고 가정한다면 총 4개의 테스트가 필요하다.
TP1 = 유효하지 않은 신용카드 삽입
TP2 = 연료유형선택대기에서 취소 또는 타임아웃
TP3 = 주유준비에서 취소 또는 타임아웃
TP4 = 성공적으로 주유하는 경로
이상, 상태 전이 테스팅을 이용한 테스트 케이스를 구하는 방법을 정리해보았습니다.
제 나름대로 상태 전이 테스팅을 전체적으로 정리해보았는데, 혹시 틀린 부분이나 더 보완해야 할 내용이 있다면 추가 의견 주시면 참고해서 수정하겠습니다.
'ISTQB 공부 > CTFL' 카테고리의 다른 글
7. 테스트 지원 도구 (0) | 2020.12.16 |
---|---|
6. 테스트 관리 (0) | 2020.12.11 |
4. 테스트 설계 기법 (0) | 2020.11.26 |
3. 정적 기법 (0) | 2020.11.19 |
2. 소프트웨어 수명주기와 테스팅 (0) | 2020.11.16 |
댓글