Лучшее обеспечение качества: изучение стандартов модульного тестирования

Лучшее обеспечение качества: изучение стандартов модульного тестирования

ProQuality Community

Что такое модульное тестирование

Модульное тестирование (Unit Testing) - это тип тестирования программного обеспечения, при котором тестируются отдельные модули или компоненты программного обеспечения. Его цель заключается в том, чтобы проверить, что каждая единица программного кода работает должным образом. Данный вид тестирование выполняется разработчиками на этапе кодирования приложения. Модульные тесты изолируют часть кода и проверяют его работоспособность. Единицей для измерения может служить отдельная функция, метод, процедура, модуль или объект.

В моделях разработки SDLC, STLC, V Model модульное тестирование - это первый уровень тестирования, выполняемый перед интеграционным тестированием. Модульное тестирование - это метод тестирования WhiteBox, который обычно выполняется разработчиком. На деле же из-за нехватки времени или халатности разработчиков, иногда модульное тестирование приходится проводить QA инженерам.

Зачем нужно модульное тестирование?

Отсутствие модульного тестирования при написании кода значительно увеличивает уровень дефектов при дальнейшем (интеграционном, системном, и приемочном) тестировании. Качественное модульное тестирование на этапе разработки экономит время, а следовательно, в конечном итоге, и деньги.

  1. Модульные тесты позволяют исправить ошибки на ранних этапах разработки и снизить затраты.
  2. Это помогает разработчикам лучше понимать кодовую базу проекта и позволяет им быстрее и проще вносить изменения в продукт.
  3. Хорошие юнит-тесты служат проектной документацией.
  4. Модульные тесты помогают с миграцией кода. Просто переносите код и тесты в новый проект и изменяете код, пока тесты не запустятся снова.

Понимание концепции модульного тестирования

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

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

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

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

  1. Тесты должны быть независимыми - это основной принцип, между тестовыми примерами не должно быть никакой зависимости. Это важно, потому что результат одного тестового примера не должен влиять на последующие случаи.
  2. При автоматизации мы должны убедиться, что нет зависимостей, таких как настройка среды, создание экземпляров общих ресурсов и их очистка.
  3. Тесты должны быть детерминированными - тест должен либо проходить, либо не проходить все время. Худшее испытание - это тот, который иногда проходит. Если тест не проходит, у нас всегда должна быть определенная причина, и при ее исправлении тест всегда должен проходить.
  4. Тесты должны оставаться валидными для случаев прохождения / неудачи - под этим я подразумеваю, что тест должен завершиться неудачно, когда он должен был провалиться. Тщательно сформулируйте утверждения и также запустите тест на отказ.
  5. Тесты должны быть самопроверяющимися - это означает, что тест должен сам определять, ожидаемый результат или нет. Никакого ручного толкования быть не должно.
  6. Повторяемость - тест должен выдавать один и тот же результат при каждом запуске. Этого можно добиться, сделав их изолированными и независимыми.

Как проводить модульное тестирование

Модульное тестирование делится на ручное и автоматизированное. И хотя программная инженерия не выделяет превосходство одного над другим, чаще, все-таки, используется автоматизированное.

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

Алгоритм же автоматизированного заключается в следующем:

  • Разработчик записывает в приложение единицу кода, чтобы протестировать ее. После: они комментируют и, наконец, удаляют тестовый код при развертывании приложения.
  • Разработчик может изолировать единицу кода для более качественного тестирования. Эта практика подразумевает копирование кода в собственную среду тестирования. Изоляция кода помогает выявить ненужные зависимости между тестируемым кодом и другими модулями или пространствами данных в продукте.
  • Кодер обычно использует UnitTest Framework для разработки автоматизированных тестовых случаев. Используя инфраструктуру автоматизации, разработчик задает критерии теста для проверки корректного выполнения кода, и в процессе выполнения тестовых случаев регистрирует неудачные. Многие фреймворки автоматически отмечают и сообщают, о неудачных тестах и могут остановить последующее тестирование, опираясь на серьезность сбоя.
  • Алгоритм модульного тестирования:Создание тестовых случаев
  • Просмотр / переработка
  • Базовая линия
  • Выполнение тестовых случаев.
Testing Tool

Как автоматизация тестирования использует модульное тестирование

Поскольку все больше и больше организаций переходят на гибкую модель, тестирование (как ручное, так и автоматическое) начинается на начальном этапе SDLC. Ускорение процесса автоматизации играет ключевую роль. Теперь мы знаем, что в гибких требованиях постоянно меняются, разработка все еще продолжается, и в этой ситуации API и макеты могут быть очень полезны для автоматизации.

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

Мок-объект можно использовать, когда реальный объект:

  1. Медленная работа, например, для доступа к базе данных
  2. Трудно запустить, например, для сценария сбоя сервера или сетевой ошибки.
  3. Все еще в разработке.
  4. Несовместимость или необходимость дорогостоящей настройки среды тестирования.

Для Mocking доступны различные библиотеки. Вот некоторые фреймворки для имитации: Mockito, powermock и easymock для имитации.

Использование API-интерфейсов - давайте сразу перейдем к делу, API-интерфейсы работают быстрее. Также тесты API надежны. Тесты пользовательского интерфейса могут быть нестабильными и медленными, но тесты API либо пройдут, либо не пройдут. Конечно, нам нужны UI-тесты, но всегда полезно начинать с тестирования API. В большинстве случаев API-интерфейсы разрабатываются до создания пользовательского интерфейса, поэтому мы всегда можем начать тестирование API.

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

Инструменты модульного тестирования

Есть несколько автоматизированных инструментов, доступных для помощи в модульном тестировании. Ниже мы приведем несколько примеров:

  1. Junit : Junit — это бесплатный инструмент тестирования, используемый для языка программирования Java. Предоставляет утверждения для определения метода испытаний. Этот инструмент сначала проверяет данные, а затем вставляет их в кусок кода.
  2. NUnit : NUnit — широко используемая среда модульного тестирования для всех языков .net. Это инструмент с открытым исходным кодом, который позволяет писать сценарии вручную. Он поддерживает управляемые данными тесты, которые могут выполняться параллельно.
  3. JMockit : JMockit — это инструмент модульного тестирования с открытым исходным кодом. Это инструмент покрытия кода с метриками линий и путей. Позволяет имитировать API с синтаксисом записи и проверки. Этот инструмент предлагает покрытие линии, покрытие пути и покрытие данных.
  4. EMMA : EMMA — это набор инструментов с открытым исходным кодом для анализа и составления отчетов о коде, написанном на языке Java. Эмма поддерживает типы покрытия, такие как метод, линия, базовый блок. Он основан на Java, поэтому не имеет внешних библиотечных зависимостей и может обращаться к исходному коду.
  5. PHPUnit : PHPUnit — это инструмент модульного тестирования для программиста PHP. Он берет небольшие порции кода, называемые модулями, и тестирует каждый из них в отдельности. Этот инструмент также позволяет разработчикам использовать заранее определенные методы утверждений, чтобы утверждать, что система ведет себя определенным образом. 

Заключение.

Модульное тестирование может быть сложным или довольно простым, в зависимости от тестируемого приложения и используемых стратегий, инструментов и принципов тестирования. Помните, что модульное тестирование всегда становится необходимом на каком-то из уровней разработки продукта. Это уверенность

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


Report Page