SlideShare a Scribd company logo
1 of 27
Природня і економна дорожня карта
для переходу команди розробки на
Тест центровану розробку
phpunit_tdd && mocker
Луцьк 2017
Для кого ця доповідь
Керівники команд
Технічні керівники
Архітектори
Бізнес аналітики
Професіонали back-end
Архітектори рішень
Менеджери проектів
DevOps із хорошою Dev частиною
*всім, кого не перераховано - срочно перепрофільовуватись!!! :)
Всі* ми виросли з функціонального програмування
- ми звикли мислити локальними рішеннями, а не об’єктним, бізнес
підходом.
- ми досі мислимо даними, масивами даних, а не поведінкою чи
стратегіями
- ми намагаємось вирішувати проблеми на тактичному, замість реалізації
незначних змін на стратегічному рівні
- ми думаємо, що швидкість досягається економією, але насправді
швидкість - це оптимізація процесів і підходів, а не кількості чи якості
коду.<?php
function
get_shit($input_shit) {
return $output_shit;
}
in progress...........
Демотиватори і міфи написання тестів
- Колись будемо писати, зараз немає на це часу
- Підтримка тестів - це біль
- Тести потрібно створювати для бібліотек
- Запуск тестів - це довго
- Тести потрібно писати ідеально, або взагалі не братись за них
- Тести сповільнюють розробку
- Неможливо запускати тести на реальних даних
- Тести потрібні тільки для ядра
*
*биче гівно
Правильні запитання для початку
А чи не пишуть раптом розробники вже тести під час своєї роботи?
Чи потрібні тести для роботи розробнику?
Чи можна пришвидшити розробку завдяки тестам?
Чи можна запускати тести на реальних даних?
Чи можна тестувати зовнішні живі сервіси без впливу на їх роботу?
Що тобі заважає, щоб почати писати тести?
Чому клієнт не хоче оплачувати написання тестів?
Що таке ризики розробки і як ними керувати?
Ваші розробники вже пишуть тести!!!*
Кожна команда хоч раз писала
ось такий код
Цей код - це і є зародки тестів*.
*див.: чи потрібні тести розробникам?
Ситуація, яка змінила все...
(с) Дмитро Данилевський 2016-2017
Чи можна пришвидшити розробку з тестами?
А чи можна замінити повільні виклики швидкими?
Стара школа
Мінуси
● Присутній код, який 100% нереально зрозуміти через місяць
● Часто цей код містить важливу інформацію (ключі, паролі)
● Не до кінця зрозуміло, який код робочий, а який - тести
● Руйнуємо принципи code coverage, коли в коді присутні частини, які насправді ніколи не
виконуються.
Можна,
якщо дати розробникам схожий по часу написання інструмент
*потрібно змінити функціональне мислення на
об’єктне
Можливість швидких точок для відладки (breakpoints)
/devel/php
drush ev
*код з devel/php одразу викидається, максимум - додається в README.md
Перша думка - зробіть Behat тест*
*Можна, але він буде
доходити до потрібної
точки відладки так само
довго, як і людина. А
тобто
ПО-ВІ-ЛЬНО
*в копілку міфів
Друга думка - PHPUnit (unit тести)
Плюси
Швидкість
Легкість відладки
PHPUnit (unit тести)
Мінуси
пекло setUp()
відсутні реальні дані
PHPUnit (unit тести)
Мінуси*
пекло setUp() - за нас вже все
робить ядро!
відсутні реальні дані - а якщо
запускати PHPUnit на
реальній базі?
*Ми створили phpunit_tdd модуль...
*few hours of @podarok and @danylevskyi
Як запустити тести - розробнику
Звичайна drush ev команда, або власна, самописна - запускає тест
~4 секунди для отримання точки зупинки IDE xdebug
Як запустити тести - для QA
- відкрий білд сайт (с)CIBox
- увімкни devel
- відкрий /devel/php
- запусти код
-
-
-
- результат повинен вернути посилання на сторінку
Як запустити тести - клієнту
- відкрий білд сайт
- увімкни модуль mocker
- перейди на форму підписки на електронні розсилки*
- внеси свою пошту client@enterprisesolutions.com
- після відправки повинен отримати повідомлення на свою електронну
пошту про вдалу підписку на сайті
*на зовнішньому сервісі ніяких змін
Підсумок
- підміна сервісів mock() об’єктами (а не підміна даних)
- використання тестів для швидких точок входу відладки (а не для
звітування про 100% test coverage)
- для розробників сайтів тести потрібні лише для швидкості і безпеки
використання зовнішніх сервісів, а не для покриття всього коду
- все, що хочеться втілити в рамках команди - вже існує, потрібно лише
зловити точку входу і визначити, як і в якій формі воно вже існує. І це
робота Tech Lead|Architect.
Демо сервісу mocker
Тільки якщо є час
Посилання на код
http://bit.ly/mocker_config_mvp
http://bit.ly/mocker_mock_service_factory
http://bit.ly/mocker_decoration
Завдання: опублікувати на drupal.org
Демо тестів phpunit_tdd
Тільки якщо є час
Посилання на код
http://bit.ly/phpunit_tdd_drush_runner
http://bit.ly/phpunit_tdd_test_runner
http://bit.ly/phpunit_tdd_tests
Завдання: опублікувати на drupal.org
Книга, яка варта уваги в контексті доповіді*
http://bit.ly/думай_як_фрік
*так, книги все ще друкуються і деякі навіть варті до прочитання
Запитання
http://dgo.to/@podarok
Андрій Поданенко
SW/HW Architect, FFW
Group Lead, FFW
drupal.ua mentor

More Related Content

What's hot

Як покращити Python web UI тести
Як покращити Python web UI тестиЯк покращити Python web UI тести
Як покращити Python web UI тестиRomanPobotin1
 
МИКОЛА СОЛОПІЙ «Формула успішного переходу від manual до automation testing» ...
МИКОЛА СОЛОПІЙ «Формула успішного переходу від manual до automation testing» ...МИКОЛА СОЛОПІЙ «Формула успішного переходу від manual до automation testing» ...
МИКОЛА СОЛОПІЙ «Формула успішного переходу від manual до automation testing» ...GoQA
 
Тестування ПЗ
Тестування ПЗТестування ПЗ
Тестування ПЗKyrylo Bezpalyi
 
СВІТЛАНА ПРИШЛЯК «Тестування управління процесами на різних рівнях в компанія...
СВІТЛАНА ПРИШЛЯК «Тестування управління процесами на різних рівнях в компанія...СВІТЛАНА ПРИШЛЯК «Тестування управління процесами на різних рівнях в компанія...
СВІТЛАНА ПРИШЛЯК «Тестування управління процесами на різних рівнях в компанія...GoQA
 
Testing Web in Agile
Testing Web in AgileTesting Web in Agile
Testing Web in AgileA1eksandras
 
Oleksandr Krakovetskyi: Чому створення data strategy для компаній – це першоч...
Oleksandr Krakovetskyi: Чому створення data strategy для компаній – це першоч...Oleksandr Krakovetskyi: Чому створення data strategy для компаній – це першоч...
Oleksandr Krakovetskyi: Чому створення data strategy для компаній – це першоч...Lviv Startup Club
 
Web Testing in Agile
Web Testing in AgileWeb Testing in Agile
Web Testing in AgileAlex Belik
 
Основні метрики юзабіліті тестування
Основні метрики юзабіліті тестуванняОсновні метрики юзабіліті тестування
Основні метрики юзабіліті тестуванняYuri Ternytsky
 
Тестувальник ПО
Тестувальник ПОТестувальник ПО
Тестувальник ПОssuser9db621
 
Тестувальник ПО
Тестувальник ПОТестувальник ПО
Тестувальник ПОssuser9db621
 
Тестувальник ПО
Тестувальник ПОТестувальник ПО
Тестувальник ПОssuser9db621
 

What's hot (11)

Як покращити Python web UI тести
Як покращити Python web UI тестиЯк покращити Python web UI тести
Як покращити Python web UI тести
 
МИКОЛА СОЛОПІЙ «Формула успішного переходу від manual до automation testing» ...
МИКОЛА СОЛОПІЙ «Формула успішного переходу від manual до automation testing» ...МИКОЛА СОЛОПІЙ «Формула успішного переходу від manual до automation testing» ...
МИКОЛА СОЛОПІЙ «Формула успішного переходу від manual до automation testing» ...
 
Тестування ПЗ
Тестування ПЗТестування ПЗ
Тестування ПЗ
 
СВІТЛАНА ПРИШЛЯК «Тестування управління процесами на різних рівнях в компанія...
СВІТЛАНА ПРИШЛЯК «Тестування управління процесами на різних рівнях в компанія...СВІТЛАНА ПРИШЛЯК «Тестування управління процесами на різних рівнях в компанія...
СВІТЛАНА ПРИШЛЯК «Тестування управління процесами на різних рівнях в компанія...
 
Testing Web in Agile
Testing Web in AgileTesting Web in Agile
Testing Web in Agile
 
Oleksandr Krakovetskyi: Чому створення data strategy для компаній – це першоч...
Oleksandr Krakovetskyi: Чому створення data strategy для компаній – це першоч...Oleksandr Krakovetskyi: Чому створення data strategy для компаній – це першоч...
Oleksandr Krakovetskyi: Чому створення data strategy для компаній – це першоч...
 
Web Testing in Agile
Web Testing in AgileWeb Testing in Agile
Web Testing in Agile
 
Основні метрики юзабіліті тестування
Основні метрики юзабіліті тестуванняОсновні метрики юзабіліті тестування
Основні метрики юзабіліті тестування
 
Тестувальник ПО
Тестувальник ПОТестувальник ПО
Тестувальник ПО
 
Тестувальник ПО
Тестувальник ПОТестувальник ПО
Тестувальник ПО
 
Тестувальник ПО
Тестувальник ПОТестувальник ПО
Тестувальник ПО
 

Viewers also liked

Головні Принципи Автоматизації
Головні Принципи АвтоматизаціїГоловні Принципи Автоматизації
Головні Принципи АвтоматизаціїAndrii Podanenko
 
Drupal 8 configuration development flow
Drupal 8 configuration development flowDrupal 8 configuration development flow
Drupal 8 configuration development flowAndrii Podanenko
 
Ubercart7 views catalog ru
Ubercart7 views catalog ruUbercart7 views catalog ru
Ubercart7 views catalog ruAndrii Podanenko
 
Docker SQL Continuous Integration Flow
Docker SQL Continuous Integration FlowDocker SQL Continuous Integration Flow
Docker SQL Continuous Integration FlowAndrii Podanenko
 
Drupal codesprint kyiv drupal cafe 07.02.2013
Drupal codesprint   kyiv drupal cafe 07.02.2013Drupal codesprint   kyiv drupal cafe 07.02.2013
Drupal codesprint kyiv drupal cafe 07.02.2013Andrii Podanenko
 
Do + ldo for developers(full)
Do + ldo for developers(full)Do + ldo for developers(full)
Do + ldo for developers(full)Andrii Podanenko
 
Drupal на 20-ти мегабайтах или издевательства над Shared Hosting
Drupal на 20-ти мегабайтах или издевательства над Shared HostingDrupal на 20-ти мегабайтах или издевательства над Shared Hosting
Drupal на 20-ти мегабайтах или издевательства над Shared HostingAndrii Podanenko
 
Happy ever afters with ci workflow
Happy ever afters with ci workflowHappy ever afters with ci workflow
Happy ever afters with ci workflowAlbina Tiupa
 
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичковOvadiah Myrgorod
 
Who is here? DrupalCamp Kyiv 2009 opening
Who is here? DrupalCamp Kyiv 2009 openingWho is here? DrupalCamp Kyiv 2009 opening
Who is here? DrupalCamp Kyiv 2009 openingDrupal Camp Kyiv
 
Порівняння Drupal та Typo3
Порівняння Drupal та Typo3Порівняння Drupal та Typo3
Порівняння Drupal та Typo3Drupal Camp Kyiv
 
CIbox - OpenSource solution for making your #devops better
CIbox - OpenSource solution for making your #devops betterCIbox - OpenSource solution for making your #devops better
CIbox - OpenSource solution for making your #devops betterAndrii Podanenko
 
Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011
Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011
Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011camp_drupal_ua
 
Drupal contrib module maintaining
Drupal contrib module maintainingDrupal contrib module maintaining
Drupal contrib module maintainingAndrii Podanenko
 
Live deployment, ci, drupal
Live deployment, ci, drupalLive deployment, ci, drupal
Live deployment, ci, drupalAndrii Podanenko
 
Load Testing with JMeter
Load Testing with JMeterLoad Testing with JMeter
Load Testing with JMeterYuriy Gerasimov
 

Viewers also liked (20)

Головні Принципи Автоматизації
Головні Принципи АвтоматизаціїГоловні Принципи Автоматизації
Головні Принципи Автоматизації
 
Feeds drupal cafe
Feeds drupal cafeFeeds drupal cafe
Feeds drupal cafe
 
Drupal Optimization
Drupal OptimizationDrupal Optimization
Drupal Optimization
 
Drupal 8 configuration development flow
Drupal 8 configuration development flowDrupal 8 configuration development flow
Drupal 8 configuration development flow
 
Ubercart7 views catalog ru
Ubercart7 views catalog ruUbercart7 views catalog ru
Ubercart7 views catalog ru
 
Docker SQL Continuous Integration Flow
Docker SQL Continuous Integration FlowDocker SQL Continuous Integration Flow
Docker SQL Continuous Integration Flow
 
Drupal codesprint kyiv drupal cafe 07.02.2013
Drupal codesprint   kyiv drupal cafe 07.02.2013Drupal codesprint   kyiv drupal cafe 07.02.2013
Drupal codesprint kyiv drupal cafe 07.02.2013
 
Do + ldo for developers(full)
Do + ldo for developers(full)Do + ldo for developers(full)
Do + ldo for developers(full)
 
Drupal на 20-ти мегабайтах или издевательства над Shared Hosting
Drupal на 20-ти мегабайтах или издевательства над Shared HostingDrupal на 20-ти мегабайтах или издевательства над Shared Hosting
Drupal на 20-ти мегабайтах или издевательства над Shared Hosting
 
Happy ever afters with ci workflow
Happy ever afters with ci workflowHappy ever afters with ci workflow
Happy ever afters with ci workflow
 
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичков
 
Who is here? DrupalCamp Kyiv 2009 opening
Who is here? DrupalCamp Kyiv 2009 openingWho is here? DrupalCamp Kyiv 2009 opening
Who is here? DrupalCamp Kyiv 2009 opening
 
Порівняння Drupal та Typo3
Порівняння Drupal та Typo3Порівняння Drupal та Typo3
Порівняння Drupal та Typo3
 
CIbox - OpenSource solution for making your #devops better
CIbox - OpenSource solution for making your #devops betterCIbox - OpenSource solution for making your #devops better
CIbox - OpenSource solution for making your #devops better
 
Drupal Paranoia
Drupal ParanoiaDrupal Paranoia
Drupal Paranoia
 
Lviv 2013 d7 vs d8
Lviv 2013   d7 vs d8Lviv 2013   d7 vs d8
Lviv 2013 d7 vs d8
 
Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011
Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011
Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011
 
Drupal contrib module maintaining
Drupal contrib module maintainingDrupal contrib module maintaining
Drupal contrib module maintaining
 
Live deployment, ci, drupal
Live deployment, ci, drupalLive deployment, ci, drupal
Live deployment, ci, drupal
 
Load Testing with JMeter
Load Testing with JMeterLoad Testing with JMeter
Load Testing with JMeter
 

Similar to природна і економна дорожня карта для переходу команди розробки на тест центровану розробку

ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»GoQA
 
Корнілов Андрій
Корнілов АндрійКорнілов Андрій
Корнілов АндрійOleg Nazarevych
 
ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...
ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...
ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...GoQA
 
Упр. ІТпроектами 6 лекція Добривода Наталя, СН-21
Упр. ІТпроектами 6 лекція Добривода Наталя, СН-21Упр. ІТпроектами 6 лекція Добривода Наталя, СН-21
Упр. ІТпроектами 6 лекція Добривода Наталя, СН-21Oleg Nazarevych
 
Денис Павленко “CRUD&A як ще одна НОВА техніка тест дизайну” (CRUDA – їCreate...
Денис Павленко “CRUD&A як ще одна НОВА техніка тест дизайну” (CRUDA – їCreate...Денис Павленко “CRUD&A як ще одна НОВА техніка тест дизайну” (CRUDA – їCreate...
Денис Павленко “CRUD&A як ще одна НОВА техніка тест дизайну” (CRUDA – їCreate...Dakiry
 
Global logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsGlobal logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsPavlo Iuriichuk
 
Павло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoПавло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoGlobalLogic Ukraine
 
Nikita Zahurdaiev: Найдієвіші методології для PMO (UA)
Nikita Zahurdaiev: Найдієвіші методології для PMO (UA)Nikita Zahurdaiev: Найдієвіші методології для PMO (UA)
Nikita Zahurdaiev: Найдієвіші методології для PMO (UA)Lviv Startup Club
 
Нікіта Загурдаєв - Найдієвіші методології для PMO
Нікіта Загурдаєв - Найдієвіші методології для PMOНікіта Загурдаєв - Найдієвіші методології для PMO
Нікіта Загурдаєв - Найдієвіші методології для PMONikita Zahurdaiev
 
Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...
Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...
Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...Lviv Startup Club
 
PMLab. Алена Прихнич и Ірина Пашко "Як масштабувати agile на великі проекти"
PMLab. Алена Прихнич и Ірина Пашко "Як масштабувати agile на великі проекти"PMLab. Алена Прихнич и Ірина Пашко "Як масштабувати agile на великі проекти"
PMLab. Алена Прихнич и Ірина Пашко "Як масштабувати agile на великі проекти"GeeksLab Odessa
 
"Rethinking Continuous Delivery", Andrii Nasinnyk
"Rethinking Continuous Delivery",  Andrii Nasinnyk"Rethinking Continuous Delivery",  Andrii Nasinnyk
"Rethinking Continuous Delivery", Andrii NasinnykFwdays
 
Введення в програмну інженерію
Введення в програмну інженеріюВведення в програмну інженерію
Введення в програмну інженеріюOleg Nazarevych
 
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ..."Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...Fwdays
 
РОМАН МАРІНСЬКИЙ «Організація та покращення QA Center of Excellence» QADay
РОМАН МАРІНСЬКИЙ «Організація та покращення QA Center of Excellence» QADayРОМАН МАРІНСЬКИЙ «Організація та покращення QA Center of Excellence» QADay
РОМАН МАРІНСЬКИЙ «Організація та покращення QA Center of Excellence» QADayGoQA
 
Посада Project manager в it компанії
 Посада Project manager в it компанії Посада Project manager в it компанії
Посада Project manager в it компаніїSergey Xolin
 
Caliburn Micro Overview
Caliburn Micro OverviewCaliburn Micro Overview
Caliburn Micro OverviewKiev ALT.NET
 
Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...
Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...
Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...Lviv Startup Club
 

Similar to природна і економна дорожня карта для переходу команди розробки на тест центровану розробку (20)

ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
ОЛЕГ ЗАРЕВИЧ «Shift left та Shift Right підходи до тестування»
 
Корнілов Андрій
Корнілов АндрійКорнілов Андрій
Корнілов Андрій
 
ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...
ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...
ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...
 
Упр. ІТпроектами 6 лекція Добривода Наталя, СН-21
Упр. ІТпроектами 6 лекція Добривода Наталя, СН-21Упр. ІТпроектами 6 лекція Добривода Наталя, СН-21
Упр. ІТпроектами 6 лекція Добривода Наталя, СН-21
 
Денис Павленко “CRUD&A як ще одна НОВА техніка тест дизайну” (CRUDA – їCreate...
Денис Павленко “CRUD&A як ще одна НОВА техніка тест дизайну” (CRUDA – їCreate...Денис Павленко “CRUD&A як ще одна НОВА техніка тест дизайну” (CRUDA – їCreate...
Денис Павленко “CRUD&A як ще одна НОВА техніка тест дизайну” (CRUDA – їCreate...
 
Global logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsGlobal logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.js
 
Павло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoПавло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. Howto
 
Nikita Zahurdaiev: Найдієвіші методології для PMO (UA)
Nikita Zahurdaiev: Найдієвіші методології для PMO (UA)Nikita Zahurdaiev: Найдієвіші методології для PMO (UA)
Nikita Zahurdaiev: Найдієвіші методології для PMO (UA)
 
Нікіта Загурдаєв - Найдієвіші методології для PMO
Нікіта Загурдаєв - Найдієвіші методології для PMOНікіта Загурдаєв - Найдієвіші методології для PMO
Нікіта Загурдаєв - Найдієвіші методології для PMO
 
Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...
Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...
Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...
 
PMLab. Алена Прихнич и Ірина Пашко "Як масштабувати agile на великі проекти"
PMLab. Алена Прихнич и Ірина Пашко "Як масштабувати agile на великі проекти"PMLab. Алена Прихнич и Ірина Пашко "Як масштабувати agile на великі проекти"
PMLab. Алена Прихнич и Ірина Пашко "Як масштабувати agile на великі проекти"
 
cpp-2013 #3 OOP Basics
cpp-2013 #3 OOP Basicscpp-2013 #3 OOP Basics
cpp-2013 #3 OOP Basics
 
"Rethinking Continuous Delivery", Andrii Nasinnyk
"Rethinking Continuous Delivery",  Andrii Nasinnyk"Rethinking Continuous Delivery",  Andrii Nasinnyk
"Rethinking Continuous Delivery", Andrii Nasinnyk
 
Введення в програмну інженерію
Введення в програмну інженеріюВведення в програмну інженерію
Введення в програмну інженерію
 
документ Microsoft word
документ Microsoft wordдокумент Microsoft word
документ Microsoft word
 
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ..."Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
 
РОМАН МАРІНСЬКИЙ «Організація та покращення QA Center of Excellence» QADay
РОМАН МАРІНСЬКИЙ «Організація та покращення QA Center of Excellence» QADayРОМАН МАРІНСЬКИЙ «Організація та покращення QA Center of Excellence» QADay
РОМАН МАРІНСЬКИЙ «Організація та покращення QA Center of Excellence» QADay
 
Посада Project manager в it компанії
 Посада Project manager в it компанії Посада Project manager в it компанії
Посада Project manager в it компанії
 
Caliburn Micro Overview
Caliburn Micro OverviewCaliburn Micro Overview
Caliburn Micro Overview
 
Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...
Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...
Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...
 

More from Andrii Podanenko

Глобальні навчальні дні друпал
Глобальні навчальні дні друпалГлобальні навчальні дні друпал
Глобальні навчальні дні друпалAndrii Podanenko
 
Drupal 8 DevOps . Profile and SQL flows.
Drupal 8 DevOps . Profile and SQL flows.Drupal 8 DevOps . Profile and SQL flows.
Drupal 8 DevOps . Profile and SQL flows.Andrii Podanenko
 
MoldCamp - multidimentional testing workflow. CIBox.
MoldCamp  - multidimentional testing workflow. CIBox.MoldCamp  - multidimentional testing workflow. CIBox.
MoldCamp - multidimentional testing workflow. CIBox.Andrii Podanenko
 
DrupalCon Los Angeles - Continuous Integration Toolbox
DrupalCon Los Angeles - Continuous Integration ToolboxDrupalCon Los Angeles - Continuous Integration Toolbox
DrupalCon Los Angeles - Continuous Integration ToolboxAndrii Podanenko
 
Drupal Continuous Integration Workflow
Drupal Continuous Integration WorkflowDrupal Continuous Integration Workflow
Drupal Continuous Integration WorkflowAndrii Podanenko
 
Сейчас самое время...ЖИТЬ!
Сейчас самое время...ЖИТЬ!Сейчас самое время...ЖИТЬ!
Сейчас самое время...ЖИТЬ!Andrii Podanenko
 
Drupal 8 what to wait from
Drupal 8   what to wait fromDrupal 8   what to wait from
Drupal 8 what to wait fromAndrii Podanenko
 
Диалоговый интенсив 2012 карпаты
Диалоговый интенсив 2012 карпатыДиалоговый интенсив 2012 карпаты
Диалоговый интенсив 2012 карпатыAndrii Podanenko
 
психолог в социальных медиа
психолог в социальных медиапсихолог в социальных медиа
психолог в социальных медиаAndrii Podanenko
 
Ubercart7 Dynamic properties ru
Ubercart7 Dynamic properties ruUbercart7 Dynamic properties ru
Ubercart7 Dynamic properties ruAndrii Podanenko
 
Yaremchuk - Drupal CodeLobster
Yaremchuk - Drupal CodeLobsterYaremchuk - Drupal CodeLobster
Yaremchuk - Drupal CodeLobsterAndrii Podanenko
 
Yaremchuk - Корпоративные сайты
Yaremchuk - Корпоративные сайтыYaremchuk - Корпоративные сайты
Yaremchuk - Корпоративные сайтыAndrii Podanenko
 
управление проектами отношение к клиенту
управление проектами   отношение к клиентууправление проектами   отношение к клиенту
управление проектами отношение к клиентуAndrii Podanenko
 
Друпал - стандартні модулі
Друпал - стандартні модуліДрупал - стандартні модулі
Друпал - стандартні модуліAndrii Podanenko
 

More from Andrii Podanenko (19)

Глобальні навчальні дні друпал
Глобальні навчальні дні друпалГлобальні навчальні дні друпал
Глобальні навчальні дні друпал
 
Drupal 8 DevOps . Profile and SQL flows.
Drupal 8 DevOps . Profile and SQL flows.Drupal 8 DevOps . Profile and SQL flows.
Drupal 8 DevOps . Profile and SQL flows.
 
MoldCamp - multidimentional testing workflow. CIBox.
MoldCamp  - multidimentional testing workflow. CIBox.MoldCamp  - multidimentional testing workflow. CIBox.
MoldCamp - multidimentional testing workflow. CIBox.
 
DrupalCon Los Angeles - Continuous Integration Toolbox
DrupalCon Los Angeles - Continuous Integration ToolboxDrupalCon Los Angeles - Continuous Integration Toolbox
DrupalCon Los Angeles - Continuous Integration Toolbox
 
Drupal Continuous Integration Workflow
Drupal Continuous Integration WorkflowDrupal Continuous Integration Workflow
Drupal Continuous Integration Workflow
 
Сейчас самое время...ЖИТЬ!
Сейчас самое время...ЖИТЬ!Сейчас самое время...ЖИТЬ!
Сейчас самое время...ЖИТЬ!
 
Start using vagrant now!
Start using vagrant now!Start using vagrant now!
Start using vagrant now!
 
Drupal 8 what to wait from
Drupal 8   what to wait fromDrupal 8   what to wait from
Drupal 8 what to wait from
 
Диалоговый интенсив 2012 карпаты
Диалоговый интенсив 2012 карпатыДиалоговый интенсив 2012 карпаты
Диалоговый интенсив 2012 карпаты
 
психолог в социальных медиа
психолог в социальных медиапсихолог в социальных медиа
психолог в социальных медиа
 
Ubercart7 Dynamic properties ru
Ubercart7 Dynamic properties ruUbercart7 Dynamic properties ru
Ubercart7 Dynamic properties ru
 
Ubercart 7 ru
Ubercart 7 ruUbercart 7 ru
Ubercart 7 ru
 
Drupal 7 database api
Drupal 7 database api Drupal 7 database api
Drupal 7 database api
 
Yaremchuk - Drupal CodeLobster
Yaremchuk - Drupal CodeLobsterYaremchuk - Drupal CodeLobster
Yaremchuk - Drupal CodeLobster
 
Yaremchuk - Корпоративные сайты
Yaremchuk - Корпоративные сайтыYaremchuk - Корпоративные сайты
Yaremchuk - Корпоративные сайты
 
управление проектами отношение к клиенту
управление проектами   отношение к клиентууправление проектами   отношение к клиенту
управление проектами отношение к клиенту
 
Друпал - стандартні модулі
Друпал - стандартні модуліДрупал - стандартні модулі
Друпал - стандартні модулі
 
Друпал Drush
Друпал DrushДрупал Drush
Друпал Drush
 
Drupal Migrate
Drupal MigrateDrupal Migrate
Drupal Migrate
 

природна і економна дорожня карта для переходу команди розробки на тест центровану розробку

  • 1. Природня і економна дорожня карта для переходу команди розробки на Тест центровану розробку phpunit_tdd && mocker Луцьк 2017
  • 2. Для кого ця доповідь Керівники команд Технічні керівники Архітектори Бізнес аналітики Професіонали back-end Архітектори рішень Менеджери проектів DevOps із хорошою Dev частиною *всім, кого не перераховано - срочно перепрофільовуватись!!! :)
  • 3. Всі* ми виросли з функціонального програмування - ми звикли мислити локальними рішеннями, а не об’єктним, бізнес підходом. - ми досі мислимо даними, масивами даних, а не поведінкою чи стратегіями - ми намагаємось вирішувати проблеми на тактичному, замість реалізації незначних змін на стратегічному рівні - ми думаємо, що швидкість досягається економією, але насправді швидкість - це оптимізація процесів і підходів, а не кількості чи якості коду.<?php function get_shit($input_shit) { return $output_shit; } in progress...........
  • 4. Демотиватори і міфи написання тестів - Колись будемо писати, зараз немає на це часу - Підтримка тестів - це біль - Тести потрібно створювати для бібліотек - Запуск тестів - це довго - Тести потрібно писати ідеально, або взагалі не братись за них - Тести сповільнюють розробку - Неможливо запускати тести на реальних даних - Тести потрібні тільки для ядра
  • 6. Правильні запитання для початку А чи не пишуть раптом розробники вже тести під час своєї роботи? Чи потрібні тести для роботи розробнику? Чи можна пришвидшити розробку завдяки тестам? Чи можна запускати тести на реальних даних? Чи можна тестувати зовнішні живі сервіси без впливу на їх роботу? Що тобі заважає, щоб почати писати тести? Чому клієнт не хоче оплачувати написання тестів? Що таке ризики розробки і як ними керувати?
  • 7. Ваші розробники вже пишуть тести!!!* Кожна команда хоч раз писала ось такий код Цей код - це і є зародки тестів*. *див.: чи потрібні тести розробникам?
  • 8. Ситуація, яка змінила все... (с) Дмитро Данилевський 2016-2017
  • 9. Чи можна пришвидшити розробку з тестами?
  • 10. А чи можна замінити повільні виклики швидкими? Стара школа Мінуси ● Присутній код, який 100% нереально зрозуміти через місяць ● Часто цей код містить важливу інформацію (ключі, паролі) ● Не до кінця зрозуміло, який код робочий, а який - тести ● Руйнуємо принципи code coverage, коли в коді присутні частини, які насправді ніколи не виконуються.
  • 11. Можна, якщо дати розробникам схожий по часу написання інструмент *потрібно змінити функціональне мислення на об’єктне
  • 12. Можливість швидких точок для відладки (breakpoints) /devel/php drush ev *код з devel/php одразу викидається, максимум - додається в README.md
  • 13. Перша думка - зробіть Behat тест* *Можна, але він буде доходити до потрібної точки відладки так само довго, як і людина. А тобто ПО-ВІ-ЛЬНО *в копілку міфів
  • 14. Друга думка - PHPUnit (unit тести) Плюси Швидкість Легкість відладки
  • 15. PHPUnit (unit тести) Мінуси пекло setUp() відсутні реальні дані
  • 16.
  • 17.
  • 18. PHPUnit (unit тести) Мінуси* пекло setUp() - за нас вже все робить ядро! відсутні реальні дані - а якщо запускати PHPUnit на реальній базі? *Ми створили phpunit_tdd модуль...
  • 19. *few hours of @podarok and @danylevskyi
  • 20. Як запустити тести - розробнику Звичайна drush ev команда, або власна, самописна - запускає тест ~4 секунди для отримання точки зупинки IDE xdebug
  • 21. Як запустити тести - для QA - відкрий білд сайт (с)CIBox - увімкни devel - відкрий /devel/php - запусти код - - - - результат повинен вернути посилання на сторінку
  • 22. Як запустити тести - клієнту - відкрий білд сайт - увімкни модуль mocker - перейди на форму підписки на електронні розсилки* - внеси свою пошту client@enterprisesolutions.com - після відправки повинен отримати повідомлення на свою електронну пошту про вдалу підписку на сайті *на зовнішньому сервісі ніяких змін
  • 23. Підсумок - підміна сервісів mock() об’єктами (а не підміна даних) - використання тестів для швидких точок входу відладки (а не для звітування про 100% test coverage) - для розробників сайтів тести потрібні лише для швидкості і безпеки використання зовнішніх сервісів, а не для покриття всього коду - все, що хочеться втілити в рамках команди - вже існує, потрібно лише зловити точку входу і визначити, як і в якій формі воно вже існує. І це робота Tech Lead|Architect.
  • 24. Демо сервісу mocker Тільки якщо є час Посилання на код http://bit.ly/mocker_config_mvp http://bit.ly/mocker_mock_service_factory http://bit.ly/mocker_decoration Завдання: опублікувати на drupal.org
  • 25. Демо тестів phpunit_tdd Тільки якщо є час Посилання на код http://bit.ly/phpunit_tdd_drush_runner http://bit.ly/phpunit_tdd_test_runner http://bit.ly/phpunit_tdd_tests Завдання: опублікувати на drupal.org
  • 26. Книга, яка варта уваги в контексті доповіді* http://bit.ly/думай_як_фрік *так, книги все ще друкуються і деякі навіть варті до прочитання

Editor's Notes

  1. Доповідь націлена ось на цю аудиторію ... Далі, хочу поговорити про деякі важливі речі
  2. На слові Всі - поправка. Думаю, що вже присутня частина щасливих людей, які не почали свою технічну кар’єру з функціонального програмування. Щасливчики. У них пустують елементи пам’яті в мозку, які в інших зайняті функціональним програмуванням.
  3. І всі ці “важливі речі” - це булшіт Спонсор цього слайду - 123RF фотобанк
  4. Щоб не мати справу з бичим гівном, варто замислитись про постановку правильних запитань Не знаю, чи встигнемо обговорити сьогодні всі ці питання, в даній доповіді я не всі розкрив, тому можемо частину з них залишити на післякафе.
  5. Діма, як загалом і я і надіюсь більшість розробників - біситься, коли відладка відбувається довго. На слайді можна побачити Діму Данилевського, автора цих рядків. Придивіться в це обличчя - так виглядає дуже лінива людина. Головні ознаки - несиметричність обличчя, багато посмішки і приховані бісики в очах, які дуже сильно все змінюють, коли код виконується довго і відладка займає багато часу. Така ось проста функція допомагає викликати потрібний код миттєво і продовжити роботу. От тільки після завершення роботи - ця функція витиралась. Тобто мені для слайду прийшлося написати ось цей код, щоб продемонструвати його, бо код ніколи не додавався в репозиторій. А дізнався я про наявність цього коду лише під час парного програмування з Дімою.
  6. Для тих, хто ще не в курсі - це друпал8, або Symfony, кожен із викликів addStep - це окремий сервіс, об’єкт, який повинен проініціалізуватись і отримати якісь дані для наступного кроку Викликаються вони по черзі В конкретно цьому випадку - на першому кроці час відгуку методу fetch - до 5 хвилин. Тобто, якщо ведеться робота на другому-четвертому кроках, рахуйте скільки часу піде на розробку, debug, пошук вади А скільки часу піде через 3 місяці?, коли навіть той, хто розробляв цей код - забув як він працює.
  7. я не хочу, щоб ви зараз замислювались про те, як це було зроблено технічно. Але тут я показую, як рівень мислення даними - (обробляти 3 елементи замість всіх), варто замінити на об’єктний - підміняємо сервіс, об’єкт, тим, який буде віддавати тестові дані і не лізти на зовнішній сервіс чи в базу. Звучить страшно, але не подолавши цей страх
  8. Крім інструменту - потрібно думати щодо швидкості відтворення середовища і контексту.
  9. ну тобто PHPUnit - теж не підходить
  10. Але... Якщо все ж по думати і...
  11. якщо забрати мінуси? setUp() - це те, що готує для нас Ядро. Всі сервіси, всі дані.