본문 바로가기
정보처리/소프트웨어개발

애플리케이션 테스트 관리 테스트 케이스 설계 3/4

by 피갓자 2025. 4. 30.

애플리케이션 테스트 관리 테스트 케이스 설계
애플리케이션 테스트 관리 테스트 케이스 설계

애플리케이션 테스트 케이스 작성

동적 테스트

화이트박스 테스트(구조 기반 테스트)

  • 각 응용 프로그램의 내부 구조와 동작을 검사하는 소프트웨어 테스트
  • 구조 기반 테스트, 코드 기반 테스트, 로직 기반 테스트, 글래스(Glass) 박스 테스트라고도 부름

기본 구문

  • 제어 흐름 그래프는 프로그램 구조를 효과적으로 나타낼 수 있는 도구
  • 화이트박스 테스트 시에 우선 프로그램을 기본 블록과 제어 흐름으로 구성된 제어 흐름 그래프를 그린 후에 테스트 케이스를 추출
  • 가장 좋은 화이트박스 테스트는 프로그램의 모든 경로를 최소한 한 번은 테스트하는 방법이지만, 프로그램 경로가 많으므로 불가능에 가까움
  • 대안으로 일부 경로만 테스트하는 방법을 화이트박스 테스트에서는 주로 사용하고 있음

테스트 커버리지 개념

  • 프로그램의 테스트 수행 정도를 나타내는 값으로 테스트 수행의 완벽성을 측정하는 도구
  • 주어진 테스트 케이스에 의해 수행되는 소프트웨어의 테스트 범위를 측정하는 테스트 품질 측정 기준
  • 테스트의 정확성과 신뢰성을 향상하는 역할을 함

테스트 커버리지 유형

능 기반 커버리지

  • 테스트 대상 애플리케이션의 전체 기능을 모수로 설정하고, 실제 테스트가 수행된 기능의 수를 측정하는 방법
  • 100% 달성을 목표로 하며, 일반적으로 UI가 많은 시스템의 경우 화면 수를 모수로 사용

인 커버리지

  • 애플리케이션 전체 소스 코드의 라인 수를 모수로 테스트 시나리오가 수행한 소스 코드의 라인 수를 측정하는 방법
  • 단위 테스트에서는 이 라인 커버리지를 척도로 삼음

드 커버리지

  • 소프트웨어 테스트 충분성 지표 중 하나
  • 소스 코드의 구문, 조건, 결정 등의 구조 코드 자체가 얼마나 테스트 되었는지를 측정하는 방법
  • 일반적으로 테스트 커버리지라고 하면 코드 커버리지를 일컬음

테스트 커버리지의 구성

  • 구문(문장, Statement), 결정(Decision), 조건(Condition), 결정 포인트(Decision Point)로 구성
  • 소스 코드는 구문(문장)으로 구성되어 있고, 조건문에 대한 결정이 있고, 결정에 대한 각 조건식이 있음
  • 참과 거짓에 대한 결정 포인트(분기 노드)가 있는데, 소스 코드상의 if, while, for, switch 문이 결정 포인트라고 할 수 있음
  • 전체 조건식은 소스 코드에서 결정 포인트(분기 노드) 내에 있는 모든 조건문이고, 개별 조건식은 전체 조건식에 연산자(AND, OR 등)로 구분한 각각의 조건식임

구문(문장) 커버리지(Statement Coverage)

  • 프로그램 내의 모든 명령문을 적어도 한 번 수행하는 테스트 커버리지
  • 조건문 결과와 관계없이 구문 실행 개수로 계산

결정 커버리지(Decision Coverage)

  • (각 분기의) 결정 포인트 내의 전체 조건식이 적어도 한 번은 참(T)과 거짓(F)의 결과를 수행하는 테스트 커버리지
  • 선택 커버리지(Decision Coverage), 분기 커버리지(Branch Coverage)라고도 함
  • 구문 커버리지를 포함함

조건 커버리지(Condition Coverage)

  • (각 분기의) 결정 포인트 내의 개별 조건식이 적어도 한 번은 참(T)과 거짓(F)의 결과가 되도록 수행하는 테스트 커버리지(전체 조건식의 영향은 고려하지 않음)

블랙박스 테스트(명세 기반 테스트)

  • 프로그램 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트(기능 테스트)
  • 모든 종류의 소프트웨어 시스템에 대해 테스트가 가능
  • 전체 소프트웨어 테스트 레벨(단위, 통합, 시스템, 인수)에서 적용할 수 있는 기법

동등 분할 테스트(Equivalence Partitioning Testing)

  • 입력 데이터의 영역을 유사한 도메인별로 유효값/무효값을 그룹핑하여 대푯값 테스트 케이스를 도출하여 테스트하는 기법
  • 동치 분할 테스트, 균등 분할 테스트, 동치 클래스 분해 테스트라고도 부름

경곗값 분석 테스트(Boundary Value Analysis Testing)

경곗값 분석 테스트 개념

  • 등가 분할 후 경곗값 부분에서 오류 발생 확률이 높기 때문에 경곗값을 포함하여 테스트 케이스를 설계하여 테스트하는 기법
  • 최솟값 바로 위, 최대치 바로 아래 등 입력값의 극한 한계를 테스트하는 기법
  • 한곗값 테스트라고도 부름

경곗값 분석 테스트 특징

  • 다수의 오류가 입력 영역의 경계에서 발생
  • 대부분의 경우 동등 분할 테스트와 함께 사용

경곗값 선택 기준

  • 값의 범위 : 범위의 끝에 속하는 유효 입력값, 범위 바로 바깥에 속하는 유효하지 않은 입력값
  • 몇 개의 값 : 입력값의 최솟값과 최댓값, 최솟값과 최댓값의 바로 아래와 바로 위의 값
  • 파일, 리스트, 테이블과 같은 정렬된 집합 형태 : 첫 번째 항목과 마지막 항목
  • 그 외 : 개인의 독창성과 직관에 따라 경계에 해당하는 여러 값 선택

경곗값 선택 방법

2-value

  • 경계에 있는 값
  • 바로 위, 아래 중 하나의 값(경계가 유효하면 유효하지 않은 값, 유효하지 않으면 유효한 값 선택)

3-value

  • 경계에 있는 값
  • 경계 바로 위의 값
  • 경계 바로 아래의 값

결정 테이블 테스트(Decision Table Testing)

  • 요구사항의 논리와 발생 조건을 테이블 형태로 나열하여, 조건과 행위를 모두 조합하여 테스트하는 기법
  • 입력 조건은 모든 조합에 대한 시스템의 액션을 고려하여 테스트 케이스를 도출하는 기법
  • 특징으로는 복잡한 논리적 관계를 표현하기 좋고, 누락된 요구사항 검사에 용이

상태 전이 테스트(State Transition Testing)

  • 테스트 대상/시스템이나 객체의 상태를 구분하고, 이벤트에 의해 어느 한 상태에서 다른 상태로 전이되는 경우의 수를 수행하는 테스트 기법
  • 시스템을 상태 전이도로 모델링 한 후 상태 전이도에서 테스트 케이스를 도출하는 기법
  • 상태 전이도는 시스템 외부에서 들어오는 일련의 이벤트들에 대해 시스템 상태가 어떻게 전이되고 어떤 식으로 반응하는가를 나타내는 도구

유스케이스 테스트(Use Case Testing)

  • 시스템이 실제 사용되는 유스케이스로 모델링 되어 있을 때 프로세스 흐름을 기반으로 테스트 케이스를 명세화하여 수행하는 테스트 기법

분류 트리 테스트(Classification Tree Method Testing)

  • SW의 일부 또는 전체를 트리 구조로 분석 및 표현하여 테스트 케이스를 설계하여 테스트하는 기법
  • 시스템 또는 SW의 입력 및 동작을 다양한 기준으로 구분한 트리를 이용해서 테스트 케이스를 설계
  • 동등 분할 영역을 구분하는 것과 유사하며, 동등 분할 테스트 커버리지 측정 원리와 동일

페어와이즈 테스트(Pairwise Testing)

  • 테스트 데이터값 간에 최소한 한 번씩을 조합하는 방식이며, 이는 커버해야 할 기능적 범위를 모든 조합에 비해 상대적으로 적은 양의 테스트 세트를 구성하기 위한 테스트 기법
  • 대부분의 결함이 두 입력값의 상호 작용에 기인하므로, 가능한 모든 입력값의 조합을 테스트한 것과 비슷한 효과를 얻음
  • 상대적으로 적은 양의 테스트 세트 구성이 용이하고, 입력 변수 개수와 입력 가능 값이 많을수록 테스트 케이스 도출 복잡도가 높음

경험 기반 테스트

  • 유사 소프트웨어나 유사 기술 평가에서 테스터의 경험을 토대로 한, 직관과 기술 능력을 기반으로 수행하는 테스트 기법

경험 기반 테스트 유형

탐색적 테스트(Exploratory Test)

  • 테스트 스크립트 또는 테스트 케이스를 문서로 작성하지 않고 경험에 바탕을 두고 탐색적으로 기능을 수행해 보면서 테스트하는 기법
  • 사전에 구체적으로 테스트 케이스를 설계하고 이를 바탕으로 테스트를 수행하는 방식이 아니라, 테스트 대상에 대한 이해, 테스트 케이스 설계, 테스트 실행을 병행하는 방식
  • 무작위 테스팅이 아닌 중대한 테스트 위주, 테스트 엔지니어의 휴리스틱(Heuristics)한 능력 필요, 제품을 익히면서 테스트를 설계하고 테스트 수행
  • 구성요소는 테스트 차터(Test Charter), 시간 제한(Time Boxing), 노트(Note), 회고(Debriefing)

오류 추정(Error Guessing)

  • 개발자가 범할 수 있는 실수를 추정하고 이에 따른 결함이 검출되도록 테스트 케이스를 설계하여 테스트하는 기법
  • 특정 테스트 대상이 주어지면 테스터의 경험과 직관을 바탕으로 개발자가 범할 수 있는 실수를 나열하고, 해당 실수에 따른 결함을 노출하는 테스트 수행
  • 일반적으로 예상되지 않는 상황이 사용자 입력값으로 적절히 처리되고 있는지 확인할 때 유용
  • 필수 입력, 입력 항목의 길이, 입력 항목의 형식, 입력값의 명시적 제약사항, 입력값의 묵시적 제약사항 등을 확인할 때 유용