회귀 테스트 (Regression Test)#
회귀 테스트는 소프트웨어의 변경이나 수정 후에 기존 기능이 여전히 올바르게 작동하는지 확인하는 테스트이다.
온라인 쇼핑몰의 회귀 테스트 예시:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| import unittest
from shopping_mall import ShoppingCart, Product, User
class ShoppingMallRegressionTest(unittest.TestCase):
def setUp(self):
"""테스트 준비: 필요한 객체들을 초기화합니다."""
self.cart = ShoppingCart()
self.user = User("test_user")
self.product = Product("노트북", 1000000)
def test_existing_cart_functionality(self):
"""장바구니 기능 회귀 테스트
장바구니 할인 기능이 추가된 후에도 기존 장바구니 기능들이
정상적으로 작동하는지 확인합니다.
"""
# 상품 추가 테스트
self.cart.add_item(self.product)
self.assertEqual(len(self.cart.items), 1)
# 상품 제거 테스트
self.cart.remove_item(self.product)
self.assertEqual(len(self.cart.items), 0)
# 금액 계산 테스트
self.cart.add_item(self.product, quantity=2)
self.assertEqual(self.cart.total_price, 2000000)
def test_new_discount_feature(self):
"""새로운 할인 기능 테스트
새로 추가된 할인 기능이 기존 가격 계산 로직을
망가뜨리지 않는지 확인합니다.
"""
# 기본 가격 계산
self.cart.add_item(self.product)
base_price = self.cart.total_price
# 할인 적용
self.cart.apply_discount(10) # 10% 할인
# 할인된 가격 확인
expected_price = base_price * 0.9
self.assertEqual(self.cart.total_price, expected_price)
# 할인 제거 후 원래 가격으로 복원되는지 확인
self.cart.remove_discount()
self.assertEqual(self.cart.total_price, base_price)
|
특징과 목적#
회귀 테스트의 주요 특징과 목적은 다음과 같다:
- 변경 영향 확인: 새로운 기능이나 수정사항이 기존 기능에 미치는 영향을 파악한다.
- 버그 재발 방지: 이전에 수정된 버그가 다시 나타나지 않는지 확인한다.
- 품질 유지: 소프트웨어의 전반적인 품질을 유지한다.
테스트 범위#
회귀 테스트는 다음과 같은 범위를 포함한다:
- 수정된 코드
- 수정과 관련된 기능
- 핵심 기능
- 자주 사용되는 기능
수행 시점#
회귀 테스트는 주로 다음과 같은 시점에 수행된다:
- 새로운 기능 추가 후
- 버그 수정 후
- 성능 개선 후
- 환경 변경 시 (예: 운영체제 업데이트)
검증 대상#
주요 검증 대상은 다음과 같다:
- 기존 기능의 정상 작동 여부
- 새로운 기능과 기존 기능의 상호작용
- 성능 및 안정성
회귀 테스트의 종류#
- 전체 회귀 테스트: 모든 테스트 케이스를 다시 실행한다.
- 부분 회귀 테스트: 변경된 부분과 관련된 테스트만 실행한다.
- 선택적 회귀 테스트: 중요도에 따라 선별된 테스트를 실행한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| class RegressionTestTypes:
def retest_all(self):
"""전체 재테스트
모든 테스트 케이스를 다시 실행합니다.
"""
all_tests = [
self.test_user_authentication(),
self.test_product_management(),
self.test_order_processing(),
self.test_payment_system()
]
return all(all_tests)
def selective_regression(self, modified_modules):
"""선택적 회귀 테스트
변경된 모듈과 관련된 테스트만 실행합니다.
"""
test_map = {
'user': self.test_user_authentication,
'product': self.test_product_management,
'order': self.test_order_processing,
'payment': self.test_payment_system
}
for module in modified_modules:
if module in test_map:
test_map[module]()
|
진행 방식#
회귀 테스트는 다음과 같은 단계로 진행된다:
- 테스트 케이스 선택: 변경 사항과 관련된 테스트 케이스를 선택한다.
- 테스트 환경 준비: 테스트를 위한 환경을 설정한다.
- 테스트 실행: 선택된 테스트 케이스를 실행한다.
- 결과 분석: 테스트 결과를 분석하고 문제점을 식별한다.
- 버그 수정 및 재테스트: 발견된 문제를 수정하고 다시 테스트한다.
회귀 테스트를 효과적으로 수행하기 위한 중요한 고려사항들#
- 테스트 케이스 선정 모든 테스트를 실행하는 것이 이상적이지만, 시간과 리소스의 제약이 있을 때는 중요도와 영향도를 고려하여 테스트 케이스를 선정해야 한다.
- 자동화의 중요성 회귀 테스트는 반복적으로 수행되어야 하므로, 가능한 한 많은 테스트를 자동화하는 것이 효율적이다.
- 테스트 결과의 추적 이전 테스트 결과와의 비교를 통해 성능 저하나 새로운 문제점을 발견할 수 있어야 한다.
온라인 쇼핑몰 애플리케이션을 예로 들어보면:
- 새로운 결제 방식(예: 암호화폐)을 추가했다고 가정해보자.
- 회귀 테스트에서는 다음을 확인한다:
- 새로운 결제 방식이 제대로 작동하는지
- 기존 결제 방식(신용카드, 계좌이체 등)이 여전히 정상 작동하는지
- 주문 처리, 재고 관리 등 관련 기능에 문제가 없는지
- 전체 시스템의 성능이 저하되지 않았는지
이러한 회귀 테스트를 통해 새로운 기능 추가로 인한 예상치 못한 문제를 사전에 발견하고 수정할 수 있다.
참고 및 출처#