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

Лабораторная работа № 17

Выполнение функционального тестирования

Цель работы : получение навыков проведения функционального тестирования.

Теоретическая часть:

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

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

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

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

• эквивалентное разбиение;

• анализ граничных значений;

• анализ причинно-следственных связей;

• предположение об ошибке.

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

Метод эквивалентного разбиения заключа­ется в следующем. Область всех возможных наборов входных данных про­граммы по каждому параметру разбивают на конечное число групп - классов эквивалентности. Наборы данных такого класса объединяют по принципу обнаружения одних и тех же ошибок: если набор какого-либо класса обнару­живает некоторую ошибку, то предполагается, что все другие тесты этого класса эквивалентности тоже обнаружат эту ошибку и наоборот.

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

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

• если некоторый параметр х может принимать значения в интервале
[1, 999], то выделяют один правильный класс 1 < х < 999 и два неправильных:

х < 1 и х > 999;

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

• если входное условие описывает множество входных значений и есть
основания полагать, что каждое значение программист трактует особо, например, «типы графических файлов: bmp, jpeg, vsd», то определяют правильный класс эквивалентности для каждого значения и один неправильный класс, например, txt;

• если входное условие описывает ситуацию «должно быть», например,
«первым символом идентификатора должна быть буква», то определяется
один правильный класс эквивалентности (первый символ - буква) и один не­правильный (первый символ - не буква);

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

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

 

Ограничение на значение параметра Правильные классы эквивалентности Неправильные классы эквивалентности
     

 

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

Анализ граничных значений.

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

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


 

А + В > С вместо А + В > С, то задание граничных значений приве­дет к ошибке: линия будет отнесена к одному из видов треугольника.

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

• если входное условие описывает область значений, то следует построить тесты для границ области и тесты с неправильными входными данными для ситуаций незначительного выхода за границы области, например, если описана область [-1.0, +1.0], то должны быть сгенерированы тесты: -1.0, +1.0,-1.001 и +1.001;

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

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

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

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

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

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

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

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

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

Далее на основе анализа семантического (смыслового) содержания спецификации строят таблицу истинности, в которой каждой возможной комбинации причин ставится в соответствие следствие. При этом целесообразно истину обозначать «1», ложь - «О», а для обозначения безразличных состоя­ний условий применять обозначение «X», которое предполагает произволь­ное значение условия (0 или 1). Таблицу сопровождают примечаниями, зада­ющими ограничения и описывающими комбинации причин и/или следствий, которые являются невозможными из-за синтаксических или внешних огра­ничений. При необходимости аналогично строится таблица истинности для класса эквивалентности.

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

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

Предположение об ошибке.

Часто программист с большим опытом находит ошибки, «не применяя никаких методов». На самом деле он подсознательно использует метод «предположение об ошибке».

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

 

Практическая часть:

Задание № 1

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

В основе программы лежит решение системы линейных уравнений

Ax + By = C и Dx + Ey= F.

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

1) все коэффициенты - вещественные числа;

2) поочередно каждый из коэффициентов - не вещественное число.

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

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

3. По методу анализа причинно - следственных связей определяем множество условий.

1) для определения типа прямой;

2) для определения точки пересечения.

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

К уже имеющимся тестам добавляются:

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

б) выполняется отдельная проверка несовпадения условия xU = 0 или у = 0 (в зависимости от того, какой тест был выбран по методу граничных условий) - тест также можно совместить с предыдущими 6 тестами;

4. По методу предположения об ошибке добавим тест, при котором все коэффициенты - нули.

Всего получили 20 тестов по всем четырем методикам.

Номер теста Назначение теста Значения исходных данных Ожидаемый результат Реакция программы Вывод
           

 


Задание № 2

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

Номер теста Назначение теста Значения исходных данных Ожидаемый результат Реакция программы Вывод
           

Оценивание работы:

на оценку «3» - задание №1: метод эквивалентных разбиений и метод граничных условий.

на оценку «4» - задание №1: все методы

на оценку «5» - задание №1, задание №2: все методы.

 


Дата добавления: 2021-06-02; просмотров: 266; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!