Unit testing

I
Unit Testing

Автор:
Ян Букин
Отдел автоматизации
ISsoft Solutions
Что такое Unit testing?
• Unit testing (Модульное тестирование) – процесс
проверки корректности отдельных модулей
(классов) программы
• Основная идея - разработка тестов, проверяющих
работу каждой нетривиальной функции или метода
модуля
• Для облегчения разработки модульных тестов
используются различные фреймворки
TDD (test-driven development)
• Test-driven development (Разработка через
тестирование) – техника программирования, при
которой модульные тесты пишутся до модулей
программы, тем самым управляя их разработкой
• Разработка состоит из коротких циклов (шагов),
продолжительность которых обычно составляет
несколько минут
Этапы разработки в стиле
Test-driven development
• Извлечение последней версии проекта из
репозитория
• Добавление теста
• Запуск теста
• Исправление ошибки самым простым способом (в первом
приближении, реализация заглушек – пустых методов)
• Запуск тестов
• Рефакторинг (в том числе трансформация заглушек в реальные
методы)
• Запуск тестов
• Commit изменений
Разработка в стиле TDD
Извлечение
кода
Фиксирование
изменений

Добавление
теста

Запуск тестов

Запуск тестов

Внесение
изменений

Рефакторинг
Запуск тестов
Пример
Исходный код примера находится в репозитории TFS
$/CSI - Training Center/Clients/Automation/UnitTests/C#
Преимущества использования
Unit-тестирования
• Поощрение изменений
• Облегчение рефакторинга
• Легкость обнаружения ошибок

• Упрощение интеграции
• Устранение сомнений по поводу надежности отдельных

модулей

• Документирование кода
• Тесты могут служить иллюстрацией использования

класса

• Отделение интерфейса классов от реализации
• Позволяет уменьшить связность компонентов системы
Преимущества использования
Unit-тестирования
• Тесты постоянно управляют процессом разработки
модуля, предъявляя новые и новые формальные
требования к системе
• Написанные однажды тесты служат на протяжении
жизненного цикла программы
• Автоматические тесты выполняются гораздо быстрее
ручных
• Облегчается совместная работа нескольких человек над
одними и теми же модулями
Что должны покрывать
модульные тесты?
• Критические и нетривиальные участки кода
• Код, подверженный частым изменениям
• Код, от которого зависит работоспособность
большого количества другого кода
• Сложный код
• Код с большим количеством зависимостей
Проблемы, мешающие
внедрению модульных тестов
• Побочные действия кода
• запись данных в файл
• вызов внешних библиотек

• Жесткие зависимости тестируемого класса
• Большое количество зависимостей
• Выполнение одним классом нескольких
обязанностей
1 von 10

Recomendados

Тестирование ПО von
Тестирование ПОТестирование ПО
Тестирование ПОseleznev_stas
1.9K views15 Folien
DevOps подходы в инфраструктуре автоматизации тестирования von
DevOps подходы в инфраструктуре автоматизации тестированияDevOps подходы в инфраструктуре автоматизации тестирования
DevOps подходы в инфраструктуре автоматизации тестированияSQALab
11.3K views18 Folien
ClubQA #2. Unit testing and TDD von
ClubQA #2. Unit testing and TDDClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDDClub QA Kostroma
655 views12 Folien
ук 03.007.02 2011 von
ук 03.007.02 2011ук 03.007.02 2011
ук 03.007.02 2011etyumentcev
687 views101 Folien
Artem Shabarshin. CSEDays von
Artem Shabarshin. CSEDaysArtem Shabarshin. CSEDays
Artem Shabarshin. CSEDaysLiloSEA
368 views24 Folien
Тестирование ПО (лекция 2) von
Тестирование ПО (лекция 2)Тестирование ПО (лекция 2)
Тестирование ПО (лекция 2)Igor Khmelnytskyy
1.1K views21 Folien

Más contenido relacionado

Was ist angesagt?

Dev collaboration von
Dev collaborationDev collaboration
Dev collaborationEduard Antsupov
346 views46 Folien
Ptsp презентация von
Ptsp презентацияPtsp презентация
Ptsp презентацияakmoldir
476 views32 Folien
Сергей Ревко von
Сергей РевкоСергей Ревко
Сергей РевкоSQALab
393 views17 Folien
Организация тестового набора при автоматизированном функциональном тестировании von
Организация тестового набора при автоматизированном функциональном тестированииОрганизация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестированииSQALab
755 views20 Folien
тестирование по von
тестирование потестирование по
тестирование поIon Griu
548 views40 Folien
Технологии разработки ПО von
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПОAnton Konushin
2.3K views51 Folien

Was ist angesagt?(19)

Ptsp презентация von akmoldir
Ptsp презентацияPtsp презентация
Ptsp презентация
akmoldir476 views
Сергей Ревко von SQALab
Сергей РевкоСергей Ревко
Сергей Ревко
SQALab393 views
Организация тестового набора при автоматизированном функциональном тестировании von SQALab
Организация тестового набора при автоматизированном функциональном тестированииОрганизация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестировании
SQALab755 views
тестирование по von Ion Griu
тестирование потестирование по
тестирование по
Ion Griu548 views
Технологии разработки ПО von Anton Konushin
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПО
Anton Konushin2.3K views
Стратегия тестирования крупного проекта в условиях Agile разработки v2 von Magneta AI
Стратегия тестирования крупного проекта в условиях Agile разработки v2Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2
Magneta AI1.2K views
Unit tests ru von ISsoft
Unit tests ruUnit tests ru
Unit tests ru
ISsoft627 views
Нагрузка и автоматизация в большой организации. Движение к DevOps von SQALab
Нагрузка и автоматизация в большой организации. Движение к DevOpsНагрузка и автоматизация в большой организации. Движение к DevOps
Нагрузка и автоматизация в большой организации. Движение к DevOps
SQALab11K views
Павел Степанов von SQALab
Павел СтепановПавел Степанов
Павел Степанов
SQALab287 views
Тестирование сложных программных решений и комплексных систем. von DressTester
Тестирование сложных программных решений и комплексных систем.Тестирование сложных программных решений и комплексных систем.
Тестирование сложных программных решений и комплексных систем.
DressTester10.6K views
QA и тестирование игр von Viktoria Odnokoz
QA и тестирование игрQA и тестирование игр
QA и тестирование игр
Viktoria Odnokoz1.3K views
Ui testing how intel does this von Alexei Lupan
Ui testing   how intel does thisUi testing   how intel does this
Ui testing how intel does this
Alexei Lupan3.7K views
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексей von solit
Solit 2013, Эволюция тестирования на Selenium, Мычко АлексейSolit 2013, Эволюция тестирования на Selenium, Мычко Алексей
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексей
solit407 views
Невыносимая переносимость кроссплатформенных приложений на примере десктопных... von SQALab
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
SQALab3.9K views

Similar a Unit testing

Unit testing and TDD von
Unit testing and TDDUnit testing and TDD
Unit testing and TDDIosif Itkin
368 views12 Folien
Тестирование весна 2013 лекция 5 von
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Technopark
438 views64 Folien
Jubula – TDD UI QA Automation Tool von
Jubula – TDD UI QA Automation ToolJubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation ToolCOMAQA.BY
726 views44 Folien
Mva stf module 6 - rus von
Mva stf module 6 - rusMva stf module 6 - rus
Mva stf module 6 - rusMaxim Shaptala
619 views41 Folien
TAP von
TAPTAP
TAPmiraj84
468 views19 Folien
Test design print von
Test design printTest design print
Test design printMichael Karpov
2.5K views98 Folien

Similar a Unit testing(20)

Unit testing and TDD von Iosif Itkin
Unit testing and TDDUnit testing and TDD
Unit testing and TDD
Iosif Itkin368 views
Тестирование весна 2013 лекция 5 von Technopark
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
Technopark438 views
Jubula – TDD UI QA Automation Tool von COMAQA.BY
Jubula – TDD UI QA Automation ToolJubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation Tool
COMAQA.BY 726 views
TAP von miraj84
TAPTAP
TAP
miraj84468 views
iPhone Unit Testing (Google tool Box) von Yandex
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)
Yandex774 views
Benefits of unit-testing and inversion of controll von Mykyta Hopkalo
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controll
Mykyta Hopkalo372 views
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В... von solit
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
solit776 views
Вадим Зубович - Test Link von QA Club Minsk
Вадим Зубович - Test LinkВадим Зубович - Test Link
Вадим Зубович - Test Link
QA Club Minsk1.3K views
TestLink von ISsoft
TestLinkTestLink
TestLink
ISsoft5.6K views
Александр Ярулин - Автоматизация тестирования с xUnit von Yandex
Александр Ярулин - Автоматизация тестирования с xUnitАлександр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnit
Yandex2.3K views
Как принести пользу разработке и упростить себе жизнь? von SQALab
Как принести пользу разработке и упростить себе жизнь?Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?
SQALab900 views
Continious integration-Automated Testing-Solid-Agile von Kairat Yussupov
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-Agile
Kairat Yussupov412 views
Sef Streluk Agile von sef2009
Sef Streluk AgileSef Streluk Agile
Sef Streluk Agile
sef2009245 views
Постановка процесса тестирования в Agile von SQALab
Постановка процесса тестирования в AgileПостановка процесса тестирования в Agile
Постановка процесса тестирования в Agile
SQALab757 views

Más de ISsoft

Sql инъекции в тестировании von
Sql инъекции в тестированииSql инъекции в тестировании
Sql инъекции в тестированииISsoft
4.4K views29 Folien
введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu... von
введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...
введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...ISsoft
691 views17 Folien
Testing of mobile apps von
Testing of mobile appsTesting of mobile apps
Testing of mobile appsISsoft
744 views10 Folien
Testing, qa, qc. what the difference von
Testing, qa, qc. what the differenceTesting, qa, qc. what the difference
Testing, qa, qc. what the differenceISsoft
2.4K views18 Folien
Ranorex presentation von
Ranorex presentationRanorex presentation
Ranorex presentationISsoft
5.8K views14 Folien
Bugs von
BugsBugs
BugsISsoft
875 views19 Folien

Más de ISsoft(20)

Sql инъекции в тестировании von ISsoft
Sql инъекции в тестированииSql инъекции в тестировании
Sql инъекции в тестировании
ISsoft4.4K views
введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu... von ISsoft
введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...
введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...
ISsoft691 views
Testing of mobile apps von ISsoft
Testing of mobile appsTesting of mobile apps
Testing of mobile apps
ISsoft744 views
Testing, qa, qc. what the difference von ISsoft
Testing, qa, qc. what the differenceTesting, qa, qc. what the difference
Testing, qa, qc. what the difference
ISsoft2.4K views
Ranorex presentation von ISsoft
Ranorex presentationRanorex presentation
Ranorex presentation
ISsoft5.8K views
Bugs von ISsoft
BugsBugs
Bugs
ISsoft875 views
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ... von ISsoft
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
ISsoft681 views
Bdd and dsl как способ построения коммуникации на проекте von ISsoft
Bdd and dsl как способ построения коммуникации на проектеBdd and dsl как способ построения коммуникации на проекте
Bdd and dsl как способ построения коммуникации на проекте
ISsoft693 views
Тестирование требований von ISsoft
Тестирование требованийТестирование требований
Тестирование требований
ISsoft1.1K views
Тестирование требований von ISsoft
Тестирование требованийТестирование требований
Тестирование требований
ISsoft3.6K views
Sql practise for beginners von ISsoft
Sql practise for beginnersSql practise for beginners
Sql practise for beginners
ISsoft877 views
Отдел юзабилити von ISsoft
Отдел юзабилитиОтдел юзабилити
Отдел юзабилити
ISsoft529 views
ToDoList von ISsoft
ToDoListToDoList
ToDoList
ISsoft5.5K views
ISTQB von ISsoft
ISTQBISTQB
ISTQB
ISsoft2.8K views
Prototype presentation von ISsoft
Prototype presentationPrototype presentation
Prototype presentation
ISsoft4.4K views
решение основной проблемы Agile (scrum) проектов в контексте ba von ISsoft
решение основной проблемы Agile (scrum) проектов в контексте baрешение основной проблемы Agile (scrum) проектов в контексте ba
решение основной проблемы Agile (scrum) проектов в контексте ba
ISsoft781 views
решение одной из ключевых проблем компетенции Ba специалистов von ISsoft
решение одной из ключевых проблем компетенции Ba специалистоврешение одной из ключевых проблем компетенции Ba специалистов
решение одной из ключевых проблем компетенции Ba специалистов
ISsoft628 views
Development of automated tests for ext js based web sites von ISsoft
Development of automated tests for ext js based web sitesDevelopment of automated tests for ext js based web sites
Development of automated tests for ext js based web sites
ISsoft1.7K views
Bdd or dsl как способ построения коммуникации на проекте von ISsoft
Bdd or dsl как способ построения коммуникации на проектеBdd or dsl как способ построения коммуникации на проекте
Bdd or dsl как способ построения коммуникации на проекте
ISsoft410 views
инфотекс автоматизация тестирования von ISsoft
инфотекс   автоматизация тестированияинфотекс   автоматизация тестирования
инфотекс автоматизация тестирования
ISsoft626 views

Unit testing

  • 1. Unit Testing Автор: Ян Букин Отдел автоматизации ISsoft Solutions
  • 2. Что такое Unit testing? • Unit testing (Модульное тестирование) – процесс проверки корректности отдельных модулей (классов) программы • Основная идея - разработка тестов, проверяющих работу каждой нетривиальной функции или метода модуля • Для облегчения разработки модульных тестов используются различные фреймворки
  • 3. TDD (test-driven development) • Test-driven development (Разработка через тестирование) – техника программирования, при которой модульные тесты пишутся до модулей программы, тем самым управляя их разработкой • Разработка состоит из коротких циклов (шагов), продолжительность которых обычно составляет несколько минут
  • 4. Этапы разработки в стиле Test-driven development • Извлечение последней версии проекта из репозитория • Добавление теста • Запуск теста • Исправление ошибки самым простым способом (в первом приближении, реализация заглушек – пустых методов) • Запуск тестов • Рефакторинг (в том числе трансформация заглушек в реальные методы) • Запуск тестов • Commit изменений
  • 5. Разработка в стиле TDD Извлечение кода Фиксирование изменений Добавление теста Запуск тестов Запуск тестов Внесение изменений Рефакторинг Запуск тестов
  • 6. Пример Исходный код примера находится в репозитории TFS $/CSI - Training Center/Clients/Automation/UnitTests/C#
  • 7. Преимущества использования Unit-тестирования • Поощрение изменений • Облегчение рефакторинга • Легкость обнаружения ошибок • Упрощение интеграции • Устранение сомнений по поводу надежности отдельных модулей • Документирование кода • Тесты могут служить иллюстрацией использования класса • Отделение интерфейса классов от реализации • Позволяет уменьшить связность компонентов системы
  • 8. Преимущества использования Unit-тестирования • Тесты постоянно управляют процессом разработки модуля, предъявляя новые и новые формальные требования к системе • Написанные однажды тесты служат на протяжении жизненного цикла программы • Автоматические тесты выполняются гораздо быстрее ручных • Облегчается совместная работа нескольких человек над одними и теми же модулями
  • 9. Что должны покрывать модульные тесты? • Критические и нетривиальные участки кода • Код, подверженный частым изменениям • Код, от которого зависит работоспособность большого количества другого кода • Сложный код • Код с большим количеством зависимостей
  • 10. Проблемы, мешающие внедрению модульных тестов • Побочные действия кода • запись данных в файл • вызов внешних библиотек • Жесткие зависимости тестируемого класса • Большое количество зависимостей • Выполнение одним классом нескольких обязанностей

Hinweis der Redaktion

  1. Поощрение изменений Юнит-тестирование позже позволяет программистам проводить рефакторинг, будучи уверенными, что модуль по-прежнему работает корректно (регрессионное тестирование). Это поощряет программистов к изменениям кода, поскольку достаточно легко проверить, что код работает и после изменений. Упрощение интеграции Юнит-тестирование помогает устранить сомнения по поводу отдельных модулей и может быть использовано для подхода к тестированию «снизу вверх»: сначала тестируются отдельные части программы, затем программа в целом. Документирование кода Юнит-тесты можно рассматривать как «живой документ» для тестируемого класса. Клиенты, которые не знают, как использовать данный класс, могут использовать юнит-тест в качестве примера. Отделение интерфейса от реализации Поскольку некоторые классы могут использовать другие классы, тестирование отдельного класса часто распространяется на связанные с ним. Например, класс пользуется базой данных; в ходе написания теста программист обнаруживает, что тесту приходится взаимодействовать с базой. Это ошибка, поскольку тест не должен выходить за границу класса. В результате разработчик абстрагируется от соединения с базой данных и реализует этот интерфейс, используя свой собственный mock-объект. Это приводит к менее связанному коду, минимизируя зависимости в системе.
  2. В идеале, модульные тесты должны покрывать код на 100%, но на практике – это слишком дорого и не слишком эффективно. Наиболее эффективно покрывать тестами следующий код: Код, подверженный частым изменениям. Чем чаще код изменяют, тем чаще он ломается. Для такого кода тесты наиболее важны. Код, от которого зависит работоспособность большого количества другого кода. Такой код, как правило, меняется весьма редко, но неполадки в нем могут привести к тяжело отлавливаемым ошибкам, т. к. на этот код начинают смотреть при отладке в самую последнюю очередь. Сложный код. Чем сложнее код – тем сложнее будет внести в него изменения не сломав его поведения. Чем лучше такой код покрыт тестами, тем менее квалифицированному программисту можно доверить его изменение. Код с большим количеством зависимостей по своим свойствам работоспособности очень напоминает часто изменяемый код. Для него также потребуется хорошее покрытие.
  3. Побочные действия кода затрудняют автоматическое тестирование. Так, например, возникновение окон assertion’ов делает тесты неавтоматическими. С выводом в лог мириться проще, однако в записях лога, при модульном тестировании, весьма вероятно наличие большого количества «ложной диагностики» ошибок, которые имитировались в тесте. Вывод в лог однозначно следует глушить, если логами должны пользоваться непрограммисты, им тяжело будет отличить ложные срабатывания от действительных. Жесткие зависимости мешают оттестировать класс, т. к. не дают заменить ключевые зависимости фальшивыми объектами. При большом количестве зависимостей класс становится очень трудно протестировать в отрыве от остальной системы. Слишком много требуется фальшивых или настоящих объектов для обеспечения работоспособности класса. Большое количество зависимостей часто говорит о том, что класс берет на себя слишком много функциональности и нуждается в разбиении на более мелкие классы. Выполнение одним классом нескольких обязанностей затрудняет тестирование функциональности класса. Переплетение функциональностей тяжело распутать снаружи. В результате количество необходимых классу тестов увеличивается в геометрической прогрессии.