본문 바로가기
IT 기본개념

구조기반(Structure-Based Technique) 테스트

by 라이프해커 김탁구 2022. 12. 19.
반응형

1. 구조기반 테스트(화이트박스 테스트) 정의

구조 기반(화이트박스) 테스팅은 아래 예시와 같이 소프트웨어나 시스템의 구조(Structure)를 중심으로 테스팅하는 것으로, 컴포넌트나 시스템 내부구조의 분석에 기반하여 테스트 케이스를 도출하는 SW 테스트 기법이라고 할 수 있습니다.
 - 컴포넌트 레벨의 구조는 구문(Statement), 결정(Decision) 또는 분기문(Branch) 등 코드 그 자체입니다.
 - 통합 레벨의 구조는 한 모듈이 다른 모듈을 호출하는 관계를 도식화한 콜 트리(Call tree) 등입니다.
 - 시스템 레벨의 구조는 메뉴 구조, 비즈니스 프로세스 혹은 웹페이지 구조 등입니다.

 

2. 구조기반 테스트의 특징

개발자 입장에서 보면 코드 내부구조의 효율성을 높일 수 있고, 동적인 테스트를 진행할 수 있습니다. 또한 Coverage 제공으로 오류를 발견하고, 순환 복잡도(테스트 수 상한성)를 제공할 수 있습니다. 시스템 또는 소프트웨어의 구조가 테스트 스위트에 의해 테스트된 정도를 커버리지(Coverage)라 하며, 특정 구조의 종류에 대해 커버된 백분율로 표시합니다. 예를 들어, 100% 결정 커버리지를 달성했다는 것은 코드의 구조 중 모든 결정 포인트(Decision points) 내의 전체 조건식이 참 값과 거짓 값 모두를 갖도록 테스트가 되었다는 것을 의미합니다. 만일 해당 커버리지가 100%가 아니라면, 누락된 부분을 테스트하기 위해 더 많은 테스트 케이스를 설계하여 커버리지를 높일 수 있습니다.
 코드의 구조를 테스트하는 기법은 일반적으로 특정 커버리지를 달성하기 위한 테스트를 설계하고 테스트 케이스를 도출하기 위해 사용됩니다. 명세기반 테스트 기법과는 달리 코드를 기반으로 한 테스트 기법과 커버리지와의 관계는 어느 정도 명확합니다. 예를 들어, 제어 흐름 테스트(Control flow test) 기법을 적용한 코드에 대해서는 구문 커버리지(Statement Coverage), 결정 커버리지(Decision Coverage) 등을 달성하고, 최소 비교 테스트(Elementary comparison test) 기법을 통해 변경 조건/결정 커버리지(MC/DC)를 달성합니다.

명세 기반 기법과 코드 구조 커버리지와의 관계를 살펴보면, 명세 기반 기법은 기법 자체가 보장하는 범위가 있어 "기법이름" + "커버리지"를 갖습니다. 그러나 코드 구조 관련 커버리지와는 관계가 명확하지 않습니다. 예를 들어, 결정 테이블 테스트(Decision table test) 기법의 경우, 기법을 적용한 부분에 대하여 결정 커버리지의 많은 부분을 달성합니다. 그러나 결정 테이블 테스트가 요구사항/분석 문서나 상위 레벨의 설계서 등 명세를 기반으로 적용될 경우, 해당 코드 구조의 얼마나 많은 부분을 테스트하는지는 별도로 코드를 분석해 보아야만 합니다.

 

3. 구조기반 테스트 종류

1) Basis Path Testing

- 프로그램의 논리적 복잡도(사이클로매틱) 측정 후, 복잡도 결과에 기반한 테스트 케이스 설계기법
- 복잡도 = 노드 경로 방향 수 – 노드 수 + 2
- 논리적 흐름도 작성 -> 논리적 복잡도 계산 -> 수행경로에 따른 테스트 케이스 설계
2) Loop Test

- 프로그램의 루프 구조에 대한 테스트로, 초기값 결함, 증감 결함, 경계 결함 식별에 중점
- 단순 루프 : 루프의 증감에 의한 테스트
- 중첩 루프 : 가장 안쪽의 단순한 루프부터 테스트
- 연결 루프 : 독립적 루프 구조로, 단순한 루프부터 테스트
- 비구조적 루프 : 소스의 구조화 후, 루프 테스트 적용
3) Branch Converage Testing

- 최소한 한 번은 참이나 거짓 결과를 가지는 모든 결정 즉, 모든 분기문을 테스트할 수 있는 테스트 케이스를 선정
- if count > 7 then statement → 7보다 큰 경우
Else if count → between 3 and 7 
Else statement → 3보다 작은 경우
4) Data Flow Testing

- 프로그램 내에서 변수들이 값으로 할당받은 지점이나 사용된 지점에 따라 프로그램의 테스트 경로들을 선택하는 방법
5) Mutation Test

- 프로그램 P에 오류를 인위적으로 추가하여 만든 프로그램 M을 이용하여 P와 차별화 할 수 있는 테스트 데이터를 선정하여 테스팅을 수행하는 기법
- 임의 테스트 데이터가 프로그램 P와 M에 서로 상이한 결과를 나타낼 경우, 테스트 데이터로 선택

 

4. 명세기반 기법과 구조기반 기법 비교

구분 명세기반 테스트 구조기반 테스트
목적 데이터, 입출력위주 프로그램 내부의 논리구조 위주
개념 PGM외부명세(기능,I/F)로부터 직접 테스트(Data, I/O위주 테스트) 프로그램 내부 로직을 참조하면서 모든 경로를 테스트
관점 사용자 관점 개발자 관점
점검대상 시작, 종료, 인터페이스 결함
자료구조 및 성능 결함
Loop, Decision 결함
수행안되는 Statement
기법 동등분할, 경계값분석, 오류예측기법 루프, 구조 테스트 기법
활용분야 베타테스트 알파테스트

 

5. 구조기반 테스트의 고려사항 및 활용

- 테스트 설계 : 초기 고객 요구 사항으로부터 설계 어려움
- 테스트 커버리지 측정 : 목표 커버리지 달성 위한 케이스 도출
- SW 구현정보(코드,설계) 기반 : 분석 장시간 소요 우려
- 컴포넌트 레벨(구문,결정,분기문 테스트), 통합 레벨(모듈 간 호출 관계 테스트), 시스템 레벨(메뉴, 비즈니스 프로세스, 웹페이지 구조 테스트)

반응형

댓글