Когда начальник требует AI, а вы хотите реальную пользу
Знакомо? Руководство прочитало очередную статью про "революцию в разработке" и теперь требует использовать AI-инструменты в каждом проекте. Но вместо ускорения получается головная боль: нейросеть генерирует код, который не компилируется, тесты падают на пустом месте, а времени на правки уходит больше, чем на написание с нуля.
Особенно обидно, когда речь идет о тестировании. QA-инженеры знают - хороший тест это не просто набор кликов. Это понимание бизнес-логики, предсказание edge-кейсов, умение работать с состоянием приложения. И вот вам спускают директиву: "Используйте AI для написания тестов". А как?
Главная проблема не в AI, а в том, как его кормят. Бросить нейросети голый промпт "напиши тест для экрана логина" - все равно что попросить новичка без контекста проекта написать production-код. Результат предсказуем.
Roo Code: не очередной AI-плагин, а система
Roo Code - это не просто генератор кода. Это инфраструктура, которая заставляет AI работать в вашем контексте. Представьте: вместо того чтобы каждый раз объяснять нейросети структуру вашего проекта, вы делаете это один раз. И дальше она "видит" ваши модули, зависимости, конфигурации.
Особенно круто это работает для Android-тестирования с Kaspresso. Почему именно Kaspresso? Потому что это уже готовый фреймворк с человекочитаемым синтаксисом. AI его понимает лучше, чем сырые Espresso-цепочки.
Что нужно, чтобы начать
Забудьте про облачные сервисы с их ограничениями. Мы будем работать локально. Вот минимальный набор:
- Android Studio (любая свежая версия)
- Модульный Android-проект (да, это важно - монолиты Roo Code не любит)
- Установленный Ollama
- Модель DeepSeek Coder (6.7B параметров хватит с головой)
- Плагин Roo Code для Android Studio
1 Ставим и настраиваем Ollama с DeepSeek
Ollama - это как Docker для LLM. Устанавливается одной командой, работает без танцев с бубном.
# Установка Ollama (Linux/Mac)
curl -fsSL https://ollama.ai/install.sh | sh
# Скачиваем DeepSeek Coder
ollama pull deepseek-coder:6.7b
# Проверяем, что работает
ollama run deepseek-coder:6.7b "print('hello')"
Почему DeepSeek, а не CodeLlama или StarCoder? DeepSeek Coder отлично понимает Kotlin и специфику Android-разработки. И главное - он бесплатный и локальный. Если ваш проект требует особой безопасности, как в случае "бетонной стены", этот вариант вас спасет.
2 Подготавливаем проект для Roo Code
Здесь большинство спотыкаются. Roo Code не волшебная палочка - он должен понимать структуру вашего проекта. Сделайте три вещи:
- Убедитесь, что у вас модульная структура (app, features, core модули)
- В корне проекта создайте файл
roo-code-context.md - Опишите в нем ключевые моменты архитектуры
Вот как выглядит минимальный контекстный файл:
# Контекст проекта для Roo Code
## Архитектура
- Много модулей: app, features/auth, features/home, core/network
- Используем Clean Architecture с UseCase
- Навигация через Navigation Component
## Тестирование
- UI тесты: Kaspresso
- Моковые данные: MockK
- Конвенции именования: "ScreenNameTest"
- Все тесты в папке androidTest соответствующего модуля
## Особенности
- Экран логина: LoginFragment, ViewModel обрабатывает состояние
- Основной экран: BottomNavigation с 4 табами
- Сеть: Retrofit с interceptors для логирования
Этот файл - ваша страховка от глупых вопросов AI. Без него нейросеть будет гадать, как у вас организована навигация или где лежат моки.
Чем детальнее контекст - тем точнее код. Добавьте примеры существующих тестов, константы, которые используете, даже названия пакетов. AI учится на примерах, которые вы ему даете.
3 Устанавливаем и настраиваем Roo Code плагин
В Android Studio идем в Settings → Plugins → Marketplace, ищем "Roo Code". После установки нужно настроить подключение к Ollama:
// В настройках Roo Code:
{
"modelProvider": "Ollama",
"baseUrl": "http://localhost:11434",
"model": "deepseek-coder:6.7b",
"temperature": 0.2, // Низкая температура для предсказуемого кода
"maxTokens": 4000
}
Temperature 0.2 - это важно. Выше - и AI начнет "творить", генерируя странные конструкции. Нам нужен консервативный, предсказуемый код.
Промпты, которые реально работают
Теперь главное - как общаться с AI, чтобы получать рабочие тесты. Забудьте про "напиши тест для логина". Вот промпты, которые дают результат:
| Плохой промпт | Хороший промпт | Почему |
|---|---|---|
| Напиши тест для логина | Создай Kaspresso тест для LoginFragment. Учитывай: email и password поля, кнопка Login, состояния загрузки. Тест должен проверять успешный логин с моковыми данными и показ ошибки при невалидных данных | Конкретика + бизнес-логика |
| Протестируй список | Напиши тест для FeedFragment с RecyclerView. Тест должен: 1) Проверить отображение 10 моковых items 2) Скроллить до последнего элемента 3) Кликнуть на первый элемент и проверить навигацию на DetailScreen | Пошаговые инструкции + ожидаемые действия |
Но и это не все. Самый мощный прием - давать AI примеры. Откройте существующий тест в проекте, выделите его, и в промпте напишите:
На основе этого стиля тестирования создай тест для SettingsFragment.
Должны быть проверены:
- Переключение toggle "Уведомления"
- Выбор языка из списка
- Клик на "О приложении" с переходом
Используй такие же моки и структуру как в примере.
AI скопирует стиль, naming conventions, подход к мокам. Получится код, который выглядит так, будто его писали вы.
Реальный кейс: 20 минут вместо 4 часов
Вот что произошло на одном из проектов. Нужно было покрыть тестами новый модуль "Оплата" с 5 экранами:
- Выбор способа оплаты
- Ввод данных карты
- Подтверждение
- Успешная оплата
- Ошибка
Вручную - минимум 4 часа работы. С Roo Code процесс выглядел так:
1 Подготовка контекста (5 минут)
Дописали в roo-code-context.md информацию о новом модуле:
## Модуль payment
- Экран PaymentMethodFragment: список способов (карта, PayPal, applePay)
- CardInputFragment: поля номера, срока, CVV
- PaymentViewModel обрабатывает валидацию
- После успеха - навигация на SuccessFragment
- При ошибке - showErrorDialog
2 Генерация первого теста (3 минуты)
Промпт:
Создай Kaspresso тест для PaymentMethodFragment.
Требования:
- Проверить отображение 3 способов оплаты
- Клик на "Карта" должен вести на CardInputFragment
- Использовать моковые данные из PaymentTestData
- Добавить проверку заголовка экрана
- Структура как в других тестах features/
Roo Code сгенерировал 95% готового теста. Осталось поправить импорты и запустить.
3 Масштабирование (10 минут)
Для следующих тестов использовали технику "цепочки". После генерации первого теста, выделили его и написали:
Теперь создай тест для CardInputFragment в том же стиле.
Добавь:
- Ввод валидного номера карты
- Проверку кнопки "Оплатить" (активна только при валидных данных)
- Мок успешного ответа от PaymentRepository
- Проверку навигации на SuccessFragment
AI уже понимал контекст, стиль, используемые моки. Каждый следующий тест генерировался быстрее.
Ошибки, которые вас подстерегают (и как их избежать)
Даже с отличными промптами AI иногда выдает странные вещи. Вот что я видел:
Ошибка 1: AI "забывает" про контекст Activity. Генерирует тесты, которые запускаются напрямую на Fragment, но у вас в проекте используется FragmentScenario. Решение - явно указать в промпте: "Используй FragmentScenario для запуска теста, как в других тестах модуля".
Ошибка 2: Слишком умные wait-условия. AI иногда добавляет кастомные ожидания типа device.waitFor(5000) вместо использования Kaspresso until. Решение - попросить переписать: "Используй стандартные conditions Kaspresso вместо Thread.sleep".
Ошибка 3: Моки не того типа. DeepSeek может перепутать MockK с Mockito или создать моки не тех классов. Решение - дать конкретный пример мока в контексте проекта.
Самая опасная ошибка - когда тест проходит, но проверяет не то. AI может сгенерировать проверку isDisplayed() вместо проверки конкретного текста или состояния. Здесь поможет только code review. Никогда не доверяйте AI на 100%.
Когда Roo Code не поможет
Бывают ситуации, где AI бесполезен. И это нужно признать:
- Сложная бизнес-логика: Если для написания теста нужно глубокое понимание доменной области, AI не справится. Он не понимает, почему "статус заказа не может измениться с 'отменен' на 'в обработке'".
- Тестирование производительности: Нагрузочные тесты, проверка memory leaks - здесь AI пока слаб.
- Интеграционные тесты: Сложные сценарии с несколькими системами, моками внешних API.
Но для 80% рутинных UI-тестов - выбор способа оплаты, заполнение форм, навигация - Roo Code сокращает время в 3-4 раза. И это уже не "обязательная AI-активность", а реальный инструмент.
А что насчет качества?
Самый частый вопрос: "Тесты от AI ведь хуже, чем написанные вручную?". Отвечу так: плохой тест, написанный человеком, ничем не лучше плохого теста от AI. И наоборот.
Разница в процессе. Человек пишет тест, думая о покрытии edge-кейсов. AI пишет тест, основываясь на паттернах, которые видит в вашем коде. Дайте ему хорошие примеры - получите хорошие тесты.
Более того, AI иногда предлагает интересные подходы. Видел, как DeepSeek предлагал использовать DataBindingIdlingResource для тестов с Data Binding - подход, который я раньше не использовал. Учиться можно не только у людей.
Используйте Roo Code не как замену, а как усилитель. Вы думаете о тест-кейсах, бизнес-логике, edge-случаях. AI превращает это в код. Такое разделение труда работает.
Что дальше?
Roo Code - только начало. Скоро появятся инструменты, которые смогут:
- Анализировать coverage сгенерированных тестов и предлагать дополнения
- Генерировать тесты на основе анализа кода приложения (а не только по промптам)
- Создавать тест-сьюты для регрессионного тестирования после каждого коммита
Но уже сейчас можно перестать воспринимать "обязательное использование AI" как обузу. Превратить его в конкурентное преимущество. Особенно если вспомнить, что скоро вопрос замены специалистов AI станет еще острее.
Начните с одного модуля. Настройте контекст. Сгенерируйте несколько тестов. Увидите - через неделю вы не только выполните требование руководства, но и получите реальную выгоду. А ваши тесты перестанут быть головной болью и станут тем, чем должны быть - страховкой от регрессий.
И помните: лучший AI-инструмент не тот, который пишет за вас код, а тот, который заставляет вас думать на уровень выше. Roo Code как раз из таких.