Предположение об ошибке черный ящик

«Чёрный ящик» — тестирование функционального поведения программы с точки зрения внешнего мира (текст программы не используется).

Содержание

  • 1 Понятие «чёрного» ящика
  • 2 Исследование поведения «черного» ящика
  • 3 Тестирование по стратегии чёрного ящика
    • 3.1 Свойства правильно выбранного теста
    • 3.2 Методы стратегии чёрного ящика
      • 3.2.1 Эквивалентное разбиение
      • 3.2.2 Анализ граничных значений
      • 3.2.3 Анализ причинно-следственных связей
      • 3.2.4 Предположение об ошибке

[править] Понятие «чёрного» ящика

Под «чёрным ящиком» понимается объект исследования, внутреннее устройство которого неизвестно. Понятие «чёрный ящик» предложено У. Р. Эшби. В кибернетике оно позволяет изучать поведение систем, то есть их реакций на разнообразные внешние воздействия и в то же время абстрагироваться от их внутреннего устройства. На рис. 1 приведено схемное построение входов X(x1,x2,…,xn), выходов Y(y1,y2,…,ym), характеризуемых функцией перехода (δ) и функцией выхода (λ) «чёрного» ящика.

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

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

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

В настоящее время известны два вида «чёрных» ящиков. К первому виду относят любой «чёрный» ящик, который может рассматриваться как автомат, называемый конечным или бесконечным. Поведение таких «чёрных» ящиков известно. Ко второму виду относятся такие «чёрные» ящики, поведение которых может быть наблюдаемо только в эксперименте. В таком случае в явной или неявной форме высказывается гипотеза о предсказуемости поведения «чёрного» ящика в вероятностном смысле. Без предварительной гипотезы невозможно любое обобщение, или, как говорят, невозможно сделать индуктивное заключение на основе экспериментов с «чёрным» ящиком. Для обозначения модели «чёрного» ящика Н. Винером [2] предложено понятие «белого» ящика. «Белый» ящик состоит из известных компонентов, то есть известных X, Y, δ, λ. Его содержимое специально подбирается для реализации той же зависимости выхода от входа, что и у соответствующего «чёрного» ящика. В процессе проводимых исследований и при обобщениях, выдвижении гипотез и установления закономерностей возникает необходимость корректировки организации «белого» ящика и смены моделей. В связи с этим, при моделировании исследователь должен обязательно многократно обращаться к схеме отношений «чёрный» — «белый» ящик.

[править] Исследование поведения «черного» ящика

Рассмотрим, как изучается и исследуется поведение «черного» ящика второго вида. Предположим, что дана некоторая система управления, внутреннее строение которой неизвестно. Система управления имеет входы X(x1,x2,x3,…,xn) и выходы Y(y1,y2,y3,…,ym).

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

Такой способ исследования «черного» ящика называется протокольным. Значения входных величин в моменты времени t1,t2,…,tk) могут выбираться произвольно.

Таблица 1

Способ исследования «черного» ящика

Состояние входов Состояние выходов Время
x1(t1),x2(t1),…,xn(t1) y1(t1),y2(t1),…,xn(t1) t1
y1(t2),y2(t2),…,xn(t2) y1(t2),y2(t2),…,yn(t2) t2
………… ………… ….
………… ………… ….
y1(tk),y2(tk),…,xn(tk) y1(tk),y2(tk),…,yn(tk) tk

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

Исследование систем управления связано с понятиями «вероятностный автомат», «вероятностная система», что требует изучения их вероятностных свойств. Для этих целей можно построить матрицу вероятностей (табл. 2), в которой для каждого входа xi и каждого выхода yi указывается условная вероятность pi, что yi возникает в ответ на xi [7], приведенной в табл. 2.

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

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

Для науки метод «чёрный» ящик имеет весьма большое значение. С его помощью в науке были сделаны очень многие выдающиеся открытия. Например, ученый Гарвей еще в XVII веке предугадал строение сердца. Он моделировал работу сердца насосом, позаимствовав идеи из совершенно другой области современных ему знаний — гидравлики. Практическая ценность метода «чёрный» ящик заключается во-первых, в возможности исследования очень сложных динамических систем, и, во-вторых, в возможности замены одного «ящика» другим. Окружающая действительность и биология дают массу примеров выявления строения систем методом «чёрного» ящика.

[править] Тестирование по стратегии чёрного ящика

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

[править] Свойства правильно выбранного теста

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

[править] Методы стратегии чёрного ящика

  1. Эквивалентное разбиение.
  2. Анализ граничных значений.
  3. Анализ причинно-следственных связей.
  4. Предположение об ошибке.

Рассмотрим подробнее каждый из этих методов:

[править] Эквивалентное разбиение

Основу метода составляют два положения:

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

Разработка тестов этим методом осуществляется в два этапа: выделение классов эквивалентности и построение теста.

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

Входное условие Правильные классы эквивалентности Неправильные классы эквивалентности

Выделение классов эквивалентности является эвристическим способом, однако существует ряд правил:

  1. Если входное условие описывает область значений, например «Целое число принимает значение от 0 до 999», то существует один правильный класс эквивалентности и два неправильных.
  2. Если входное условие описывает число значений, например «Число строк во входном файле лежит в интервале (1..6)», то также существует один правильный класс и два неправильных.
  3. Если входное условие описывает множество входных значений, то определяется количество правильных классов, равное количеству элементов в множестве входных значений. Если входное условие описывает ситуацию «должно быть», например «Первый символ должен быть заглавным», тогда один класс правильный и один неправильный.
  4. Если есть основание считать, что элементы внутри одного класса эквивалентности могут программой трактоваться по-разному, необходимо разбить данный класс на подклассы. На этом шаге тестирующий на основе таблицы должен составить тесты, покрывающие собой все правильные и неправильные классы эквивалентности. При этом составитель должен минимизировать общее число тестов.

Определение тестов:

  1. Каждому классу эквивалентности присваивается уникальный номер.
  2. Если еще остались не включенные в тесты правильные классы, то пишутся тесты, которые покрывают максимально возможное количество классов.
  3. Если остались не включенные в тесты неправильные классы, то пишут тесты, которые покрывают только один класс.

[править] Анализ граничных значений

Граничные условия — это ситуации, возникающие на высших и нижних границах входных классов эквивалентности.

Анализ граничных значений отличается от эквивалентного разбиения следующим:

  1. Выбор любого элемента в классе эквивалентности в качестве представительного осуществляется таким образом, чтобы проверить тестом каждую границу этого класса.
  2. При разработке тестов рассматриваются не только входные значения (пространство входов), но и выходные (пространство выходов).

Метод требует определённой степени творчества и специализации в рассматриваемой задаче.

Cуществует несколько правил:

  1. Построить тесты с неправильными входными данными для ситуации незначительного выхода за границы области значений. Если входные значения должны быть в интервале [-1.0 .. +1.0], проверяем −1.0, 1.0, −1.000001, 1.000001.
  2. Обязательно писать тесты для минимальной и максимальной границы диапазона.
  3. Использовать первые два правила для каждого из входных значений (использовать пункт 2 для всех выходных значений).
  4. Если вход и выход программы представляет упорядоченное множество, сосредоточить внимание на первом и последнем элементах списка.

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

[править] Анализ причинно-следственных связей

Этапы построения теста:

  1. Спецификация разбивается на рабочие участки.
  2. В спецификации определяются множество причин и следствий. Под причиной понимается отдельное входное условие или класс эквивалентности. Следствие представляет собой выходное условие или преобразование системы. Здесь каждой причине и следствию присваивается номер.
  3. На основе анализа семантического (смыслового) содержания спецификации строится таблица истинности, в которой последовательно перебираются всевозможные комбинации причин и определяются следствия для каждой комбинации причин.

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

[править] Предположение об ошибке

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


Подборка по базе: Практическая работа инвариант Ташкинов А.А..docx, 11- КУРСОВАЯ РАБОТА — КОНФЛИКТ В ОРГАНИЗАЦИИ.docx, бухг. эл. сист. Лабораторная 3.docx, Практическая работа.docx, словарная работа Швец Ольга.doc, Практическая работа Всеобщая история Филин М.С.docx, Анализ Хозяйственной деятельности практическая работа.docx, Лабораторная работа 2.docx, Курсовая работа.docx, Практическая работа №1 Тема_ «Особенности содержания обновленных


Лабораторная работа № 2
ТЕСТИРОВАНИЕ МЕТОДОМ ЧЕРНОГО ЯЩИКА
1. Цель работы
Изучение тестирования методом черного ящика.
2. Оборудование
Персональный компьютер.
3. Пояснения к работе
Перед выполнением задания изучить лекционный материал и теоретические сведения.
При выполнении лабораторной работы обучающийся должен
Знать:
— Основные принципы отладки и тестирования программных продуктов
Уметь:
— Выполнять отладку и тестирование программы на уровне модуля
4. Теоретические сведения
Одним из способов проверки программ является стратегия тестирования, называемая стратегией «черного ящика» или тестированием с управлением по данным. В этом случае программа рассматривается как «черный ящик» и такое тестирование имеет целью выяснения обстоятельств, в которых поведение программы не соответствует спецификации.
Стратегия «черного ящика» включает в себя следующие методы формирования тестовых наборов:
1. эквивалентное разбиение;
2. анализ граничных значений;
3. анализ причинно-следственных связей;
4. предположение об ошибке.
Эквивалентное разбиение
Основу метода составляют положения:
Исходные данные программы необходимо разбить на конечное число классов эквивалентности.
Каждый тест должен включать по возможности максимальное количество различных входных условий, что позволяет минимизировать общее число необходимых тестов.
Первое положение используется для разработки набора «интересных» условий, которые должны быть протестированы, а второе — для разработки минимального набора тестов.
Разработка тестов методом эквивалентного разбиения осуществляется в два этапа: выделение классов эквивалентности; построение тестов.
Выделение классов эквивалентности.
Классы эквивалентности выделяются путем выбора каждого входного условия (обычно это предложение или фраза из спецификации) и разбиением его на две или более групп (таблица 1).

Если есть основание считать, что различные элементы класса эквивалентности трактуются программой неодинаково, то данный класс разбивается на меньшие классы эквивалентности.
1. Построение тестов
Этот шаг заключается в использовании классов эквивалентности для построения тестов. Этот процесс включает в себя:

Назначение каждому классу эквивалентности уникального номера.


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

Запись тестов, каждый из которых покрывает один и только один из непокрытых неправильных классов эквивалентности, до тех пор, пока все неправильные классы не будут покрыты тестами.
Разработка индивидуальных тестов для неправильных классов эквивалентности обусловлено тем, что определенные проверки с ошибочными входами скрывают или заменяют другие проверки с ошибочными входами.
Недостатком метода эквивалентных разбиения в том, что он не исследует комбинации входных условий.
2.
Анализ граничных значений
Граничные условия — это ситуации, возникающие на, выше или ниже границ входных классов эквивалентности.
Применение метода анализа граничных условий требует определенной степени творчества и специализации в рассматриваемой проблеме. Тем не менее, существует несколько общих правил этого метода:
1.
Построить тесты для границ области и тесты с неправильными входными данными для ситуаций незначительного выхода за границы области, если входное условие описывает область значений (например, для области входных значений от -1.0 до +1.0 необходимо написать тесты для ситуаций -1.0, +1.0, -1.001 и +1.001).
2.
Построить тесты для минимального и максимального значений условий и тесты, большие и меньшие этих двух значений, если входное условие удовлетворяет дискретному ряду значений. Например, если входной файл может содержать от 1 до 255 записей, то проверить 0, 1, 255 и 256 записей.
3.
Использовать правило 1 для каждого выходного условия. Причем, важно проверить границы пространства результатов, поскольку не всегда границы входных областей представляют такой же набор условий, как и границы выходных областей. Не всегда также можно получить результат вне выходной области, но, тем не менее, стоит рассмотреть эту возможность.
4.
Использовать правило 2 для каждого выходного условия.
5.
Если вход или выход программы есть упорядоченное множество
(например, последовательный файл, линейный список, таблица), то сосредоточить внимание на первом и последнем элементах этого множества.
6.
Попробовать свои силы в поиске других граничных условий.
3.
Анализ причинно-следственных связей
Метод анализа причинно-следственных связей помогает системно выбирать высокорезультативные тесты. Он дает полезный побочный эффект, позволяя обнаруживать неполноту и неоднозначность исходных спецификаций.
Для использования метода необходимо понимание булевской логики
(логических операторов — и, или, не). Построение тестов осуществляется в несколько этапов.
1.
Спецификация разбивается на «рабочие» участки, так как таблицы причинно-следственных связей становятся громоздкими при применении метода к большим спецификациям.
2.
В спецификации определяются множество причин и множество следствий. Причина есть отдельное входное условие или класс эквивалентности

входных условий. Следствие есть выходное условие или преобразование системы.
Каждым причине и следствию приписывается отдельный номер.
3.
На основе анализа семантического (смыслового) содержания спецификации строится таблица истинности, в которой последовательно перебираются все возможные комбинации причин и определяются следствия каждой комбинации причин.
4.
Каждая строка таблицы истинности преобразуется в тест.
4.
Предположение об ошибке
Часто программист с большим опытом выискивает ошибки «без всяких методов». При этом он подсознательно использует метод «предположение об ошибке».
Процедура метода предположения об ошибке в значительной степени основана на интуиции.
Основная идея метода состоит в том, чтобы перечислить в некотором списке возможные ошибки или ситуации, в которых они могут появиться, а затем на основе этого списка составить тесты.
Другими словами, требуется перечислить те специальные случаи, которые могут быть не учтены при проектировании.
Общая стратегия тестирования
Все методологии проектирования тестов могут быть объединены в общую стратегию. Это оправдано тем, что каждый метод обеспечивает создание определенного набора тестов, но ни один из них сам по себе не может дать полный набор тестов. Приемлемая стратегия состоит в следующем:
1.
Если спецификация состоит из комбинации входных условий, то начать рекомендуется с применения метода функциональных диаграмм.
2.
В любом случае необходимо использовать анализ граничных значений.
3.
Определить правильные и неправильные классы эквивалентности для входных и выходных данных и дополнить, если это необходимо, тесты, построенные на предыдущих шагах.
4.
Для получения дополнительных тестов рекомендуется использовать метод предположения об ошибке.
5. Задание
Задание 1. Выполнить тестирование созданного приложения «Шифр
Полибия» в лабораторной работе № 1.
6. Порядок выполнения работы
1 Ознакомиться с тестированием методом черного ящика, перейдя по ссылке
https://www.youtube.com/watch?v=a_Dge0e9mYo
2. Разработать тестовые наборы с использованием метода эквивалентного
разбиения
1.
Ознакомиться с теоретическими сведениями по стратегиям тестирования.
2.
Для созданного приложения «Шифр Полибия» в лабораторной работе № 1 подготовить исчерпывающие тесты с использованием метода эквивалентного разбиения.
3.
Выполнить тестирование предложенной программы.
4.
При наличии ошибки в программе, сформулировать гипотезу для локализации ошибки.
3. Разработать тестовые наборы с использованием метода анализа
граничных условий

1.
Ознакомиться с теоретическими сведениями по стратегиям тестирования.
2.
Для созданного приложения «Шифр Полибия» в лабораторной работе № 1 подготовить исчерпывающие тесты с использованием метода анализа граничных условий.
3.
Выполнить тестирование предложенной программы.
4.
При наличии ошибки в программе, сформулировать гипотезу для локализации ошибки.
4. Разработать тестовые наборы с использованием анализа причинно-
следственных связей
1.
Ознакомиться с теоретическими сведениями по стратегиям тестирования.
2.
Для созданного приложения «Шифр Полибия» в лабораторной работе № 1 подготовить исчерпывающие тесты с использованием метода анализа причинно- следственных связей.
3.
Выполнить тестирование предложенной программы.
4.
При наличии ошибки в программе, сформулировать гипотезу для локализации ошибки.
5.
Оформить отчёт.
7.
Содержание отчета
Отчет должен быть выполнен в соответствии с Общими требованиями к оформлению документов учебной деятельности обучающихся. Отчет должен содержать следующие разделы:
1.
Наименование работы.
2.
Цель работы.
3. Результаты выполненных заданий:
1. Разработка тестовых наборов с использованием метода эквивалентного
разбиения
1.
Скриншот с тестами с использованием метода эквивалентного разбиения.
2.
Гипотеза для локализации ошибки, если ошибка была.
2. Разработка тестовых наборов с использованием метода анализа граничных
условий
1.
Скриншот с тестами с использованием метода анализа граничных условий.
2.
При наличии ошибки в программе, сформулировать гипотезу для локализации ошибки.
3. Разработка тестовых наборов с использованием анализа причинно-
следственных связей
1.
Скриншот с тестами с использованием метода анализа причинно- следственных связей.
2.
Гипотеза для локализации ошибки, если ошибка была.
4. Вывод о результативности тестирования с использованием
стратегии «черного ящика».

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

Методы

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

Методы проверки (тестирования) программ можно разделить на статические и динамические.

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

Динамические техники следующие:

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

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

Прозрачное тестирование

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

Тестирование программ методом белого ящика обладает следующими преимуществами:

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

Недостатки:

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

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

Основные разновидности:

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

2) отладка ветвления имеет целью исследование каждой опции (истинной или ложной) каждого оператора управления, который также включает в себя объединенное решение;

3) тестирование основного пути, которое позволяет тестировщику установить меру логической сложности процедурного проекта для выделения базового набора путей выполнения;

4) проверка потока данных – стратегия исследования потока управления путем аннотации графа информацией об объявлении и использовании переменных программы;

5) тестирование циклов – полностью сосредоточено на правильном выполнении циклических процедур.

тестирование методом белого ящика

Поведенческая отладка

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

Преимущества такого подхода:

  • эффективность для большого сегмента кода;
  • простота восприятия тестировщиком;
  • перспектива пользователя четко отделена от перспективы разработчика (программист и тестировщик независимы друг от друга);
  • более быстрое создание теста.

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

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

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

К данной категории можно отнести следующие методы тестирования программного обеспечения:

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

2) краевой анализ фокусируется на проверке границ или экстремальных граничных значений – минимумах, максимумах, ошибочных и типичных значениях;

3) фаззинг – используется для поиска погрешностей реализации с помощью ввода искаженных или полуискаженных данных в автоматическом или полуавтоматическом режиме;

4) графы причинно-следственных связей – методика, основанная на создании графов и установлении связи между действием и его причинами: тождественность, отрицание, логическое ИЛИ и логическое И – четыре основных символа, выражающие взаимозависимость между причиной и следствием;

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

6) тестирование всех пар – техника, набор тестовых значений которой включает все возможные дискретные комбинации каждой пары входных параметров;

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

методы тестирования программного обеспечения

Тестирование методом черного ящика: примеры

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

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

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

Какое количество тестов необходимо произвести, чтобы проверить все возможные значения для 4 окон флажка и одного двухпозиционного поля, задающего время в секундах? На первый взгляд расчет прост: 4 поля с двумя возможными состояниями – 24 = 16, которые необходимо умножить на число возможных позиций от 00 до 99, то есть 1600 возможных тестов.

Тем не менее этот расчет ошибочен: мы можем определить, что двухпозиционное поле может также содержать пробел, т. е. оно состоит из двух буквенно-цифровых позиций и может включать символы алфавита, специальные символы, пробелы и т. д. Таким образом, если система представляет собой 16-битный компьютер, то получится 216 = 65 536 вариантов для каждой позиции, результирующих в 4 294 967 296 тестовых случаев, которые необходимо умножить на 16 комбинаций для флажков, что в общей сложности дает 68 719 476 736. Если их выполнить со скоростью 1 тест в секунду, то общая продолжительность тестирования составит 2 177,5 лет. Для 32 или 64-битных систем, длительность еще больше.

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

тестирование программ методами черного ящика

Эквивалентное разбиение

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

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

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

Например, в (1/x)1/2 используется три последовательности данных, три эквивалентных разбиения:

1. Все положительные числа будут обрабатываться таким же образом и должны давать правильные результаты.

2. Все отрицательные числа будут обрабатываться так же, с таким же результатом. Это неверно, так как корень из отрицательного числа является мнимым.

3. Ноль будет обрабатываться отдельно и даст ошибку «деление на ноль». Это раздел с одним значением.

Таким образом, мы видим три различных раздела, один из которых сводится к единственному значению. Есть один «правильный» раздел, дающий достоверные результаты, и два «неправильных», с некорректными результатами.

Краевой анализ

Обработка данных на границах эквивалентного разбиения может выполняться иначе, чем ожидается. Исследование граничных значений – хорошо известный способ анализа поведения ПО в таких областях. Эта техника позволяет выявить такие ошибки:

  • неправильное использование операторов отношения (<,>, =, ≠, ≥, ≤);
  • единичные ошибки;
  • проблемы в циклах и итерациях,
  • неправильные типы или размер переменных, используемых для хранения информации;
  • искусственные ограничения, связанные с данными и типами переменных.

автоматические методы тестирования программных продуктов

Полупрозрачное тестирование

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

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

  • архитектурная модель;
  • унифицированный язык моделирования (UML);
  • модель состояний (конечный автомат).

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

Такие методы тестирования обладают следующими преимуществами:

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

Недостатки:

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

Другое название техники серого ящика – полупрозрачная отладка.

К этой категории относят такие методы тестирования:

1) ортогональный массив – использование подмножества всех возможных комбинаций;

2) матричная отладка с использованием данных о состоянии программы;

3) регрессивная проверка, проводимая при внесении новых изменений в ПО;

4) шаблонный тест, который анализирует дизайн и архитектуру добротного приложения.

методы тестирования программных продуктов

Сравнение методов тестирования ПО

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

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

Ниже приведены основные отличия трех динамических техник тестирования — дана таблица сравнения между тремя формами отладки ПО.

Аспект

Метод черного ящика

Метод серого ящика

Метод белого ящика

Наличие сведений о составе программы

Анализируются только базовые аспекты

Частичное знание о внутреннем устройстве программы

Полный доступ к исходному коду

Степень дробления программы

Низкая

Средняя

Высокая

Кто производит отладку?

Конечные пользователи, тестировщики и разработчики

Конечные пользователи, отладчики и девелоперы

Разработчики и тестировщики

База

Тестирование базируется на внешних внештатных ситуациях.

Диаграммы БД, диаграммы потока данных, внутренние состояния, знание алгоритма и архитектуры

Внутреннее устройство полностью известно

Степень охвата

Наименее исчерпывающая и требует минимума времени

Средняя

Потенциально наиболее исчерпывающая. Требует много времени

Данные и внутренние границы

Отладка исключительно методом проб и ошибок

Могут проверяться домены данных и внутренние границы, если они известны

Лучшее тестирование доменов данных и внутренних границ

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

Нет

Нет

Да

Автоматизация

Автоматические методы тестирования программных продуктов намного упрощают процесс проверки независимо от технической среды или контекста ПО. Их используют в двух случаях:

1) для автоматизации выполнение утомительных, повторяющихся или скрупулезных задач, таких как сравнение файлов в нескольких тысяч строк с целью высвобождения времени тестировщика для концентрации на более важных моментах;

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

методы проверки тестирования программ

Тестовые инструменты могут быть классифицированы по-разному. Следующее деление основано на поддерживаемых ими задачах:

  • управление тестированием, которое включает поддержку управления проектом, версиями, конфигурациями, риск-анализ, отслеживание тестов, ошибок, дефектов и инструменты создания отчетов;
  • управление требованиями, которое включает хранение требований и спецификаций, их проверку на полноту и многозначность, их приоритет и отслеживаемость каждого теста;
  • критический просмотр и статический анализ, включая мониторинг потока и задач, запись и хранение комментариев, обнаружение дефектов и плановых коррекций, управление ссылками на проверочные списки и правила, отслеживание связи исходных документов и кода, статический анализ с обнаружением дефектов, обеспечением соответствия стандартам написания кода, разбором структур и их зависимостей, вычислением метрических параметров кода и архитектуры. Кроме того, используются компиляторы, анализаторы связей и генераторы кросс-ссылок;
  • моделирование, которое включает инструменты моделирования бизнес-поведения и проверки созданных моделей;
  • разработка тестов обеспечивает генерацию ожидаемых данных исходя из условий и интерфейса пользователя, моделей и кода, управление ими для создания или изменения файлов и БД, сообщений, проверки данных исходя из правил управления, анализа статистики условий и рисков;
  • критический просмотр путем ввода данных через графический интерфейс пользователя, API, командные строки с использованием компараторов, помогающих определить успешные и неудавшиеся тесты;
  • поддержка сред отладки, которая позволяет заменить отсутствующее оборудование или ПО, в т. ч. симуляторы оборудования на основе подмножества детерминированного выхода, эмуляторы терминалов, мобильных телефонов или сетевого оборудования, среды для проверки языков, ОС и аппаратного обеспечения путем замены недостающих компонентов драйверами, фиктивными модулями и др., а также инструменты для перехвата и модификации запросов ОС, симуляции ограничений ЦПУ, ОЗУ, ПЗУ или сети;
  • сравнение данных файлов, БД, проверка ожидаемых результатов во время и по окончании тестирования, в т. ч. динамическое и пакетное сравнение, автоматические «оракулы»;
  • измерение покрытия для локализации утечек памяти и некорректного управления ею, оценки поведения системы в условиях симулированной нагрузки, генерации нагрузки приложений, БД, сети или серверов по реалистичным сценариям ее роста, для измерения, анализа, проверки и отчета о системных ресурсах;
  • обеспечение безопасности;
  • тестирование производительности, нагрузки и динамический анализ;
  • другие инструменты, в т. ч. для проверки правописания и синтаксиса, сетевой безопасности, наличия всех страниц веб-сайта и др.

Перспектива

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

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

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

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

Так называемое «black-box тестирование» является методом тестирования программного обеспечения, внутренняя структура, дизайн и реализация которого неизвестна тестировщику (при подготовке тест-кейсов он опирается на требования и спецификацию). Хочу обратить внимание на то, что требования и спецификация не всегда существуют в письменном виде; тем не менее, при тестировании методом черного ящика мы можем опираться на устно описанные требования.

Что такое «черный ящик» согласно терминологии ISTQB?

Black-box тестирование – это функциональное и нефункциональное тестирование без доступа к внутренней структуре компонентов системы. Метод тестирования «черного ящика» – процедура получения и выбора тестовых случаев на основе анализа спецификации (функциональной или нефункциональной), компонентов или системы без ссылки на их внутреннее устройство.

Где используется метод «черного ящика»?

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

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

3. Стресс-тестирование.
Предположим, что у нас есть букмекерская онлайн-контора, в документации к которой заявлена возможность одновременной регистрации 1000 пользователей. В этом случае стрессовым тестированием будет непрерывный поток автоматизированных регистраций (как минимум, 1000 регистраций в минуту) на протяжении 12 часов.

4. Usability-тестирование.
Пусть в упомянутой букмекерской конторе есть функционал «Купон»: мы проверяем, сколько времени уходит у пользователя для добавления ставки в купон, ввода суммы и завершения ставки.

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

6. Приемочное тестирование.
После проверки ПО тестировщиками его отдают заказчику, который запускает приемочные тесты «черного ящика» на основе ожиданий от функциональности. Как правило, набор тестов в этом случае определяет сам заказчик, за ним же остается право отказаться от приемки (если его не устроили результаты тестирования).

7. Регрессионное тестирование.
Проводится на протяжении всего цикла разработки. Цель такого тестирования – проверить работоспособность нового кода и выяснить, не привел ли он к ошибкам или поломкам в старом функционале.

При выборе набора регрессионных тестов следует использовать следующие рекомендации:

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

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

8. Beta-тестирование.
Это тестирование также проводится методом «черного ящика». Практически готовое ПО отдают для «обкатки» желающим для выявления максимального количества ошибок еще до того, как оно попадет к конечному пользователю.

Что это дает:

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

Техники тестирования «черным ящиком»

1. Эквивалентное разбиение.
Эта техника включает в себя разделение входных значений на допустимые и недопустимые разделы и выбор репрезентативных значений из каждого раздела в качестве тестовых данных. Она может быть использована для уменьшения количества тестовых случаев. Допустим, у нас есть целая переменная N в диапазоне от -99 до 99: позитивными классами эквивалентности будут [-99, -10], [-9, -1], 0, [1, 9], [10, 99], а недействительными (негативными) – <-99, >99, пустое значение, нечисловые строки.

2. Анализ граничных значений.
Техника, которая включает в себя определение границ входных значений и выбор в качестве тестовых данных значений, находящихся на границах, внутри и вне границ. Многие системы имеют тенденцию вести себя некорректно при граничных значениях, поэтому оценка значений границ приложения очень важна. При проверке мы берем следующие величины: минимум, (минимум-1), максимум, (максимум+1), стандартные значения. Например, в том же случае -99 <= N <= 99 будет использоваться набор: -100, -99, -98, -10, -9 -1, 0, 1, 9, 10, 98, 99, 100.

3. Тестирование таблицы переходов.
При данной технике сценарии тестирования выбираются на основе выполнения корректных и некорректных переходов состояний. Допустим, мы хотим записаться на прием к врачу и зарезервировать время своего приема: заходим в форму, выбираем удобное для нас время и нажимаем кнопку «Записаться». Сразу после этого выбранное нами время становится недоступно для другой записи, так как первая запись привела к изменению в базе.

4. Тестирование по сценариям использования.
Эта техника используется при написании тестов для индивидуального сценария пользователя с целью проверки его работы.

Достоинства метода

    • Тестирование методом «черного ящика» позволяет найти ошибки, которые невозможно обнаружить методом «белого ящика». Простейший пример: разработчик забыл добавить какую-то функциональность. С точки зрения кода все работает идеально, но с точки зрения спецификации это – сверхкритичный баг.
    • «Черный ящик» позволяет быстро выявить ошибки в функциональных спецификациях (в них описаны не только входные значения, но и то, что мы должны в итоге получить). Если полученный при тестировании результат отличается от заявленного в спецификации, то у нас появляется повод для общения с аналитиком для уточнения конечного результата.
    • Тестировщику не нужна дополнительная квалификация. Часто мы пользуемся различными сервисами и приложениями, не очень в них разбираясь. Для того, чтобы открыть инстаграм и обработать свою фотографию, нам совсем не нужно знать способ реализации фильтров. Мы хотим открыть фотографию, выбрать фильтр и получить красивую картинку на выходе. Задача тестировщика, который тестирует эту функцию в инстаграм, – убедиться, что пользователь получит эту самую красивую картинку в соответствии с выбранным фильтром. При этом нам совсем не обязательно иметь какую-либо специализацию – нужны лишь телефон и инстаграм.
    • Тестирование проходит «с позиции пользователя». Пользователь всегда прав, он конечный потребитель практически любого ПО, а значит, ему должно быть удобно, комфортно и понятно.
    • Составлять тест-кейсы можно сразу после подготовки спецификации. Это значительно сокращает время на тестирование: к тому моменту, как продукт готов к тестированию, тест-кейсы уже разработаны, и тестировщик может сразу приступать к проверке.

Недостатки метода

    • Основным недостатком метода «черного ящика» является возможность пропуска границ и переходов, которые не очевидны из спецификации, но есть в реализации кода (собственно, это и заставляет тестировщиков использовать метод «белого ящика»). Вспоминается случай, когда система получала котировки валют с биржи Forex и округляла до 3 знаков после запятой. Система успешно прошла тестирование методом «черного ящика» (так как ни одна валюта не выходила за соответствующие границы) и хорошо работала до тех пор, пока курс доллара к биткоин не вышел за границы 1000 долларов. Тестирование «белым ящиком» выявило бы ошибку: специалист увидел бы, что коэффициент конверсии валюты ограничен 3 знаками.
    • Можно протестировать только небольшое количество возможных вводных (входящих) значений; многие варианты остаются без проверки.
    • Тесты могут быть избыточными, если разработчик уже проверил данную функциональность (например, Unit-тестом).
    • При отсутствии четкой и полной спецификации проектировать тесты и тест-сценарии оказывается затруднительно.

Подведем итоги

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

Проведение «black-box» тестирования увеличивает уверенность в том, что приложение надежно работает на широком диапазоне входных данных, так как набор тестовых данных зависит только от спецификации, а не от особенностей внутренней реализации продукта (как в случае применения методов «белого» и «серого» ящиков).

Метод «черного ящика» выгодно применять, если вы ищете:

    • неправильно реализованные функции приложения или сервиса;
    • ошибки в пользовательском интерфейсе;
    • ошибки в функциональных спецификациях.

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

Обзор тестирования черного ящика

Black Box Testing — это метод тестирования программного обеспечения, при котором внутренняя структура, дизайн или реализация предмета, который необходимо проверить, неизвестен тестировщику.

Что такое тестирование программного обеспечения?

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

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

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

Преимущества тестирования черного ящика включают в себя:

  • Простота: облегчает тестирование проектов высокого уровня и сложных приложений
  • Экономия ресурсов: тестеры сосредоточены на функциональности программного обеспечения.
  • Тестовые случаи: Сосредоточение внимания на функциональности программного обеспечения для облегчения быстрой разработки тестовых случаев.
  • Обеспечивает гибкость: специальные знания программирования не требуются.

Пример

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

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

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

  • Функциональные / регрессионные тесты могут быть выполнены через QTP или Selenium
  • Нефункциональные тесты могут быть выполнены через LoadRunner или Jmeter.

Уровни

В Black Box Testing следующие уровни предназначены для тестирования программного обеспечения:

  • Интеграционное тестирование
  • Тестирование системы
  • Приемочное тестирование

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

Определение черного ящика

Тестирование черного ящика может быть определено как метод тестирования, в котором тестируется функциональность Application Under Test (AUT), но при этом не учитывается структура внутреннего кода, детали реализации и любые знания о внутренних путях программного обеспечения.

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

Тестирование черного ящика касается всех спецификаций и требований к программному обеспечению. Black Box Testing просто фокусируется на входах и выходах системы программного обеспечения и не беспокоится о внутренних знаниях программного обеспечения.

Как Black Box Testing облегчает работу?

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

  1. На начальном или первом этапе STLC собраны требования к продукту. Это называется фазой сбора требований.
  2. Следующим этапом является планирование планирования и анализ этапа тестирования. Результатами этого этапа, как правило, являются типы тестирования, которые должны быть выполнены в соответствии с проектом и планом тестирования для определения рисков и смягчения этих рисков.
  3. Третий этап — это этап разработки, на котором тестовые случаи, тестовые сценарии подготавливаются с помощью документов с требованиями к программному обеспечению или бизнес-требований.
  4. Последний этап называется этапом выполнения теста. Как следует из названия, на этом этапе выполняются все тестовые сценарии или сценарии. Все найденные ошибки сообщаются, исправляются и проверяются повторно.

Что вы можете сделать с Black Box Testing?

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

  • Тестирование класса эквивалентности
  • Тестирование граничных значений
  • Тестирование таблицы решений
  • Причинно-следственная проверка
  • Тестирование на основе требований
  • Тестирование совместимости

Тестирование класса эквивалентности

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

Это делается в следующие два этапа:

1. Идентификация и разбиение на классы эквивалентности. Сначала входные данные разбиваются как минимум на два набора: первый набор содержит список допустимых входных значений, а второй набор содержит список недопустимых входных значений. Например, если есть поле возраста, которое может содержать возраст в диапазоне от 20 до 40, то допустимые входные значения могут быть 21, 25, 30, 39 и т. Д., А недопустимые входные значения могут быть любым значением меньше 20 или больше, чем 40 вроде 10, 15, 45, 55 и т. Д.

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

Тестирование граничных значений

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

Тестирование таблицы решений

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

Причинно-следственная графика

Причинно-следственный График развивает связь между причинами (логические входы) с соответствующим эффектом (Действия). Они представлены с помощью булевых графов. Шаги должны быть следующими:

  1. Идентификация входов и выходов.
  2. Разработка причинно-следственного графика.
  3. Преобразование графика в таблицу решений.
  4. Преобразование правил таблицы решений в контрольные примеры.

Тестирование на основе требований

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

Тестирование на совместимость

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

  1. Процессоры Pentium 3 или Pentium 4 и количество используемых процессоров
  2. 32-битная или 64-битная архитектура
  3. Серверы баз данных или любые другие внутренние компоненты
  4. Тип операционной системы (Windows, Linux и т. Д.).

Работа с тестированием черного ящика

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

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

преимущества

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

Недостатки

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

Почему мы должны использовать Black Box Testing?

Инструменты тестирования «черного ящика» в основном записывают и воспроизводят. Эти инструменты записывают тестовые случаи в виде сценариев, таких как TSL, JavaScript, VB-сценарий и т. Д. Все эти инструменты в основном используются для регрессионного тестирования, чтобы проверить, не имеет ли предоставленная новая сборка какой-либо дефект в уже работающей функциональности приложения.,

Сфера

Видными и наиболее важными типами тестирования черного ящика являются следующие:

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

Различия

Black Box Testing — это метод тестирования программного обеспечения, при котором внутренняя структура, дизайн или реализация тестируемого продукта неизвестны тестировщику.

White Box Testing — это метод тестирования программного обеспечения, при котором внутренняя структура, дизайн или реализация тестируемого продукта известны тестировщику.

Тестирование черного ящика Тестирование белого ящика
Тестирование черного ящика заключается в том, что внутренняя структура, программа или код неизвестны. Тестирование белого ящика — это когда тестер обладает знаниями о внутренней структуре программного обеспечения.
Обычно это делают тестеры программного обеспечения. Обычно это делается разработчиками программного обеспечения.
Здесь абсолютно никаких знаний о реализации не требуется. Здесь, Знание реализации требуется.
Это также можно назвать внешним / внешним тестированием программного обеспечения. Это также можно назвать внутренним / внутренним тестированием программного обеспечения.
Тестирование черного ящика — это функциональный тест программного обеспечения. Тестирование белого ящика является структурным тестом программного обеспечения.
Это тестирование может быть начато на основании требований спецификации документа. Этот тип тестирования программного обеспечения начинается после детального проектного документа.
Здесь не требуется знание языка программирования. Здесь обязательно знание хотя бы одного языка программирования.
Это в основном тестирование поведения программного обеспечения. Это основная логическая проверка программного обеспечения.
Это в основном применимо к более высоким уровням тестирования. Это в основном применимо к нижним уровням тестирования.
Это также называется поведенческим тестированием. Это также называют прозрачным или стеклянным тестированием коробки.
Тестирование черного ящика занимает меньше времени, чем тестирование белого ящика. Тестирование белого ящика занимает больше времени, чем тестирование черного ящика.
Тестирование черного ящика не подходит для тестирования алгоритма. Тестирование белого ящика подходит для тестирования алгоритма.
Это может быть достигнуто методом проб и ошибок. Внутренние или внутренние границы данных вместе с их областью могут быть тщательно проверены.
Например: поиск чего-либо в Google с помощью ключевых слов Например: Использование входов для проверки и проверки на наличие петель.
Типы

  1. Функциональное тестирование
  2. Нефункциональное тестирование
  3. Регрессионное тестирование
Типы

  1. Тестирование пути
  2. Loop Testing
  3. Тестирование состояния

Вывод:

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

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

Рекомендуемые статьи

Это было руководство к тестированию черного ящика. Здесь мы обсудили, как Black Box Testing выполняется с помощью примеров и различных методов Black Box Testing с инструментами. Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше —

  1. Тестирование белого ящика
  2. Тестирование Интервью Вопросы
  3. Что такое гипервизор
  4. Вопросы по тестированию игр

Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 4 февраля 2019 года; проверки требуют 2 правки.

Тестирование чёрного ящика или поведенческое тестирование — стратегия (метод) тестирования функционального поведения объекта (программы, системы) с точки зрения внешнего мира, при котором не используется знание о внутреннем устройстве (коде) тестируемого объекта. Иначе говоря, тестированием чёрного ящика занимаются тестировщики, не имеющие доступ к исходному коду приложения. Под стратегией понимаются систематические методы отбора и создания тестов для тестового набора. Стратегия поведенческого теста исходит из технических требований и их спецификаций[1].

Понятие «чёрного» ящика[править | править код]

Под «чёрным ящиком» понимается объект исследования, внутреннее устройство которого неизвестно. Понятие «чёрный ящик» предложено У. Р. Эшби. В кибернетике оно позволяет изучать поведение систем, то есть их реакций на разнообразные внешние воздействия и в то же время абстрагироваться от их внутреннего устройства.

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

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

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

В настоящее время известны два вида «чёрных» ящиков. К первому виду относят любой «чёрный» ящик, который может рассматриваться как автомат, называемый конечным или бесконечным. Поведение таких «чёрных» ящиков известно. Ко второму виду относятся такие «чёрные» ящики, поведение которых может быть наблюдаемо только в эксперименте. В таком случае в явной или неявной форме высказывается гипотеза о предсказуемости поведения «чёрного» ящика в вероятностном смысле. Без предварительной гипотезы невозможно любое обобщение, или, как говорят, невозможно сделать индуктивное заключение на основе экспериментов с «чёрным» ящиком.
Для обозначения модели «чёрного» ящика Н. Винером предложено понятие «белого» ящика. «Белый» ящик состоит из известных компонентов, то есть известных X, Y, δ, λ. Его содержимое специально подбирается для реализации той же зависимости выхода от входа, что и у соответствующего «чёрного» ящика. В процессе проводимых исследований и при обобщениях, выдвижении гипотез и установления закономерностей возникает необходимость корректировки организации «белого» ящика и смены моделей. В связи с этим при моделировании исследователь должен обязательно многократно обращаться к схеме отношений «чёрный» — «белый» ящик.

Исследование поведения «чёрного» ящика[править | править код]

Рассмотрим, как изучается и исследуется поведение «чёрного» ящика второго вида. Предположим, что дана некоторая система управления, внутреннее строение которой неизвестно. Система управления имеет входы и выходы .

Способ исследования поведения данного «чёрного» ящика заключается в проведении эксперимента, результаты которого можно представить в виде табл. 1.

Такой способ исследования «чёрного» ящика называется протокольным. Значения входных величин в моменты времени могут выбираться произвольно.

Таблица 1

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

Исследование систем управления связано с понятиями «вероятностный автомат», «вероятностная система», что требует изучения их вероятностных свойств. Для этих целей можно построить матрицу вероятностей (табл. 2), в которой для каждого входа и каждого выхода указывается условная вероятность , что возникает в ответ на [7], приведённой в табл. 2.

Разработка методов построения математических моделей «чёрного» ящика является одной из важных кибернетических проблем. При условии наличия математической модели «чёрного» ящика появляется возможность отнести его к какому-либо одному классу, все системы которого изоморфны по поведению.

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

Для науки метод «чёрный» ящик имеет весьма большое значение. С его помощью в науке были сделаны очень многие выдающиеся открытия. Например, учёный Гарвей ещё в XVII веке предугадал строение сердца. Он моделировал работу сердца насосом, позаимствовав идеи из совершенно другой области современных ему знаний — гидравлики. Практическая ценность метода «чёрный» ящик заключается во-первых, в возможности исследования очень сложных динамических систем, и, во-вторых, в возможности замены одного «ящика» другим. Окружающая действительность и биология дают массу примеров выявления строения систем методом «чёрного» ящика.

Принципы тестирования чёрного ящика[править | править код]

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

Свойства правильно выбранного теста[править | править код]

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

Приёмы тестирования чёрного ящика[править | править код]

  1. Эквивалентное разбиение.
  2. Анализ граничных значений.
  3. Анализ причинно-следственных связей.
  4. Предположение об ошибке.

Рассмотрим подробнее каждый из этих методов:

Эквивалентное разбиение[править | править код]

Основу метода составляют два положения:

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

Разработка тестов этим методом осуществляется в два этапа: выделение классов эквивалентности и построение теста.

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

Входное условие Правильные классы эквивалентности Неправильные классы эквивалентности

Выделение классов эквивалентности является эвристическим способом, однако существует ряд правил:

  1. Если входное условие описывает область значений, например «Целое число принимает значение от 0 до 999», то существует один правильный класс эквивалентности и два неправильных.
  2. Если входное условие описывает число значений, например «Число строк во входном файле лежит в интервале (1..6)», то также существует один правильный класс и два неправильных.
  3. Если входное условие описывает множество входных значений, то определяется количество правильных классов, равное количеству элементов в множестве входных значений. Если входное условие описывает ситуацию «должно быть», например «Первый символ должен быть заглавным», тогда один класс правильный и один неправильный.
  4. Если есть основание считать, что элементы внутри одного класса эквивалентности могут программой трактоваться по-разному, необходимо разбить данный класс на подклассы. На этом шаге тестирующий на основе таблицы должен составить тесты, покрывающие собой все правильные и неправильные классы эквивалентности. При этом составитель должен минимизировать общее число тестов.

Определение тестов:

  1. Каждому классу эквивалентности присваивается уникальный номер.
  2. Если ещё остались не включённые в тесты правильные классы, то пишутся тесты, которые покрывают максимально возможное количество классов.
  3. Если остались не включённые в тесты неправильные классы, то пишут тесты, которые покрывают только один класс.

Анализ граничных значений[править | править код]

Граничные условия — это ситуации, возникающие на высших и нижних границах входных классов эквивалентности.

Анализ граничных значений отличается от эквивалентного разбиения следующим:

  1. Выбор любого элемента в классе эквивалентности в качестве представительного осуществляется таким образом, чтобы проверить тестом каждую границу этого класса.
  2. При разработке тестов рассматриваются не только входные значения (пространство входов), но и выходные (пространство выходов).

Метод требует определённой степени творчества и специализации в рассматриваемой задаче.

Существует несколько правил:

  1. Построить тесты с неправильными входными данными для ситуации незначительного выхода за границы области значений. Если входные значения должны быть в интервале [-1.0 .. +1.0], проверяем −1.0, 1.0, −1.000001, 1.000001.
  2. Обязательно писать тесты для минимальной и максимальной границы диапазона.
  3. Использовать первые два правила для каждого из входных значений (использовать пункт 2 для всех выходных значений).
  4. Если вход и выход программы представляет упорядоченное множество, сосредоточить внимание на первом и последнем элементах списка.

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

Анализ причинно-следственных связей[править | править код]

Этапы построения теста:

  1. Спецификация разбивается на рабочие участки.
  2. В спецификации определяются множество причин и следствий. Под причиной понимается отдельное входное условие или класс эквивалентности. Следствие представляет собой выходное условие или преобразование системы. Здесь каждой причине и следствию присваивается номер.
  3. На основе анализа семантического (смыслового) содержания спецификации строится таблица истинности, в которой последовательно перебираются всевозможные комбинации причин и определяются следствия для каждой комбинации причин.

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

Предположение об ошибке[править | править код]

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

Примечания[править | править код]

Литература[править | править код]

  • Росс Эшби У. Глава 6. Чёрный ящик // Введение в кибернетику = An Introduction to Cybernetics. — Издательство иностранной литературы, 1959. — С. 127-169. — 432 с.
  • Бейзер Б. Тестирование чёрного ящика. Технологии функционального тестирования программного обеспечения и систем. — Питер, 2004. — 320 с. — ISBN 5-94723-698-2.

Книга «A Practitioner’s Guide to Software Test Design» Lee Copeland была опубликована в 2003 году.
С тех пор она надежно закрепилась в списке книг, которые обязательно должен прочитать любой тестировщик. Её стоит прочитать в оригинале. Читается очень приятно: язык не сложный, стиль легкий. По ходу книги автор слегка иронизирует над собой, своими учениками, читателями и в целом над сферой нашей деятельности.

Далее приводится не перевод, а скорее подробный конспект раздела “Техники тестирования методом черного ящика”, в котором содержится описание применения техник тест-дизайна.

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

To be most effective and efficient test case must be designed, not just slapped together.

Equivalence Class Testing
Boundary Value Testing
Decision Table Testing
Pairwise Testing
State-Transition Testing
Use Case Testing

Классы эквивалентности (Equivalence Class Testing)

Техника

  1. Определить классы эквивалентности.
  2. Создать тест-кейсы для каждого класса эквивалентности.

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

Любые данные в рамках класса эквивалентны, это означает что если один тест-кейс в кассе эквивалентности обнаружил/не обнаружил дефект, то все остальные тест-кейсы внутри этого класса эквивалентности обнаружат/не обнаружат тот же самый дефект.

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

При наличии нескольких переменных:

  1. валидные классы нескольких переменных объединяются в один тест-кейс;
  2. невалидные классы тестируются отдельно.

    Let your designers and programmers know when they have helped you. They’ll appreciate the thought and may do in again.

Граничные значения (Boundary Value Testing)

Техника

  1. Определить классы эквивалентности
  2. Определить границы каждого класса эквивалентности
  3. Создать тест-кейсы для каждого граничного значения, выбирая по одной точке непосредственно на границе, выше и ниже границы.

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

Значения определяются типом. Если граница 5, то для поля, где вводятся целые числа тестируются точки 4 и 6, а для поля, где вводятся суммы в рублях и копейках тестируются точки 4,99 и 5,01.

При наличии нескольких переменных:

  1. минимальные значения валидных границ объединяются в один тест-кейс;
  2. максимальные значения валидных границ объединяются в другой тест-кейс;
  3. невалидные границы тестируются отдельно, как и в случае с невалидными классами.

    Boundary value testing focuses on the boundaries because that is where so many defects hide.

Таблица принятия решений (Decision Table Testing)

Техника

  1. Определить все условия
  2. Составить все возможные комбинации условий
  3. Убрать лишние комбинации. Удаляются те, в которых изменение значений никак не влияет на получаемый результат (Don’t care — DC)
  4. Определить действия
  5. Создать тест-кейсы для каждой комбинации

Таблица принятия решений — представляет связь составных условий и результирующих действий.

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

Внимательно посмотрев на таблицу, можно заметить, что в правилах 1, 2, 3, 4, если код акции недопустимый, то проверка остальных условий не имеет смысла. Правила 5 и 6 могут быть объединены, т.к. условие проверки средств никак не влияет на результат. Условия, которые не оказывают влияние на результат помечаются как “DC”. Таблица преобразуется:

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

Famous Software Tester Mick Jagger gives excellent advice regarding this “You can’t always get what you want, but if you try sometimes, you just might find, you get what you need.”

Попарное тестирование

Техника

  1. Определить параметры (variables)
  2. Определить количество значений для каждого параметра (choices for variable)
  3. Построить массив, содержащий колонки для каждого параметра и значения в колонках, которые содержать все сочетания значений этих параметров друг с другом.
  4. Сопоставить полученный ортогональный массив с целью тестирования.
  5. Построить тест-кейсы.

Опытным путем было определено, что большинство дефектов это или одиночные дефекты (single-mode defects), или парные дефекты (double-mode defects), т.е. проявляющиеся при сочетании одного параметра всего лишь с одним другим параметром, при том что значение остальных параметров не имеет значения.

Если количество комбинаций значений переменных велико, не стоит пытаться протестировать все возможные комбинации, лучше сосредоточиться на тестировании всех пар значений переменных.
Два подхода попарного тестирования (pairwise testing): метод ортогонального массива (orthogonal arrays) и метод всех пар (allpair algorithm).

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

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

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

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

There is no underlying “software defect physics” that guarantees pairwise testing will be of benefit. There is only one way to know — try it.

Диаграмма переходов состояний

Техника

Состояние (State) — Условие в котором система ожидает одно или несколько событий.Состояние помнит что было получено на вход и определяет ответную реакцию, которая должна произойти. Это событие может быть приводить в новое состояние и/или инициировать новое действие. Состояние обычно отражает значение некоторой переменной в системе. Изображается в форме круга.

Переход (Transition) — Представляет переход из текущего состояния в новое, в результате выполнения какого-то действия. Изображается в виде стрелки.

Событие (Event) — Событие, ставшее причиной изменения состояния. Обычно событие поступает в систему из внешнего мира посредством некоторого интерфейса. Иногда это событие инициируется внутри самой системы например такие как срабатывание таймера, снижение ниже какого-то уровня. Считается, что событие происходит моментально. Событие может быть как независимым, так и связанным. Когда событие случается, система может изменить состояние или остаться в прежнем состоянии и/или инициировать действие. События могут иметь, связанные с ними параметры (номер карты, сумма на счете). Изображается как подпись к стрелке перехода.

Действие (Action) — Операция, инициированная в результате смены состояния. Зачастую это некоторый ответ системы. Помните, что действие происходит при переходе между состояниями. Состояния сами по себе статичны. Указывается через слеш в подписи к стрелке перехода после события.

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

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

На основании Диаграммы перехода состояний составляется Таблица перехода состояний. Таблица содержит 4 колонки: текущее состояние, событие, действие, следующее состояние.

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

Может быть выбран один из 4 вариантов создания тест-кейсов:

  1. Создать наборы тест-кейсов так, чтобы все состояния были пройдены хотя бы по одному разу. В одном тест-кейсе может быть описан переход через несколько состояний. Это довольно слабый уровень тестового покрытия.
  2. Создать наборы тест-кейсов так, чтобы все события были инициированы хотя бы по одному разу. Тест-кейсы, которые покрывают все события в то же время покрывают и все состояния. Снова слабый уровень тестового покрытия.
  3. Создать наборы тест-кейсов так, чтобы все пути были пройдены хотя бы по одному разу. Такой способ хорош с точки зрения тестового покрытия, однако практически не осуществим. Если диаграмма имеет циклы, то количество возможных путей может оказаться бесконечным.
  4. Создать наборы тест-кейсов так, чтобы все переходы были выполнены хотя бы по одному разу. Этот способ обеспечивает хороший уровень тестового покрытия, поэтому рекомендуется использовать именно его.
    image
    Рекомендуемая стратегия создания тест-кейсов состоит в том, чтобы хотя бы по разу протестировать все переходы между состояниями. В высокорисковых системах, где требуется более надежное тестовое покрытие, возможно создавать тест-кейсы на каждый путь (цепочку переходов) между состояниями.

    And now for something completely different. Monty Python

Варианты использования (Use Case Testing)

Техника

Use case — это сценарии, описывающие то как actor (обычно человек, но может быть и другая система) пользуется системой для достижения определенной цели. Варианты использования описываются с точки зрения пользователя, а не системы. Внутренние работы по поддержанию работоспособности системы не являются частью варианта использования.

Хотя бы один тест-кейс должен проверять основной сценарий и хотя бы по одному кейсу должно приходится на альтернативные сценарии.

Рекомендации по созданию тест-кейсов на основе вариантов использования

  1. Начать с валидных данных и наиболее частых сценариев.
  2. Проверить граничные значения и невалидные значения (с использованием ранее рассмотренных техник).
  3. Редко используемые сценарии, крайне важные для системы (так называемая “Остановка ядерного реактора” Shut Down The Nuclear Reactor)
  4. Тесты на каждое ветку-альтернативу (Extension) каждого шага
  5. Попробовать выполнить операцию в непривычном порядке
  6. Извратить предусловие, если это действительно может произойти
  7. Если транзакция имеет циклы, запустите ее в цикле, и не один-два раза — будьте жестче
  8. Найти очень долгий и извилистый путь и пройдите по нему
  9. Если ожидается, что транзакция будет выполняться в логичном порядке, попробовать выполнить ее в обратном порядке (например заполнить поля не сверху вниз, а снизу вверх)
  10. Создать тесты на защиту от дурака

Шаблон описания вариантов использования

If you don’t try strange things. you know the users will.

Обновлено: 05.06.2023

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

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

Black Box

Summary: Мы не знаем, как устроена тестируемая система.

Согласно ISTQB, тестирование черного ящика – это:

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

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

Пример:

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

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

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

Техники тест-дизайна, основанные на использовании черного ящика, включают:

  • классы эквивалентности;
  • анализ граничных значений;
  • таблицы решений;
  • диаграммы изменения состояния;
  • тестирование всех пар.

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

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

Недостатки:

  1. тестируется только очень ограниченное количество путей выполнения программы;
  2. без четкой спецификации (а это скорее реальность на многих проектах) достаточно трудно составить эффективные тест-кейсы;
  3. некоторые тесты могут оказаться избыточными, если они уже были проведены разработчиком на уровне модульного тестирования.

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

White Box

Summary: Нам известны все детали реализации тестируемой программы.

Тестирование методом белого ящика (также прозрачного, открытого, стеклянного ящика или же основанное на коде или структурное тестирование) – метод тестирования программного обеспечения, который предполагает, что внутренняя структура/устройство/реализация системы известны тестировщику. Мы выбираем входные значения, основываясь на знании кода, который будет их обрабатывать. Точно так же мы знаем, каким должен быть результат этой обработки. Знание всех особенностей тестируемой программы и ее реализации обязательны для этой техники. Тестирование белого ящика – углубление во внутреннее устройство системы за пределы ее внешних интерфейсов.

Согласно ISTQB: тестирование белого ящика – это:

  • тестирование, основанное на анализе внутренней структуры компонента или системы;
  • тест-дизайн, основанный на технике белого ящика – процедура написания или выбора тест-кейсов на основе анализа внутреннего устройства системы или компонента.

Пример:

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

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

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

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

  1. тестирование может производиться на ранних этапах: нет необходимости ждать создания пользовательского интерфейса;
  2. можно провести более тщательное тестирование с покрытием большого количества путей выполнения программы.

Недостатки:

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

Сравнение Black Box и White Box

Grey Box

Summary: Нам известны только некоторые особенности реализации тестируемой системы.

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

Эту технику тестирования также называют методом полупрозрачного ящика: что-то мы видим, а что-то – нет.

Пример:

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

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

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

Тестирование белого и черного ящиков в одном предложении

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

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

  • Какие цели у тестирования белого и черного ящиков?
  • В чем отличия между подходами?
  • Какой подход выбрать для проекта?

Давайте открывать ящики и смотреть, что там внутри!

Что такое тестирование черного ящика?

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

Тестирование черного ящика делится на:

  • Функциональное тестирование – проверка функциональности приложения (“Что приложение делает?”)
  • Нефункциональное тестирование – проверка производительности, безопасности, usability (“Как приложение работает?”)

В тестирование черного ящика также входит и так называемое тестирование на основе опыта (Experience-based testing). QA проверяет приложение, основываясь на интуиции и опыте тестирования других похожих проектов.

Какая цель у тестирования черного ящика?

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

Проводя тестирование черного ящика, нужно получить ответы на следующие вопросы:

  • Работают ли все функции приложения правильно?
  • Совпадает ли внешний вид приложения с макетами?
  • Выполняются ли пользовательские сценарии?
  • Корректны ли данные?

Как проводить тестирование черного ящика?

Проведение такого тестирования требует подготовки – вот, что нужно сделать заранее:

  • Провести анализ требований и спецификаций
  • Узнать о приложении в целом
  • Подготовить тест-кейсы
  • Подготовить тестовые данные (в том числе и для негативных сценариев)

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

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

Как подготовить данные и тест-кейсы для тестирования черного ящика?

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

Вот основные техники для разработки тест-кейсов для функционального тестирования:

Граничные значения

Граничные значения это входные или выходные данные (которые пользователь может вводить в поля), которые находятся в непосредственной близости от классов эквивалентности.

Классы эквивалентности

Классы эквивалентности это наборы входных данных, обработка которых приводит к одному и тому же результату.

Давайте отойдем от теории и попробуем понять, что это, на примере:

Представьте, что вам нужно протестировать поле “возраст” в форме приложения, предназначенного для людей от 20 до 30 лет. Поле принимает значения типа integer. Какие здесь будут классы эквивалентности и граничные значения?

Классы эквивалентности:

  • 20-30 – позитивный тест
  • От минус бесконечности до 19 и от 31 до плюс бесконечности – негативный тест

Граничные значения: 19, 20, 21, 29, 30, 31

  • 20, 21, 29, 30 – позитивный тест
  • 19, 31 – негативный тест

Таблица решений (Decision table)

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

Давайте рассмотрим ее на примере.

Вы тестируете онлайн магазин предлагает скидки и бесплатную доставку. Если вы размещаете заказ на сумму больше 10000 рублей, вы получаете 10% скидку. Если делать заказ на сумму больше 15000 рублей – 15% скидку. Если на сумму больше 20000 рублей – 20% скидку и бесплатную доставку. Таблица решений будет выглядеть следующим образом:

Условия скидки Т1 Т2 Т3 Т4
Заказы до 10 000 рублей Да
Заказы больше 10 000 рублей Да
Заказы больше 15 000 рублей Да
Заказы больше 20 000 рублей Да
Размер скидки Т1 Т2 Т3 Т4
10% Нет Да Нет Нет
15% Нет Нет Да Нет
20% Нет Нет Нет Да
Бесплатная доставка Нет Нет Нет Да

Преимущества тестирования черного ящика

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

Недостатки тестирования черного ящика

  • Требования или спецификация могут быть неточными и/или непонятными, поэтому могут быть трудности с написанием тест-кейсов.
  • Может быть сложно протестировать все части приложения.

Перейдем к тестированию белого ящика:

Что такое тестирование белого ящика?

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

Два основных метода проведения тестирования белого ящика:

  • Statement coverage testing – покрытие операторов. Во время тестирования покрывают код так, чтобы во время тестирования каждый оператор выполнился хотя бы один раз.
  • Decision/Branch coverage testing – покрытие решений. Код покрывается тестами так, чтобы во время тестирования выполнились все ветки всех условных операторов.

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

Есть много инструментов, библиотек и фрейворков для тестирования белого ящика. Мы сфокусируемся на JEST – библиотеке для тестирования JavaScript кода. То, что мы выбрали эту библиотеку не говорит о том, что она лучшая – просто на ней удобнее показывать примеры (прим.ред. – вот материал нашего читателя с подборкой best practices для Unit-тестирования фронтенда)

Рассмотрим JavaScript функцию:

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

Чтобы легче понять все ветвления внутри функции, используем code2flow. Он поможет преобразовать код в граф:

Теперь мы можем приступить к написанию первого теста.

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

Покрытие операторов (Statement coverage testing)

Нужно подобрать входные данные и вызвать функцию таким образом, чтобы каждый из операторов выполнился хотя бы один раз. Для 100% покрытия достаточно сделать 2 теста и вызвать функцию со следующими параметрами:

Coverage-отчет выглядит следующим образом:

Покрытие решений (Decision coverage testing)

Из coverage-отчета на предыдущем изображении понятно, что строки 4, 9, 16 не покрыты. Чтобы покрыть их, нужно добавить тесты, которые при выполнении функции пойдут по веткам, содержащим эти непокрытые строки. Тестовые данные будут выглядеть следующим образом:

Тест будет выглядеть следующим образом:

Теперь наш coverage-отчет полностью зеленый:

Преимущества тестирования белого ящика

  • Очень большая точность
  • Просто автоматизировать
  • Позволяет определить, где в коде произошла ошибка
  • Для выполнения тестирования не нужен UI

Недостатки тестирования белого ящика

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

Что лучше? Белый или черный ящик использовать?

Мир тестирования не черный и не белый – он серый 🙂 Поэтому здесь нет правильного ответа и нет лучшего подхода.

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

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

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

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

Тестирование белого ящика предполагает поиск и улучшение следующих моментов:

  • Нерабочих или неоптимизированных участков кода
  • Потеря безопасности
  • Рабочие процессы и сценарии ввода
  • Условные процессы
  • Неправильное функционирование объектов
  • Некорректное отображения информации.

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

Как осуществляется тестирование белого ящика?

Есть два шага для реализации данного этапа.

Шаг 1. Изучение исходного кода.

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

Шаг 2. Создание и внедрение алгоритмов проверки

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

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

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

Тестирование черного ящика

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

Метод черного ящика применим на следующих уровнях тестирования

  • Тестирование системы
  • Тестирование интеграции
  • Приемочных испытаниях

Количество методов тестирования зависит от сложности продукта, т.е. ящика.

Подходы к разработке алгоритмов тестирования черного ящика бывают следующие:

  • Причинно-следственные (определение случаев и их воздействия на систему)
  • Анализ крайних значений (определение границ ввода)
  • Разметка эквивалентности (действительные и недействительные разметки)

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

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

Подходы к тестированию

  • Тестирование шаблонов
  • Тестирование матрицы
  • Регрессионное тестирование
  • Тестирование с использованием ортогонального массива

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

Почему оба подхода до сих пор существуют? Разве тестирование с доступом к коду не эффективнее? Может существует золотая середина? Давайте разбираться.

Черный ящик

Разработка тестов методом черного ящика (black box test design technique) — процедура создания и/или выбора тестовых сценариев, основанная на анализе функциональной или нефункциональной спецификации компонента или системы без знания внутренней структуры. (ISTQB)

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

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

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

Пример. Заходим в приложение вызова такси и видим возможность привязать карту для автоматической оплаты. Начинаем думать как пользователь:
— Что, если привязать заблокированную карту?
— А если забыть/неверно указать срок действия карты?
— Долларовая карта привяжется?
— А может можно после вызова такси и подачи машины быстро отвязать ее до списания оплаты… Что тогда будет? Спишутся средства? Или водителю придет уведомление, что оплата изменилась с безналичной на наличную?

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

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

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

  • Тестировщик не обязан обладать (глубокими) знаниями в области программирования.
  • Поведение приложения исследуется в контексте реальной среды выполнения и учитывает её влияние.
  • Поведение приложения исследуется в контексте реальных пользовательских сценариев.
  • Тест-кейсы можно создавать уже на стадии появления стабильных требований.
  • Процесс создания тест-кейсов позволяет выявить дефекты в требованиях.
  • Допускает создание тест-кейсов, которые можно многократно использовать на разных проектах.
  • Возможно повторение части тест-кейсов, уже выполненных разработчиками.
  • Высока вероятность того, что часть возможных вариантов поведения приложения останется непротестированной.
  • Для разработки высокоэффективных тест-кейсов необходима качественная документация.
  • Диагностика обнаруженных дефектов более сложна в сравнении с техниками метода белого ящика.
  • В связи с широким выбором техник и подходов затрудняется планирование и оценка трудозатрат.
  • В случае автоматизации могут потребоваться сложные дорогостоящие инструментальные средства.

Белый ящик

Разработка тестов методом белого ящика (white-box test design technique): Процедура разработки или выбора тестовых сценариев на основании анализа внутренней структуры компонента или системы. (ISTQB)

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

Основной посыл этого типа тестирования — нам известны все детали реализации тестируемой программы.

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

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

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

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

Серый ящик. Отдельный вид или миф?

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

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

Эту технику тестирования также называют методом полупрозрачного ящика: что-то мы видим, а что-то – нет.

Кто-то говорит, что этот вид тестирования — это симбиоз белого и черного ящика. Кто-то противопоставляет его белому и черному, опираясь на то, что внутренняя структура тестируемого объекта изначально известна частично и выясняется по мере исследования.

Думаю, что на собеседовании это явно стоит упомянуть.

Почему все ящики эффективны?

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

Параллельное использование черного и белого ящиков увеличивает покрытие возможных сценариев:

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

Читайте также:

      

  • История создания тоска чехов кратко
  •   

  • Мужество и благородство проявляются в жизненных испытаниях капитанская дочка вступление кратко
  •   

  • История возникновения электронной музыки кратко
  •   

  • Легирование металлов это кратко
  •   

  • Теория ожидания толмена кратко

Что такое тестирование по методу белого ящика? Что такое тестирование по методу черного ящика? Есть ли у них сходство? Чем они отличаются? Каковы технические особенности реализации каждого метода на практике? Все эти вопросы мы рассмотрим в данной статье.

Сходство тестирования по методу «черный ящик» и методу «белый ящик»

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

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

По сути, оба метода – это как две дороги, которые ведут к одному пункту назначения под названием «качество ПО». Но это не альтернативные дороги. Чтобы добраться до заданного пункта, нужно пройти обе.

Различия в методах тестирования «черный ящик» и «белый ящик»

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

Иными словами, данные методы тестирования имеют огромное различие в фокусном внимании.

Фокусное внимание «черного ящика»

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

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

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

Условно говоря, при тестировании по методу черного ящика важно лишь то, что «2+2=4». Не важно, почему это так и каким образом это достигается. Важно лишь то, что данный тезис должен быть подтвержден.

Фокусное внимание «белого ящика»

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

Тестирование «белый ящик» нацелено на повышение внутреннего качества программного обеспечения и создание продукта, который:

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

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

Особенности применяемых техник тестирования

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

Техники тестирования по методу черного ящика

При тестировании методом «черного ящика» тестировщики сначала изучают спецификации тестирования программного обеспечения, после чего пробуют различные вводные данные, следуя заранее заданному набору тест-кейсов. Затем они просто сообщают разработчикам о выявленных ими проблемах, не вникая в причинно-следственные связи.

Условно говоря, здесь достаточно лишь констатировать факт, что в данной системе «2+2=5» вместо положенных «2+2=4». Установить точную причину выявленных проблем с функциональностью системы – есть задача разработчиков.

Среди техник тестирования по методу черного ящика, применяемых в нашей компании по разработке программного обеспечения, наиболее распространены:

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

Например, при тестировании модуля расчета суммы подлежащих к уплате процентов в зависимости от срока кредитования, за класс эквивалентности мы берем все значения в одном из диапазонах сроков кредитования. Т.е., если известно, что при сроке кредитования от 180 до 360 дней ставка по кредиту составляет 10%, то для проверки правильности возвращаемых результатов достаточно ввести лишь одно значение из указанного диапазона (например, 240).

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

Так, для приведенного выше примера следует протестировать такие значения как 179, 180, 181, 359, 360 и 361.

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

Для приведенного нами примера тестируемого модуля расчета суммы подлежащих к уплате процентов в зависимости от срока кредитования, вводами здесь могут быть нецелые значения, буквы и иные символы, а также ввода в виде диапазонов (например, 200-250).

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

Техники тестирования по методу белого ящика

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

В нашей компании наиболее распространенными являются следующие техники тестирования по методу белого ящика:

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

Заключительный нюанс

Несмотря на то, что, говоря о методах тестирования, сначала говорится о методе «черного ящика», и только потом переходят к методу «белого ящика» (и данная статья – скорее подтверждение, нежели исключение этого паттерна), в реальной разработке последовательность применения данных методов кардинально противоположная.

Так, тестирование «черного ящика», как правило, проводится для проверки финальной сборки (как программы в целом, так и отдельного ее модуля). Это гарантирует, что взаимодействие пользователя с системой будет плавным, а реакция программы на каждое действие пользователя будет правильной и соответствующей требованиям программного обеспечения.

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

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

Понравилась статья? Поделить с друзьями:
  • Предпусковой подогреватель двигателя планар коды ошибок
  • Предотвращение ошибок это
  • Предпусковой подогреватель двигателя камаз 65115 коды ошибок
  • Предотвращение ошибок пока екэ
  • Предпусковой подогреватель двигателя камаз 14тс 10 коды ошибок