Что такое критическая бизнес-логика в разработке ПО?

«Что такое критическая бизнес-логика в разработке ПО?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Критическая бизнес-логика — это часть программной системы, которая непосредственно реализует ключевые правила, операции или решения, определяющие ценность продукта для бизнеса. Её корректность напрямую влияет на финансовые результаты, безопасность, соответствие регуляторным требованиям или репутацию компании.

Характеристики:

  • Высокая стоимость ошибки: Сбой приводит к прямым убыткам, потере данных или юридическим рискам.
  • Ядро продукта: Реализует основную функцию, за которую платят клиенты.
  • Сложность: Часто включает множество условий, расчетов и интеграций.

Примеры:

  • Финтех: Расчет процентов, проведение транзакций, проверка санкционных списков.
  • E-commerce: Применение скидок, расчет стоимости доставки, управление остатками на складе.
  • Медицина: Расчет дозировки лекарств.
  • Авиация: Система бронирования и ценообразования.

Пример кода (упрощенный расчет платежа):

class PaymentProcessor:
    def calculate_final_amount(self, cart_amount, user_coupon, user_tier):
        """Критическая логика: расчет итоговой суммы к оплате."""
        # 1. Проверка валидности купона
        if not self.is_coupon_valid(user_coupon):
            raise InvalidCouponError()

        # 2. Применение скидки по купону
        discount = self.get_coupon_discount(user_coupon, cart_amount)
        amount_after_discount = cart_amount - discount

        # 3. Применение персональной скидки по уровню клиента
        tier_discount = self.get_tier_discount(user_tier)
        final_amount = amount_after_discount * (1 - tier_discount)

        # 4. Применение налогов (по юрисдикции)
        tax = self.calculate_tax(final_amount)
        final_amount += tax

        # 5. Проверка на минимальную сумму платежа
        if final_amount < self.MIN_PAYMENT:
            raise PaymentBelowMinimumError()

        return round(final_amount, 2)

Стратегии тестирования критической логики:

  • Глубокое модульное тестирование (Unit Testing): Покрытие всех ветвлений, граничных значений и исключительных сценариев.
  • Тестирование на основе свойств (Property-based Testing): Проверка инвариантов (например, «итоговая сумма не может быть больше исходной»).
  • Интеграционное тестирование: Проверка корректного взаимодействия с внешними системами (банки, налоговые сервисы).
  • Аудит и ревью кода: Обязательный многоступенчатый ревью изменений в таких модулях.
  • Мониторинг в продакшене: Детальный логгирование и алертинг при ошибках в этой логике.