A. 소프트웨어 테스팅 기법은 종류가 다양한데, 그 중 많이 알려진 블랙박스 테스팅(Black-box testing) 기법과 화이트박스 테스팅(White-box testing) 기법에 관해 설명하겠습니다.
블랙박스 테스팅 기법은 소프트웨어 내부 구조에 대한 지식 없이 입력에 대한 출력만을 기준으로 소프트웨어의 기능을 테스트합니다. 이 기법은 ‘블랙박스’라는 용어에서도 알 수 있듯이, 상자 안이 어떻게 생겼는지 모른 채로 기능을 테스트하는 데 목적이 있습니다. 반면, 화이트박스 테스트 기법은 ‘화이트박스’라는 용어에서 알 수 있듯이, 상자 안이 어떻게 생겼는지 아는 상태로 내부가 어떻게 동작하는지를 테스트하는 데 목적이 있습니다.
쉽게 설명하면 블랙박스 테스트 기법은 ‘기능’ 중심으로 테스트를 수행하고, 화이트박스 테스트 기법은 내부 코드의 실행률 등 ‘로직’ 중심으로 테스트를 수행합니다. 예를 들어, 로그인 화면에서 아이디와 비밀번호를 입력했을 때, 블랙박스 테스트 기법은 “로그인 성공” 또는 “로그인 실패”라는 결과가 제대로 나오는지 확인합니다. 반면, 화이트박스 테스트 기법은 로그인 기능을 수행하는 함수의 코드 실행률 등 내부 코드를 분석합니다.
테스트 기법
구분 |
블랙박스 테스팅 |
화이트박스 테스팅 |
내부 구조 이해 |
필요 없음 |
필요함 |
테스트 기준 |
기능적 요구사항 |
코드의 논리와 실행 경로 |
테스트 목적 |
소프트웨어가 (기능적) 요구사항을 만족하는지 확인 |
프로그램의 동작이 올바른지, 코드가 제대로 실행되는지 확인 |
테스트 방법 |
입력과 출력 기반 테스트 |
코드 커버리지, 제어 흐름 분석 등 내부 코드 분석 기반 테스트 |
테스트 예시 |
로그인 기능 테스트 |
로그인 기능을 수행하는 함수의 모든 실행경로 테스트 |
테스트 종류 |
동등 분할, 경계값 분석 등 |
문장 커버리지, 조건 커버리지, 경로 커버리지 등 |
블랙박스 테스팅에 사용되는 대표적인 테스트 종류로는 동등 분할(Equivalence Partitioning), 경계값 분석(Boundary Value Analysis), 의사결정 테이블 테스트(Decision Table Testing) 등이 있습니다.
동등 분할 기법은 입력값을 다양한 동등한 그룹으로 나누고, 각 그룹의 대푯값을 선택하여 테스트하는 방법입니다. 다양한 입력 조건을 테스트함으로써 프로그램 전체를 효과적으로 검증할 수 있습니다. 예를 들어, 나이를 입력하는 프로그램이 있다고 가정하겠습니다. 0~100 사이의 입력값을 허용하는 프로그램에서 동등 분할을 사용하면 다음과 같이 그룹을 나누고 테스트값을 선정할 수 있습니다.
테스트값
그룹 |
구분 |
범위 |
테스트 값 |
그룹 1 |
미성년자 |
0 ~ 18 |
9 |
그룹 2 |
성인 |
19 ~ 64 |
42 |
그룹 3 |
노인 |
65 ~ 100 |
77 |
경계값 분석 기법은 입력값 범위의 경계에서 테스트를 수행하여 결함을 찾아내는 기법입니다. 이 기법은 입력값의 경계에서 결함이 발생할 확률이 높다는 가정하에 테스트를 수행합니다. 정수 1~100을 입력받는 프로그램에서 경계값 분석을 활용할 경우 다음과 같이 테스트값을 선정할 수 있습니다.
테스트값
경계값 |
1 |
10 |
경계값 바로 안쪽의 값 |
2 |
9 |
경계값 바로 바깥쪽의 값 |
0 |
11 |
화이트 박스 테스팅에 사용되는 대표적인 테스트 종류로는 문장 커버리지(Statement Coverage), 조건 커버리지(Condition Coverage), 경로 커버리지(Path Coverage) 등이 있습니다. 문장 커버리지 테스트는 코드의 모든 문장이 최소 한 번은 실행되는지 확인하는 기법입니다. 조건 커버리지 테스트는 조건문이 참과 거짓 두 가지의 결과를 모두 생성하는지를 확인합니다. 경로 커버리지는 코드 내 실행 가능한 모든 경로를 테스트하여 모든 분기점과 루프가 예상대로 작동하는지를 확인합니다.