top of page

ИНТЕГРАЦИОННОЕ ТЕСТИРОВАНИЕ

Обновлено: 19 апр. 2021 г.

INTEGRATION TESTING

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

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

ЦЕЛЬ ИНТЕГРАЦИОННОГО ТЕСТИРОВАНИЯ

Целью интеграционного тестирования является проверка соответствия проектируемых единиц функциональным, приёмным и требованиям надежности. Тестирование этих проектируемых единиц — объединения, множества или группы модулей — выполняется через их интерфейс, с использованием тестирования «чёрного ящика».

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


Подходы, стратегии, методологии интеграционного тестирования:

  • Подход Большой Взрыв

  • Инкрементальный подход:

    • Метод Снизу Вверх

    • Метод Сверху Вниз

    • Смешанный подход – сэндвич

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

Подход Большого взрыва

Здесь все компоненты собираются вместе, а затем тестируются.

Преимущества:

  • Удобно для небольших систем.

Недостатки:

  • Сложно локализовать баги.

  • Учитывая огромное количество интерфейсов, некоторые из них при тестировании можно запросто пропустить.

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

  • Поскольку все модули тестируются одновременно, критические модули высокого риска не изолируются и тестируются в приоритетном порядке. Периферийные модули, которые имеют дело с пользовательскими интерфейсами, также не изолированы и не проверены на приоритет.

Инкрементальный подход

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

  • Снизу вверх

  • Сверху вниз

Заглушка и драйвер

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

Заглушка: вызывается тестируемым модулем. Драйвер: вызывает модуль для тестирования.

Интеграция «снизу вверх»

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

Преимущества:

  • Проще локализовать ошибки.

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

Недостатки:

  • Критические модули (на верхнем уровне архитектуры программного обеспечения), которые контролируют поток приложения, тестируются последними и могут быть подвержены дефектам.

  • Невозможно реализовать ранний прототип

Интеграция «сверху вниз»

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

Преимущества:

  • Проще локализовать баги.

  • Возможность получить ранний прототип.

  • Критические Модули тестируются на приоритет; основные недостатки дизайна могут быть найдены и исправлены в первую очередь.

Недостатки:

  • Нужно много пней.

  • Модули на более низком уровне тестируются неадекватно.

Сэндвич (гибридная интеграция)

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

Краткое описание интеграционных тест планов:
  • Методы/подходы к тестированию (как обсуждалось выше).

  • Области применения и вне областей применения Элементов интеграционного тестирования.

  • Роли и обязанности.

  • Предпосылки для интеграционного тестирования.

  • Среда тестирования.

  • Планы снижения рисков.

КРИТЕРИИ ДЛЯ ИНТЕГРАЦИОННОГО ТЕСТИРОВАНИЯ

ВХОД

  • Модульное Тестирование Компонентов/Модулей.

  • Все ошибки с высоким приоритетом исправлены и закрыты.

  • Все модули должны быть успешно завершены и интегрированы.

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

  • Необходимая тестовая среда для настройки интеграционного тестирования.

  • Необходимая тестовая среда для настройки интеграционного тестирования.

ВЫХОД

  • Успешное тестирование Интегрированного приложения.

  • Выполненные тестовые случаи документируются.

  • Все ошибки с высоким приоритетом исправлены и закрыты.

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

ПРЕИМУЩЕСТВА И НЕДОСТАТКИ ИНТЕГРАЦИОННОГО ТЕСТИРОВАНИЯ

Преимущества:

  • Интеграционное тестирование для разных модулей одновременно очень просто.

  • Может использоваться как на ранних, так и на более поздних стадиях процесса тестирования.

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

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

Недостатки:

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

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

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

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

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

Инструменты интеграционного тестирования и unit-тестов в Java

1. Запуск тестов:

1) JUnit — фреймворк, имеющий множество расширений. Он популярен и хорошо поддерживается, поэтому в случае возникновения сложностей вы без труда найдёте решение;

2) NestedRunner — расширение для JUnit, позволяющее запускать тестовые методы из вложенных классов. Плюсы: — есть возможность замены длинных имён методов на иерархию классов с учётом BDD-подхода; — вы можете избавиться от дублирующего кода посредством перемещения его в установочные методы в необходимых вложенных классах; — вы можете объявить константы во вложенных классах, а потом связать их с тестами, которым эти константы необходимы;

3) junit-davaprovider — это расширение для JUnit позволяет писать параметризованные тесты с применением TestNG в качестве провайдера данных. И это существенный плюс, если сравнивать со стандартным способом написания параметризованных тестов, который, мягко говоря, не очень.

2. Макеты, заглушки, подмены:

1) Mockito — популярный фреймворк, поддерживающий макетирование для unit-тестов. Из плюсов — простой API, множество полезных возможностей и превосходная техническая документация;

2) Greenmail — сервер электронной почты, поддерживающий POP3, SMTP и IMAP с поддержкой SSL-соединения. Главный плюс — простота применения;

3) MockFtpServer — данная библиотека предоставляет 2 разные реализации FTP-сервера (так называемые «обманка» и «заглушка»), которые вы сможете использовать при тестировании разных сценариев. И если надо потестить код, взаимодействующий с FTP-сервером, MockFtpServer — это ваш выбор.

3. Assertions:

1) Hamcrest предоставит вам инструменты для написания assertions (утверждений) для интеграционных и unit-тестов. Его неплохо использовать совместно со Spring MVC Test Framework;

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

4. Тестирование кода доступа к данным:

1) H2 — быстрая база данных, полезная при написания интеграционных тестов, запускаемых на локальной машине разработчика;

2) DbUnit — расширение для JUnit. Вы можете использовать его для инициализации БД в известное состояние непосредственно перед выполнением каждого интеграционного теста, а также для заполнения БД необходимыми данными. Несмотря на недостатки DbUnit, этот инструмент весьма полезен и позволяет разделить тестовый код и тестовые данные.

5. Тестирование Spring-приложений:

1) Spring Test — не что иное, как швейцарский нож для написания автоматизированных тестов. Spring Test предоставляет собой 1-классную поддержку написания интеграционных и unit-тестов для приложений, где используется Spring;

2) Spring Test DbUnit — инструмент предназначен для интеграции DbUnit во фреймфорк String Test. Незаменимая вещь, если надо написать тесты доступа к данным для приложения, использующего реляционную БД и Spring.

ИТОГИ

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

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

 
 
 

Комментарии


Пост: Blog2_Post
bottom of page