[QA]테스트 설계(구조기반 테스트).
[QA]테스트 설계(구조기반 테스트).
테스트 설계 기법
구조기반 테스트
구조기반 테스트는 프로그램 내부를 확인하여 문제를 찾는 방법으로, 프로그램이 정상적으로 작동하는지와 코드가 제대로 실행되는지를 확인하는 데 목적.
1. 구조기반 테스트 개요
| 항목 | 설명 |
|---|---|
| 목적 | 프로그램의 내부 구조를 기준으로 테스트를 진행하여 개발된 코드가 올바르게 작동하는지 검증 |
| 사용 | 프로그램 내부의 설계도를 보고 논리적으로 문제가 없는지 확인하는 과정 |
| 예시 | 코드의 각 부분이 빠짐없이 실행되는지, 조건에 따라 다른 경로로 진행되는지를 확인 |
2. 구조기반 테스트 유형
2.1 제어 흐름 기반 테스트
- 코드의 제어 구조를 기반으로 테스트 설계
- 모든 실행 경로가 한 번 이상 테스트되도록 보장하는 것이 목표
- 코드의 논리적 완전성을 검증하는 데 효과적이며, 조건문이 많은 시스템에 유용
(예시) ATM 인출 제한 로직 검증
1
2
3
4
if balance >= withdrawal_amount:
balance -= withdrawal_amount
else:
print("Insufficient Funds")
- 입력값:
balance=100, withdrawal_amount=50→ 정상 인출 - 입력값:
balance=30, withdrawal_amount=50→ “Insufficient Funds” 출력
2.2 데이터 흐름 기반 테스트
- 데이터 중심 시스템에서 결함을 발견하는 데 효과적
- 변수의 올바른 초기화 여부와 사용 후 예상대로 변경되었는지 확인
(예시) 할인 계산 로직 검증
1
2
3
4
discount = 0
if price > 100:
discount = price * 0.1
final_price = price - discount
- 입력값:
price=150→discount=15,final_price=135확인
2.3 코드 커버리지
- 소스코드의 실행된 부분과 실행되지 않은 부분을 측정하는 기준
- 주요 기준: Line Coverage, Branch Coverage, Path Coverage
2.3.1 Line Coverage (라인 커버리지)
- 소스 코드의 각 라인이 한 번 이상 실행되었는지 확인하는 기준
- 코드의 기본 실행 여부를 검증하며, 초기 테스트 단계에서 유용
(예시) 계산기 함수
1
2
3
4
5
def add(a, b):
return a + b
def subtract(a, b):
return a - b
- 입력값:
add(3,2)→ 출력값:5확인 - 입력값:
subtract(3,2)→ 출력값:1확인
2.3.2 Branch Coverage (분기 커버리지)
- 조건문이 포함된 코드의 모든 분기 경로를 테스트하는 기준
- 참과 거짓 두 가지 결과를 모두 테스트하여 논리적 오류를 조기에 발견 가능
- 복잡한 조건문이 포함된 시스템에서 유용함
(예시) 대출 승인 로직 검증
1
2
3
4
if credit_score > 700:
approve = True
else:
approve = False
- 입력값:
credit_score=750→approve=True - 입력값:
credit_score=650→approve=False
2.3.3 Path Coverage (경로 커버리지)
- 소스 코드의 모든 가능한 실행 경로를 검증하는 기준
- 다중 조건문과 반복문이 포함된 코드에서 모든 조합과 경로를 테스트함
- 가장 철저한 검증 방식 중 하나로, 복잡한 로직에서 유용하지만 높은 리소스와 시간이 요구됨
- 결함 발견율이 높음
(예시) 로그인 시스템 검증
1
2
3
4
if username == "admin" and password == "1234":
print("Login Successful")
else:
print("Login Failed")
- 입력값:
username="admin",password="1234"→"Login Successful" - 입력값:
username="human",password="abcd"→"Login Failed"
This post is licensed under CC BY 4.0 by the author.
