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

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

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

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

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

1. Сортируемый список пуст.

2. Сортируемый список содержит только одно значение.

3. Все записи в сортируемом списке имеют одно и то же значение.

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

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

1) существует только один вход в таблицу, в которой ведется поиск;

2) размер таблицы есть степень двух (например, 16);

3) размер таблицы меньше или больше степени двух (например, 15 или 17).

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

1. Допускает ли программа «пробел» в качестве ответа?

2. Запись типа 2 (ответ) появляется в наборе записей типа 3 (студент).

3. Запись без 2 или 3 в последней колонке появляется не как начальная запись (название).

4. Два студента имеют одно и то же имя или номер.

5. Поскольку медиана вычисляется по-разному в зависимости от того, четно или нечетно число элементов, необходимо протестировать про­грам­му как для четного, так и для нечетного числа студентов.

6. Поле числа вопросов имеет отрицательное значение.

Для команды DISPLAY из предыдущего раздела целесообразно рассмотреть следующие тесты метода предположения об ошибке:

1. DISPLAY 100 — (неполный второй операнд).

2. DISPLAY 100. (неполный второй операнд).

3. DISPLAY 100 — 10А42 (слишком большое значение операнда).

4. DISPLAY 000 — 0000FF (нули слева).