[SW테스팅-실습]동등분할 이론과 실습 (Equivalence Partitioning)

ACAI BERRY DEVELOVER·2023년 8월 20일
0

❖ 동등분할 테스팅 이론

  • 특정 파티션의 모든 변수는 동일한 방식으로 처리된다는 가정하에 동등클래스(partition)에 데이터를 분할한다.
  • 유효값, 비유효값 모두에 대해 동등 분할을 구성할 수 있다.
  • 동등 분할은 블랙박스 테스트 기법(명세기반기법)이며 동적테스팅에 속한다.
    (명세기반기법엔 경계값 분석, 동등분할, 결정 테이블, 상태전이가 포함됨)
  • 입력/출력 영역을 유한개의 상호 독립적인 집합으로 구분 관리한다.
  • 입력/출력 영역의 데이터를 유사 특징을 가진 클래스로 분류해 각 클래스의 대표 테스트 케이스를 도출한다.
  • 가급적 중복을 피하고 효율적인 테스트 케이스를 만드는 것이 좋다.
  • 동일한 입력에 대해서는 항상 동일한 결과를 가지고 오도록 클래스를 구분한다.
  • 적용방법 :
    ❶ 주어진 시스템 정보(명세서)를 분석하여 입력 영역(도메인)을 유사한 특징을 가진 클래스로 분할
    ❷ 분할된 클래스에서 각 클래스를 대표하는 테스트케이스 도출
    ❸ 모든 유효가 커버될 때까지 테스트케이스를 생성
    ❹ 모든 비유효가 커버될 때까지 테스트케이스를 생성

❖ 동등분할 테스팅 실습

다음은 동부여성발전센터에서 이현주 강사님과 함께한 SW테스트 전문가 과정 실무에서 나온 동등분할 실습 사례이다.

► '사용료 계산 기능' 개발 요구사항

  • 신규 이용자 나이가 13살 이상이어야 함.
  • 이용자 나이가 25세 이상이거나 일일 사용시간이 3시간 이상인 경우는 1만원의 사용료를 지불 해야 하며, 그렇지 않은 경우 5천원의 사용료를 지불해야함.
  • 또한 구독기간이 2개월 미만이면 2천원 추가 지불을 해야함.

동등분할 기법을 이용해 테스트 케이스를 만들어본다.

우선 입력 영역과 출력 영역의 클래스를 작성해본다.

입력 클래스는 총 9개이다.

나이 A,B,C 그룹, 아이디 중복여부 네/아니오 그룹, 구독기간 2개월이상/미만 그룹, 사용료 3시간 이상/미만해서 총 9개이다.

출력 클래스:
N/A, 5,000원, 10,000원, 7,000원, 12,000원해서 5개 클래스가 구성된다.

처음에 나는 출력영역, 입력영역을 먼저 정의해놓지 않고, 요구사항을 일일히(?) 따져서 표로 만들었다.

<1차 실습 내용 : 테스트 케이스 테이블 >


보시다시피 모든 나이에 대해 테스트 케이스를 만들었고, 수형도 마냥 모든 경우의 수를 커버하려고 했다.
동등분할이란 개념은 이해했는데 테스트케이스를 만들때 각 대표값만 있으면 된다는 걸 몰랐나보다. 그러니까 12부터 -1일까지 나이값을 저렇게 주르륵 썼지...

동등분할은 특정 파티션에 있는 모든 변수의 값은 동일한 방식으로 처리되며 각 분할 값에서 최소 한 개의 값을 사용해야 한다.즉 대표값 하나로 테스트케이스를 도출한다.
또한 출력 클래스를 미리 정하지 않았다. 출력 클래스값을 정의하고 테스트케이스 테이블을 만들었다면 좀 더 효율적으로 TC 테이블을 만들 수 있었을 것이다.

<2차 실습내용 : 테스트 케이스 테이블>

강사님의 설명을 들으며 테스트케이스를 다시 도출했는데 강사님의 것과 내것이 많이 다르다...잉?
나는 "이용자 나이가 25세 이상이거나 일일 사용시간이 3시간 이상인 경우는 1만원의 사용료를 지불 해야 하며, 그렇지 않은 경우 5천원의 사용료를 지불해야함." 이 요구사항에서 나이가 25세이상이고 사용시간이 3시간이면 20,000원이 부과된다고 해석했다. 하지만 다시 분석해보니 "AND"가 아니라 "OR"이다.

25세 이상이면 10,000원 내는 거고, 사용시간이 3시간이면 10,000원이다. 쨋든 20,000원이 부과되지는 않는 다는 소리?...(바보라 사실 아직도 좀 애매하다)

그리하여 테스트케이스는 다음과 같이 결론지어진다.

<실습3 : 테스트 케이스 테이블>

모든 입력 파티션이 커버되었다.

⍰ 여기서 드는 의문 ....

  • 여기서 각 사용료는 출력 동등분할 클래스이다. 이게 여기서는 기대결과값인가?

  • 입력 파티션을 모두 커버해야 하는 것처럼 출력 파티션도 모두 커버해야하는 게 맞는 걸까?

  • 테스트케이스 수는 출력 동등분할 클래스 수와 동일해야 하나?

  • 비유효값은 여기서 아이디 중복값과 가입나이제한(13세미만안됨)뿐일까? 그거말곤 여기선 전부 유효한 동등분할 클래스 인거 같은데 더이상의 비유효한 클래스는 없나...?(있는데 안한 거겠지...?)

  • 사용료에 대해서는 각 한개씩만의 테스트케이스가 나와야 하는 것일까?

  • 각 테스트케이스는 의미있는 데이터인가?

내일 강사님에게 여쭈어봐야겠다...

profile
쓸때 대충 쓰지 말고! 공부하면서 써!

0개의 댓글