기능 테스트 (Functional 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
import unittest
from shopping_cart import ShoppingCart
from product import Product

class TestShoppingCartFunctionality(unittest.TestCase):
    def setUp(self):
        """테스트 준비: 장바구니와 상품 객체 생성"""
        self.cart = ShoppingCart()
        self.product1 = Product("노트북", 1000000, "전자기기")
        self.product2 = Product("마우스", 50000, "전자기기")

    def test_add_item_to_cart(self):
        """상품 추가 기능 테스트"""
        # 상품을 장바구니에 추가
        self.cart.add_item(self.product1, 1)
        
        # 장바구니에 상품이 정확히 들어갔는지 확인
        self.assertEqual(self.cart.item_count, 1)
        self.assertEqual(self.cart.total_price, 1000000)

    def test_remove_item_from_cart(self):
        """상품 제거 기능 테스트"""
        # 상품을 장바구니에 먼저 추가
        self.cart.add_item(self.product1, 1)
        
        # 상품 제거
        self.cart.remove_item(self.product1)
        
        # 장바구니가 비어있는지 확인
        self.assertEqual(self.cart.item_count, 0)
        self.assertEqual(self.cart.total_price, 0)

    def test_update_item_quantity(self):
        """상품 수량 변경 기능 테스트"""
        # 상품 추가 후 수량 변경
        self.cart.add_item(self.product1, 1)
        self.cart.update_quantity(self.product1, 2)
        
        # 수량과 총 가격이 올바르게 변경되었는지 확인
        self.assertEqual(self.cart.get_item_quantity(self.product1), 2)
        self.assertEqual(self.cart.total_price, 2000000)

특징과 목적

  1. 사용자 중심: 실제 사용자의 관점에서 소프트웨어를 테스트한다.
  2. 요구사항 검증: 소프트웨어가 명세된 요구사항을 충족하는지 확인한다.
  3. 결함 발견: 소프트웨어의 기능적 오류를 찾아낸다.
  4. 품질 보증: 소프트웨어의 전반적인 품질을 향상시킨다.

테스트 범위

기능 테스트는 끝(브라우저)에서 끝(데이터베이스)까지 모든 구성 요소를 논리적으로 완전한 하나의 기능으로 다룬다.
이는 사용자 인터페이스부터 백엔드 시스템까지 전체 애플리케이션 스택을 포함한다.

수행 시점

기능 테스트는 소프트웨어 개발 주기의 여러 단계에서 수행될 수 있지만, 주로 시스템 테스트 단계와 인수 테스트 단계에서 중점적으로 이루어진다.

검증 대상

  1. 사용자 인터페이스 (UI)
  2. 비즈니스 로직
  3. 데이터베이스 연동
  4. 외부 시스템과의 통합

기능 테스트의 종류

  1. 단위 테스트: 개별 모듈이나 컴포넌트의 기능을 테스트한다.
  2. 통합 테스트: 여러 모듈이 연동되어 작동하는 기능을 테스트한다.
  3. 시스템 테스트: 전체 시스템의 기능을 테스트한다.
  4. 인수 테스트: 사용자의 요구사항 충족 여부를 최종적으로 확인한다.

진행 방식

  1. 테스트 계획 수립: 테스트할 기능과 범위를 정의한다.
  2. 테스트 케이스 작성: 각 기능에 대한 구체적인 테스트 시나리오를 개발한다.
  3. 테스트 환경 구축: 실제 사용 환경과 유사한 테스트 환경을 준비한다.
  4. 테스트 실행: 계획된 테스트 케이스에 따라 테스트를 수행한다.
  5. 결과 분석 및 보고: 발견된 문제점을 기록하고 개발팀에 전달한다.

기능 테스트 작성 시 중요한 점들

  1. 테스트 범위 설정 모든 주요 기능과 예외 상황을 포함해야 한다.
  2. 테스트 데이터 준비 다양한 시나리오를 커버할 수 있는 테스트 데이터를 준비한다.
  3. 자동화 고려 반복적인 테스트를 자동화하여 효율성을 높인다.

예시

온라인 쇼핑몰 애플리케이션의 기능 테스트를 예로 들어보자:

  1. 사용자 등록 기능: 새로운 사용자가 계정을 만들 수 있는지 테스트한다.
  2. 로그인 기능: 등록된 사용자가 로그인할 수 있는지 확인한다.
  3. 상품 검색 기능: 다양한 검색어로 상품을 찾을 수 있는지 테스트한다.
  4. 장바구니 기능: 상품을 장바구니에 추가하고 수량을 변경할 수 있는지 확인한다.
  5. 결제 프로세스: 주문부터 결제 완료까지의 전체 과정이 올바르게 작동하는지 테스트한다.

각 기능에 대해 여러 가지 시나리오를 만들어 테스트한다.
예를 들어, 로그인 기능의 경우:


참고 및 출처