Тестирование белого ящика Java

Как проводится тестирование белого ящика в Java-приложениях? Значит ли это, что я должен тестировать класс за классом?

Из моего исследования я знаю, что:

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

Как должно выглядеть тестирование белого ящика?

2 ответа

Решение

Классовое тестирование обычно называется модульным тестированием. Есть несколько популярных инструментов, которые могут вам помочь. Начните с JUnit или TestNG. Реализуйте тесты для каждого класса или группы классов (модулей), которые предоставляют некоторую функциональность.

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

Описание: Современное тестирование белого ящика использует сложные автоматизированные инструменты, которые помогают разработчикам разрабатывать хорошие тесты и измерять охват кода значимым образом. Широко используемые (если рудиментарные) примеры включают Cobertura, EMMA, EclEmma и JaCoCo.

Как проводится тестирование белого ящика в Java-приложениях?

Традиционно, тестирование "черного ящика" означало, что за тестирование программного обеспечения отвечала другая команда (не разработчик), и они при этом не смотрели на исходный код.

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

Очевидно, однако, что этот подход может не выполнять некоторые ветви функции. Хороший разработчик откроет код и скажет: "Привет, мне нужно добавить вход для проверки этой ветви".

Современное тестирование белого ящика продвигает эту идею на шаг вперед, автоматизируя процесс, создавая вывод, подобный этому, чтобы показать, какие части метода еще не были реализованы, скажем, JUnit (из плагина NetBeans TikiOne):

Плагин NetBeans TikiOne, использующий библиотеку JaCoCo для выявления ветвей, которые мои тесты не покрывают

Как должно выглядеть тестирование белого ящика?

Инструменты покрытия кода, упомянутые в сводке, пытаются автоматизировать процесс проверки каждой строки или ветви кода. При интеграции в среду непрерывной интеграции, такую ​​как Jenkins, она позволяет вашей команде постоянно следить не только за тем, проходят ли ваши тесты, но и за тем, выполняете ли вы свои цели покрытия (из плагина NetBeans TikiOne):

Плагин NetBeans TikiOne резюмирует низкое качество моего тестового покрытия для нескольких классов

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

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

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

Линии и ветви являются простейшими и наиболее используемыми (контрольными) критериями покрытия графа (соответствующими покрывающим узлам и ребрам) - в некоторых инструментах доступны более полные (и трудные для удовлетворения) метрики, такие как пары ребер и простые пути. Они спрашивают не просто: "Прошел ли я каждый выбор по каждой ветке хотя бы один раз", но "прошел ли я каждую ветку всеми возможными способами".

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

Значит ли это, что я должен тестировать класс за классом?

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


Для получения дополнительной информации о критериях покрытия теста см.

  • Бейзер, Борис. Методы тестирования программного обеспечения. Dreamtech Press, 2003.

или посмотреть более актуальную

  • Амманн, Пол и Джефф Оффатт. Введение в тестирование программного обеспечения. Издательство Кембриджского университета, 2008.
Другие вопросы по тегам