Найти в Дзене
Computer Science

Разные виды тестирования

Оглавление
The different types of testing in software | Atlassian

Сравнение различных типов тестирования программного обеспечения, таких как модульное тестирование, интеграционное тестирование, функциональное тестирование, приемочное тестирование и многое другое!

Существует множество различных типов тестирования, которые вы можете использовать, чтобы убедиться, что изменения в вашем коде работают должным образом. Однако не все тесты одинаковы, и здесь мы увидим, как основные методы тестирования отличаются друг от друга.

Ручное или автоматическое тестирование

На высоком уровне нам необходимо проводить различие между ручными и автоматизированными тестами. Ручное тестирование проводится лично, щелкая по приложению или взаимодействуя с программным обеспечением и API-интерфейсами с помощью соответствующих инструментов. Это очень дорого, так как требует, чтобы кто-то настраивал среду и выполнял тесты самостоятельно, и это может быть подвержено человеческим ошибкам, поскольку тестировщик может допускать опечатки или пропускать шаги в тестовом сценарии.

Автоматизированные тесты, с другой стороны, выполняются машиной, которая выполняет тестовый сценарий, который был написан заранее. Эти тесты могут сильно различаться по сложности, от проверки одного метода в классе до проверки того, что выполнение последовательности сложных действий в пользовательском интерфейсе приводит к одинаковым результатам. Такие тесты надёжнее автоматических тестов, но качество ваших автоматических тестов зависит от того, насколько хорошо написаны ваши тестовые сценарии. Если вы только начинаете тестирование, вы можете прочитать наше руководство по непрерывной интеграции, которое поможет вам с вашим первым набором тестов. Ищете дополнительные инструменты для тестирования? Ознакомьтесь с этими руководствами по тестированию DevOps.

Автоматическое тестирование является ключевым компонентом непрерывной интеграции и непрерывной доставки, и это отличный способ масштабировать процесс контроля качества по мере добавления новых функций в ваше приложение. Но все же есть смысл провести некоторое ручное тестирование с помощью так называемого поискового тестирования, как мы увидим в этом руководстве.

Различные типы тестов

Unit-тесты

Модульные тесты имеют очень низкий уровень, близкий к исходному коду вашего приложения. Они заключаются в тестировании отдельных методов и функций классов, компонентов или модулей, используемых вашим программным обеспечением. Модульные тесты, как правило, довольно дешевы в автоматизации и могут быть очень быстро запущены сервером непрерывной интеграции.

Интеграционные тесты

Интеграционные тесты проверяют, что различные модули или службы, используемые вашим приложением, хорошо работают вместе. Например, это может быть тестирование взаимодействия с базой данных или проверка того, что микросервисы работают вместе, как ожидалось. Выполнение этих типов тестов обходится дороже, поскольку для их выполнения требуется запустить несколько частей приложения.

Функциональные тесты

Функциональные тесты фокусируются на бизнес-требованиях приложения. Они проверяют только результат действия и не проверяют промежуточные состояния системы при выполнении этого действия.

Иногда возникает путаница между интеграционными тестами и функциональными тестами, поскольку оба они требуют взаимодействия нескольких компонентов друг с другом. Разница в том, что интеграционный тест может просто проверить, что вы можете запрашивать базу данных, в то время как функциональный тест ожидает получения определенного значения из базы данных, как определено требованиями к продукту.

End-to-end тесты

Сквозное тестирование воспроизводит поведение пользователя с программным обеспечением в полной прикладной среде. Он проверяет, что различные пользовательские потоки работают должным образом и могут быть такими же простыми, как загрузка веб-страницы или вход в систему, или гораздо более сложными сценариями, проверяющими уведомления по электронной почте, онлайн-платежи и т.д...

Сквозные тесты очень полезны, но их выполнение дорого, и их может быть сложно поддерживать, когда они автоматизированы. Рекомендуется провести несколько ключевых сквозных тестов и больше полагаться на низкоуровневые типы тестирования (модульные и интеграционные тесты), чтобы иметь возможность быстро выявлять критические изменения.

Приёмочные тесты

Приемочные тесты - это формальные тесты, выполняемые для проверки соответствия системы ее бизнес-требованиям. Они требуют, чтобы все приложение было запущено и работало, а также сосредоточено на воспроизведении поведения пользователей. Но они также могут пойти дальше и измерить производительность системы и отклонить изменения, если определенные цели не будут достигнуты.

Тесты производительности

Тесты производительности проверяют поведение системы, когда она находится под значительной нагрузкой. Эти тесты являются нефункциональными и могут иметь различную форму для понимания надежности, стабильности и доступности платформы. Например, это может быть наблюдение за временем отклика при выполнении большого количества запросов или наблюдение за тем, как система ведет себя со значительным объемом данных.

Тесты производительности по своей природе довольно дороги для внедрения и запуска, но они могут помочь вам понять, приведут ли новые изменения к ухудшению состояния вашей системы.

Smoke тесты

Smoke тесты - это базовые тесты, которые проверяют базовую функциональность приложения. Они предназначены для быстрого выполнения, и их цель - дать вам уверенность в том, что основные функции вашей системы работают должным образом.

Дымовые тесты могут быть полезны сразу после создания новой сборки, чтобы решить, можно ли запускать более дорогостоящие тесты, или сразу после развертывания, чтобы убедиться, что приложение работает правильно во вновь развернутой среде.

Как автоматизировать ваше тестирование

Человек может выполнить все тесты, упомянутые выше, но это будет очень дорого и контрпродуктивно. Как люди, мы обладаем ограниченными возможностями для выполнения большого количества действий повторяемым и надежным способом. Но машина может легко сделать это быстро и проверит, что комбинация логин / пароль работает в 100-й раз, не жалуясь.

Чтобы автоматизировать ваши тесты, вам сначала нужно будет написать их программно, используя платформу тестирования, подходящую для вашего приложения. PHPUnit, Mocha, RSpec - это примеры фреймворков тестирования, которые вы можете использовать для PHP, Javascript и Ruby соответственно. Существует множество вариантов для каждого языка, поэтому вам, возможно, придется провести некоторые исследования и попросить сообщества разработчиков выяснить, какой фреймворк будет для вас наилучшим.

Если вы только начинаете тестирование, вы можете прочитать наше руководство по непрерывной интеграции, которое поможет вам с вашим первым набором тестов.

Исследовательское тестирование

Чем больше функций и улучшений будет добавлено в ваш код, тем больше вам нужно будет протестировать, чтобы убедиться, что вся ваша система работает должным образом. И затем для каждой ошибки, которую вы исправляете, было бы разумно проверить, что они не возвращаются в более новых версиях. Автоматизация является ключом к тому, чтобы сделать это возможным, и написание тестов рано или поздно станет частью вашего рабочего процесса разработки.

Итак, вопрос в том, стоит ли все-таки проводить ручное тестирование? Короткий ответ - да, и он должен быть сосредоточен на так называемом исследовательском тестировании, целью которого является выявление неочевидных ошибок.

Ознакомительный сеанс тестирования не должен превышать двух часов и должен иметь четкую область применения, чтобы помочь тестировщикам сосредоточиться на конкретной области программного обеспечения. После того, как все тестировщики будут проинструктированы, они должны попробовать различные действия, чтобы проверить, как ведет себя система.

Примечания о тестировании

Чтобы закончить это руководство, важно поговорить о цели тестирования. Хотя важно проверить, что пользователи могут использовать ваше приложение (я могу войти в систему, я могу сохранить объект), не менее важно проверить, что ваша система не выходит из строя при сбое данных или выполнении неожиданных действий. Вам нужно предвидеть, что произойдет, когда пользователь допустит опечатку, попытается сохранить неполную форму или использует неправильный API. Вам нужно проверить, может ли кто-то легко скомпрометировать данные, получить доступ к ресурсу, который ему не положен. Хороший набор тестов должен попытаться сломать ваше приложение и помочь понять его ограничения.

И, наконец, тесты - это тоже код! Так что не забывайте о них во время проверки кода, поскольку они могут стать the final gate to production.