SlideShare a Scribd company logo
1 of 44
Наш путь
от 90 до 6500 тестов
       Иван Медведев
Что нужно малому бизнесу?
Деньги!




          Что нужно государству?
Деньги!




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

       MVP (minimum viable product)

Постепенно усложняем, выпуская новые фичи




              Много релизов
Хорошо, когда релиз первый
Не ведаем, что творим
Иногда, ведаем, но
творим
Каждый раз тестировать руками долго
А оно это надо
Нужны автоматические тесты
Типичный бухгалтер
Типичный
предприниматель
Настоящий
предприниматель
Что нужно хипстеру?
Хипстеру нужен iPhone
Нужны хорошие интерфейсы

      Сложно реализовывать



         Много ошибок




Нужны функциональные тесты
Итого

        Нужно часто релизиться
Функциональные тесты проходят медленно




    Continuous Integration
А что советует google?
Развернули 3 конфигурации
Больше


  функций


интерфейсов

 нюансов

 тестов
Все медленно


       1ч



       2ч



      5ч
Отказались от медленных
     конфигураций

            1ч



            2ч



            5ч
Chrome ведет себя не как Chrome
Периодически
пристреливаем Chrome
Вынуждены ждать вечно
Это файл проекта (.csproj) — xml




Его можно модифицировать перед запуском на агентах
10   10   10




Параллелить научились
Можно купить или арендовать сервер
Можно купить через дорогу
Не всегда тесты
зеленые
Кто нсрл на паровоз?
Continuous Integration все
время должна быть перед
        глазами
Телевизор должен быть
большим
Поднять глаза вверх — это
непросто
Continuous Integration
  разговаривает с нами в
прямом смысле этого слова
могут проходить, могут не
проходить, а могут ни то, ни другое
Нужно разогревать
Перегрузка
Дежурный инженер
Итого

             6500 тысяч тестов
       Общее время прогона — 40 минут
  Требует усилий только одного разработчика
Результаты представлены максимально доступно
         Релиз минимум раз в месяц
Xp days ukraine

More Related Content

What's hot

Continuous integration для java script проектов
Continuous integration для java script проектовContinuous integration для java script проектов
Continuous integration для java script проектовAndrey Kucherenko
 
Тестирование как панацея для жизни и развития проекта
Тестирование как панацея для жизни и развития проекта Тестирование как панацея для жизни и развития проекта
Тестирование как панацея для жизни и развития проекта Evgeniy Kuzmin
 
Roman Marinsky "Ретроспектива вивчення UI автоматизації"
Roman Marinsky "Ретроспектива вивчення UI автоматизації"Roman Marinsky "Ретроспектива вивчення UI автоматизації"
Roman Marinsky "Ретроспектива вивчення UI автоматизації"Dakiry
 
«Путь джуниора глазами джуниора» - Никита Сердюк
«Путь джуниора глазами джуниора» -  Никита Сердюк«Путь джуниора глазами джуниора» -  Никита Сердюк
«Путь джуниора глазами джуниора» - Никита СердюкITсonnect ITconnect
 
Что сделать, чтобы сто раз все не переделывать
Что сделать, чтобы сто раз все не переделыватьЧто сделать, чтобы сто раз все не переделывать
Что сделать, чтобы сто раз все не переделыватьТранслируем.бел
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17OdessaFrontend
 
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Ontico
 
Как играть без игрока
Как играть без игрокаКак играть без игрока
Как играть без игрокаSQALab
 
Эмоции в разработки. Спасаем продуктивность
Эмоции в разработки. Спасаем продуктивностьЭмоции в разработки. Спасаем продуктивность
Эмоции в разработки. Спасаем продуктивностьEgor Malkevich
 
EastLabs: success vs failure
EastLabs: success vs failureEastLabs: success vs failure
EastLabs: success vs failureEastLabs
 
Технологический цикл и соблюдение фаз производства.
Технологический цикл и соблюдение фаз производства.Технологический цикл и соблюдение фаз производства.
Технологический цикл и соблюдение фаз производства.Сергей Сторожев
 
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндекс
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, ЯндексАвтоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндекс
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндексit-people
 
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформаSQALab
 
OOP и WordPress. Подумаем о будущем проекта.
OOP и WordPress. Подумаем о будущем проекта.OOP и WordPress. Подумаем о будущем проекта.
OOP и WordPress. Подумаем о будущем проекта.Oleksandr Strikha
 
AgileCamp'11 Новосибирск - введение в инженерные практики
AgileCamp'11 Новосибирск - введение в инженерные практикиAgileCamp'11 Новосибирск - введение в инженерные практики
AgileCamp'11 Новосибирск - введение в инженерные практикиAnton Katkov
 
Тестирование веб-проектов в Agile
Тестирование веб-проектов в AgileТестирование веб-проектов в Agile
Тестирование веб-проектов в AgileSQALab
 
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейКак 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейSQALab
 

What's hot (19)

Continuous integration для java script проектов
Continuous integration для java script проектовContinuous integration для java script проектов
Continuous integration для java script проектов
 
Тестирование как панацея для жизни и развития проекта
Тестирование как панацея для жизни и развития проекта Тестирование как панацея для жизни и развития проекта
Тестирование как панацея для жизни и развития проекта
 
Introduction in TDD
Introduction in TDDIntroduction in TDD
Introduction in TDD
 
Roman Marinsky "Ретроспектива вивчення UI автоматизації"
Roman Marinsky "Ретроспектива вивчення UI автоматизації"Roman Marinsky "Ретроспектива вивчення UI автоматизації"
Roman Marinsky "Ретроспектива вивчення UI автоматизації"
 
«Путь джуниора глазами джуниора» - Никита Сердюк
«Путь джуниора глазами джуниора» -  Никита Сердюк«Путь джуниора глазами джуниора» -  Никита Сердюк
«Путь джуниора глазами джуниора» - Никита Сердюк
 
Что сделать, чтобы сто раз все не переделывать
Что сделать, чтобы сто раз все не переделыватьЧто сделать, чтобы сто раз все не переделывать
Что сделать, чтобы сто раз все не переделывать
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
 
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
 
Как играть без игрока
Как играть без игрокаКак играть без игрока
Как играть без игрока
 
Эмоции в разработки. Спасаем продуктивность
Эмоции в разработки. Спасаем продуктивностьЭмоции в разработки. Спасаем продуктивность
Эмоции в разработки. Спасаем продуктивность
 
EastLabs: success vs failure
EastLabs: success vs failureEastLabs: success vs failure
EastLabs: success vs failure
 
Технологический цикл и соблюдение фаз производства.
Технологический цикл и соблюдение фаз производства.Технологический цикл и соблюдение фаз производства.
Технологический цикл и соблюдение фаз производства.
 
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндекс
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, ЯндексАвтоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндекс
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндекс
 
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформа
 
OOP и WordPress. Подумаем о будущем проекта.
OOP и WordPress. Подумаем о будущем проекта.OOP и WordPress. Подумаем о будущем проекта.
OOP и WordPress. Подумаем о будущем проекта.
 
AgileCamp'11 Новосибирск - введение в инженерные практики
AgileCamp'11 Новосибирск - введение в инженерные практикиAgileCamp'11 Новосибирск - введение в инженерные практики
AgileCamp'11 Новосибирск - введение в инженерные практики
 
Тестирование веб-проектов в Agile
Тестирование веб-проектов в AgileТестирование веб-проектов в Agile
Тестирование веб-проектов в Agile
 
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейКак 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
 
Maybe some qa
Maybe some qaMaybe some qa
Maybe some qa
 

Viewers also liked

Legacy projects: how to win the race
Legacy projects: how to win the raceLegacy projects: how to win the race
Legacy projects: how to win the raceVictor_Cr
 
REpresentational State Transfer
REpresentational State TransferREpresentational State Transfer
REpresentational State TransferVladimir Tsukur
 
живые сайты
живые сайтыживые сайты
живые сайтыzexzex
 
Bitrix clouds without_admins
Bitrix clouds without_adminsBitrix clouds without_admins
Bitrix clouds without_adminsAlexander Demidov
 
Осознанность рефакторинга: Модель принятия инженерных решений
Осознанность рефакторинга: Модель принятия инженерных решенийОсознанность рефакторинга: Модель принятия инженерных решений
Осознанность рефакторинга: Модель принятия инженерных решенийEvgeniy Krivosheev
 
Зачем нужны распределенные системы конторля версий
Зачем нужны распределенные системы конторля версийЗачем нужны распределенные системы конторля версий
Зачем нужны распределенные системы конторля версийSerhiy Kalinets
 
Compilable Specifications - XPDays Ukraine 2012
Compilable Specifications - XPDays Ukraine 2012Compilable Specifications - XPDays Ukraine 2012
Compilable Specifications - XPDays Ukraine 2012Dmytro Mindra
 
Law of Demeter & Objective Sense of Style
Law of Demeter & Objective Sense of StyleLaw of Demeter & Objective Sense of Style
Law of Demeter & Objective Sense of StyleVladimir Tsukur
 
Инфраструктура Автоматизации Функционального Тестирования Web Приложений
Инфраструктура Автоматизации Функционального Тестирования Web ПриложенийИнфраструктура Автоматизации Функционального Тестирования Web Приложений
Инфраструктура Автоматизации Функционального Тестирования Web ПриложенийAndrii Dzynia
 
Abstraction Classes in Software Design
Abstraction Classes in Software DesignAbstraction Classes in Software Design
Abstraction Classes in Software DesignVladimir Tsukur
 
Conventions
ConventionsConventions
Conventionsploeh
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времениAndriy Samilyak
 
XpDays - Automated testing of responsive design (GalenFramework)
XpDays - Automated testing of responsive design (GalenFramework)XpDays - Automated testing of responsive design (GalenFramework)
XpDays - Automated testing of responsive design (GalenFramework)Alex Fruzenshtein
 

Viewers also liked (20)

Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tdd
 
Legacy projects: how to win the race
Legacy projects: how to win the raceLegacy projects: how to win the race
Legacy projects: how to win the race
 
REpresentational State Transfer
REpresentational State TransferREpresentational State Transfer
REpresentational State Transfer
 
живые сайты
живые сайтыживые сайты
живые сайты
 
Bitrix clouds without_admins
Bitrix clouds without_adminsBitrix clouds without_admins
Bitrix clouds without_admins
 
Agility in Testing
Agility in TestingAgility in Testing
Agility in Testing
 
Agile architecture
Agile architectureAgile architecture
Agile architecture
 
Tdd in the world of big data
Tdd in the world of big dataTdd in the world of big data
Tdd in the world of big data
 
Осознанность рефакторинга: Модель принятия инженерных решений
Осознанность рефакторинга: Модель принятия инженерных решенийОсознанность рефакторинга: Модель принятия инженерных решений
Осознанность рефакторинга: Модель принятия инженерных решений
 
Зачем нужны распределенные системы конторля версий
Зачем нужны распределенные системы конторля версийЗачем нужны распределенные системы конторля версий
Зачем нужны распределенные системы конторля версий
 
Compilable Specifications - XPDays Ukraine 2012
Compilable Specifications - XPDays Ukraine 2012Compilable Specifications - XPDays Ukraine 2012
Compilable Specifications - XPDays Ukraine 2012
 
Law of Demeter & Objective Sense of Style
Law of Demeter & Objective Sense of StyleLaw of Demeter & Objective Sense of Style
Law of Demeter & Objective Sense of Style
 
Code review psyhology
Code review psyhologyCode review psyhology
Code review psyhology
 
Инфраструктура Автоматизации Функционального Тестирования Web Приложений
Инфраструктура Автоматизации Функционального Тестирования Web ПриложенийИнфраструктура Автоматизации Функционального Тестирования Web Приложений
Инфраструктура Автоматизации Функционального Тестирования Web Приложений
 
Abstraction Classes in Software Design
Abstraction Classes in Software DesignAbstraction Classes in Software Design
Abstraction Classes in Software Design
 
Clean code
Clean codeClean code
Clean code
 
Conventions
ConventionsConventions
Conventions
 
ETL in Clojure
ETL in ClojureETL in Clojure
ETL in Clojure
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времени
 
XpDays - Automated testing of responsive design (GalenFramework)
XpDays - Automated testing of responsive design (GalenFramework)XpDays - Automated testing of responsive design (GalenFramework)
XpDays - Automated testing of responsive design (GalenFramework)
 

Similar to Xp days ukraine

Can we have some more quality - Russian version
Can we have some more quality - Russian versionCan we have some more quality - Russian version
Can we have some more quality - Russian versionAlexander Pushkarev
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинOntico
 
Типичные ошибки внедрения Lean и Agile
Типичные ошибки внедрения Lean и AgileТипичные ошибки внедрения Lean и Agile
Типичные ошибки внедрения Lean и AgileMagneta AI
 
Performance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskPerformance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskAlex Chistyakov
 
Как увеличить конверсию звонков с сайта?
Как увеличить конверсию звонков с сайта?Как увеличить конверсию звонков с сайта?
Как увеличить конверсию звонков с сайта?Геннадий Метёлкин
 
Agile2014 Orlando обзор конференции
Agile2014 Orlando обзор конференцииAgile2014 Orlando обзор конференции
Agile2014 Orlando обзор конференцииMikhail Kudanov
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.ScrumTrek
 
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
 Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва  Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва it-people
 
Практика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanПрактика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanAlexander Byndyu
 
Автоматизация сборки и тестирования в разрезе эффективного производства
Автоматизация сборки и тестирования в разрезе эффективного производстваАвтоматизация сборки и тестирования в разрезе эффективного производства
Автоматизация сборки и тестирования в разрезе эффективного производстваSQALab
 
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...Alexander Gornik
 
Ничего лишнего: как вычистить свой продукт от лишних фич!
Ничего лишнего: как вычистить свой продукт от лишних фич!Ничего лишнего: как вычистить свой продукт от лишних фич!
Ничего лишнего: как вычистить свой продукт от лишних фич!Magneta AI
 
Григорий Шехет "Растим детей. Или как Иван Васильевич запускал эксперименты?"
Григорий Шехет "Растим детей. Или как Иван Васильевич запускал эксперименты?"Григорий Шехет "Растим детей. Или как Иван Васильевич запускал эксперименты?"
Григорий Шехет "Растим детей. Или как Иван Васильевич запускал эксперименты?"Fwdays
 
Александр Анцыпов. REST: вывод традиционных систем на новый уровень
Александр Анцыпов. REST: вывод традиционных систем на новый уровеньАлександр Анцыпов. REST: вывод традиционных систем на новый уровень
Александр Анцыпов. REST: вывод традиционных систем на новый уровеньVolha Banadyseva
 
SoapUI one key to all doors
SoapUI one key to all doorsSoapUI one key to all doors
SoapUI one key to all doorsYegor Maksymchuk
 
Developmentmanage3.0
Developmentmanage3.0Developmentmanage3.0
Developmentmanage3.0WRider
 
Developmentmanage1.0
Developmentmanage1.0Developmentmanage1.0
Developmentmanage1.0HighLoad2009
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
автоматизация тестирования огурцом
автоматизация тестирования огурцомавтоматизация тестирования огурцом
автоматизация тестирования огурцомVadim Glebov
 

Similar to Xp days ukraine (20)

Can we have some more quality - Russian version
Can we have some more quality - Russian versionCan we have some more quality - Russian version
Can we have some more quality - Russian version
 
Автоматизация тестирования
Автоматизация тестированияАвтоматизация тестирования
Автоматизация тестирования
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
 
Типичные ошибки внедрения Lean и Agile
Типичные ошибки внедрения Lean и AgileТипичные ошибки внедрения Lean и Agile
Типичные ошибки внедрения Lean и Agile
 
Performance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskPerformance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon Saransk
 
Как увеличить конверсию звонков с сайта?
Как увеличить конверсию звонков с сайта?Как увеличить конверсию звонков с сайта?
Как увеличить конверсию звонков с сайта?
 
Agile2014 Orlando обзор конференции
Agile2014 Orlando обзор конференцииAgile2014 Orlando обзор конференции
Agile2014 Orlando обзор конференции
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.
 
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
 Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва  Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
 
Практика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanПрактика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к Kanban
 
Автоматизация сборки и тестирования в разрезе эффективного производства
Автоматизация сборки и тестирования в разрезе эффективного производстваАвтоматизация сборки и тестирования в разрезе эффективного производства
Автоматизация сборки и тестирования в разрезе эффективного производства
 
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
 
Ничего лишнего: как вычистить свой продукт от лишних фич!
Ничего лишнего: как вычистить свой продукт от лишних фич!Ничего лишнего: как вычистить свой продукт от лишних фич!
Ничего лишнего: как вычистить свой продукт от лишних фич!
 
Григорий Шехет "Растим детей. Или как Иван Васильевич запускал эксперименты?"
Григорий Шехет "Растим детей. Или как Иван Васильевич запускал эксперименты?"Григорий Шехет "Растим детей. Или как Иван Васильевич запускал эксперименты?"
Григорий Шехет "Растим детей. Или как Иван Васильевич запускал эксперименты?"
 
Александр Анцыпов. REST: вывод традиционных систем на новый уровень
Александр Анцыпов. REST: вывод традиционных систем на новый уровеньАлександр Анцыпов. REST: вывод традиционных систем на новый уровень
Александр Анцыпов. REST: вывод традиционных систем на новый уровень
 
SoapUI one key to all doors
SoapUI one key to all doorsSoapUI one key to all doors
SoapUI one key to all doors
 
Developmentmanage3.0
Developmentmanage3.0Developmentmanage3.0
Developmentmanage3.0
 
Developmentmanage1.0
Developmentmanage1.0Developmentmanage1.0
Developmentmanage1.0
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
автоматизация тестирования огурцом
автоматизация тестирования огурцомавтоматизация тестирования огурцом
автоматизация тестирования огурцом
 

Xp days ukraine

Editor's Notes

  1. Меня зовут Иван Медведев, я разработчик сервиса «Бухгалтерия.Контур». Мы, как можно понять из названия, хотим сделать онлайн бухгалтерию для малого бизнеса.
  2. Так как наша целевая аудитория — это малый бизнес, в первую очередь мы должны решать его задачи. Что нужно малому бизнесу?
  3. В первую очередь ему нужны деньги. И никакая бухгалтерия будь то онлайн или оффлайн, ему не нужна. Однако есть еще и государство.
  4. Государству тоже нужны деньги. Чтобы случайно не отдать государству лишнее — нужна бухгалтерия
  5. Однако мы не можем просто так взять и сделать всю бухгалтерию целиком, потому что она очень большая. Если взять только системы налогооблажения: ОСНО, УСН, ЕНВД, ЕСХН, патент, ... — будет уже вполне достаточно. По каждой из них куча форм отчетности перед налоговой. А кроме того есть еще и первичные документы, сотрудники и много, много, много всего
  6. Поэтому мы собираемся делать ее итеративно. Начнем с минимально жизнеспобного продукта, а дальше будем постпенно его усложнять. Чтобы этот процесс не затянулся во времени на 15 лет, нам необходимо делать частые релизы.
  7. И как только мы начинаем говорить о релизах, возникают проблемы. Хорошо, когда релиз первый. У вас было 0 «функций» стала одна. Вы ее проверили — релиз готов. Мы гарантированно не сломаем уже существующую функциональность. Однако на практике, релиз почти всегда не первый. И когда ваш разработчки делает очередную фичу, он глубоко уверен, что ничего не сломает.
  8. Он ошибается.
  9. Однако, чаще разработчики все же понимают, что могут что-то сломать своими изменениями, но сознательно идут на это. Потому что знают, что в целом они улучшают код.
  10. Как можно проверить, что после очередного изменения все работает? Очевидно. Проверяем первую страницу, вторую страницу, третью страницу..., первый лайтбокс, второй лайтбокс ..., ссылки, кнопки и все-все-все... Когда мы закончим, например через сутки, можно вспомнить, что браузеров много. Даже для вашего тестировщика это очень непростая задача.
  11. Разумеется, разработчик делать этого никогда не станет
  12. Значит нужно автоматизировать. Однако, нам нужно не просто автоматизированное тестирование, а кое-что больше. Вернемся к тому что мы делаем. Мы делаем онлайн бухгалтерию для МАЛОГО БИЗНЕСА
  13. Когда мы слышим слово «бухгалтерия» — в первую очередь мы представляем себе бухгалтера. Однако, наш продукт предназначен не для бухгалтеров. И для того, чтобы понять нашу целевую аудиторию, мы провели исследование.
  14. В результате которого выяснилось, что типичный предприниматель, скорее похож на хипстера.
  15. Конечно же, в действительности, предприниматели, выглядят вот так. Но они мало пользуются интернетом.
  16. Что же нужно хипстеру? 1С? нет
  17. Хипстеру нужен iPhone . Почему? Потому что он удобный и красивый. Следовательно, чтобы наша бухгалетрия пользовалась популярностью, нужно делать нечто похожее. Значит нам нужны хорошие интерфейсы.
  18. Хорошие интерфейсы — это очень сложно. Их тяжело реализовывать. Это, как правило, приводит к большому количеству ошибок. Следовательно нужно автоматически тестировать интерфейсы. А значит нужно функциональное тестирование. Люди, которые в своей жизни написали хотя бы один функциональный тест, знают, что они проходит на порядки дольше модульных. Настолько, что запускать тесты прямо перед запуском становится накладно.
  19. Подведем небольшой итог. Для того, чтобы сделать бухгалерию нам нужно постоянно выпускать новые фичи, а следовательно часто релизиться. Для того, чтобы релизы были качественными нужно писать много долгих функциональных тестов и прогонять их перед каждым релизом, что, в свою очередь, сильно усложняет и растягивает во времени процесс обновления. Решение нашей проблеммы давно известно, и имя ему Continuous Integration.
  20. Если вы не знаете, что такое Continuous Integration , то ничего страшного в этом нет. Просто откройте гугл и почитайте. Там же можно найти ссылки на готовые инструменты. Один из них – TeamCity. Это очень удобный для небольших проектов сервер непрерывной интеграции с большим количеством уже реализованных «прямо из коробки» функций. Поэтому, мы начали его использовать
  21. В тот момент у нас было всего-лишь 90 функциональных тестов. И мы развернули три конфигурации и стали прогнять наши тесты на Chrome, FF и IE . Таким образом, перед очередным релизом нам не нужно было больше запускать все тесты и ждать пока они пройдут. TeamCity делал это за нас. Таким образом нам требовалось только посмотреть на упавшие и починить их. Как правило, их было немного.
  22. Однако, время шло. И мы развивали наш сервис. Он стал сложнее. Мы реализовали все новые и новые интерфейсы. В них было сокрыто много нюансов, и как следствие у нас стало значительно больше тестов. Точнее, их стало 300.
  23. Это привело к тому, что время их выполнения сильно увеличилось. И если ситуация с тестами в Chrome -е нас устраивала, то ситуация с тестами в IE была критической. Это приводило к тому, что перед релизом мы видели уже неактуальное состояние системы. И если даже TeamCity показывал, что у нас все хорошо, то за пять часов с момента последнего запуска ситуация могла очень сильно поменяться. Пришлось принимать меры.
  24. Вообще говоря, 99% ошибок возникают не из-за особенностей отдельно взятых браузеров. В нашем случае их причина — неправильно реализованная бизнес-логика приложения. Поэтому мы отказались от того чтобы прогонять тесты в медленных браузерах.
  25. Но у Chrome –а была другая проблема. Примерно с 250 теста Chrome начинал вести себя не как Chrome . В нем происходила ошибка, после чего все оставшиеся 50 тестов успешно падали.
  26. Мы стали перезапускать браузер через каждые 20 тестов.
  27. Очевидно, что основных проблем, связанных с длительностью выполнения тестов мы не решили. И когда у нас стало 1000 тестов, то время их прохождения даже в Chrome стало 3 часа. Мы начали думать о том как решить эту проблему раз и навсегда. Самая первая мысль, которая пришла к нам в голову — это параллельный запуск. Однако, оказалось, что TeamCity не умеет делать это из коробки. Решение проблемы пришло внезапно.
  28. Как устроены у нас тесты? Мы пишем их на C# как и само приложение. У нас есть отдельный проект с тестами. И те кто пишут на C# знают, что файл проекта представляет собой обыкновенный xml файл. Суть в том, что его можно модифицировать перед компиляцией, например, убирать некторые xml элементы. К чему это может привести? Если удалить какой-нибудь xml элемент из фрагмента показанного на слайде, то все классы из файла подключаемого в этом элементе (атрибут Include ) не попадут в итоговую сборку. По счастливой случайности, все тесты у нас находились в файлах, имена которых заканчивались на суффикс Test . Была случайность – сделаем из этого закономерность.
  29. Предположим, что у нас есть кластер из трех машин и 30 файлов с тестами. Каждая машина знает свой порядковый номер в кластере. Таким образом, первая машина знает, что она должна прогонять тесты из первых 10 файлов, вторая — из вторых десяти файлов, третья — из третьих десяти файлов. Параллелить тесты научились.
  30. Дело осталось только за вычислительнымии мощностями. Это очень простая проблема. Можно купить или арендовать сервер с каким угодно количеством виртуальных машин.
  31. А можно сходить в магазин через дорогу и купить обыкновенные игровые компьютеры без видеокарт. Это реальная фотография нашей «фермы».
  32. Чему мы научились? Мы научились всего лишь быстро прогонять тесты и наблюдать перед релизов актуальное состояние. Хорошо, когда тесты проходят. Все хуже когда тесты не проходят. Если у вас 100 тестов, то починить упавшие 2-3 штуки несложно. Если же у вас 10000 тестов, то починить упавшие 100 становится проблемой
  33. Все усложняется еще и тем, что, скорее всего, последний раз тесты проходили только перед предыдущим релизом. С тех пор в коде было сделано много изменений и понять по какой причине тест перестал проходить становится очень сложно. На починку такого теста уходит существенно больше времени. Очевидно, что релиз в такой ситуации придется отложить
  34. Чтобы такого не возникало, нужно следить за своими тестами постоянно, а не только перед релизом. Следовательно Continuous Integration должна все время находиться перед глазами. Можно заставить разработчиков, открыть браузер с TeamCity на одном из двух мониторов (у всех наших по два монитора). Но разработчики всегда найдут более эффективное применение второму монитору. Поэтому мы пошли в магазин через дорогу и купили телевизор. Повесили его под потолком, чтобы каждый разработчик мог просто поднять глаза и понять как обстоят дела с тестами.
  35. Наш вам совет, покупайте телевизор по-больше
  36. Оказалось, что поднять глаза очень непросто. Разработчику для того чтобы реализовать ту или иную фичу приходится сильно погружаться в контекст задачи. Это отнимает много времени и сил. Никто не любит выходить их контекста. Особенно для того, чтобы чинить упавшие тесты или компиляцию
  37. Поэтому мы научили нашу систему говорить в прямом смысле этого слова. Теперь когда кто-нибудь ломает компиляцию – технический женский голос говорит: «Билд сломан, виноват Медведев» (если его сломал Медведев).
  38. В итоге, чему мы научились? Мы научились делать быстрый прогон всех тестов и научились время от времени между релизами поднимать упавшие тесты. Однако, на практике оказалось, что тесты бывают не только упавшими или неупавшими. Они могут быть нестабильными. На локальной машине разработчика такой тест всегда пройдет, а вот на агенте, где его запускает TeamCity он время от времени падает. В чем может быть причина
  39. В реальном мире большинство сервисов имеют период инициализации. Когда не все кэши загружены, не всё скомпилировано и т.д. и т.п. Запросы к сервису в таком случае могут выполняться на порядок дольше. Этого может хватить, для того, чтобы ваш тест упал по таймауту. Поэтому нужно обязательно разогревать тестовый стенд перед запуском тестов. Если вы, например, имеете дело с ASP.NET обязательно включите прекомпиляцию страниц и контролов. Разогревать нужно не только фронты. Backend тоже нужно разогревать.
  40. Еще одна распространенная причина нестабильных тестов заключается в том, что у ваших агентов может случиться недостаток системных ресурсов, таких как оперативая память. Не факт, что каждому вашему тестовому агенту необходимо иметь по экземпляру сервиса требовательному к памяти. Может быть можно переконфигурировать тестовый стенд таким образом, что тяжелый сервис запускался в единственном экземпляре на отдельной машине? Также важным ресурсом является очередь операций к жесткому диску. Если у вас именно такая ситуация – купите SSD в магазине через дорогу.
  41. Хотя подобные ухищрения позволяют в каких то случаях разобраться с нестабильными тестами, наверняка от их появления избавиться не удастся. А как можно решить эту проблему? Ведь если заставить разработчика, погруженного в контекст текущей задачи, выйти из этого самого контекста и заставить чинить нестабильный тест, вас как, минимум, неправильно поймут.
  42. Поэтому у нас есть специальная переходящая роль. Она называется «дежурный инженер». Суть этой роли, заключается в том, чтобы остальные разработчики как можно реже выходили из контекста текущей задачи. Поэтому дежурный инженер отвечает за релиз, отвечает на вопросы техподдержки, и следит за Continuous Integration . Через две недели, дежурный инженер меняется. Кроме того, дежурство — это отличный способ для новичков узнать систему и погрузиться в разработку.
  43. Конец