Файл: Функциональное тестирование ПО на примере мобильных приложений.pdf
Добавлен: 22.04.2023
Просмотров: 433
Скачиваний: 5
Это и есть функциональность, от автоматизации тестирования которой, можно получить наибольшую отдачу.
Категории автоматизации тестирования web-приложений
Для тестирования web-приложения рекомендуется последовательно разрабатывать отдельные тест-комплекты (test case) следующих категорий.
Функциональные CRUD-тесты (Create, Read, Update, Delete) [9] необходимы для тестирования интерфейса стандартных операций по созданию, чтению, изменению, удалению элементов web-формы, добавляются
в соответствующие Unit-тесты. Обязательные действия в данной категории:
- добавить проверки возможности добавления нескольких разнотипных элементов, из различных классов тестовых данных;
- добавить проверки возможности редактирования добавленных данных;
- добавить проверки возможности удаления данных;
- добавить проверки успешного обновления данных.
Функциональные позитивные тесты необходимы для проверки
корректности завершения разрешенных (валидных) операций, входящих в CRUD-тесты (например, проверка того, что после сохранения корректно введенной информации выводится сообщение об успехе операции), добавляются в соответствующие Init-тесты. Обязательные действия в данной категории:
- добавить проверки наличия ключевых элементов формы (все кнопки и надписи на своих местах);
- добавить проверки фактического выполнения операций CRUD: добавляемые элементы действительно добавились, после редактирования данные изменились, после удаления данные действительно удалены, после обновления имеющиеся на форме данные остаются неизменными и т.п.;
- добавить проверки наличия сообщений об успехе операций CRUD.
Функциональные негативные тесты необходимы для проверки корректной обработки неправильно введенных данных (например, проверка того, что при попытке ввода в текстовое поле слишком длинной строки выводится сообщение об ошибке), добавляются в соответствующие Init-тесты. Обязательные действия в данной категории:
- добавить проверки корректности обработки недопустимых или некорректных данных для операций CRUD: при таких данных программа не должна допускать их сохранения, редактирования или обновления в БД, а также не допускать удаления данных, с которыми имеются связи, без предварительной обработки этих связей и т.п.;
- добавить проверки наличия сообщений о некорректных действиях пользователя или неверных исходных данных.
Выводы
Все методы тестирования не только имеют право на существование, но и имеют свою нишу, где они хорошо обнаруживают ошибки, тогда как вне ниши их эффективность падает. Поэтому необходимо совмещать различные методы и стратегии отладки и тестирования с целью обеспечения запланированного качества программного продукта при ограниченных затратах, что достижимо при использовании процесса управления качеством программного продукта.
Для тестирования web-приложения рекомендуется последовательно разрабатывать отдельные тест-комплекты (test case) следующих категорий: функциональные CRUD-тесты, функциональные позитивные тесты и функциональные негативные тесты.
2. Алгоритмы разработки тестов
Из сделанного в первой главе анализа следует, что для разработки тестов следует обратить особое внимание на методы, реализующие критерии функционального тестирования, а также рассмотреть модель предметной области разработки.
Для разработки тестов рассмотрим подробнее методы функциональных диаграмм и попарного тестирования.
Для анализа предметной области разработаем онтологическую модель.
2.1 Алгоритмы функционального тестирования
Метод функциональных диаграмм
Функциональная диаграмма представляет собой формальный язык, на который транслируется спецификация программы, написанная на естественном языке. Построение тестов этим методом осуществляется в несколько этапов:
- входные данные предметной области разбиваются на классы эквивалентности;
- по спецификации определяются причины и следствия, при этом под причиной понимают отдельное входное значение или класс эквивалентности входных данных, а следствие - это выходное значение или преобразование программы (действие, которое входное условие оказывает на состояние программы);
- причины и следствия преобразуется в булевский граф - это и есть функциональная диаграмма;
- диаграмма добавляется примечаниями, задающими ограничения и описывающими комбинации причин и (или) следствий, которые являются невозможными из-за синтаксических или внешних ограничений;
- диаграмма преобразуется в таблицу решений с ограниченными входами, каждый столбец которой соответствует тесту;
- столбцы таблицы решений преобразуются в тесты.
Рисунок 8 - Базовые логические отношения функциональных диаграмм
Базовые символы для записи функциональных диаграмм показаны на рисунке 8.
Каждый узел диаграммы может находиться в двух состояниях: 0 или 1; 0 - означает состояние «отсутствует», а 1 - «присутствует».
Ортогональные массивы
При разработке тестов часто приходится анализировать работу системы с большим числом параметров (например, работа сайта в различных браузерах). Например, для проверки всех сочетаний 10 параметров с 10 значениями каждый, потребуется 10,000,000,000 тестов. Перебрать все сочетания параметров нетрудно. Трудность состоит в том, чтобы обеспечить при этом минимум тестов. Одним из подходов оптимизации количества тестов является использование ортогональных массивов.
Ортогональный массив [20] - это таблица Lm(kn), где m - число строк, n - число столбцов, которое соответствует числу входных параметров, k - количество вариантов значений элементов таблицы, и обладающая следующими свойствами:
- любые два столбца таблицы содержат все комбинации значений этих столбцов;
- если какая-либо пара значений двух столбцов встречается несколько раз, то все возможные парные комбинации значений этих столбцов должны встретиться столько же раз.
В ортогональных массивах необязательно все столбцы должны иметь одинаковое количество значений. Существуют так называемые смешанные (mixed) ортогональные массивы. Например: L4(23) - ортогональный массив с четырьмя строками, тремя столбцами (по количеству переменных), 2 означает, что все переменные принимают только два значения - 1 и 2. L18(21 37) - смешанный ортогональный массив с восемнадцатью строками, у которого один столбец со значениями 1 и 2, и семь столбцов со значениями 1, 2, 3.
Для тестирования с использованием ортогональных массивов следует выполнить следующие шаги:
- задать комбинации переменных для входных данных;
- определить значения, которые могут принимать переменные;
- построить ортогональный массив, который имеет столбец для каждой переменной (можно воспользоваться программой STATISTICA);
- поставить в соответствие каждому тестовому случаю комбинацию значений переменных, расположенных в строке построенного массива.
Например, матрица, в столбцах которой может быть значение 1 или 2, содержит все возможные комбинации трех цифр (рисунок 9):
Рисунок 9 - Исходная матрица
Ортогональный массив, полученный по исходной матрице следующий (рисунок 10).
Рисунок 10 - Ортогональный массив
В математике, для ортогонального массива, чьи записи состоят из фиксированного конечного набора символов (как правило, {1,2,...,n}), существует целое число T такое, что для каждого множества из T столбцов таблицы, все возможные Т-кортежи из исходных символов, образованные записью в каждой строке символов этих столбцов, появляются одинаковое количество раз. Число T называется силой ортогональности. Для рассмотренного примера (рисунки 9. 10) ортогональный массив с множеством символов {1,2} имеет силу - 2. При этом четыре упорядоченные пары, образованны первой и третьей колонках, а именно (1,1), (2,1), (1,2) и (2,2), порождают все возможные упорядоченные пары из двух элементов набора, и каждый появляется ровно один раз. Второй и третий столбцы дают: (1,1), (2,1), (2,2) и (1 ,2). И в этом случае также появляются все возможные упорядоченные пары. Аналогично можно получить все возможные упорядоченные пары, рассматривая первый и второй столбцы.
Рассмотрим, как происходит оптимизация количества тестов на основе ортогональных массивов. Возьмем для примера таблицу параметров и значений (таблица 1) следующего вида.
Таблица 1 - Пример параметров теста
|
# |
Параметр 1 |
Параметр 2 |
Параметр 3 |
|
1 |
Значение 1.1 |
Значение 2.1 |
Значение 3.1 |
|
2 |
Значение 1.2 |
Значение 2.2 |
Значение 3.2 |
Формируем таблицу возможных сочетаний параметров (таблица 2). Переберем значения первого параметра со вторым (строки №1 - 4), первого с третьим (строки №5 - 8) и второго с третьим (строки №9 - 12).
Таблица 2 - Сочетание тестовых параметров
Удалив повторяющиеся наборы параметров (выделены серым), получим следующую таблицу тестов (таблица 3).
Таблица 3 - Оптимизированная таблица
Продолжение таблицы 3
Серым выделены уникальные пары всех параметров в таблице. Заметим, что значения выделенные белым не являются необходимыми для перебора всех пар в таблице, поэтому могут быть заменены на любое другое значение. Поэтому можно оптимизировать тесты, заменив их на пары таблицы 2 из строк 5 (Значение 1.1, Значение 1.2), 6 (Значение 1.2, Значение 3.2) и 7 (Значение 2.2, Значение 3.2). В результате получим таблицу 4.
Таблица 4 - Результирующие тесты
Ортогональные массивы обобщают табличное представление о взаимно ортогональных латинских квадратах.
Метод парного тестирования
На протяжении многих лет, был разработан целый ряд комбинаторных стратегий для того, чтобы помочь тестировщикам выбрать такое подмножества входных комбинаций, которое позволило бы максимально увеличить вероятность выявления дефектов: выборочное тестирование, «каждый-выбор» (each-choice) и «основание выбора» (base choice), антирандомизация (antirandom), стратегия тестирование t-способами (/-wise testing strategies) и другие. Парное тестирование (pairwise testing) [23] является наиболее видным среди них. На рисунке 11 показана зависимость увеличения числа исчерпывающих и парных тестов от количества тестовых уровней (возможного количества значений параметров).
Рисунок 11 - Зависимость увеличения числа исчерпывающих и парных тестов от количества тестовых уровней
Метод парного тестирования основан на довольно простой идее, что подавляющее большинство ошибок выявляется тестом, проверяющим один параметр, либо сочетание двух. Ошибки, причиной которых явились комбинации трех и более параметров, как правило, значительно менее критичны, чем пары параметров.
Формально стратегия парного тестирования определяется следующим образом: дан набор из N независимых испытаний факторов f1,f2,…,fN, где каждый фактор fi имеет Lj возможных уровней fi = {li,1,…,li, Li}., и набор тестов R. Каждый тест в R содержит N тест-уровней, по одному для каждого тест- фактора fi , и, в совокупности, все тесты в R охватывают все возможные пары уровней тест-факторов (относящихся к разным параметрам). Другими словами, для каждой пары уровней факторов li,p и lj,q, где
- существует по крайней мере один тест в R, который содержит lj,p и lj,q.
All-Pairs Algorithm (алгоритм всех пар) - это комбинаторная методика, которая была специально создана для парного тестирования. В ее основе лежит выбор возможных комбинаций значений всех переменных, в которых содержатся все возможные значения для каждой пары переменных. Исходя из определения, число комбинаций будет меньшее, чем при использовании ортогональных массивов.
Для тестирования с использованием All-Pairs алгоритма выполняют следующие шаги:
- аналогично, как для ортогональных массивов, определяют таблицу всех переменных и их значений;
- оставляют в таблице только все возможные уникальные комбинации пар значений переменных.
Рассмотрим пример формирования тестов в технике парного тестирования. Интерфейс пользователя приложения содержит список с 10 элементами (скажем, 0,1,2,3,4,5,6,7,8,9) вместе с флажком, радио-кнопкой, текстовым полем и кнопкой «ОК». Текстовое поле может принимать значения только в диапазоне от 1 до 100. Ниже приведены значения, что каждый из объектов GUI может принимать:
Список Box - 0,1,2,3,4,5,6,7,8,9
Check Box - зарегистрированный или незарегистрированный
Radio Button - ON или OFF
Text Box - любое значение от 1 до 100
Исчерпывающее количество тестов для приложения вычисляется следующий образом:
List Box = 10;
Check Box = 2;
Radio Button = 2;
Text Box = 100;