소프트웨어 개발 및 설계

단위 테스트(Unit Test)와 통합 테스트(Integration Test) : 예시코드

♠디지털 모험일지♠ 2024. 12. 13. 10:33
728x90
반응형
SMALL

단위 테스트(Unit Test)와 통합 테스트(Integration Test)

소프트웨어 개발에서 테스트는 프로그램이 잘 작동하는지 확인하는 중요한 단계입니다. 여기에서 많이 쓰이는 두 가지 테스트 종류를 살펴볼게요.


1. 단위 테스트(Unit Test)

  • 단위 테스트란?
    • 프로그램의 작은 단위(한 함수나 메서드)가 예상대로 동작하는지 확인하는 테스트입니다.
    • 단위 테스트는 "작은 조각"을 확인하는 데 초점이 맞춰져 있어서 독립적으로 수행됩니다.
  • 왜 필요한가요?
    • 코드가 잘 작동하는지 빠르게 확인할 수 있습니다.
    • 문제가 생기면 바로 해당 부분을 고칠 수 있습니다.
  • 쉬운 예로 비유하면?
    • 컴퓨터 키보드의 한 키(예: A)가 제대로 눌리는지 테스트하는 것과 비슷합니다. 한 번에 키보드 전체를 테스트하지 않고, A키 하나만 확인합니다.

예시 코드 (Python)

# 테스트할 코드: 간단한 계산기 함수
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

# 단위 테스트
import unittest

class TestCalculator(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)  # 2 + 3 = 5
        self.assertEqual(add(-1, 1), 0)  # -1 + 1 = 0

    def test_subtract(self):
        self.assertEqual(subtract(5, 3), 2)  # 5 - 3 = 2
        self.assertEqual(subtract(0, 5), -5)  # 0 - 5 = -5

if __name__ == '__main__':
    unittest.main()

설명

  1. addsubtract 함수는 각각 더하기와 빼기를 수행합니다.

  2. TestCalculator

    테스트 클래스

    입니다.

    • test_addtest_subtract는 각각 함수가 올바르게 작동하는지 확인합니다.
  3. 테스트를 실행하면 함수가 예상대로 작동하는지 결과를 알려줍니다.


2. 통합 테스트(Integration Test)

  • 통합 테스트란?
    • 여러 개의 작은 단위(함수, 모듈)를 합쳤을 때 잘 작동하는지 확인하는 테스트입니다.
    • 서로 연결된 부분들이 문제가 없는지 확인합니다.
  • 왜 필요한가요?
    • 단위 테스트를 모두 통과했더라도, 여러 부분이 합쳐지면 예상치 못한 문제가 생길 수 있습니다.
    • 예를 들어, A 함수는 잘 작동하고, B 함수도 잘 작동하지만, 두 함수를 함께 사용하면 오류가 날 수 있습니다.
  • 쉬운 예로 비유하면?
    • 컴퓨터 키보드의 모든 키를 합쳐서 "전체 키보드"가 잘 작동하는지 테스트하는 것과 비슷합니다.

예시 코드 (Python)

# 테스트할 코드: 간단한 사용자 인증 시스템
def login(username, password):
    if username == "admin" and password == "1234":
        return "Login successful"
    return "Login failed"

def access_dashboard(user_role):
    if user_role == "admin":
        return "Access granted"
    return "Access denied"

# 통합 테스트
def test_integration():
    # Step 1: 로그인 테스트
    login_result = login("admin", "1234")
    assert login_result == "Login successful", "Login failed when it should have succeeded"

    # Step 2: 대시보드 접근 테스트 (로그인 성공 후)
    dashboard_result = access_dashboard("admin")
    assert dashboard_result == "Access granted", "Admin access failed when it should have succeeded"

# 실행
if __name__ == '__main__':
    try:
        test_integration()
        print("Integration test passed!")
    except AssertionError as e:
        print(f"Integration test failed: {e}")

설명

  1. login 함수는 로그인 기능을 제공합니다.

  2. access_dashboard 함수는 사용자가 관리자(admin)인지 확인하고 대시보드에 접근을 허용합니다.

  3. 통합 테스트 과정

    :

    • 먼저, 로그인 테스트(login)를 실행합니다.
    • 로그인 성공 결과를 바탕으로 대시보드 접근 테스트(access_dashboard)를 실행합니다.
    • 모든 과정이 문제없이 진행되면 테스트가 성공했다고 판단합니다.

단위 테스트 vs 통합 테스트

구분 단위 테스트(Unit Test) 통합 테스트(Integration Test)
테스트 범위 하나의 함수/메서드 여러 함수/모듈의 조합
목적 작은 단위가 올바르게 동작하는지 확인 여러 단위가 함께 잘 동작하는지 확인
문제 발견 시 특정 코드 조각의 문제를 쉽게 찾을 수 있음 어떤 조합에서 문제가 발생했는지 확인
실행 속도 빠름 상대적으로 느림
비유 키보드의 A키 하나 테스트 키보드 전체 테스트

결론

단위 테스트와 통합 테스트는 각각 다른 목적을 가지고 있습니다.

  • 단위 테스트는 코드를 작게 나눠서 문제를 빠르게 찾는 데 유리합니다.
  • 통합 테스트는 전체 시스템이 올바르게 작동하는지 확인하는 데 중요합니다.

두 테스트를 함께 사용하면, 코드 품질을 높이고 예상치 못한 문제를 줄일 수 있습니다!

반응형
SMALL

'소프트웨어 개발 및 설계' 카테고리의 다른 글

테스트 자동화 : 예시 코드  (0) 2024.12.13
소프트웨어 설계 원칙  (0) 2024.12.05
소프트웨어 개발 방법론  (0) 2024.12.05