SlideShare a Scribd company logo
Принципы создания
тестируемого кода
Илья Шишков
старший разработчик компании Яндекс
Что такое автотесты?
▌ Юнит-тесты
▌ Интеграционные тесты
▌ Функциональные тесты
▌ Нагрузочные тесты
и другие виды тестов, которые выполняются регулярно и
автоматически
4
Зачем нужны автотесты
Без использования автотестов
▌ Новый код тестируется вручную
▌ Нет регулярного контроля
регрессии
▌ Многие баги проявляют себя
только в продакшене
▌ Любой релиз может стать
большим стрессом
6
При использовании автотестов
▌ Большинство багов выявляется
во время разработки
▌ Регрессия выявляется сразу
после заливки кода в
репозиторий
▌ Значительно возрастает
надёжность кода
▌ Работать гораздо комфортнее
7
Отдельно про юнит-
тесты
│Юнит-тест – тест одной
функции или класса
отдельно от остальных
частей системы
Преимущества юнит-тестов
▌ Контролируют корректность нового и существующего кода
▌ Сокращают время между допущением ошибки и её
обнаружением
Преимущества юнит-тестов
▌ Являются примером применения кода
Преимущества юнит-тестов
▌ Документируют поведение
Преимущества юнит-тестов
▌ Упрощают поиск ошибок
Не все юнит-тесты
одинаково полезны
Хороший юнит-тест
▌ Короткий, простой и понятный
▌ Проверяет что-то одно
▌ Обладает минимумом внешних зависимостей
▌ Тестирует контракт без предположений о его реализации
› Контракт – публичный интерфейс, задекларированное
поведение, гарантия безопасности исключений, предусловия,
постусловия и т.д.
15
Не все пишут автотесты
Я не пишу тесты, потому что
▌ Мне некогда, у меня полно
важных задач
▌ Я пишу код без багов
▌ Код слишком запутан
▌ Мне лень
17
▌ Закон Деметры
▌ Внедрение зависимости
▌ Принцип одной ответственности
Закон Деметры
Закон Деметры Внедрение зависимости Принцип одной
ответственности
Закон Деметры
▌ Don’t look for things. Ask directly
what you need!
19
Название взято из проекта 80-х гг
«Деметра», который использовал
идеи аспектно-ориентированного и
адаптивного программирования.
Проект был назван в честь
Деметры, греческой богини
земледелия.
Википедия
Закон Деметры
▌ Разработать класс для логирования сообщений
▌ Сообщения должны сохраняться в файл
▌ Сообщения должны накапливаться в буфере и сохраняться в
файл, только когда он заполнился
▌ Кроме того, запись в файл должна производиться после
логирования каждого K-го сообщения
20
Закон Деметры
21
Закон Деметры
22
Закон Деметры
23
Закон Деметры
24
Закон Деметры
25
Закон Деметры
▌ Хороший юнит-тест тестирует контракт без предположений о его
реализации
› Контракт – публичный интерфейс, задекларированное поведение,
гарантия безопасности исключений, предусловия, постусловия и т.д.
26
Закон Деметры
27
Закон Деметры
28
▌ Don’t look for things. Ask directly what you need!
Закон Деметры
29
Закон Деметры
30
Закон Деметры
Преимущества:
▌ Явное декларирование
зависимостей
▌ Отсутствие лишних
зависимостей
▌ Упрощение повторного
использования кода
▌ Упрощение тестирования
31
Недостатки:
▌ Увеличение числа параметров
▌ Вызовы становятся более
громоздкими
Внедрение зависимости
Закон Деметры Внедрение зависимости Принцип одной
ответственности
Внедрение зависимости
Внедрение зависимости (англ. Dependency injection, DI) —
процесс предоставления внешней зависимости программному
компоненту. Является специфичной формой «инверсии
управления» (англ. Inversion of control, IoC), когда она
применяется к управлению зависимостями.
Википедия
33
Внедрение зависимости
34
Внедрение зависимости
35
Внедрение зависимости
36
Внедрение зависимости
37
Внедрение зависимости
38
Внедрение зависимости
39
Внедрение зависимости
40
Внедрение зависимости
Преимущества
▌ Зависимость от интерфейса, а
не от реализации
▌ Гибкость
▌ Высокая комбинируемость кода
▌ Упрощение повторного
использования кода
▌ Упрощение тестирования
41
Недостатки
▌ Перенос деталей реализации в
интерфейс
▌ Код разбивается на два слоя:
отдельные блоки и слой их
«склейки»
▌ Становится сложнее понять, как
работает программа целиком
Принцип одной
ответственности
Закон Деметры Внедрение зависимости Принцип одной
ответственности
Robert C. Martin
│A class should have only
one reason to change
Принцип одной ответственности
43
Принцип одной ответственности
44
Принцип одной ответственности
45
Принцип одной ответственности
46
Принцип одной ответственности
47
Принцип одной ответственности
48
Принцип одной ответственности
49
Принцип одной ответственности
50
Принцип одной ответственности
51
Принцип одной ответственности
Преимущества
▌ Код разбивается на простые для
понимания блоки
▌ Высокая комбинируемость кода
▌ Упрощение повторного
использования кода
▌ Упрощение тестирования
52
Недостатки
▌ Появление большого
количества блоков
▌ Становится сложнее понять, как
работает программа целиком
Итоги
Преимущества применения
автотестов и описанных принципов
▌ Повышение стабильности кода
▌ Уменьшение числа
зависимостей
▌ Упрощение рефакторинга
▌ Ускорение разработки
▌ Спокойный сон после релиза 53
Ссылки
› Guide:WritingTestable Code (http://misko.hevery.com/code-
reviewers-guide/)
› The Clean CodeTalks
(http://www.youtube.com/playlist?list=PLBDAB2BA83BB6588E)
› AllYourTests areTerrible...
(https://www.youtube.com/watch?t=2285&v=u5senBJUkPc)
54
Контакты
vk.com/ishfb
ishfb@yandex-team.ru linkedin.com/in/ishfb
Илья Шишков
Старший разработчик компании Яндекс

More Related Content

What's hot

Java one presentation
Java one presentationJava one presentation
Java one presentation
Shamim bhuiyan
 
Выбор и тестирование Ngfw. Опыт Rambler
Выбор и тестирование Ngfw. Опыт RamblerВыбор и тестирование Ngfw. Опыт Rambler
Выбор и тестирование Ngfw. Опыт Rambler
Konstantin Sverdlov
 
очир абушинов
очир абушиновочир абушинов
очир абушиновAlexei Lupan
 
Sqadays 2010 burmistrov_fomin_20101120(2)
Sqadays 2010 burmistrov_fomin_20101120(2)Sqadays 2010 burmistrov_fomin_20101120(2)
Sqadays 2010 burmistrov_fomin_20101120(2)
Alexei Lupan
 
Автоматическое функциональное тестирование в рамках процесса непрерывной инте...
Автоматическое функциональное тестирование в рамках процесса непрерывной инте...Автоматическое функциональное тестирование в рамках процесса непрерывной инте...
Автоматическое функциональное тестирование в рамках процесса непрерывной инте...
SQALab
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services Center
Positive Hack Days
 
Тестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаТестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаZestranec
 
WPF Automation – test injection approach to application testing
WPF Automation – test injection approach to application testingWPF Automation – test injection approach to application testing
WPF Automation – test injection approach to application testing
SQALab
 
Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2
Magneta AI
 
Fuzzing - автоматическое тестирование безопасности
Fuzzing - автоматическое тестирование безопасностиFuzzing - автоматическое тестирование безопасности
Fuzzing - автоматическое тестирование безопасности
SQALab
 
Принципы Solid на практике
Принципы Solid на практикеПринципы Solid на практике
Принципы Solid на практике
EatDog
 
Ui testing how intel does this
Ui testing   how intel does thisUi testing   how intel does this
Ui testing how intel does thisAlexei Lupan
 
Тестирование сложных программных решений и комплексных систем.
Тестирование сложных программных решений и комплексных систем.Тестирование сложных программных решений и комплексных систем.
Тестирование сложных программных решений и комплексных систем.
DressTester
 
Организация процесса тестирования в Agile команде с помощью квадрантов тестир...
Организация процесса тестирования в Agile команде с помощью квадрантов тестир...Организация процесса тестирования в Agile команде с помощью квадрантов тестир...
Организация процесса тестирования в Agile команде с помощью квадрантов тестир...
SQALab
 
Introduction into Test Driven Development
Introduction into Test Driven DevelopmentIntroduction into Test Driven Development
Introduction into Test Driven DevelopmentIvan Dyachenko
 
Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...
Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...
Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...
SQALab
 
Максим Гуртовенко - The future is wild | HappyDev'12
Максим Гуртовенко - The future is wild | HappyDev'12Максим Гуртовенко - The future is wild | HappyDev'12
Максим Гуртовенко - The future is wild | HappyDev'12HappyDev
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
HappyDev
 
Continuous integration with TeamCity
Continuous integration with TeamCityContinuous integration with TeamCity
Continuous integration with TeamCity
Andrei Ivanov
 
Доклад Владислава Чернова на конференции LoveQA. "Continuous delivery в крупн...
Доклад Владислава Чернова на конференции LoveQA. "Continuous delivery в крупн...Доклад Владислава Чернова на конференции LoveQA. "Continuous delivery в крупн...
Доклад Владислава Чернова на конференции LoveQA. "Continuous delivery в крупн...
Badoo Development
 

What's hot (20)

Java one presentation
Java one presentationJava one presentation
Java one presentation
 
Выбор и тестирование Ngfw. Опыт Rambler
Выбор и тестирование Ngfw. Опыт RamblerВыбор и тестирование Ngfw. Опыт Rambler
Выбор и тестирование Ngfw. Опыт Rambler
 
очир абушинов
очир абушиновочир абушинов
очир абушинов
 
Sqadays 2010 burmistrov_fomin_20101120(2)
Sqadays 2010 burmistrov_fomin_20101120(2)Sqadays 2010 burmistrov_fomin_20101120(2)
Sqadays 2010 burmistrov_fomin_20101120(2)
 
Автоматическое функциональное тестирование в рамках процесса непрерывной инте...
Автоматическое функциональное тестирование в рамках процесса непрерывной инте...Автоматическое функциональное тестирование в рамках процесса непрерывной инте...
Автоматическое функциональное тестирование в рамках процесса непрерывной инте...
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services Center
 
Тестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаТестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщика
 
WPF Automation – test injection approach to application testing
WPF Automation – test injection approach to application testingWPF Automation – test injection approach to application testing
WPF Automation – test injection approach to application testing
 
Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2
 
Fuzzing - автоматическое тестирование безопасности
Fuzzing - автоматическое тестирование безопасностиFuzzing - автоматическое тестирование безопасности
Fuzzing - автоматическое тестирование безопасности
 
Принципы Solid на практике
Принципы Solid на практикеПринципы Solid на практике
Принципы Solid на практике
 
Ui testing how intel does this
Ui testing   how intel does thisUi testing   how intel does this
Ui testing how intel does this
 
Тестирование сложных программных решений и комплексных систем.
Тестирование сложных программных решений и комплексных систем.Тестирование сложных программных решений и комплексных систем.
Тестирование сложных программных решений и комплексных систем.
 
Организация процесса тестирования в Agile команде с помощью квадрантов тестир...
Организация процесса тестирования в Agile команде с помощью квадрантов тестир...Организация процесса тестирования в Agile команде с помощью квадрантов тестир...
Организация процесса тестирования в Agile команде с помощью квадрантов тестир...
 
Introduction into Test Driven Development
Introduction into Test Driven DevelopmentIntroduction into Test Driven Development
Introduction into Test Driven Development
 
Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...
Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...
Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...
 
Максим Гуртовенко - The future is wild | HappyDev'12
Максим Гуртовенко - The future is wild | HappyDev'12Максим Гуртовенко - The future is wild | HappyDev'12
Максим Гуртовенко - The future is wild | HappyDev'12
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
Continuous integration with TeamCity
Continuous integration with TeamCityContinuous integration with TeamCity
Continuous integration with TeamCity
 
Доклад Владислава Чернова на конференции LoveQA. "Continuous delivery в крупн...
Доклад Владислава Чернова на конференции LoveQA. "Continuous delivery в крупн...Доклад Владислава Чернова на конференции LoveQA. "Continuous delivery в крупн...
Доклад Владислава Чернова на конференции LoveQA. "Continuous delivery в крупн...
 

Viewers also liked

Фитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в формеФитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в форме
Ilia Shishkov
 
Java: Clean Coding как стиль жизни [25.04.15]
Java: Clean Coding как стиль жизни [25.04.15]Java: Clean Coding как стиль жизни [25.04.15]
Java: Clean Coding как стиль жизни [25.04.15]
GoIT
 
Let's Take A Look At The Boost Libraries
Let's Take A Look At The Boost LibrariesLet's Take A Look At The Boost Libraries
Let's Take A Look At The Boost Libraries
Thomas Pollak
 
Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++
Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++
Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++
Sergey Platonov
 
Дмитрий Копляров , Потокобезопасные сигналы в C++
Дмитрий Копляров , Потокобезопасные сигналы в C++Дмитрий Копляров , Потокобезопасные сигналы в C++
Дмитрий Копляров , Потокобезопасные сигналы в C++
Sergey Platonov
 
XPath for web scraping
XPath for web scrapingXPath for web scraping
XPath for web scraping
Scrapinghub
 
Search Presentation
Search  PresentationSearch  Presentation
Search PresentationDoug Green
 
Антон Бикинеев, Reflection in C++Next
Антон Бикинеев,  Reflection in C++NextАнтон Бикинеев,  Reflection in C++Next
Антон Бикинеев, Reflection in C++Next
Sergey Platonov
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптер
Sergey Platonov
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
victor-yastrebov
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Sergey Platonov
 
Clang tidy
Clang tidyClang tidy
Clang tidy
Yury Yafimachau
 
Parallel STL
Parallel STLParallel STL
Parallel STL
Evgeny Krutko
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Sergey Platonov
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_cast
Roman Orlov
 
Алексей Кутумов, C++ без исключений, часть 3
Алексей Кутумов,  C++ без исключений, часть 3Алексей Кутумов,  C++ без исключений, часть 3
Алексей Кутумов, C++ без исключений, часть 3
Platonov Sergey
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Yauheni Akhotnikau
 

Viewers also liked (20)

Фитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в формеФитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в форме
 
Java: Clean Coding как стиль жизни [25.04.15]
Java: Clean Coding как стиль жизни [25.04.15]Java: Clean Coding как стиль жизни [25.04.15]
Java: Clean Coding как стиль жизни [25.04.15]
 
Let's Take A Look At The Boost Libraries
Let's Take A Look At The Boost LibrariesLet's Take A Look At The Boost Libraries
Let's Take A Look At The Boost Libraries
 
Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++
Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++
Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++
 
Boost C++ Libraries
Boost C++ LibrariesBoost C++ Libraries
Boost C++ Libraries
 
Brands.i look v5-n6
Brands.i look v5-n6Brands.i look v5-n6
Brands.i look v5-n6
 
Дмитрий Копляров , Потокобезопасные сигналы в C++
Дмитрий Копляров , Потокобезопасные сигналы в C++Дмитрий Копляров , Потокобезопасные сигналы в C++
Дмитрий Копляров , Потокобезопасные сигналы в C++
 
XPath for web scraping
XPath for web scrapingXPath for web scraping
XPath for web scraping
 
Search Presentation
Search  PresentationSearch  Presentation
Search Presentation
 
Антон Бикинеев, Reflection in C++Next
Антон Бикинеев,  Reflection in C++NextАнтон Бикинеев,  Reflection in C++Next
Антон Бикинеев, Reflection in C++Next
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптер
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 
Clang tidy
Clang tidyClang tidy
Clang tidy
 
Parallel STL
Parallel STLParallel STL
Parallel STL
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_cast
 
Алексей Кутумов, C++ без исключений, часть 3
Алексей Кутумов,  C++ без исключений, часть 3Алексей Кутумов,  C++ без исключений, часть 3
Алексей Кутумов, C++ без исключений, часть 3
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 

Similar to Илья Шишков, Принципы создания тестируемого кода

Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllMykyta Hopkalo
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Technopark
 
Enter: testing
Enter: testingEnter: testing
Enter: testing
Kamil Samigullin
 
Тестирование ПО
Тестирование ПОТестирование ПО
Тестирование ПОseleznev_stas
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public API
MoscowJS
 
Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя система
Igor Lyubin
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-Agile
Kairat Yussupov
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Technopark
 
Модульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NETМодульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NET
Alexander Byndyu
 
Introduction to Automation Testing
Introduction to Automation TestingIntroduction to Automation Testing
Introduction to Automation Testing
Return on Intelligence
 
Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика
SQALab
 
Викторина для тестировщиков
Викторина для тестировщиковВикторина для тестировщиков
Викторина для тестировщиков
Uladzimir Kryvenka
 
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Badoo Development
 
Андрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеАндрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзе
Elias Fofanov
 
Secr2009 Software Inspections In Practice Rus
Secr2009 Software Inspections In Practice RusSecr2009 Software Inspections In Practice Rus
Secr2009 Software Inspections In Practice Rus
Vadim Savkin
 
План тестирования
План тестированияПлан тестирования
План тестирования
EDISON Software Development Centre
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложений
MoscowJS
 
Марина Широчкина - Тестирование
Марина Широчкина - ТестированиеМарина Широчкина - Тестирование
Марина Широчкина - Тестирование
Yandex
 
Тестирование веб-проектов в Agile
Тестирование веб-проектов в AgileТестирование веб-проектов в Agile
Тестирование веб-проектов в Agile
SQALab
 
Certifi-Gate: атака в теории и на практике
Certifi-Gate: атака в теории и на практикеCertifi-Gate: атака в теории и на практике
Certifi-Gate: атака в теории и на практике
Positive Hack Days
 

Similar to Илья Шишков, Принципы создания тестируемого кода (20)

Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controll
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
 
Enter: testing
Enter: testingEnter: testing
Enter: testing
 
Тестирование ПО
Тестирование ПОТестирование ПО
Тестирование ПО
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public API
 
Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя система
 
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 в .NET
Модульное тестирование и TDD в .NETМодульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NET
 
Introduction to Automation Testing
Introduction to Automation TestingIntroduction to Automation Testing
Introduction to Automation Testing
 
Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика
 
Викторина для тестировщиков
Викторина для тестировщиковВикторина для тестировщиков
Викторина для тестировщиков
 
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
 
Андрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзеАндрей Зайцев - TDD в кровавом энтерпрайзе
Андрей Зайцев - TDD в кровавом энтерпрайзе
 
Secr2009 Software Inspections In Practice Rus
Secr2009 Software Inspections In Practice RusSecr2009 Software Inspections In Practice Rus
Secr2009 Software Inspections In Practice Rus
 
План тестирования
План тестированияПлан тестирования
План тестирования
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложений
 
Марина Широчкина - Тестирование
Марина Широчкина - ТестированиеМарина Широчкина - Тестирование
Марина Широчкина - Тестирование
 
Тестирование веб-проектов в Agile
Тестирование веб-проектов в AgileТестирование веб-проектов в Agile
Тестирование веб-проектов в Agile
 
Certifi-Gate: атака в теории и на практике
Certifi-Gate: атака в теории и на практикеCertifi-Gate: атака в теории и на практике
Certifi-Gate: атака в теории и на практике
 

More from Sergey Platonov

Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itEvgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Sergey Platonov
 
Василий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексиейВасилий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексией
Sergey Platonov
 
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаЛев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Sergey Platonov
 
Антон Бикинеев, Writing good std::future< C++ >
Антон Бикинеев, Writing good std::future< C++ >Антон Бикинеев, Writing good std::future< C++ >
Антон Бикинеев, Writing good std::future< C++ >
Sergey Platonov
 
Павел Филонов, Разделяй и управляй вместе с Conan.io
Павел Филонов, Разделяй и управляй вместе с Conan.ioПавел Филонов, Разделяй и управляй вместе с Conan.io
Павел Филонов, Разделяй и управляй вместе с Conan.io
Sergey Platonov
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Sergey Platonov
 
Антон Полухин. C++17
Антон Полухин. C++17Антон Полухин. C++17
Антон Полухин. C++17
Sergey Platonov
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++
Sergey Platonov
 
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Sergey Platonov
 
Алексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhereАлексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhere
Sergey Platonov
 
Дмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI векеДмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI веке
Sergey Platonov
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Sergey Platonov
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
Sergey Platonov
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Sergey Platonov
 
Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...
Sergey Platonov
 
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Sergey Platonov
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
Sergey Platonov
 
Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++
Sergey Platonov
 
Михаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STLМихаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STL
Sergey Platonov
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
Sergey Platonov
 

More from Sergey Platonov (20)

Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itEvgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
 
Василий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексиейВасилий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексией
 
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаЛев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
 
Антон Бикинеев, Writing good std::future< C++ >
Антон Бикинеев, Writing good std::future< C++ >Антон Бикинеев, Writing good std::future< C++ >
Антон Бикинеев, Writing good std::future< C++ >
 
Павел Филонов, Разделяй и управляй вместе с Conan.io
Павел Филонов, Разделяй и управляй вместе с Conan.ioПавел Филонов, Разделяй и управляй вместе с Conan.io
Павел Филонов, Разделяй и управляй вместе с Conan.io
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
 
Антон Полухин. C++17
Антон Полухин. C++17Антон Полухин. C++17
Антон Полухин. C++17
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++
 
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
 
Алексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhereАлексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhere
 
Дмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI векеДмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI веке
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...
 
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++
 
Михаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STLМихаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STL
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 

Илья Шишков, Принципы создания тестируемого кода

Editor's Notes

  1. Представиться О чём поговорим Вопросы в конце
  2. Регулярно и Автоматически CI Писать тесты тяжело Уходит много времени
  3. Хочу поделиться своим опытом
  4. Работал в разных командах Как работать без автотестов
  5. Сейчас есть CI Польза автотестов
  6. Доп. преим-ва
  7. Нет единого определения
  8. Контроль корректности Время обнаруж-я ошибки Проще и дешевле исправить ошибку Регулярно гонять тесты
  9. Актуально для шаблонов. Другой пример – большой класс
  10. Документир-е – легко понять Сложный тест никто не будет читать Ошибки в тестах Понятные имена Проще искать ошибки Тест падает, когда ломается SUT Иначе тратим время впустую Новая реал-ция вып-ет контракт – тесты не падают
  11. Опишу принцип Покажу пример Цель – покрыть тестами Неидеальный код
  12. Описать класс
  13. Реал-ция конструктора Почему передаём конфиг Большой конфиг У кого в проекте такой конфиг? BigBinaryData
  14. Большая настройка Суть теста не видна
  15. Мало что поменялось Зависимость от TConfig Зависимость от TBigBinaryData
  16. Забыли задать парам-ры конфига Исп-ем знание о реал-ции Перечислить все проблемы
  17. Сложная формулир-ка Вопрос, что такое DI
  18. Проговорить реал-цию ф-и
  19. Цель – протестировать контракт Когда не можем получить новости Звонок в Яндекс Не знаю, как сделать тест
  20. GetUrlHtml - зависимость
  21. Описать тест Без DI не могли С DI смогли Ф-я стала громоздкой
  22. Значение интуитивно
  23. Не видите кода - нестрашно
  24. Проблема – много кода
  25. У ф-и много ответств-тей Получили три ф-и У каждой 1 ответств-ть
  26. Каждую ф-ю тестируем отдельно Тесты короче Тесты гранулярнее
  27. Теперь вы знаете принципы Вам проще писать тесты Пишите тесты Преим-ва Повышение зарплаты