SlideShare a Scribd company logo
1 of 66
Держим дизайн системы
под контролем, используя
изолированное юнит-
тестирование
Коломенский Андрей
Юнит-тесты — основной инструмент получения
обратной связи от системы
Интегрированные тесты — это
тесты прохождение или падение
которых зависит более чем от
одной единицы нетривиального
поведения
Я использую изолированные тесты для
повышения качества дизайна системы и
её обоснованного рефакторинга
Непрерывно поддерживать высокую
продуктивность возможно только
практикуя дисциплину Test Driven
Development
Test Driven Development — это дисциплина
1. Вам запрещается писать любой продакшен код,
за исключением того кода который нужен для
прохождения падающего юнит-теста.
1. Вам запрещается писать любой продакшен код,
за исключением того кода который нужен для
прохождения падающего юнит-теста.
2. Вам запрещается писать больше кода юнит-теста
чем достаточно для его падения. И ошибки
компиляции это падение.
1. Вам запрещается писать любой продакшен код,
за исключением того кода который нужен для
прохождения падающего юнит-теста.
2. Вам запрещается писать больше кода юнит-теста
чем достаточно для его падения. И ошибки
компиляции это падение.
3. Вам запрещается писать больше продакшен кода
чем достаточно для прохождения одного
падающего юнит-теста.
Легаси код — это код
без юнит-тестов
Легаси код — это код
который страшно
изменять
С целью защитить и сохранить честь
профессии программистов, я обещаю что в
меру своих возможностей и суждений:
Я не буду создавать вредоносный код
Код, который я создаю, всегда будет моей
лучшей работой. Я не буду сознательно
допускать, чтобы мой код был дефектен, как
в поведении, так и в структуре
Я буду предоставлять с каждым релизом
быстрое, надежное и повторяемое
доказательство того, что каждый элемент
кода работает так, как должен
Я буду делать частые, небольшие релизы,
чтобы не мешать прогрессу других
Я буду бесстрашно и неустанно улучшать свой
код при каждой возможности. Я никогда не
буду снижать его качество
Я сделаю всё что смогу, для того чтобы
сохранять продуктивность самого себя и
других как можно выше. Я не буду делать
ничего, что снижает эту продуктивность
Я буду постоянно следить за тем, чтобы
другие могли подменить меня, и что я могу
подменить их
Я буду давать оценки, которые являются
честными как в их правильности, так и в
точности. Я не буду давать обещания без
уверенности в том что смогу их сдержать
Я никогда не перестану изучать и
совершенствовать свое ремесло
J. B. Rainsberger Kent Beck Robert Martin
Что делать дальше:
Попробуйте написать изолированные тесты на ту часть системы которую
вы считаете хорошо спроектированной
Что дальше?
Попробуйте написать изолированные тесты на ту часть системы которую
вы считаете хорошо спроектированной
Глубоко погрузитесь в тему качества кода учась у
крутых ребят:
Что дальше?
Попробуйте написать изолированные тесты на ту часть системы которую
вы считаете хорошо спроектированной
Практикуйте TDD, проясняйте свои намерения, устраняйте дублирование
Глубоко погрузитесь в тему качества кода учась у
крутых ребят:
Cпасибо!
Пишите мне, задавайте вопросы! Отвечаю всем.
Андрей Коломенский
+7 999 001 10 70 (+ Telegram)
me@agile-coach.ru
FB: a.kolomensky

More Related Content

What's hot

юнит тестирование Fork
юнит тестирование Forkюнит тестирование Fork
юнит тестирование Fork
Sergey Oreshkov
 
Инструменты для тестирования пользовательского интерфейса UI
Инструменты для тестирования пользовательского интерфейса UIИнструменты для тестирования пользовательского интерфейса UI
Инструменты для тестирования пользовательского интерфейса UI
Olesia Velychko
 
Инструменты для тестирования UI
Инструменты для тестирования UIИнструменты для тестирования UI
Инструменты для тестирования UI
ISsoft
 
Обучение тестированию
Обучение тестированиюОбучение тестированию
Обучение тестированию
APostovalova
 
Обучение тестированию
Обучение тестированиюОбучение тестированию
Обучение тестированию
APostovalova
 
About Testers
About TestersAbout Testers
About Testers
antsh
 

What's hot (19)

План тестирования
План тестированияПлан тестирования
План тестирования
 
юнит тестирование Fork
юнит тестирование Forkюнит тестирование Fork
юнит тестирование Fork
 
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексей
Solit 2013, Эволюция тестирования на Selenium, Мычко АлексейSolit 2013, Эволюция тестирования на Selenium, Мычко Алексей
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексей
 
Инструменты для тестирования пользовательского интерфейса UI
Инструменты для тестирования пользовательского интерфейса UIИнструменты для тестирования пользовательского интерфейса UI
Инструменты для тестирования пользовательского интерфейса UI
 
Пользователи в помощь тестировщику
Пользователи в помощь тестировщикуПользователи в помощь тестировщику
Пользователи в помощь тестировщику
 
Инструменты для тестирования UI
Инструменты для тестирования UIИнструменты для тестирования UI
Инструменты для тестирования UI
 
Тестирование требований: Зачем - понятно, а вот Как?
Тестирование требований: Зачем - понятно, а вот Как?Тестирование требований: Зачем - понятно, а вот Как?
Тестирование требований: Зачем - понятно, а вот Как?
 
Обучение тестированию
Обучение тестированиюОбучение тестированию
Обучение тестированию
 
Обучение тестированию
Обучение тестированиюОбучение тестированию
Обучение тестированию
 
Тестирование требований и документации
Тестирование требований и документацииТестирование требований и документации
Тестирование требований и документации
 
Ігор Лужанський Театр начинается с вешалки или тестирование требований
Ігор Лужанський Театр начинается с вешалки или тестирование требованийІгор Лужанський Театр начинается с вешалки или тестирование требований
Ігор Лужанський Театр начинается с вешалки или тестирование требований
 
Есть фича. Помогите протестировать
Есть фича. Помогите протестировать Есть фича. Помогите протестировать
Есть фича. Помогите протестировать
 
About Testers
About TestersAbout Testers
About Testers
 
Метод No-Tests-Cases: избавьтесь от тест-кейсов в тестировании
Метод No-Tests-Cases: избавьтесь от тест-кейсов в тестированииМетод No-Tests-Cases: избавьтесь от тест-кейсов в тестировании
Метод No-Tests-Cases: избавьтесь от тест-кейсов в тестировании
 
Тестирование инсталляторов
Тестирование инсталляторовТестирование инсталляторов
Тестирование инсталляторов
 
Нам нужны инструменты! Тестирование и мониторинг мобильного приложения BOOKMATE
Нам нужны инструменты!  Тестирование и мониторинг мобильного приложения BOOKMATEНам нужны инструменты!  Тестирование и мониторинг мобильного приложения BOOKMATE
Нам нужны инструменты! Тестирование и мониторинг мобильного приложения BOOKMATE
 
How towritebugreports
How towritebugreportsHow towritebugreports
How towritebugreports
 
Тестирование требований
Тестирование требованийТестирование требований
Тестирование требований
 
лившиц владимир - независимое тестирование миф
лившиц владимир - независимое тестирование мифлившиц владимир - независимое тестирование миф
лившиц владимир - независимое тестирование миф
 

Similar to Держим дизайн системы под контролем, используя изолированное юнит-тестирование / Андрей Коломенский

Тестирование ПО
Тестирование ПОТестирование ПО
Тестирование ПО
seleznev_stas
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
Technopark
 
некоторые правила управления проектами. часть I
некоторые правила управления проектами. часть Iнекоторые правила управления проектами. часть I
некоторые правила управления проектами. часть I
prigarov
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
Technopark
 
Ошибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы примененияОшибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы применения
zheldak
 
организация и проведение тестирования
организация и проведение тестированияорганизация и проведение тестирования
организация и проведение тестирования
Igor Pozumentov
 
Презентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспеченияПрезентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспечения
Rauan Ibraikhan
 
презентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспеченияпрезентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспечения
Rauan Ibraikhan
 
Тестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаТестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщика
Zestranec
 
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис ВоскобойникКак работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Образовательные мероприятия "Netpeak Talks"
 
Автотесты и образ мышления
Автотесты и образ мышленияАвтотесты и образ мышления
Автотесты и образ мышления
Andrei Zubov
 

Similar to Держим дизайн системы под контролем, используя изолированное юнит-тестирование / Андрей Коломенский (20)

Тестирование ПО
Тестирование ПОТестирование ПО
Тестирование ПО
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Роман Петров - юнит-тестирование мобильных приложений на примере платформы iOS
Роман Петров - юнит-тестирование мобильных приложений на примере платформы iOSРоман Петров - юнит-тестирование мобильных приложений на примере платформы iOS
Роман Петров - юнит-тестирование мобильных приложений на примере платформы iOS
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
 
некоторые правила управления проектами. часть I
некоторые правила управления проектами. часть Iнекоторые правила управления проектами. часть I
некоторые правила управления проектами. часть I
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-Agile
 
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникПодводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
 
Как мы тестируем анализатор кода
Как мы тестируем анализатор кодаКак мы тестируем анализатор кода
Как мы тестируем анализатор кода
 
Ошибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы примененияОшибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы применения
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
организация и проведение тестирования
организация и проведение тестированияорганизация и проведение тестирования
организация и проведение тестирования
 
What Tests Are For?
What Tests Are For?What Tests Are For?
What Tests Are For?
 
JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1
 
Презентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспеченияПрезентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспечения
 
презентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспеченияпрезентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспечения
 
Тестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаТестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщика
 
Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика
 
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис ВоскобойникКак работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
 
Автотесты и образ мышления
Автотесты и образ мышленияАвтотесты и образ мышления
Автотесты и образ мышления
 

More from Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Держим дизайн системы под контролем, используя изолированное юнит-тестирование / Андрей Коломенский

  • 1. Держим дизайн системы под контролем, используя изолированное юнит- тестирование Коломенский Андрей
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. Юнит-тесты — основной инструмент получения обратной связи от системы
  • 13.
  • 14. Интегрированные тесты — это тесты прохождение или падение которых зависит более чем от одной единицы нетривиального поведения
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22. Я использую изолированные тесты для повышения качества дизайна системы и её обоснованного рефакторинга
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36. Непрерывно поддерживать высокую продуктивность возможно только практикуя дисциплину Test Driven Development
  • 37. Test Driven Development — это дисциплина
  • 38. 1. Вам запрещается писать любой продакшен код, за исключением того кода который нужен для прохождения падающего юнит-теста.
  • 39. 1. Вам запрещается писать любой продакшен код, за исключением того кода который нужен для прохождения падающего юнит-теста. 2. Вам запрещается писать больше кода юнит-теста чем достаточно для его падения. И ошибки компиляции это падение.
  • 40. 1. Вам запрещается писать любой продакшен код, за исключением того кода который нужен для прохождения падающего юнит-теста. 2. Вам запрещается писать больше кода юнит-теста чем достаточно для его падения. И ошибки компиляции это падение. 3. Вам запрещается писать больше продакшен кода чем достаточно для прохождения одного падающего юнит-теста.
  • 41. Легаси код — это код без юнит-тестов
  • 42. Легаси код — это код который страшно изменять
  • 43. С целью защитить и сохранить честь профессии программистов, я обещаю что в меру своих возможностей и суждений:
  • 44. Я не буду создавать вредоносный код
  • 45. Код, который я создаю, всегда будет моей лучшей работой. Я не буду сознательно допускать, чтобы мой код был дефектен, как в поведении, так и в структуре
  • 46. Я буду предоставлять с каждым релизом быстрое, надежное и повторяемое доказательство того, что каждый элемент кода работает так, как должен
  • 47. Я буду делать частые, небольшие релизы, чтобы не мешать прогрессу других
  • 48. Я буду бесстрашно и неустанно улучшать свой код при каждой возможности. Я никогда не буду снижать его качество
  • 49. Я сделаю всё что смогу, для того чтобы сохранять продуктивность самого себя и других как можно выше. Я не буду делать ничего, что снижает эту продуктивность
  • 50. Я буду постоянно следить за тем, чтобы другие могли подменить меня, и что я могу подменить их
  • 51. Я буду давать оценки, которые являются честными как в их правильности, так и в точности. Я не буду давать обещания без уверенности в том что смогу их сдержать
  • 52. Я никогда не перестану изучать и совершенствовать свое ремесло
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62. J. B. Rainsberger Kent Beck Robert Martin
  • 63. Что делать дальше: Попробуйте написать изолированные тесты на ту часть системы которую вы считаете хорошо спроектированной
  • 64. Что дальше? Попробуйте написать изолированные тесты на ту часть системы которую вы считаете хорошо спроектированной Глубоко погрузитесь в тему качества кода учась у крутых ребят:
  • 65. Что дальше? Попробуйте написать изолированные тесты на ту часть системы которую вы считаете хорошо спроектированной Практикуйте TDD, проясняйте свои намерения, устраняйте дублирование Глубоко погрузитесь в тему качества кода учась у крутых ребят:
  • 66. Cпасибо! Пишите мне, задавайте вопросы! Отвечаю всем. Андрей Коломенский +7 999 001 10 70 (+ Telegram) me@agile-coach.ru FB: a.kolomensky