화이트박스 테스팅 기법 종류와 코드

Serendipity·2023년 10월 31일
0

2023 LeSN

목록 보기
35/52

화이트박스 테스팅 기법

화이트박스 테스팅은 소프트웨어의 내부 구조와 작동 원리를 분석하여 테스팅을 수행하는 방법입니다. 여기에는 여러 가지 테스팅 기법이 포함되며, 각 기법은 특정한 목적과 접근 방식을 가지고 있습니다. 아래에 몇 가지 주요 화이트박스 테스팅 기법에 대해 설명합니다:

  1. 기초 경로 검사 (Base Path Testing):

    • 목적: 프로그램이 기본적으로 어떻게 동작하는지 확인합니다.

    • 설명: 이 방법은 프로그램이 기본적으로 어떻게 동작하는지 확인하기 위해 사용됩니다.

    • 코드 예제:

      def base_path():
          print("안녕하세요! 나는 기본 경로를 실행하고 있어요.")
      
      # 함수 호출
      base_path()
  2. 제어 구조 검사 (Control Structure Testing):

    a. 조건 검사 (Condition Testing):

    • 목적: 조건(참 또는 거짓)에 따라 코드가 올바르게 동작하는지 확인합니다.

    • 설명: 이 방법은 if문 같은 조건문이 제대로 동작하는지 확인하기 위해 사용됩니다.

    • 코드 예제:

      def condition_test(x):
          if x > 0:
              print("x는 양수에요!")
          else:
              print("x는 양수가 아니에요.")
      
      # 함수 호출
      condition_test(5)  # x는 양수에요!
      condition_test(-5)  # x는 양수가 아니에요.

    b. 루프 검사 (Loop Testing):

    • 목적: 반복문이 올바르게 동작하는지 확인합니다.

    • 설명: 이 방법은 for 또는 while 같은 반복문이 제대로 동작하는지 확인하기 위해 사용됩니다.

    • 코드 예제:

      def loop_test():
          for i in range(3):
              print(f"반복 번호: {i}")
      
      # 함수 호출
      loop_test()  # 반복 번호: 0, 반복 번호: 1, 반복 번호: 2

    c. 데이터 흐름 검사 (Data Flow Testing):

    • 목적: 변수가 올바르게 사용되는지 확인합니다.

    • 설명: 이 방법은 변수가 올바르게 정의되고, 사용되는지 확인하기 위해 사용됩니다.

    • 코드 예제:

      def data_flow_test(x):
          if x > 0:
              message = "x는 양수에요!"
          else:
              message = "x는 양수가 아니에요."
          print(message)
      
      # 함수 호출
      data_flow_test(5)  # x는 양수에요!
      data_flow_test(-5)  # x는 양수가 아니에요.

이렇게 각 테스팅 기법을 사용하면 프로그램의 다양한 부분을 검사하고, 문제가 있는지 찾아볼 수 있습니다.


화이트 박스 테스팅 기법

화이트 박스 테스팅 기법들은 프로그램의 코드를 통해 오류를 찾아내는 방법들입니다. 각 기법에 대한 개념과 파이썬 코드 예제를 더 간단하고 구체적으로 설명하겠습니다.

  1. 문장 검증 기준 (Statement Coverage):

    • 목적: 코드의 모든 문장이 최소 한 번씩 실행되는지 확인합니다.
    • 코드 예제:
    def check_number(x):
        if x > 0:
            print("x는 양수입니다.")
        print("문장 검증 완료.")
    
    # 테스트 호출
    check_number(5)
  2. 분기 검증 기준 (Branch Coverage):

    • 목적: 코드의 모든 분기(조건문의 참/거짓)가 최소 한 번씩 실행되는지 확인합니다.
    • 코드 예제:
    def check_number(x):
        if x > 0:
            print("x는 양수입니다.")
        else:
            print("x는 양수가 아닙니다.")
    
    # 테스트 호출
    check_number(5)
    check_number(-5)
  3. 조건 검증 기준 (Condition Coverage):

    • 목적: 조건문 내의 각 조건이 참과 거짓을 모두 평가하는지 확인합니다.
    • 코드 예제:
    def check_condition(x, y):
        if x > 0 and y > 0:
            print("x와 y 모두 양수입니다.")
    
    # 테스트 호출
    check_condition(5, 10)
    check_condition(-5, 10)
  4. 분기/조건 검증 기준 (Branch/Condition Coverage):

    • 목적: 코드의 모든 분기와 조건문의 참/거짓이 모두 평가되는지 확인합니다.
    • 코드 예제:
    def check_branch_condition(x, y):
        if x > 0 or y > 0:
            print("x 또는 y 중 적어도 하나는 양수입니다.")
    
    # 테스트 호출
    check_branch_condition(5, 10)
    check_branch_condition(-5, 10)
  5. 다중 조건 검증 기준 (Multiple Condition Coverage):

    • 목적: 조건문 내의 모든 가능한 조건 조합이 평가되는지 확인합니다.
    • 코드 예제:
    def check_multiple_conditions(x, y, z):
        if (x > 0 and y > 0) or z > 0:
            print("조건들 중 적어도 하나는 참입니다.")
    
    # 테스트 호출
    check_multiple_conditions(5, 10, -5)
    check_multiple_conditions(-5, -10, 5)
  6. 기본 경로 테스트 (Basic Path Test):

    • 목적: 프로그램의 기본 실행 경로를 테스트하며, 이를 통해 프로그램의 기본적인 동작을 검증합니다.
    • 코드 예제:
    def basic_path():
        for i in range(3):
            print(f"기본 경로 테스트: {i}")
    
    # 테스트 호출
    basic_path()

이렇게 각 테스팅 기법에 따라 프로그램의 코드를 테스트하면, 코드의 오류를 찾아내고 프로그램의 정확성과 신뢰성을 높일 수 있습니다.

profile
I'm an graduate student majoring in Computer Engineering at Inha University. I'm interested in Machine learning developing frameworks, Formal verification, and Concurrency.

0개의 댓글