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



Удачным считают тест, который обнаруживает хотя бы одну ошибку.

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

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

2). Функциональный – структура ПО неизвестна. Тесты строят по функциональным спецификациям (черный ящик; подход, управляемый данными).

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

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

Основные методы ручного контроля:

1). Инспекции исходного текста,

2). Сквозные просмотры,

3). Проверка за столом,

4). Оценка программ.


Структурное тестирование.

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

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

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

Структурный подход к тестированию имеет ряд недостатков. Так тестовые наборы, построенные по данной стратегии:

• не обнаруживают пропущенных маршрутов;

• не обнаруживают ошибок, зависящих от обрабатываемых данных, например, в операторе if (a - b) < eps - пропуск функции абсолютного значения abs проявится только, если а < b;

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

Формирование тестовых наборов для тестирования маршрутов может осуществляться по нескольким критериям:

• покрытие операторов,

• покрытие решений (переходов),

• покрытие условий.

• покрытие решений/условий,

• комбинаторное покрытие условий.


Функциональное тестирование.

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

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

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

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

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

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

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

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


Дата добавления: 2018-05-13; просмотров: 647; Мы поможем в написании вашей работы!

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






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