Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 глава_Тестирование_пример.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
154 Кб
Скачать
☆
    1. 3.2 Статические методы устранения ошибок

(выбрать метод и выполнить тестирование)

Эти методы основываются на анализе кода и документации программы.

Проверка за столом

Этот метод наиболее традиционен, но при этом совершенно необходим, хотя такая проверка не вызывает восторга и ее иногда стараются избежать.

Термин «проверка за столом» характеризует неавтоматизированную деятельность, к которой наиболее часто относят:

  • анализ текста программы на наличие ошибок;

  • выполнение программы вручную («сухую прокрутку»).

Коллективная проверка (контроль программы, сквозной просмотр)

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

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

Последовательность действий по проверке вырабатывается самими участниками.

Структурный анализ

Это автоматизированный анализ текста программы с помощью специальных программ – структурных анализаторов. Примеры обнаруживаемых с их помощью ошибок:

  • переменные не описаны или описаны неправильно;

(привести свои примеры)

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

  • используются недопустимые языковые формы;

  • неправильное вложение конструкций;

  • несоответствие формального и фактического параметров процедур;

  • невыполнимые условия; потенциально бесконечные циклы и др.

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

Доказательство корректности (верификация)

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

Аппарат и процедуры верификации подробно описаны, например, в ранее упоминавшейся книге Р. Лингера и др.

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

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

При функциональном тестировании выявляются следующие категории ошибок: (привести свои примеры)

  • некорректность или отсутствие функций;

  • ошибки интерфейса;

  • ошибки в структурах данных;

  • ошибки машинных характеристик (нехватка памяти и др.);

  • ошибки инициализации и завершения.

Техника тестирования ориентирована:

  • на сокращение необходимого количества тестовых вариантов;

  • на выявление классов ошибок, а не отдельных ошибок.

Разбиение на классы эквивалентности

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

Класс эквивалентности – набор данных с общими свойствами, в силу чего при обработке любого набора данных этого класса задействуется один и тот же набор операторов1.

Классы эквивалентности определяются по спецификации программы. Тесты строятся в соответствии с классами эквивалентности, а именно: выбирается вариант исходных данных некоторого класса и определяются соответствующие выходные данные.

Самыми общими классами эквивалентности являются классы допустимых и недопустимых (аномальных) исходных данных. Описание класса строится как комбинация условий, описывающих каждое входное данное.

Условия допустимости или недопустимости данных задают возможные значения данных и могут описывать:

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

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

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

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

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

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

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

Основные правила построения тестов:

  1. если условие правильности данных задает диапазон, то строятся тесты для левой и правой границы диапазона; для значений чуть левее левой и чуть правее правой границы;

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

  3. если используются структуры данных с переменными границами (массивы), то строятся тесты для минимального и максимального значения границ.

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

Диаграммы причин-следствий

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