Тестирование включает в себя виды деятельности, аналогичные последовательности разработки программного обеспечения:
— постановка задачи для тестов;
— изучение результатов тестирования.
Стратегия тестирования может лежать между двумя крайними проявлениями:
Тестирование модуля.
Цель тестирования модуля – выявление несоответствия между логикой работы модуля и его внешними спецификациями (описанием функций, входных и выходных данных, внешних эффектов). Сначала модуль рассматривается как «Черный ящик», после чего исследуется внутреннее устройство для подготовки дополнительных тестов.
Процесс состоит из 4 шагов:
1) В соответствие со спецификациями подготавливается тест (данные) для каждой ситуации: для каждой границы областей допустимых значений всех входных данных, областей изменения выходных данных, для всех недопустимых условий.
2) По тексту программы тесты подготавливают так, чтобы все условные переходы были выполнены хотя бы один раз в каждом направлении.
Анализ метода «Black box» тестирование
3) Добавить тесты для неохваченных путей, например, для каждого цикла должны быть тесты без выполнения тела цикла, однократное выполнение и максимальное число повторений.
4) Проверить чувствительность к входным данным (возникновение ситуаций деления на ноль и т.д.)
Выполнение тестов.
После выполнения планирования тестов их надо реализовать в виде данных и программ, протестировать и выполнить. Для нисходящих методов тесты сначала реализуются в виде заглушек для тестируемого модуля, а потом – в виде внешних входных данных. Для восходящих методов и при автономном тестировании тесты реализуются в виде драйверов, которые подают на вход тестирующие данные. В драйвер желательно вставлять сверку выходных результатов с ожидаемыми, например, для проверки обращения матрицы можно умножить результат на исходную матрицу.
В идеальном случае тесты должны быть протестированы, но обычно это сделать невозможно. Заключительный этап – анализ результатов с помощью программ, либо вручную. При выявлении ошибки, следует проверить и тестируемый модуль и сам тест. Некоторые ошибки не могут быть выявлены или локализованы при анализе только выходных данных модуля, т.е. имеются побочные эффекты, например, ”мусор” в динамически распределяемой памяти, изменение глобальных переменных и т.д.
Тестирование внешних функций – выполняется после тестирования модулей и сопряжений между ними. Назначение — найти несоответствие программной системы и ее внешних спецификаций.
Спецификации программной системы составляются для отдельных функций на этапе проектирования.
Эквивалентное разбиение
Основу метода составляют два положения:
Исходные данные программы необходимо разбить на конечное число классов эквивалентности, так чтобы можно было предположить, что каждый тест, являющийся представителем некоторого класса, эквивалентен любому другому тесту этого класса. Иными словами, если тест какого-либо класса обнаруживает ошибку, то предполагается, что все другие тесты этого класса эквивалентности тоже обнаружат эту ошибку и наоборот Каждый тест должен включать по возможности максимальное количество различных входных условий, что позволяет минимизировать общее число необходимых тестов. Первое положение используется для разработки набора «интересных» условий, которые должны быть протестированы, а второе — для разработки минимального набора тестов.
Управление качеством ПО. Лекция 3 часть 2. Метод черного ящика
Разработка тестов методом эквивалентного разбиения осуществляется в два этапа:
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 для каждого выходного условия. Если вход или выход программы есть упорядоченное множество (например, последовательный файл, линейный список, таблица), то сосредоточить внимание на первом и последнем элементах этого множества. Попробовать свои силы в поиске других граничных условий.
Анализ y = 0 (в зависимости от того, какой тест был выбран по методу граничных условий) — тест также можно совместить с предыдущими 6 тестами; 2.4. По методу предположения об ошибке добавим тест: все коэффициенты — нули. Всего получили 20 тестов по всем четырем методикам. Если еще попробовать вложить независимые проверки, то возможно число тестов можно еще сократить. (Не забудьте для каждого теста заранее указывать результат!).
Стратегия тестирования
Тестирование включает в себя виды деятельности, аналогичные последовательности разработки программного обеспечения:
— постановка задачи для тестов;
— изучение результатов тестирования.
Стратегия тестирования может лежать между двумя крайними проявлениями:
Тестирование модуля.
Цель тестирования модуля – выявление несоответствия между логикой работы модуля и его внешними спецификациями (описанием функций, входных и выходных данных, внешних эффектов). Сначала модуль рассматривается как «Черный ящик», после чего исследуется внутреннее устройство для подготовки дополнительных тестов.
Процесс состоит из 4 шагов:
1) В соответствие со спецификациями подготавливается тест (данные) для каждой ситуации: для каждой границы областей допустимых значений всех входных данных, областей изменения выходных данных, для всех недопустимых условий.
2) По тексту программы тесты подготавливают так, чтобы все условные переходы были выполнены хотя бы один раз в каждом направлении.
3) Добавить тесты для неохваченных путей, например, для каждого цикла должны быть тесты без выполнения тела цикла, однократное выполнение и максимальное число повторений.
4) Проверить чувствительность к входным данным (возникновение ситуаций деления на ноль и т.д.)
Выполнение тестов.
После выполнения планирования тестов их надо реализовать в виде данных и программ, протестировать и выполнить. Для нисходящих методов тесты сначала реализуются в виде заглушек для тестируемого модуля, а потом – в виде внешних входных данных. Для восходящих методов и при автономном тестировании тесты реализуются в виде драйверов, которые подают на вход тестирующие данные. В драйвер желательно вставлять сверку выходных результатов с ожидаемыми, например, для проверки обращения матрицы можно умножить результат на исходную матрицу.
В идеальном случае тесты должны быть протестированы, но обычно это сделать невозможно. Заключительный этап – анализ результатов с помощью программ, либо вручную. При выявлении ошибки, следует проверить и тестируемый модуль и сам тест. Некоторые ошибки не могут быть выявлены или локализованы при анализе только выходных данных модуля, т.е. имеются побочные эффекты, например, ”мусор” в динамически распределяемой памяти, изменение глобальных переменных и т.д.
Тестирование внешних функций – выполняется после тестирования модулей и сопряжений между ними. Назначение — найти несоответствие программной системы и ее внешних спецификаций.
Спецификации программной системы составляются для отдельных функций на этапе проектирования.
Класс исключений Exception -базовый класс всех исключений в Delphi.(Модуль SysUtils).
Все предопределенные в Delphi классы исключений являются прямыми или косвенными наследниками класса Exception. Класс Exception наследует также все функции своего базового класса TObject, в частности, полезную для идентификации неизвестного исключения функцию ClassName.
2. Для написания защищенного кода в Delphi используются следующие структуры как try … except … end и try … finalli … end.
Рассмотрим первую структуру:
Операторы, расположенные в разделе except, выполняются только в том случае, если в операторах раздела try (или в процедурах и функциях, которые эти операторы вызвали) возникла ошибка и было сгенерировано исключение.
Раздел except может использоваться двумя способами. При первом способе в нем могут располагаться любые выполняемые операторы, кроме обработчиков исключений on. do. Это могут быть операторы сообщений об ошибке, операторы освобождения ресурсов и т.д. Второй и главный способ использования раздела except — обработка исключений. В этом случае в него могут включаться только обработчики исключений: операторы on. do и необязательный обработчик любых исключений, предваряемый ключевым словом else. При наличии такого обработчика блок имеет вид:
Если при выполнении операторов раздела try генерируется исключение, выполнение этого раздела прерывается и управление передается операторам раздела except. Если среди обработчиков встретился соответствующий сгенерированному исключению, выполняется оператор этого обработчика, исключение разрушается и управление передается оператору, следующему за блоком on. do, т.е. оператору, следующему за последним оператором блока end. Если же обработчик не нашелся, то управление передается на следующий уровень, т.е. разделу except следующего обрамляющего блока try. except (если таковой есть). То же самое происходит, если в процессе обработки генерируется новое исключение (при обработке ошибки произошла новая ошибка). Если в результате прохода по всем уровням подходящий обработчик так и не будет найден, произойдет обработка системным обработчиком исключений.
3. Операторы on … do
Оператор on. do служит для обработки исключений в разделе except блока try. except. Он имеет две формы:
Оператор обрабатывает только тот класс исключений, который в нем указан, или его потомков. Таким образом, можно обеспечить индивидуальную реакцию на каждый вид исключений. Но, поскольку семейство исключений построено по иерархическому принципу, можно обратившись к базовому классу некоторой группы родственных исключений, обработать сразу всю группу. Крайним случаем этого служит обращение к базовому типу всех исключений — Exception. Такой обработчик обрабатывает все исключения.
После обработки исключения оно разрушается.
Первая форма оператора не позволяет получить доступ к свойствам исключения. Вторая форма создает временное имя исключения и позволяет через него с помощью конструкции . иметь доступ к свойствам.
Задание 1
Тестирование программы решения квадратного уравнения (Тестирование условных переходов).
Задание 2
Тестирование программы вычисления факториала. (Тестирование цикла)
2.1 Создать форму с компонентами: EditN, BtnRes, StRes.:
2.2 Набрать обработчик на кнопку BtnRes:
procedure TForm1.BtnResClick(Sender: TObject);
var n,i: integer; F: real;
showmessage(‘Ошибка в типе данных!’);
for i:= 1 to n do begin
2.3. Провести тестирование.
Изменить программный код, чтобы была реакция на все ошибки. Программа должна выдавать правильный ответ в соответствии с контрольными примерами.
Контрольные примеры:
Значение а | а! |
5 | 125 |
1 | |
1 | 1 |
-5 | ошибка ввода. |
м | ошибка ввода. |
2.4. Сделать вывод о правильности работы программы и перечислить все найденные ошибки в работе программы.
Оценивание работы:
На оценку «4» — Задание 1
На оценку «5» — Задание 1, Задание 2
Лабораторная работа № 12
«Тестирование и отладка»
Цели работы:
1. Разрабатывать тесты для приложений;
2. Тестировать приложения методом черного ящика;
3. Тестировать приложения методом белого ящика.
Теоретическая часть:
Стратегия тестирования
Тестирование включает в себя виды деятельности, аналогичные последовательности разработки программного обеспечения:
— постановка задачи для тестов;
— изучение результатов тестирования.
Стратегия тестирования может лежать между двумя крайними проявлениями:
Тестирование модуля.
Цель тестирования модуля – выявление несоответствия между логикой работы модуля и его внешними спецификациями (описанием функций, входных и выходных данных, внешних эффектов). Сначала модуль рассматривается как «Черный ящик», после чего исследуется внутреннее устройство для подготовки дополнительных тестов.
Процесс состоит из 4 шагов:
1) В соответствие со спецификациями подготавливается тест (данные) для каждой ситуации: для каждой границы областей допустимых значений всех входных данных, областей изменения выходных данных, для всех недопустимых условий.
2) По тексту программы тесты подготавливают так, чтобы все условные переходы были выполнены хотя бы один раз в каждом направлении.
3) Добавить тесты для неохваченных путей, например, для каждого цикла должны быть тесты без выполнения тела цикла, однократное выполнение и максимальное число повторений.
4) Проверить чувствительность к входным данным (возникновение ситуаций деления на ноль и т.д.)
Выполнение тестов.
После выполнения планирования тестов их надо реализовать в виде данных и программ, протестировать и выполнить. Для нисходящих методов тесты сначала реализуются в виде заглушек для тестируемого модуля, а потом – в виде внешних входных данных. Для восходящих методов и при автономном тестировании тесты реализуются в виде драйверов, которые подают на вход тестирующие данные. В драйвер желательно вставлять сверку выходных результатов с ожидаемыми, например, для проверки обращения матрицы можно умножить результат на исходную матрицу.
В идеальном случае тесты должны быть протестированы, но обычно это сделать невозможно. Заключительный этап – анализ результатов с помощью программ, либо вручную. При выявлении ошибки, следует проверить и тестируемый модуль и сам тест. Некоторые ошибки не могут быть выявлены или локализованы при анализе только выходных данных модуля, т.е. имеются побочные эффекты, например, ”мусор” в динамически распределяемой памяти, изменение глобальных переменных и т.д.
Тестирование внешних функций – выполняется после тестирования модулей и сопряжений между ними. Назначение — найти несоответствие программной системы и ее внешних спецификаций.
Спецификации программной системы составляются для отдельных функций на этапе проектирования.
Тестирование по принципу «черного ящика»
Одним из способов проверки программ является стратегия тестирования, называемая стратегией «черного ящика» или тестированием с управлением по данным. В этом случае программа рассматривается как «черный ящик» и такое тестирование имеет целью выяснения обстоятельств, в которых поведение программы не соответствует спецификации.
Для обнаружения всех ошибок в программе необходимо выполнить исчерпывающее тестирование, т.е. тестирование на всех возможных наборах данных. Для тех же программ, где исполнение команды зависит от предшествующих ей событий, необходимо проверить и все возможные последовательности. Очевидно, что построение исчерпывающего входного теста для большинства случаев невозможно. Поэтому, обычно выполняется «разумное» тестирование, при котором тестирование программы ограничивается прогонами на небольшом подмножестве всех возможных входных данных. Естественно при этом целесообразно выбрать наиболее подходящее подмножество (подмножество с наивысшей вероятностью обнаружения ошибок).
Правильно выбранный тест подмножества должен обладать следующими свойствами:
1) уменьшать, причем более чем на единицу число других тестов, которые должны быть разработаны для достижения заранее определенной цели «приемлемого» тестирования;
2) покрывать значительную часть других возможных тестов, что в некоторой степени свидетельствует о наличии или отсутствии ошибок до и после применения этого ограниченного множества значений входных данных.
Стратегия «черного ящика» включает в себя следующие методы формирования тестовых наборов:
— анализ граничных значений;
— анализ причинно-следственных связей;
— предположение об ошибке.
Эквивалентное разбиение
Основу метода составляют два положения:
Исходные данные программы необходимо разбить на конечное число классов эквивалентности, так чтобы можно было предположить, что каждый тест, являющийся представителем некоторого класса, эквивалентен любому другому тесту этого класса. Иными словами, если тест какого-либо класса обнаруживает ошибку, то предполагается, что все другие тесты этого класса эквивалентности тоже обнаружат эту ошибку и наоборот Каждый тест должен включать по возможности максимальное количество различных входных условий, что позволяет минимизировать общее число необходимых тестов. Первое положение используется для разработки набора «интересных» условий, которые должны быть протестированы, а второе — для разработки минимального набора тестов.
Разработка тестов методом эквивалентного разбиения осуществляется в два этапа:
1) выделение классов эквивалентности;
Источник: infopedia.su
Тестирование «черного ящика»
Исследуется: работа каждой функции на всей области определения.
Как показано на рис. 6.2, основное место приложения тестов «черного ящика» — интерфейс ПО.
Рис. 6.2. Тестирование «черного ящика»
Эти тесты демонстрируют:
как выполняются функции программ;
как принимаются исходные данные;
как вырабатываются результаты;
как сохраняется целостность внешней информации.
При тестировании «черного ящика» рассматриваются системные характеристики программ, игнорируется их внутренняя логическая структура. Исчерпывающее тестирование, как правило, невозможно. Например, если в программе 10 входных величин и каждая принимает по 10 значений, то потребуется 10 10 тестовых вариантов. Отметим также, что тестирование «черного ящика» не реагирует на многие особенности программных ошибок.
Тестирование «белого ящика»
Известна: внутренняя структура программы.
Исследуются: внутренние элементы программы и связи между ними (рис. 6.3).
Рис. 6.3. Тестирование «белого ящика»
Объектом тестирования здесь является не внешнее, а внутреннее поведение программы. Проверяется корректность построения всех элементов программы и правильность их взаимодействия друг с другом. Обычно анализируются управляющие связи элементов, реже — информационные связи.
Тестирование по принципу «белого ящика» характеризуется степенью, в какой тесты выполняют или покрывают логику (исходный текст) программы. Исчерпывающее тестирование также затруднительно. Особенности этого принципа тестирования рассмотрим отдельно.
Особенности тестирования «белого ящика»
Обычно тестирование «белого ящика» основано на анализе управляющей структуры программы [2], [13]. Программа считается полностью проверенной, если проведено исчерпывающее тестирование маршрутов (путей) ее графа управления.
В этом случае формируются тестовые варианты, в которых:
гарантируется проверка всех независимых маршрутов программы;
проходятся ветви True, False для всех логических решений;
выполняются все циклы (в пределах их границ и диапазонов);
анализируется правильность внутренних структур данных.
Недостаткитестирования «белого ящика»:
1. Количество независимых маршрутов может быть очень велико. Например, если цикл в программе выполняется kраз, а внутри цикла имеетсяп ветвлений, то количество маршрутов вычисляется по формуле
.
При п = 5 иk= 20 количество маршрутовт = 10 14 . Примем, что на разработку, выполнение и оценку теста по одному маршруту расходуется 1 мс. Тогда при работе 24 часа в сутки 365 дней в году на тестирование уйдет 3170 лет.
2. Исчерпывающее тестирование маршрутов не гарантирует соответствия программы исходным требованиям к ней.
3. В программе могут быть пропущены некоторые маршруты.
4. Нельзя обнаружить ошибки, появление которых зависит от обрабатываемых данных (это ошибки, обусловленные выражениями типа if abs (a-b) < eps. if(a+b+c)/3=a. ).
Достоинства тестирования «белого ящика» связаны с тем, что принцип «белого ящика» позволяет учесть особенности программных ошибок:
1. Количество ошибок минимально в «центре» и максимально на «периферии» программы.
2. Предварительные предположения о вероятности потока управления или данных в программе часто бывают некорректны. В результате типовым может стать маршрут, модель вычислений по которому проработана слабо.
3. При записи алгоритма ПО в виде текста на языке программирования возможно внесение типовых ошибок трансляции (синтаксических и семантических).
4. Некоторые результаты в программе зависят не от исходных данных, а от внутренних состояний программы.
Каждая из этих причин является аргументом для проведения тестирования по принципу «белого ящика». Тесты «черного ящика» не смогут реагировать на ошибки таких типов.
Источник: studfile.net
Лабораторная работа №6 «Тестирование программ методом «черного ящика»
Цель работы. Отработать навыки составления и тестирования программ как «черного ящика».
Теоретическая часть
Особенность тестировании программ как «черный ящик» заключается в следующем:
Известны: функции программы.
Исследуется: работа каждой функции на всей области определения.
Как показано на рисунке, основное место приложения тестов «черного ящика» – интерфейс ПО.
Рисунок 6.1 – Тестирование «черного ящика»
Эти тесты демонстрируют:
• как выполняются функции программ;
• как принимаются исходные данные;
• как вырабатываются результаты;
• как сохраняется целостность внешней информации.
При тестировании «черного ящика» рассматриваются системные характеристики программ, игнорируется их внутренняя логическая структура.
Методы черного ящика
1. Метод эквивалентных разбиений
Его основу составляют 2 положения:
• Каждый тип должен включать столько различных входных и выходных условий, сколько необходимо для того, что бы минимизировать общее число необходимых тестов.
• Необходимо разбивать входную область программы на конечное число классов эквивалентности
Класс эквивалентности выделяется путем выбора каждого входного условия и разбиением его на две или более групп.
2. Анализ граничных решений (АГР)
Граничные условия – ситуация, возникающая непосредственно на границе, выше или ниже границ входных или выходных элементов класса эквивалентности (КЭ)
АГР предполагает:
• Выбор любого элемента в КЭ в качестве представительного при АГЗ осуществляется таким образом, чтобы проверить тестом каждую границу этого класса.
• При разработке тестов рассматриваются не только входные условия, но и выходные.
3. Метод функциональных диаграмм
Недостатком метод граничных решений и метод эквивалентных разбиений является то, что они не исследуют комбинации входных условий.
Метод функциональных диаграмм помогает создать высоко результирующие тесты.
Функциональная диаграмма представляет собой формальный язык, на который транслируется спецификация, написанная на естественном языке.
Построение тестов осуществляется в несколько этапов:
• спецификация разбивается на несколько участков
• спецификация определяется причиной и следствием
Причины и следствия определяются путем последовательного чтения спецификации, каждой причине и следствию присваивается отдельный номер.
Источник: emirsaba.org