Слады для выступления на GDG DevFest Бишкек, 2014.
https://plus.google.com/events/cgschph5k60ua1ldq0b06i3o3r8
Выступление сделано по книжке "Как тестируют в Google"
3. Зачем тестируют в Гугле
Зачем вообще тестировать?
Зачем пишут об этом книжки, зачем поднимать вопрос?
Тестирование больше чем программирование
Регрессионное тестирование: после каждого изменения
нужно убедится, что ПО всё еще работает.
Масштабы Гугла
- несколько сотен продуктов и сервисов
- тысячи программистов
- 20 коммитов в минуту!
4. Подход Гугла к качеству
Тестирование не создает качество
Невозможно навешать качество как обертку. Качество
следствие инженерных практик.
Делайте все правильно с самого начала
Перестаньте рассматривать разработку и тестирование
по отдельности. Тестирование и разработка идут рука
об руку.
Роковые ошибки Гугла
см. стр. 279 (русское издание)
Тестировщики стали костылём для программистов.
(технический нигилизм)
5. Подход Гугла к качеству
Правильный подход к написанию кода
Чистый код, code review
Правильная среда разработки
Минимум вариаций, однообразный стандартизованный
подход,
Автоматизация тестирования и не только
Непрерывная сборка
Поощрение стремления к качеству
Забота о качестве кода и качестве тестов –
ответственность всех разработчиков.
Культура жрет стандарты на завтрак
7. Кто тестирует в Гугле?
Разработчики ПО (Software Engineer)
TDD, интегральные тесты, приемочные тесты
Разработчик-тестировщик
(Software Engineer in Test)
Создает среду для автоматического тестирования,
помогает разработчику ПО. (пишет код)
Не подчиняются директору направления
Работают на разработчика ПО.
Инженер-тестировщик (Test Engineer)
Создание плана тестов, методология тестирования,
работает на пользователя (тоже пишет код)
8. Классификация тестов
Малые
Типа unit-tests, одна функция
Средние
Взаимодействие функций, классов
Большие
Пользовательские сценарии, use cases
Огоромные
Весть продукт и взаимодействие продуктов
9. Сертификация проектов
Уровень 1): CI, классификация тестов, smoke-тесты
Уровень 2): прогон тестов перед коммитом, покрытие
50% и 10% малыми, одна фича покрыта
Уровень 3): новые важные фичи покрыты, 50%
малыми тестами, все нетривиальные дефекты
покрываются.
Уровень 4): смоук-тесты < 30 мин и запускаются
перед коммитом автоматически, все важные фичи
покрыты
Уровень 5): анализ, покрытие не менее 60% (40%
малыми)
10. CI в Гугле
20 коммитов в минуту
Все тесты прогонять нереально
Прогонять тесты выборочно
Запускаются только те тесты, которые относятся к
изменениям.
Тесты прогоняются в облаке
Среда запуска тестов позволяет запускать тесты
параллельно.
Нам это тоже доступно
11. Планирование тестирования
100% покрытие экономически невыгодно
(шатл!) Тестировать то, что больше всего нужно
пользователям.
ACC-анализ
Attribute Component Capability
Анализ рисков
Обычные технические и деловые риски.
Вероятность * ущерб
План тестов за 10 минут
За 10 мин можно написать план на 80% рисков.
12. Инструменты
Selenium Webdriver
Родились в Thought Works и переехали в Google
Проект и был начат и вырос на реальных задачах
Buganizer
Bug-tracker, который Гугл под себя сделал
Browser Integrated Test Environment
Создание дефектов из приложения
13. Как тестируют в Гугле?
Также, как и в любой хорошо организованной
компании.
Никакой магии. Надо делать так, как говорят мировые
методологи.
Автоматизировать тесты не сложно
Это такая-же задача, как и другие задачи разработки
ПО. И решаются они в порядке заботы о пользователе и
заказчике.
Нет времени? Нет времени на что?
Это тупая отмазка. Скорость работы в TDD такая-же,
как и без него или даже быстрее. Переучиваться долго.
Editor's Notes
Цитата:
Фраза «тестирование не определяет качество» уже настолько избита, что просто обязана быть правдой. В любой области разработки, от автомобилей до софта, не получится отточить продукт до совершенства, если он изначально неправильно сконструирован. Спросите любого автопроизводителя, который хоть раз отзывал партию своих машин, чего стоят запоздалые попытки прикрутить качество на готовое изделие. Делайте все правильно с самого начала, не создавайте себе лишних трудностей. Тем не менее это только звучит просто. С одной стороны, качество и не создается тестированием, с другой — без тестирования сделать качественный продукт невозможно. Как вы узнаете, насколько качественный ваш продукт, не проводя тестирование?
Эта головоломка решается легко: перестаньте рассматривать разработку и тестирование по отдельности. Тестирование и разработка идут рука об руку. Напишите немного кода и протестируйте его. Затем напишите еще чуть-чуть и снова протестируйте. Тестирование не отдельная практика, это часть самого процесса разработки. Одним только тестированием качества не добиться. Рецепт получения высокого качества: смешивайте разработку и тестирование в блендере, пока они не станут единой субстанцией.
Тут вы видим явную ссылку на TDD, одну из тех инженерных практик, о которой ведущие методологи говорили дано.
Как только вышла книга, я сразу полез смотреть пятую главу про то, что же там была за самая большая проблема с тестирование в Гугле. И обнаружил там то, что ожидал увидеть – отделение тестирования от разработки. Разработчики ленятся протестировать свою работу, убедится в том, что они выполнили требования и ничего не сломали? ЧТА? А еще разработчики леняться оформлять задачи в issue tracker. Как ты можешь называть себя профессионалом, если ты не можешь создать тикет лучше чем заказчик. Если ты не можешь протестить свой собственный труд.
Едем дальше
Часто в компании вижу выученную беспомощность. Надо настолько быстро разрабатывать, что остаются только костыли и заплатки
Кто пропагандирует эти ценности? У нас ---- IT Attractor, но мы ничего нового не придумали. Про пропагандируем здравый смысл старших коллег
Кто не знает дядю Боба?
Разработчики не любят тестировать и не умеют.
На помощь приходят разработчики-тестировщики
Они не подчинаются директорам направлений, они не подчиняются проекту, на них нельзя надавить, чтобы быстро затестили.
Их задача --- сделать разработчика ПО эффективным.
Они могут поднимать вопросы качества на любом уровне организации. Их задача делать так, чтобы разработчики выпустили качественный продукт.
Тестировшики выдаются проекту времено – помочь наладить выпуск качественной продукции. Потом их переводят в другой проект.
Классификация немного необычная. Один руководителей тестировщиков в Гугле решил ввести такую терминологию потому, были люди с разным backgroud и по-разному понимали тесты
В основе классификации – объем тестируемого кода
Мне сложно прокомментировать потому, что я не совсем понимаю почему в Гугле так. У меня сложилась своя система уровней:
Есть план тестирования основного (критического функционала)
Тесты запускаются хоть как-то
Тесты запускаются на CI-сервер
Система поднимается одним скриптом
Автоматическая поставка после прохождения тестов