//구글콘솔 광고 추가가
4.3.1.4 상태 전이 테스팅

상태 전이 테스팅 (state trasition)

 - 이벤트, 액션, 상태, 가드, 상태전이 사이의 관계를 검증.

 - 시스템/SW의 상태 기반 행위가 명세화(글자로 쓰여있던)된 내용과 일치함을 검증.

 - 상태기반 시스템의 결함은 상태, 상태전이, 가드, 이벤트 결함 등으로 분류.

 - "구현이 잘못된 경우"와 "명세가 잘못된 경우"의 결함으로 구분.

 - 모델(명세)상의 결함 -- > 인스펙션, 정적 분석으로 결함 발견.

   >> 초기 상태 누락

   >> 전이 또는 액션의 누락

   >> 가드를 "전이" 대신 상태에 표기

   >> 가드의 중복 또는 불일치

 - 구현상의 결함 -- > 테스트를 통해 결함 발견

   >> 여분/ 누락/ 훼손 상태(extra/ missing/ corrupt state)

   >> 액션이 틀리거나 누락됨

   >> 스니크 패스(sneak paths), 트랩 도어(trap doors)

      - 설계할 때 의도하지 않았으나 발생하여 정상적인 작동에 손상을 주는 경로.

  • 상태 다이어그램 표기법
구성요소 설명 표기법
상태 하나 또는 그 이상의 이벤트를 기다리는 시스템의 독립적인 모드 원으로 표기, 원안에 상태명 표시
전이 이벤트에 의해 현 상태에서 다른 상태로의 이동 또는 변경 화살표 형태의 선(link)으로 표시하며 상태와 상태를 연결함
이벤트 상태의 전이를 유발하는 요인 전이와 같이 표시하며 이벤트 이름을 표시함
(eg.ev 취소 >> 취소 이벤트)
가드 상태 전이 조건 이벤트와 함께 표시,'[ ]' 안에 조건이나 값으로 표시
(eg. ev 금액투입 [투입금액 < 가격] )
액션 상태 전이와 함께 시스템 또는 소프트웨어가 동작하는 행위나 출력 이벤트 뒤에 ' / '로 구분 후 표시
(eg. ev 음료 버튼 선택 / 잔액 반환() )

  • 상태: [대기], [금액 투입], [음료 선택]
  • [대기] 이벤트 : ev 금액투입[투입금액 < 가격], ev 금액투입[투입금액 >= 가격]
  • [금액 투입] 이벤트 : ev 취소, ev 금액투입[투입금액 >= 가격], ev 금액투입[투입금액 < 가격]
  • [음료 선택] 이벤트 : ev 취소, ev 음료버튼 선택

상태전이 테스트 케이스 절차

  1. 상태-이벤트 테이블 구성
  2. 전이 트리 구성
  3. 반응(Legal, 또는 유효(Valid)) 테스트 케이스 구성
  4. 무반응(Illegal, 또는 비유효(Invalid)) 테스트 케이스 구성
  5. 가드(Guard) 또는 조건 테스트 케이스 구성
  6. 테스트 프로시저(Test procedure) 구성

자판기로 상태전이 테스트 케이스를 알아보자.

1. 상태-이벤트 테이블

이벤트 상태 대기 금액 투입 음료 선택
ev 금액투입 [투입금액 >= 가격] 음료 선택 음료 선택  
ev 금액투입 [투입금액 < 가격] 금액 투입 금액 투입  
ev 음료버튼 선택     대기
ev 취소   대기 대기

* 동일한 이벤트지만 가드가 다르면, 서로 다른 이벤트로 구분해 상태-이벤트 테이블을 작성한다.

 

2. 전이 트리 구성

3. 반응(유효) 테스트 케이스

Valid TC 시작 상태 이벤트 액션 다음상태 이벤트 액션 종료상태
V001 대기 ev 금액 투입
[투입금액 >= 가격]
*투입금액 :1000
-
라이트 셋
음료선택 ev음료 선택 캔 방출, 잔액 반환(300), 잔량 업데이트(9), 라이트 리셋 대기
V002 대기 ev금액 투입
[투입금액 >=가격]
*투입금액:1000
-
라이트 셋
음료선택 ev 취소 투입금액반환(1000), 라이트리셋 대기
V003 대기 ev 금액 투입
[투입금액 < 가격]
*투입금액 : 500
- 금액투입 ev금액 투입
[투입금액 >= 가격]
* 투입금액:500
라이트 셋 음료 선택
V004 대기 ev 금액 투입
[투입금액 < 가격]
*투입금액 : 500
- 금액투입 ev금액 투입
[투입금액 < 가격]
*투입금액:100
  금액 투입
... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ...
V015 금액투입 ev 취소 투입금액 반환 대기 ev 금액 투입
[투입금액 >= 가격]
*투입금액 : 5000
- 음료 선택
V016 금액 투입 ev 취소 투입금액 반환 대기 ev 금액 투입
[투입금액 < 가격]
*투입금액:100
- 금액 투입

* 음료가격 700원으로 가정

 

4. 무반응(비유효) 테스트 케이스

ID 사전 조건 상태 이벤트 기대결과
IV001 V001 대기 ev 음료 버튼 선택 -
IV002 V001 대기 ev 취소 -
IV003 V004 금액 투입 ev 음료 버튼 선택 -
IV004 V003...V015 음료 선택 ev 금액투입[투입금액 >= 가격]
*투입금액 :1000
-
IV005 V003...V015 음료 선택 ev 금액투입[투입금액 < 가격]
*투입금액 : 100 
-

불가능한 상황들을 만들어서 테스트를 해보는 것.

 

5. 가드 테스트 케이스

ID 사전 조건 상태 이벤트 조건[가드] 기대결과
G001 V004 대기 ev 금액투입
* 투입금액: 100원
투입금액 = 음료가격
(투입금액= 700원)
음료 선택
G002 G001 음료 선택 ev 금액투입
* 투입금액:100원
투입금액 >= 음료가격
(투입금액= 800원)
음료 선택

* 음료가격 700원으로 가정 / 조건에 따라 기대결과가 달라짐.

 

6. 테스트 프로시저 구성  ( *가능한 겹치지 않으면서 내가 할 수 있는 모든 테스트 케이스를 만들어야 돼. )

  • TP1 = V001 -> IV001 -> IV002 -> V002 -> V003 -> V006 -> V007 -> V010
  • TP2 = V004 -> IV003 -> V011 -> V005
  • TP3 = V008 -> V009 -> V013 -> V016 -> V012
  • TP4 = V014 -> V004 -> G001 -> G002
  • TP5 = V015 -> IV004 -> IV005

 

728x90

+ Recent posts