Слайды и текст этой онлайн презентации
Слайд 1
Мутационное тестирование
STRYKER. JS Варпахович Кирилл Николаевич Ведущий Front End Разработчик Tinkoff.ru
Слайд 2
О чём поговорим? Уровни тестирования Взросление продукта Взросление бизнеса Что такое мутационное тестирование Как начать работать с Stryker Подводные камни, которые мы поймали
Слайд 3
Типы тестирования
по уровню
Слайд 4
Типы тестирования (по уровню) Как вы тестируете ваше приложение? Мы пишем юнит тесты. Какие? Я же сказал - юнит!
Слайд 5
Типы тестирования (по уровню) Как вы тестируете ваше приложение? Мы пишем юнит тесты. Какие? Я же сказал - юнит!
Слайд 6
Типы тестирования (по уровню)
Слайд 7
Типы тестирования (по уровню) Системное тестирование (сценарии использования и т.д.) Системное тестирование проверяют выполнение бизнес-функций (требований) системы. проверяет сценарии работы пользователя в системе есть много видов
Слайд 8
Типы тестирования (по уровню) Системное тестирование (сценарии использования и т.д.) Тестирование интеграционное (проверяем результат внешних эффектов) Тестирование интеграционное проверяем изменения после взаимодейсвтия компонент проверяем технические сценарии взаимодейсвтия компонент
Слайд 9
Типы тестирования (по уровню) Тестирование компоненты (проверяем наличие внешних эффектов, проверяем результат внешних изменений) Системное тестирование (сценарии использования и т.д.) Тестирование интеграционное (проверяем результат внешних эффектов) Тестирование компоненты Проверяем что вызываются внешние функции/сущности Проверяем обработку запросов на изменение извне Дёргаем внешнее API компоненты
Слайд 10
Типы тестирования (по уровню) Тестирование компоненты (проверяем наличие внешних эффектов, проверяем результат внешних изменений) Тетирование функций (не важны любые эффекты, только результат функции) Тестирование модулей (проверяем внутренние эффекты) Системное тестирование (сценарии использования и т.д.) Тестирование интеграционное (проверяем результат внешних эффектов) Тестирование модулей Проверяем нечистые функции Проверяем функции, которые должны менять состояние модуля Проверяем, что чистые функции не меняют состояние модуля
Слайд 11
Типы тестирования (по уровню) Тестирование компоненты (проверяем наличие внешних эффектов, проверяем результат внешних изменений) Тестирование функций (не важны любые эффекты, только результат функции) Тестирование модулей (проверяем внутренние эффекты) Системное тестирование (сценарии использования и т.д.) Тестирование интеграционное (проверяем результат внешних эффектов) Тестирование функций Проверяем результат чистых функций Проверяем результат не чистых функций на разных входных парамтерах Не проверяем изменение состояния сущности
Слайд 12
Типы тестирования (по уровню) Тестирование компоненты (проверяем наличие внешних эффектов, проверяем результат внешних изменений) Тестирование функций (не важны любые эффекты, только результат функции) Тестирование модулей (проверяем внутренние эффекты) Системное тестирование (сценарии использования и т.д.) Тестирование интеграционное (проверяем результат внешних эффектов) Это всё Unit-тестирование
Слайд 13
Когда тесты нужны бизнесу?
Этапы взросления
Слайд 14
Взросление бизнеса Команда Идея Средства Этап 1 Собственные Прототип Рынок
Слайд 15
Взросление бизнеса Фирма Прототип Капитал Этап 2 Деньги Инвесторы Рынок Продукт Прибыль
Слайд 16
Взросление бизнеса Этап 3 Кампания Продукт Капитал Деньги Инвесторы Рынок Нишевые предложения Прибыль
Слайд 17
Взросление продукта Идея Concept Прототип Proof of concept Опытный образец Minimal viable product Работоспособный продукт Market Product Специальный продукт Проверка востребованности Проверка осуществимости Демонстрация возможностей Демонстрация жизнеспособности Максимизация прибыли Укоренение в рынке Обеспечение стабильности
Слайд 18
Взросление продукта Идея Concept Прототип Proof of concept Опытный образец Minimal viable product Работоспособный продукт Market Product Специальный продукт Проверка востребованности Проверка осуществимости Демонстрация возможностей Демонстрация жизнеспособности Максимизация прибыли Укоренение в рынке Обеспечение стабильности
Слайд 19
Взросление продукта Идея Concept Прототип Proof of concept Опытный образец Minimal viable product Работоспособный продукт Market Product Специальный продукт Проверка востребованности Проверка осуществимости Демонстрация возможностей Демонстрация жизнеспособности Максимизация прибыли Укоренение в рынке Обеспечение стабильности
Слайд 20
Взросление продукта Идея Concept Прототип Proof of concept Опытный образец Minimal viable product Работоспособный продукт Market Product Специальный продукт Проверка востребованности Проверка осуществимости Демонстрация возможностей Демонстрация жизнеспособности Максимизация прибыли Укоренение в рынке Обеспечение стабильности
Слайд 21
Взросление продукта Идея Concept Прототип Proof of concept Опытный образец Minimal viable product Работоспособный продукт Market Product Специальный продукт Проверка востребованности Проверка осуществимости Демонстрация возможностей Демонстрация жизнеспособности Максимизация прибыли Укоренение в рынке Обеспечение стабильности
Слайд 22
Взросление продукта Растёт потребность в стабильности Растёт потребность в качестве тестов Идея Concept Прототип Proof of concept Опытный образец Minimal viable product Работоспособный продукт Market Product Специальный продукт Проверка востребованности Проверка осуществимости Демонстрация возможностей Демонстрация жизнеспособности Максимизация прибыли Укоренение в рынке Обеспечение стабильности
Слайд 23
Бизнес готов
Тесты пишутся
Что дальше?
Слайд 24
Качество тестирования Идея Concept Прототип Proof of concept Опытный образец Minimal viable product Работоспособный продукт Market Product Специальный продукт Проверка востребованности Проверка осуществимости Демонстрация возможностей Демонстрация жизнеспособности Максимизация прибыли Укоренение в рынке Обеспечение стабильности Растёт потребность в стабильности Растёт потребность в качестве тестов
Слайд 25
Качество тестирования
Слайд 26
Качество тестирования Цели: Повышаем качество тестов Удаляем бесполезные тесты Повышаем качество кода Попутно улучшаем архитектуру, отказоустойчивость и т.д.
Слайд 27
Качество тестирования Stryker: C# Scala Javascript/Typescript React Angular Native
Слайд 28
Качество тестирования Stryker: C# Scala Javascript/Typescript React Angular Native
Слайд 29
Качество тестирования
Слайд 30
Getting started
(немного чёрных экранов)
Слайд 31
Stryker.js npm install -g stryker-cli npm install -D stryker-cli
Слайд 32
Stryker.js npm install -g stryker-cli npm install --save-dev stryker-mutator/core npm install -g stryker-cli npm install --save-dev stryker-mutator/html-reporter npm install --save-dev stryker-mutator/typescript npm install --save-dev stryker-mutator/jest-runner
Слайд 33
Stryker.js npm install -g stryker-cli npm install --save-dev stryker-mutator/core stryker init npm install -g stryker-cli npm install --save-dev stryker-mutator/html-reporter npm install --save-dev stryker-mutator/typescript npm install --save-dev stryker-mutator/jest-runner
Слайд 34
Stryker.js npm install -g stryker-cli npm install --save-dev stryker-mutator/core stryker init npm install -g stryker-cli npm install --save-dev stryker-mutator/html-reporter npm install --save-dev stryker-mutator/typescript npm install --save-dev stryker-mutator/jest-runner stryker run
Слайд 35
Stryker.js stryker run
Слайд 36
Stryker.js module . exports function (config) config. set ( ... ) ; ; stryker.conf.js
Слайд 37
Stryker.js module . exports function (config) config. set ( ... mutator : "typescript" , test Runner : "jest" , jest : config File : "jest.conf.js" , project Type : "angular-cli" , , ) ; ; stryker.conf.js
Слайд 38
Stryker.js module . exports function (config) config. set ( ... reporters : "progress" , "clear-text" , "html" , html Reporter : base Dir : 'reports/mutation/html' , ) ; ; stryker.conf.js
Слайд 39
Stryker.js module . exports function (config) config. set ( ... max Concurrent Test Runners : 4 , // Recommended to use about half of your available cores when running stryker with angular. ) ; ; stryker.conf.js
Слайд 40
Stryker.js module . exports function (config) config. set ( ... max Concurrent Test Runners : 4 , // Recommended to use about half of your available cores when running stryker with angular. ) ; ; stryker.conf.js
Слайд 41
Stryker.js module . exports function (config) config. set ( mutate : "src/ / .ts" , "!src/ / .spec.ts" , "!src/ / .module.ts" , "!src/app/test/ / .ts" , "!src/ / .routing.ts" , ) ; ; stryker.conf.js
Слайд 42
Stryker.js stryker run INFO Config Reader Using stryker.conf.js in the current working directory. INFO Input File Resolver Found 992 of 2002 file(s) to be mutated. INFO Initial Test Executor Starting initial test run. This may take a while. INFO Initial Test Executor Initial test run succeeded. Ran 1170 tests in 2 minutes 45 seconds (net 54338 ms, overhead 65737 ms). INFO Mutator Facade 12094 Mutant(s) generated INFO Sandbox Pool Creating 4 test runners (based on max Concurrent Test Runners config)
Слайд 43
Stryker.js stryker run INFO Config Reader Using stryker.conf.js in the current working directory. INFO Input File Resolver Found 992 of 2002 file(s) to be mutated. INFO Initial Test Executor Starting initial test run. This may take a while . INFO Initial Test Executor Initial test run succeeded. Ran 1170 tests in 2 minutes 45 seconds (net 54338 ms, overhead 65737 ms). INFO Mutator Facade 12094 Mutant(s) generated INFO Sandbox Pool Creating 4 test runners (based on max Concurrent Test Runners config)
Слайд 44
Stryker.js stryker run INFO Config Reader Using stryker.conf.js in the current working directory. INFO Input File Resolver Found 992 of 2002 file(s) to be mutated. INFO Initial Test Executor Starting initial test run. This may take a while .
Слайд 45
Stryker.js stryker run INFO Config Reader Using stryker.conf.js in the current working directory. INFO Input File Resolver Found 992 of 2002 file(s) to be mutated. INFO Initial Test Executor Starting initial test run. This may take a while. INFO Initial Test Executor Initial test run succeeded. Ran 1170 tests in 2 minutes 45 seconds (net 54338 ms, overhead 65737 ms). INFO Mutator Facade 12094 Mutant(s) generated INFO Sandbox Pool Creating 4 test runners (based on max Concurrent Test Runners config) ----------------------------- --------- ---------- ----------- ------------ ---------- --------- File % score # killed # timeout # survived # no cov # error ----------------------------- --------- ---------- ----------- ------------ ---------- --------- All files 0.00 0 0 12094 0 0 call-step-form.component.ts 0.00 0 0 11 0 0 ... 0.00 0 0 ... 0 0 ----------------------------- --------- ---------- ----------- ------------ ---------- --------- INFO Html Reporter Your report can be found at: file:///.../reports/mutation/html/index.html INFO Stryker Done in 6 hours 11 minutes.
Слайд 46
Stryker.js Done in 6 hours 11 minutes
Слайд 47
Stryker.js ----------------------------- --------- ---------- ----------- ------------ ---------- --------- File % score # killed # timeout # survived # no cov # error ----------------------------- --------- ---------- ----------- ------------ ---------- --------- All files 0.00 0 0 12094 0 0 call-step-form.component.ts 0.00 0 0 11 0 0 ... 0.00 0 0 ... 0 0 ----------------------------- --------- ---------- ----------- ------------ ---------- --------- перцентиль циферъ умерло от безысходности этих даже не искали живее всех живых эти поломали нам систему
Слайд 48
Stryker.js html Reporter : base Dir : 'reports/mutation/html' ,
Слайд 49
Stryker.js html Reporter : base Dir : 'reports/mutation/html' ,
Слайд 51
Особенности Очень много времени на анализ результатов Можно настроить запуск на конкретные файлы вручную
Слайд 52
Особенности Очень много времени на анализ результатов Можно настроить запуск на конкретные файлы вручную 1 мутация ! 1 прогон :(
Слайд 53
Особенности Очень много времени на анализ результатов Можно настроить запуск на конкретные файлы вручную 1 мутация ! 1 прогон :(
Слайд 54
Особенности Очень много времени на анализ результатов Можно настроить запуск на конкретные файлы вручную 1 мутация ! 1 прогон :( 1 точка в коде почти всегда 1 мутация Для условий и математики количество мутаций больше Можно создавать кастомные мутации количество инстансов должно решить проблему
Слайд 55
Особенности Очень много времени на анализ результатов Можно настроить запуск на конкретные файлы вручную 1 мутация ! 1 прогон :( 1 точка в коде почти всегда 1 мутация Для условий и математики количество мутаций больше Можно создавать кастомные мутации количество инстансов должно решить проблему Нет teamcity-reporter для интеграции Можно пользоваться репортером jest/karma
Слайд 56
Первые результаты
Слайд 57
Первые результаты Стали думать что тестируем и как тестируем Появились тесты убивающие мутантов Избавляемся от тяжёлых тестов Выстраиваем пирамиду тестирования здорового программиста
Слайд 58
Спасибо за внимание!
Слайд 59
Литература по теме