Разработка с AI

Тестирование с AI: Генерация тестов и test cases

Писать тесты скучно. Именно поэтому их часто не пишут. AI меняет это: базовые тесты генерируются за секунды, edge cases находятся систематически - фокус смещается на сложные сценарии и бизнес-логику.

  • **Генерация тестов**: 80% boilerplate за секунды
  • **Edge cases**: AI систематически находит сценарии, которые легко упустить вручную
  • **Property-based**: AI помогает найти инварианты
  • **Анализ тестов**: Найти непокрытые сценарии и слабые assertions

Предварительные знания

  • Prompt Engineering: The Art of Asking the Right Questions

Генерация тестов с AI

Написание тестов - рутина. AI отлично справляется с генерацией базовых тестов, оставляя сложные сценарии разработчику.

**Промпт для генерации тестов:** 'Напиши unit тесты для этой функции. ``` [код функции] ``` Фреймворк: [Jest/Pytest/etc] Покрыть: - Happy path - Edge cases - Error handling'

**Проверяй сгенерированные тесты!** AI может: - Использовать неправильные assertions - Пропустить важные edge cases - Неправильно понять бизнес-логику

AI сгенерировал 10 тестов для функции. Все проходят. Что дальше?

Поиск edge cases с AI

Edge cases - это где живут баги. AI помогает систематически найти сценарии, которые легко упустить.

**Промпт для поиска edge cases:** 'Какие edge cases нужно протестировать для: ``` [код или описание функции] ``` Категории: - Граничные значения - Null/undefined/empty - Concurrent access - Large inputs - Invalid inputs'

**Категории edge cases:**

КатегорияПримеры
Границы0, 1, -1, MAX_INT, MIN_INT
Пустотаnull, undefined, '', [], {}
Типыstring вместо number, NaN, Infinity
РазмерОчень большой input, пустой input
ConcurrentПараллельные запросы, race conditions
InjectionSQL, XSS, command injection

Функция принимает массив чисел и возвращает среднее. Какой edge case критичен?

Стратегии тестирования с AI

Разные типы тестов требуют разных стратегий. AI помогает с каждым типом.

**Unit тесты:** 'Напиши unit тесты для [функция]. Мокай все зависимости. Покрой: happy path, edge cases, errors.'

**Integration тесты:** 'Напиши integration тесты для [API endpoint]. - Реальная БД (test database) - Проверь весь flow от request до response - Setup/teardown данных'

**Property-based тесты:** 'Какие properties (инварианты) должны выполняться для функции [X] при любых валидных inputs? Пример property: - reverse(reverse(list)) === list - sort(list).length === list.length'

**Когда какой тип тестов:**

  • **Unit**: Чистые функции, бизнес-логика
  • **Integration**: API endpoints, database queries
  • **E2E**: Критичные user flows
  • **Property-based**: Алгоритмы, сериализация

Тестируем функцию сортировки. Какой тип тестов наиболее эффективен?

AI для улучшения тестов

Тесты проходят - но это не значит, что они хорошие. AI помогает найти слабые места в тестах.

**Промпт для анализа тестов:** 'Вот код и тесты для него. ``` [код] ``` ``` [тесты] ``` Проанализируй: 1. Какие сценарии НЕ покрыты? 2. Какие тесты слабые (пройдут с багом в коде)? 3. Как улучшить покрытие?'

**Mutation testing mindset:** 'Если я изменю строку X в коде - какой тест упадёт?' Если ответ 'никакой' - тесты слабые.

**Признаки слабых тестов:**

  • Тесты без assertions (только 'не упало')
  • Assertions на неважные детали
  • Нет проверки side effects
  • Только happy path
  • Copy-paste тесты с одинаковой структурой

100% code coverage = хорошие тесты

Coverage показывает, какой код выполняется, не что он делает правильно

Тест без assertions даёт coverage, но не ловит баги. Важна не coverage, а качество assertions.

Тест: `expect(createUser(data)).toBeDefined()`. Что не так?

Ключевые идеи

  • **AI генерирует базовые тесты**, разработчик дополняет сложными сценариями
  • **Edge cases**: null, границы, concurrent, injection
  • **Типы тестов**: Unit, Integration, E2E, Property-based — разные цели
  • **Слабые тесты**: toBeDefined() без проверки содержимого
  • **Coverage ≠ качество**: Важны assertions, не строки

Куда дальше?

Тестирование - часть качественной разработки. Дальше:

  • Документирование с AI — Фиксация того, что тестируем и почему
  • Обучение с AI — Углубление понимания через тесты
  • Code Review с AI — Ревью тестов как часть code review

Вопросы для размышления

  • Какой процент тестов в проекте — happy path? Сколько edge cases покрыто?
  • Что находит AI при поиске edge cases для типичной функции — сколько сценариев упускается вручную?
  • Какие тесты в проекте 'слабые' (пройдут с багом)?

Связанные уроки

  • se-01
Тестирование с AI: Генерация тестов и test cases

0

1

Войти