Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тестирование программного обеспечения. Фундамен...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
935.81 Кб
Скачать

Глава 2: Желаемое и действительное в жизни тестировщика 41

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

Следует проверить все способы редактирования входных данных

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

Оператора, работающего за интеллектуальным терминалом, отвлека­ют. Он невнимателен. Нажимает числовую клавишу, затем <BackSpace>, снова числовую клавишу, снова <BackSpace> и т.д. Терминал отображает и стирает цифры на экране, но сохраняет всю последовательность кодов нажатых клавиш в буфере ввода. Наконец, пользователь вводит то, что хотел, и нажимает <Enter>. Терминал отсылает все содержимое буфера главному компьютеру. Компьютер не ожидает от терминала такого количества входных данных за один раз. Его входной буфер переполняется, и система сбоит.

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

Следует проверить реакцию программы на ввод в каждый момент ее работы

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

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

О проблемах, связанных со временем и последовательностью событий, рассказывается в главе 4 и приложении — они упоминаются под названи­ем ситуация гонок (race condition). В этом отношении уязвимы многие про­

42 Часть I: Основы

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

Что будет, если не проверить все возможные входные данные?

Возможных тестов так много, что выполнить их все физически невоз­можно. Проверьте все четыре типа ввода (допустимый, недопустимый, с редактированием и несвоевременный). Тщательно подберите тестируемые данные. Но помните, что, если хоть одно значение пропущено, тестирова­ние останется неполным.

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

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

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

• Один текстовый процессор сбоил на больших файлах (100 тыс. бай­тов), если они были сильно фрагментированы (т.е. их части были беспорядочно разбросаны гго всему диску). Редактирование прохо­дило вполне успешно, но в определенный момент при перемещении курсора целый абзац внезапно исчезал.

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

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