Назад к вопросам
Middle+
73
questionbank

Что вы будете делать, если в проекте отсутствуют тесты, и заказчик не хочет тратить на их разработку время и деньги?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Я бы предпринял следующие шаги:

  • Обсудил с заказчиком риски отсутствия тестов (увеличение числа ошибок, сложность поддержки и развития, потенциальные финансовые потери из-за сбоев).
  • Предложил начать с самых критичных частей проекта, где ошибки окажутся наиболее дорогостоящими.
  • Показал на примерах, как автоматизация тестирования может ускорить разработку в будущем, снизив затраты на исправление багов.
  • Начал внедрять юнит-тесты для нового кода или при рефакторинге существующих участков. Это менее затратно и демонстрирует преимущества тестирования постепенно.
  • Предложил внедрить базовые интеграционные тесты для ключевых взаимодействий в системе.
  • Настроил CI/CD для автоматического запуска тестов при внесении изменений.
  • Вел учет найденных багов и демонстрировал, как их можно было бы предотвратить с помощью тестов.
  • Искал возможности для внедрения автоматизированных тестов на основе анализа существующего кода и его часто используемых частей при проведении других работ (например, оптимизации или доработки функционала).

Пример внедрения теста для функции, которая часто ломается:

# Оригинальная функция без тестов
def calculate_discount(price, discount_percentage):
    if discount_percentage > 100 or discount_percentage < 0:
        raise ValueError("Discount percentage invalid")
    discount = price * (discount_percentage / 100)
    return price - discount

# Добавление простого юнит-теста
import unittest

class TestDiscountCalculation(unittest.TestCase):

    def test_valid_discount(self):
        # Тест для корректного случая
        self.assertAlmostEqual(calculate_discount(100, 10), 90.0)

    def test_zero_discount(self):
        # Тест для нулевой скидки
        self.assertAlmostEqual(calculate_discount(100, 0), 100.0)

    def test_full_discount(self):
        # Тест для 100% скидки
        self.assertAlmostEqual(calculate_discount(100, 100), 0.0)

    def test_invalid_discount_negative(self):
        # Тест для отрицательной скидки (ожидаем исключение)
        with self.assertRaises(ValueError):
            calculate_discount(100, -10)

    def test_invalid_discount_too_high(self):
        # Тест для скидки выше 100% (ожидаем исключение)
        with self.assertRaises(ValueError):
            calculate_discount(100, 110)

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

Таким образом, я бы постепенно внедрял тестирование, демонстрируя заказчику его ценность на практике, даже при первоначальном нежелании инвестировать.