Юнит тестирование в веб. Какполучать пользу и удовольствие.         Рябенко Сергей. 09.06.2012.
Определения• Unit testing — процесс в программировании, позволяющий  проверить на корректность отдельные модули исходного ...
Простой тест из документации PHPUnit
Исходные данные                  Через пол года•   Покрываем код на 100%        •   Править тесты гораздо•   Фича не сдана...
Когда не стоит писать тесты•   При создании прототипа•   При работе «в потоке»•   На «примитивный код»•   На пользовательс...
Когда СТОИТ писать тесты• Во всех остальных случаях...• … Когда вы делаете это правильно!!!
Как писать тесты правильно• Писать хороший код• Тестировать поведение и помнить о FIRST принципах• Использовать правильные...
Писать хороший код
И это только треть!
Тестировать поведение• 10 Сформулировать требования к коду• 20 Изложить их в тесте в виде:  // GIVEN  // WHEN  // THEN  Та...
Red Green Refactor
F.I.R.S.T•   Fast•   Isolated•   Repeatable•   Self-Verifying•   Timely
Использовать правильные инструменты• PHPUnit. Не Lime и не любой другой lim’о подобный  фреймворк!• IDE debug в тестах• Не...
Inversion of Controll•   Правильно расписать «швы» системы. Не создавать сервисы в    классах-клиентах. Не использовать ни...
Dependency Injection
Service Locator
Mock objects
Шаблоны проектирования• SOLID  –   Single responsibility principle  –   Open/closed principle  –   Liskov substitution pri...
Legacy code
Пример
Мы решаем 100% кода покрывать юнит                 тестами!• mail слишком сложно тестировать• При тестировании каждого асп...
Какие есть проблемы в коде?Явные проблемы:•$user->setUsername($usermame);•if (!$form->isValid()) ; <--•$form – неинициализ...
Исправленный пример
Спасибо за внимание• Задавайте вопросы• Пишите мне  – Email: ryabenko.sergey@gmail.com  – Skype: s.ryabenko
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
Upcoming SlideShare
Loading in …5
×

Юнит тестирование в Web. Как получать пользу и удовольствие.

859 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
859
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • История про биллинг
  • Со временем класс начал расширяться за счет роста функционала
  • Добавить следующий слайд с демонстрацией тестов по каждой финансовой операции отдельно.
  • INS: сейчас биллинг используется в нескольких проектах в виде плагина, который поставляется с набором базовых функций (ввода/вывода денег через различные платежные системы) и легко расширяется под конкретные нужды каждого проекта. Когда
  • Описание каждого паттерна, как они помогают в тестировании
  • Изменить код, сделать невыполняющуюся проверку неважной (к примеру начисление бонуса, если регистрируется с купоном)
  • Юнит тестирование в Web. Как получать пользу и удовольствие.

    1. 1. Юнит тестирование в веб. Какполучать пользу и удовольствие. Рябенко Сергей. 09.06.2012.
    2. 2. Определения• Unit testing — процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы.• Удовольствие — положительно окрашенная эмоция, сопровождающая удовлетворение одной или нескольких потребностей.• Польза — …(c) wikipedia.org
    3. 3. Простой тест из документации PHPUnit
    4. 4. Исходные данные Через пол года• Покрываем код на 100% • Править тесты гораздо• Фича не сдана, если на нее сложнее чем код не написаны тесты • Тесты до 1500 строк!• Используем PHPUnit • Тесты выполняются больше• Непрерывная интеграция часа • При выполнении тестов PHP падает по памяти • Баги все равно находятся
    5. 5. Когда не стоит писать тесты• При создании прототипа• При работе «в потоке»• На «примитивный код»• На пользовательский интерфейс• You are doing it wrong• Ваши варианты?..
    6. 6. Когда СТОИТ писать тесты• Во всех остальных случаях...• … Когда вы делаете это правильно!!!
    7. 7. Как писать тесты правильно• Писать хороший код• Тестировать поведение и помнить о FIRST принципах• Использовать правильные инструменты – PHPUnit – Непрерывная интеграция• Использовать IoC – Dependency Injection – Service Locator• Использовать Mock/Stub объекты• Применять шаблоны SOLID, GRASP (Low coupling, High Cohesion, Factory)
    8. 8. Писать хороший код
    9. 9. И это только треть!
    10. 10. Тестировать поведение• 10 Сформулировать требования к коду• 20 Изложить их в тесте в виде: // GIVEN // WHEN // THEN Так же называется AAA (Arrange-Act-Assert)• 30 Запустить, убедится что тест не проходит• 40 Написать код• 50 Запустить, убедится что тест проходит• 60 При необходимости или желании провести рефакторинг кода• GOTO 10
    11. 11. Red Green Refactor
    12. 12. F.I.R.S.T• Fast• Isolated• Repeatable• Self-Verifying• Timely
    13. 13. Использовать правильные инструменты• PHPUnit. Не Lime и не любой другой lim’о подобный фреймворк!• IDE debug в тестах• Непрерывная интеграция – CruiseControl (PHPUnderControl) – Hudson – TeamCity• Запускать тесты каждый вечер автоматически• Запускать группы тестов перед каждым коммитом• Не меряйтесь процентом покрытия кода тестами
    14. 14. Inversion of Controll• Правильно расписать «швы» системы. Не создавать сервисы в классах-клиентах. Не использовать низкоуровневые функции напрямую• Использовать Dependency Injection или Service Locator
    15. 15. Dependency Injection
    16. 16. Service Locator
    17. 17. Mock objects
    18. 18. Шаблоны проектирования• SOLID – Single responsibility principle – Open/closed principle – Liskov substitution principle – Interface segregation principle – Dependency inversion principle• GRASP – Low Coupling – High Cohesion – Abstract Factory
    19. 19. Legacy code
    20. 20. Пример
    21. 21. Мы решаем 100% кода покрывать юнит тестами!• mail слишком сложно тестировать• При тестировании каждого аспекта будет выполняться много ненужного кода• Тест метода будет объемным
    22. 22. Какие есть проблемы в коде?Явные проблемы:•$user->setUsername($usermame);•if (!$form->isValid()) ; <--•$form – неинициализированная переменная. Нужно $this->formНеявные проблемы:•Большая связность кода•Быстро растущий метод== Сложная поддержка
    23. 23. Исправленный пример
    24. 24. Спасибо за внимание• Задавайте вопросы• Пишите мне – Email: ryabenko.sergey@gmail.com – Skype: s.ryabenko

    ×