Разработка с AI
Тестирование с AI: Генерация тестов и test cases
Писать тесты скучно. Именно поэтому их часто не пишут. AI меняет это: базовые тесты генерируются за секунды, edge cases находятся систематически - фокус смещается на сложные сценарии и бизнес-логику.
- **Генерация тестов**: 80% boilerplate за секунды
- **Edge cases**: AI систематически находит сценарии, которые легко упустить вручную
- **Property-based**: AI помогает найти инварианты
- **Анализ тестов**: Найти непокрытые сценарии и слабые assertions
Предварительные знания
Генерация тестов с 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 |
| Injection | SQL, 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 для типичной функции — сколько сценариев упускается вручную?
- Какие тесты в проекте 'слабые' (пройдут с багом)?