Лабораторная работа Тестирование методом черного ящика
Скачать 48.49 Kb.
|
Лабораторная работа № 4. Тестирование методом черного ящика. Цель работы: Получить навыки использования методов тестирования программного обеспечения с использованием стратегии черного ящика Теоретическая часть Одним из способов проверки программ является стратегия тестирования, называемая стратегией "черного ящика" или тестированием с управлением по данным. В этом случае программа рассматривается как "черный ящик", и такое тестирование имеет целью выяснение обстоятельств, в которых поведение программы не соответствует спецификации. Для обнаружения всех ошибок в программе необходимо выполнить исчерпывающее тестирование, т.е. тестирование на всех возможных наборах данных. Для тех же программ, где исполнение команды зависит от предшествующих ей событий, необходимо проверить и все возможные последовательности. Очевидно, что построение исчерпывающего входного теста для большинства случаев невозможно. Поэтому, обычно выполняется "разумное" тестирование, при котором тестирование программы ограничивается прогонами на небольшом подмножестве всех возможных входных данных. Естественно при этом целесообразно выбрать наиболее подходящее подмножество (подмножество с наивысшей вероятностью обнаружения ошибок). Правильно выбранный тест подмножества должен обладать следующими свойствами: 1) уменьшать, причем более чем на единицу число других тестов, которые должны быть разработаны для достижения заранее определенной цели «приемлемого» тестирования: 2) покрывать значительную часть других возможных тестов, что в некоторой степени свидетельствует о наличии или отсутствии ошибок до и после применения этого ограниченного множества значений входных данных. Стратегия "черного ящика" включает в себя следующие методы формирования тестовых наборов: эквивалентное разбиение; анализ граничных значений; анализ причинно-следственных связей; предположение об ошибке. 1. Эквивалентное разбиение Основу метода составляют два положения: 1. Исходные данные программы необходимо разбить на конечное число классов эквивалентности так, чтобы можно было предположить, что каждый тест, являющийся представителем некоторого класса, эквивалентен любому другому тесту этого класса. Иными словами, если тест какого-либо класса обнаруживает ошибку, то предполагается, что все другие тесты этого класса эквивалентности тоже обнаружат эту ошибку и наоборот. 2. Каждый тест должен включать по возможности максимальное количество различных входных условий, что позволяет минимизировать общее число необходимых тестов. Первое положение используется для разработки набора "интересных" условий, которые должны быть протестированы, а второе - для разработки минимального набора тестов. Разработка тестов методом эквивалентного разбиения осуществляется в два этапа: выделение классов эквивалентности; построение тестов. Выделение классов эквивалентности Классы эквивалентности выделяются путем выбора каждого входного условия (обычно это предложение или фраза из спецификации) и разбиением его на две или более групп. Для этого используется таблица следующего вида:
Правильные классы включают правильные данные, неправильные классы - неправильные данные. Выделение классов эквивалентности является эвристическим процессом, однако при этом существует ряд правил: Если входные условия описывают область значений (например, «целое данное может принимать значения от 1 до 999»), то выделяют один правильный класс 1≤X≤999 и два неправильных X<1 и X>999. Если входное условие описывает число значений (например, «в автомобиле могут ехать от одного до шести человек»), то определяется один правильный класс эквивалентности и два неправильных (ни одного и более шести человек). Если входное условие описывает множество входных значений и есть основания полагать, что каждое значение программист трактует особо (например, «известные способы передвижения на АВТОБУСЕ, ГРУЗОВИКЕ, ТАКСИ, МОТОЦИКЛЕ или ПЕШКОМ»), то определяется правильный класс эквивалентности для каждого значения и один неправильный класс (например «на ПРИЦЕПЕ»). Если входное условие описывает ситуацию «должно быть» (например, «первым символом идентификатора должна быть буква»), то определяется один правильный класс эквивалентности (первый символ - буква) и один неправильный (первый символ - не буква). Если есть любое основание считать, что различные элементы класса эквивалентности трактуются программой неодинаково, то данный класс разбивается на меньшие классы эквивалентности. Построение тестов. Этот шаг заключается в использовании классов эквивалентности для построения тестов. Этот процесс включает в себя: назначение каждому классу эквивалентности уникального номера; проектирование новых тестов, каждый из которых покрывает как можно большее число непокрытых классов эквивалентности, до тех пор, пока все правильные классы не будут покрыты (только не общими) тестами; запись тестов, каждый из которых покрывает один и только один из непокрытых неправильных классов эквивалентности, до тех пор, пока все неправильные классы не будут покрыты тестами. Разработка индивидуальных тестов для неправильных классов эквивалентности обусловлена тем, что определенные проверки с ошибочными входами скрывают или заменяют другие проверки с ошибочными входами. Недостаток метода эквивалентных разбиений в том, что он не исследует комбинации входных условий. 2. Анализ граничных значений Граничные условия - это ситуации, возникающие на границе, выше или ниже границ входных классов эквивалентности. Анализ граничных значений отличается от эквивалентного разбиения следующим: выбор любого элемента в классе эквивалентности в качестве представительного при анализе граничных условий осуществляется таким образом, чтобы проверить тестом каждую границу этого класса; при разработке тестов рассматриваются не только входные условия (пространство входов), но и пространство результатов. Применение метода анализа граничных условий требует определенной степени творчества и специализации в рассматриваемой проблеме. Тем не менее, существует несколько общих правил этого метода: Построить тесты для границ области и тесты с неправильными входными данными для ситуаций незначительного выхода за границы области, если входное условие описывает область значений (например, для области входных значений от -1.0 до +1.0 необходимо написать тесты для ситуаций -1.0, +1.0, -1.001 и +1.001). Построить тесты для минимального и максимального значений условий и тесты, большие и меньшие этих двух значений, если входное условие удовлетворяет дискретному ряду значений. Например, если входной файл может содержать от 1 до 255 записей, то проверить 0, 1, 255 и 256 записей. Использовать правило 1 для каждого выходного условия. Причем, важно проверить границы пространства результатов, поскольку не всегда границы входных областей представляют такой же набор условий, как и границы выходных областей. Не всегда также можно получить результат вне выходной области, но, тем не менее, стоит рассмотреть эту возможность. Использовать правило 2 для каждого выходного условия. Если вход или выход программы есть упорядоченное множество (например, последовательный файл, линейный список, таблица), то сосредоточить внимание на первом и последнем элементах этого множества. Попробовать свои силы в поиске других граничных условий. Анализ граничных условий, если он применен правильно, является одним из наиболее полезных методов проектирования тестов. Однако следует помнить, что граничные условия могут быть едва уловимы и определение их связано с большими трудностями, что является недостатком этого метода. Второй недостаток связан с тем, что метод анализа граничных условий не позволяет проверять различные сочетания исходных данных. 3. Анализ причинно-следственных связей Метод анализа причинно-следственных связей помогает системно выбирать высоко результативные тесты. Он дает полезный побочный эффект, позволяя обнаруживать неполноту и неоднозначность исходных спецификаций. Для использования метода необходимо понимание булевской логики (логических операторов - и, или, не). Построение тестов осуществляется в несколько этапов. 1) Спецификация разбивается на «рабочие» участки, так как таблицы причинно-следственных связей становятся громоздкими при применении метода к большим спецификациям. Например, при тестировании компилятора в качестве рабочего участка можно рассматривать отдельный оператор языка. 2) В спецификации определяются множество причин и множество следствий. Причина есть отдельное входное условие или класс эквивалентности входных условий. Следствие есть выходное условие или преобразование системы. Каждым причине и следствию приписывается отдельный номер. 3) На основе анализа семантического (смыслового) содержания спецификации строится таблица истинности, в которой последовательно перебираются все возможные комбинации причин и определяются следствия каждой комбинации причин. Таблица снабжается примечаниями, задающими ограничения и описывающими комбинации причин и/или следствий, которые являются невозможными из-за синтаксических или внешних ограничений. Аналогично, при необходимости строится таблица истинности для класса эквивалентности. Примечание. При этом можно использовать следующие приемы: по возможности выделять независимые группы причинно-следственных связей в отдельные таблицы; истина обозначается "1", ложь обозначается "0", для обозначения безразличных состояний условий применять обозначение "х", которое предполагает произвольное значение условия (0 или 1). 4) Каждая строка таблицы истинности преобразуется в тест. При этом по возможности следует совмещать тесты из независимых таблиц. Недостаток метода - неадекватно исследует граничные условия. 4. Предположение об ошибке Часто программист с большим опытом выискивает ошибки "без всяких методов". При этом он подсознательно использует метод "предположение об ошибке". Процедура метода предположения об ошибке в значительной степени основана на интуиции. Основная идея метода состоит в том, чтобы перечислить в некотором списке возможные ошибки или ситуации, в которых они могут появиться, а затем на основе этого списка составить тесты. Другими словами, требуется перечислить те специальные случаи, которые могут быть не учтены при проектировании. Оборудование и материалы: для выполнения данной лабораторной работы необходим компьютер с установленной операционной системой Windows 7 или выше, одной из систем программирования Microsoft Visual Studio, Pascal ABC или др., а также программой MS Word для подготовки отчета. Указания по технике безопасности: к выполнению лабораторных работ допускаются студенты, ознакомившиеся с правилами работы в лаборатории, прошедшие инструктаж безопасности. Варианты заданий:Определить, является ли заданное с клавиатуры число кратным 5, 7 или 9. Порядок выполнения работы: Ознакомьтесь с теоретическими сведениями по стратегиям тестирования. Подготовьте тесты по методикам стратегии "черного ящика" для тестирования программы в соответствии с вариантом задания. Предлагаемые тесты сведите в следующую таблицу.
Сохраните в отчете первоначальный вариант программы. Проведите тестирование программы и заполните подготовленную ранее таблицу с тестами. Сохраните таблиц в отчете. Устраните в программе ошибки, выявленные по результатам тестирования. После этого повторно проведите тестирование по тем тестам, которые ранее были не пройдены. Приведите таблицу с новыми результатами тестирования. Сделайте вывод о роли тестирования с использованием стратегии "черного ящика" и возможностях его применения. Сформулируйте его достоинства и недостатки. Оформите отчет по лабораторной работе. Ответьте на контрольные вопросы. Содержание отчета: отчет по лабораторной работе должен быть выполнен в редакторе MS Word и оформлен согласно требованиям. Требования по форматированию: Шрифт TimesNewRoman, интервал – полуторный, поля левое – 3 см., правое – 1,5 см., верхнее и нижнее – 2 см. Абзацный отступ – 1,25. Текст должен быть выровнен по ширине. Отчет должен содержать: титульный лист с темой лабораторной работы; цель работы (цель Вашей работы не совпадает с целью лабораторной работы вообще, Ваша цель, более конкретна и определяется заданной преподавателем задачей обработки информации); постановку задачи; описание процедуры формирования тестов с использованием различных методов с использованием стратегии «черного ящика»; первоначальный код программы (до тестирования); таблицу результатов первого тестирования; код программы после исправления; таблицу результатов повторного тестирования; выводы о роли тестирования с использованием стратегии "черного ящика" и возможностях его применения. Пример выполнения задания Пусть необходимо выполнить тестирование программы, определяющей точку пересечения двух прямых на плоскости. Попутно программа должна определять параллельность прямой одной их осей координат. В основе программы лежит решение системы линейных уравнений: , где A, B, C, D, E, F – заданные вещественные числа. Напомним, что система линейных уравнений имеет единственное решение, если ее определитель . В этом случае решение находят по формулам: , где . Если =x=y=0, то решений бесконечно много (прямые совпадают). Если =0, x0 или y0, то система не имеет решений (прямые параллельны). Рассмотрим различные методы тестирования с использованием стратегии «черного ящика». 1. Используя метод эквивалентных разбиений, получаем для всех коэффициентов один правильный класс эквивалентности (коэффициент - вещественное число) и один неправильный (коэффициент - не вещественное число). Откуда можно предложить 7 тестов: 1) все коэффициенты - вещественные числа; 2) - 7) поочередно каждый из коэффициентов - не вещественное число (например, буква или другие символы).
2. По методу граничных условий: можно считать, что для исходных данных граничные условия отсутствуют (коэффициенты - "любые" вещественные числа); для результатов получаем, что возможны следующие варианты: единственное решение, прямые совпадают (множество решений), прямые параллельны (отсутствие решений). Следовательно, можно предложить тесты, с результатами внутри области: 1) результат - единственное решение (определитель системы 0); 2) результат - множество решений ( = 0 и x=y=0); 3) результат - отсутствие решений (= 0, но x0 или y0); и с результатами на границе: 1) = 0,01; 2) = -0,01; 3) = 0, x = 0,01, y = 0; 4) = 0, y = -0,01, x = 0.
3. По методу анализа причинно-следственных связей: Определяем множество условий. а) для определения типа прямой: - для определения типа и существования первой прямой - для определения типа и существования второй прямой б) для определения точки пересечения: Выделяем три группы причинно-следственных связей (определение типа и существования первой линии, определение типа и существования второй линии, определение точки пересечения) и строим таблицы истинности. А=0 В=0 С=0 Результат 0 0 х прямая общего вида 0 1 0 прямая, параллельная оси ОY 0 1 1 ось ОY 1 0 0 прямая, параллельная оси ОX 1 0 1 ось ОХ 1 1 1 множество точек плоскости D=0 E=0 F=0 Результат 0 0 х прямая общего вида 0 1 0 прямая, параллельная оси ОY 0 1 1 ось ОY 1 0 0 прямая, параллельная оси ОX 1 0 1 ось ОХ 1 1 1 множество точек плоскости =0 x=0 y=0 Единств. решение Множество решений Решений нет 0 х х 1 0 0 1 0 х 0 0 1 1 х 0 0 0 1 1 1 1 0 1 0 Каждая строка этих таблиц преобразуется в тест. По возможности (с учетом независимости групп) берутся данные, соответствующие строкам сразу двух или всех трех таблиц. В результате к уже имеющимся тестам добавляются: 1) проверки всех случаев расположения обеих прямых - 6 тестов по первой прямой вкладываются в 6 тестов по второй прямой так, чтобы варианты не совпадали, - 6 тестов; 2) выполняется отдельная проверка несовпадения условия x = 0 или y = 0 (в зависимости от того, какой тест был выбран по методу граничных условий) - тест также можно совместить с предыдущими 6 тестами.
4. По методу предположения об ошибке добавим тест: Все коэффициенты - нули.
Всего получили 21 тест по всем четырем методикам. Заметим, что число тестов можно еще сократить (например, тесты 1, 8 и 15 можно объединить). (Не забудьте для каждого теста заранее указывать результат!). 1> |