Анализ граничных значений: методы и примеры кода для эффективного тестирования

Анализ граничных значений (BVA) — это метод тестирования программного обеспечения, используемый для определения тестовых примеров на основе границ входных значений. Он направлен на выявление ошибок, которые происходят на границах или вблизи них, а не в пределах диапазона допустимых входных данных. BVA обычно используется как при ручном, так и при автоматизированном тестировании, чтобы расширить охват тестированием и повысить вероятность обнаружения дефектов.

Вот несколько методов, которые можно использовать для анализа граничных значений, а также примеры кода на Python:

  1. Разделение по эквивалентности:

    • Разделите входной домен на эквивалентные разделы.
    • Выберите репрезентативные значения из каждого раздела.
    • Проверьте граничные значения каждого раздела.

    Пример:

    def calculate_grade(score):
       if score >= 90:
           return "A"
       elif score >= 80:
           return "B"
       elif score >= 70:
           return "C"
       elif score >= 60:
           return "D"
       else:
           return "F"
    # Boundary values for the partition [0-100]
    print(calculate_grade(59))  # Expected output: "F"
    print(calculate_grade(60))  # Expected output: "D"
    print(calculate_grade(89))  # Expected output: "B"
  2. Анализ границ:

    • Определите границы входного домена.
    • Выберите тестовые примеры, находящиеся в пределах этих границ или сразу за ними.

    Пример:

    def is_triangle(side1, side2, side3):
       if side1 <= 0 or side2 <= 0 or side3 <= 0:
           return False
       elif side1 + side2 <= side3 or side1 + side3 <= side2 or side2 + side3 <= side1:
           return False
       else:
           return True
    # Boundary values for side lengths
    print(is_triangle(0, 2, 3))   # Expected output: False
    print(is_triangle(1, 2, 3))   # Expected output: True
    print(is_triangle(2, 2, 5))   # Expected output: False
    print(is_triangle(3, 4, 5))   # Expected output: True
  3. Индивидуальное тестирование:

    • Проверьте значения, находящиеся чуть ниже и чуть выше границ.

    Пример:

    def is_leap_year(year):
       if year % 400 == 0:
           return True
       elif year % 100 == 0:
           return False
       elif year % 4 == 0:
           return True
       else:
           return False
    # Off-by-one values
    print(is_leap_year(1999))  # Expected output: False
    print(is_leap_year(2000))  # Expected output: True
    print(is_leap_year(2001))  # Expected output: False
  4. Тестирование надежности:

    • Проверьте значения, выходящие далеко за границы.

    Пример:

    def calculate_discount(price):
       if price >= 100:
           discount = price * 0.2
       elif price >= 50:
           discount = price * 0.1
       else:
           discount = 0
       return price - discount
    # Robustness testing values
    print(calculate_discount(-10))   # Expected output: -10
    print(calculate_discount(150))   # Expected output: 120
    print(calculate_discount(30))    # Expected output: 30