SlideShare une entreprise Scribd logo
1  sur  32
Юнит тестирование в веб. Как
получать пользу и удовольствие.
         Рябенко Сергей. 09.06.2012.
Определения

• Unit testing — процесс в программировании, позволяющий
  проверить на корректность отдельные модули исходного кода
  программы.
• Удовольствие — положительно окрашенная эмоция,
  сопровождающая удовлетворение одной или нескольких
  потребностей.
• Польза — …

(c) wikipedia.org
Простой тест из документации PHPUnit
Исходные данные                  Через пол года
•   Покрываем код на 100%        •   Править тесты гораздо
•   Фича не сдана, если на нее       сложнее чем код
    не написаны тесты            •   Тесты до 1500 строк!
•   Используем PHPUnit           •   Тесты выполняются больше
•   Непрерывная интеграция           часа
                                 •   При выполнении тестов PHP
                                     падает по памяти
                                 •   Баги все равно находятся
Когда не стоит писать тесты

•   При создании прототипа
•   При работе «в потоке»
•   На «примитивный код»
•   На пользовательский интерфейс
•   You are doing it wrong
•   Ваши варианты?..
Когда СТОИТ писать тесты

• Во всех остальных случаях...
• … Когда вы делаете это правильно!!!
Как писать тесты правильно

• Писать хороший код
• Тестировать поведение и помнить о FIRST принципах
• Использовать правильные инструменты
   –   PHPUnit
   –   Непрерывная интеграция
• Использовать IoC
   –   Dependency Injection
   –   Service Locator
• Использовать Mock/Stub объекты
• Применять шаблоны SOLID, GRASP (Low coupling, High Cohesion,
  Factory)
Писать хороший код
И это только треть!
Тестировать поведение
• 10 Сформулировать требования к коду
• 20 Изложить их в тесте в виде:
  // GIVEN
  // WHEN
  // THEN
  Так же называется AAA (Arrange-Act-Assert)
• 30 Запустить, убедится что тест не проходит
• 40 Написать код
• 50 Запустить, убедится что тест проходит
• 60 При необходимости или желании провести рефакторинг кода
• GOTO 10
Red Green Refactor
F.I.R.S.T
•   Fast
•   Isolated
•   Repeatable
•   Self-Verifying
•   Timely
Использовать правильные инструменты
• PHPUnit. Не Lime и не любой другой lim’о подобный
  фреймворк!
• IDE debug в тестах
• Непрерывная интеграция
    – CruiseControl (PHPUnderControl)
    – Hudson
    – TeamCity
•   Запускать тесты каждый вечер автоматически
•   Запускать группы тестов перед каждым коммитом
•   Не меряйтесь процентом покрытия кода тестами
Inversion of Controll

•   Правильно расписать «швы» системы. Не создавать сервисы в
    классах-клиентах. Не использовать низкоуровневые функции
    напрямую
•   Использовать Dependency Injection или Service Locator
Dependency Injection
Service Locator
Mock objects
Шаблоны проектирования
• SOLID
  –   Single responsibility principle
  –   Open/closed principle
  –   Liskov substitution principle
  –   Interface segregation principle
  –   Dependency inversion principle
• GRASP
  – Low Coupling
  – High Cohesion
  – Abstract Factory
Legacy code
Пример
Мы решаем 100% кода покрывать юнит
                 тестами!

• mail слишком сложно тестировать
• При тестировании каждого аспекта будет выполняться много
  ненужного кода
• Тест метода будет объемным
Какие есть проблемы в коде?

Явные проблемы:
•$user->setUsername($usermame);
•if (!$form->isValid()) ; <--
•$form – неинициализированная переменная. Нужно $this->form
Неявные проблемы:
•Большая связность кода
•Быстро растущий метод
== Сложная поддержка
Исправленный пример
Спасибо за внимание
• Задавайте вопросы
• Пишите мне
  – Email: ryabenko.sergey@gmail.com
  – Skype: s.ryabenko

Contenu connexe

Tendances

Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...SQALab
 
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...Igor Khrol
 
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Mail.ru Group
 
Автоматизация тестирования: доступна каждому или удел избранных?
Автоматизация тестирования: доступна каждому или удел избранных?Автоматизация тестирования: доступна каждому или удел избранных?
Автоматизация тестирования: доступна каждому или удел избранных?SQALab
 
The fast and the continuous
The fast and the continuousThe fast and the continuous
The fast and the continuousSQALab
 
Как играть без игрока
Как играть без игрокаКак играть без игрока
Как играть без игрокаSQALab
 
Кому следует писать автоматические тесты?
Кому следует писать автоматические тесты?Кому следует писать автоматические тесты?
Кому следует писать автоматические тесты?Igor Khrol
 
Cовременный контроль качества: давай сделаем это по-быстрому...
Cовременный контроль качества: давай сделаем это по-быстрому...Cовременный контроль качества: давай сделаем это по-быстрому...
Cовременный контроль качества: давай сделаем это по-быстрому...Igor Khrol
 
Автоматическое тестирование Web api
Автоматическое тестирование Web apiАвтоматическое тестирование Web api
Автоматическое тестирование Web apiIgor Lyubin
 
Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаIgor Lyubin
 
Qa Automation - отбрасываем лишнее и тестируем суть
Qa Automation - отбрасываем лишнее и тестируем сутьQa Automation - отбрасываем лишнее и тестируем суть
Qa Automation - отбрасываем лишнее и тестируем сутьIgor Khrol
 
Альтернативные способы изучения программирования с нуля
Альтернативные способы изучения программирования с нуляАльтернативные способы изучения программирования с нуля
Альтернативные способы изучения программирования с нуляCOMAQA.BY
 
Как улучшить тесты на Selenium с помощью "визуального тестирования"?
Как улучшить тесты на Selenium с помощью "визуального тестирования"?Как улучшить тесты на Selenium с помощью "визуального тестирования"?
Как улучшить тесты на Selenium с помощью "визуального тестирования"?Oksana Avchinnikova
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораSQALab
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015Igor Khrol
 
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...COMAQA.BY
 
Как перестать бояться и начать автоматизировать
Как перестать бояться и начать автоматизироватьКак перестать бояться и начать автоматизировать
Как перестать бояться и начать автоматизироватьSQALab
 
Тестировщик в Agile - кто он?
Тестировщик в Agile - кто он?Тестировщик в Agile - кто он?
Тестировщик в Agile - кто он?Igor Khrol
 
Как автоматизировать комплексные системы
Как автоматизировать комплексные системыКак автоматизировать комплексные системы
Как автоматизировать комплексные системыSQALab
 
Визуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиВизуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиSQALab
 

Tendances (20)

Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
 
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
 
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
Алексей Халайджи, Mail.Ru Group, «Как мы автоматизируем UI-тестирование в iOS...
 
Автоматизация тестирования: доступна каждому или удел избранных?
Автоматизация тестирования: доступна каждому или удел избранных?Автоматизация тестирования: доступна каждому или удел избранных?
Автоматизация тестирования: доступна каждому или удел избранных?
 
The fast and the continuous
The fast and the continuousThe fast and the continuous
The fast and the continuous
 
Как играть без игрока
Как играть без игрокаКак играть без игрока
Как играть без игрока
 
Кому следует писать автоматические тесты?
Кому следует писать автоматические тесты?Кому следует писать автоматические тесты?
Кому следует писать автоматические тесты?
 
Cовременный контроль качества: давай сделаем это по-быстрому...
Cовременный контроль качества: давай сделаем это по-быстрому...Cовременный контроль качества: давай сделаем это по-быстрому...
Cовременный контроль качества: давай сделаем это по-быстрому...
 
Автоматическое тестирование Web api
Автоматическое тестирование Web apiАвтоматическое тестирование Web api
Автоматическое тестирование Web api
 
Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя система
 
Qa Automation - отбрасываем лишнее и тестируем суть
Qa Automation - отбрасываем лишнее и тестируем сутьQa Automation - отбрасываем лишнее и тестируем суть
Qa Automation - отбрасываем лишнее и тестируем суть
 
Альтернативные способы изучения программирования с нуля
Альтернативные способы изучения программирования с нуляАльтернативные способы изучения программирования с нуля
Альтернативные способы изучения программирования с нуля
 
Как улучшить тесты на Selenium с помощью "визуального тестирования"?
Как улучшить тесты на Selenium с помощью "визуального тестирования"?Как улучшить тесты на Selenium с помощью "визуального тестирования"?
Как улучшить тесты на Selenium с помощью "визуального тестирования"?
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015
 
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
 
Как перестать бояться и начать автоматизировать
Как перестать бояться и начать автоматизироватьКак перестать бояться и начать автоматизировать
Как перестать бояться и начать автоматизировать
 
Тестировщик в Agile - кто он?
Тестировщик в Agile - кто он?Тестировщик в Agile - кто он?
Тестировщик в Agile - кто он?
 
Как автоматизировать комплексные системы
Как автоматизировать комплексные системыКак автоматизировать комплексные системы
Как автоматизировать комплексные системы
 
Визуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиВизуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестами
 

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

Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsAnton Vidishchev
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in netAlex Tumanoff
 
JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1sgdread
 
Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1Technopark
 
Марина Широчкина — «Тестирование»
Марина Широчкина — «Тестирование»Марина Широчкина — «Тестирование»
Марина Широчкина — «Тестирование»Yandex
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.ScrumTrek
 
Roman Marinsky "Ретроспектива вивчення UI автоматизації"
Roman Marinsky "Ретроспектива вивчення UI автоматизації"Roman Marinsky "Ретроспектива вивчення UI автоматизації"
Roman Marinsky "Ретроспектива вивчення UI автоматизації"Dakiry
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла0leGG
 
Юнит тестирование
Юнит тестированиеЮнит тестирование
Юнит тестированиеTatiana Borolyuk
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Ontico
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Technopark
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Dmitry Buzdin
 
Марина Широчкина - Тестирование
Марина Широчкина - ТестированиеМарина Широчкина - Тестирование
Марина Широчкина - ТестированиеYandex
 
Иван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать житьИван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать житьDaria Oreshkina
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenchesGleb Rybalko
 
C&C for coffee'n'code
C&C for coffee'n'codeC&C for coffee'n'code
C&C for coffee'n'codeIvan Mosiev
 
Юрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услугаЮрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услугаSQADays_2009_Piter
 

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

Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in net
 
JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1
 
Enter: testing
Enter: testingEnter: testing
Enter: testing
 
Автоматизация тестирования
Автоматизация тестированияАвтоматизация тестирования
Автоматизация тестирования
 
Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1
 
Марина Широчкина — «Тестирование»
Марина Широчкина — «Тестирование»Марина Широчкина — «Тестирование»
Марина Широчкина — «Тестирование»
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.
 
Roman Marinsky "Ретроспектива вивчення UI автоматизації"
Roman Marinsky "Ретроспектива вивчення UI автоматизації"Roman Marinsky "Ретроспектива вивчення UI автоматизації"
Roman Marinsky "Ретроспектива вивчення UI автоматизації"
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла
 
Юнит тестирование
Юнит тестированиеЮнит тестирование
Юнит тестирование
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 
Марина Широчкина - Тестирование
Марина Широчкина - ТестированиеМарина Широчкина - Тестирование
Марина Широчкина - Тестирование
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
Иван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать житьИван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать жить
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
C&C for coffee'n'code
C&C for coffee'n'codeC&C for coffee'n'code
C&C for coffee'n'code
 
Юрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услугаЮрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услуга
 

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

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

Notes de l'éditeur

  1. История про биллинг
  2. Со временем класс начал расширяться за счет роста функционала
  3. Добавить следующий слайд с демонстрацией тестов по каждой финансовой операции отдельно.
  4. INS: сейчас биллинг используется в нескольких проектах в виде плагина, который поставляется с набором базовых функций (ввода/вывода денег через различные платежные системы) и легко расширяется под конкретные нужды каждого проекта. Когда
  5. Описание каждого паттерна, как они помогают в тестировании
  6. Изменить код, сделать невыполняющуюся проверку неважной (к примеру начисление бонуса, если регистрируется с купоном)